当前位置:主页 > 查看内容

IM1253B交直流电能计量模块(艾锐达光电)

发布时间:2021-06-22 00:00| 位朋友查看

简介:冯 基于IM1253B交直流电能计量模块艾锐达光电设计的测量电压、电流、功率测量物 该模块质量不错价格便宜使用简单容易上手测量电压范围大可测交流直流功率等。 如果想要资料或者源码的话关注私信我。 IM1253B交直流电能计量模块 模块图片 模块读取数据命令 模……

冯:
基于IM1253B交直流电能计量模块(艾锐达光电)设计的测量电压、电流、功率测量物
该模块质量不错,价格便宜,使用简单,容易上手,测量电压范围大,可测交流,直流,功率等。
如果想要资料或者源码的话,关注私信我。

模块图片

在这里插入图片描述
模块读取命令和数据刷新命令是用商家提供的软件得来----发送数据那一行

模块读取数据命令

00 03 00 01 00 04 14 18------16进制
在这里插入图片描述

模块数据刷新命令

03 00 48 00 08 D1 C4------16进制
在这里插入图片描述

接线

在这里插入图片描述

尺寸图

在这里插入图片描述

数据显示图片

在这里插入图片描述

提供主函数的话基本就可以实现,其他的配置可以参考正点原子的来配置,我也是参考正点原子来配置的串口,IO口之类的

主函数:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "oled.h"
#include "timer.h"

unsigned  char Tx_Buffer[8];
unsigned 	long Voltage_data,Current_data,Power_data,Energy_data,Pf_data,CO2_data;

void read_data(void);//读取数据-只用初始化
void Analysis_data(void);//分析数据-将发送的16进制转为10进制
void clear_data(void);//数据刷新-用来更新数据

int main(void)
{
    delay_init();	    	 //延时函数初始化-系统时钟
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
    uart_init(4800);	 //串口初始化为4800
    LED_Init();		  	 //初始化与LED连接的硬件接口
    KEY_Init();				//按键初始化
    OLED_Init();			//OLED初始化
    OLED_Clear();			//清屏
    TIM3_Int_Init(4999,7199);//初始化定时器3  500ms
    read_data();			//发送读取数据命令
    while(1)
    {
        delay_ms(800);
        clear_data();
        delay_ms(800);
        Analysis_data();

        //显示信息--电压:
        OLED_ShowCHinese(0,0,0);//x,y
        OLED_ShowCHinese(20,0,1);//x,y
        OLED_ShowCHinese(40,0,2);//x,y
        //OLED_ShowNum(48,0,Voltage_data,6,16);
        //显示数据
        OLED_ShowNum(48,0,Voltage_data/100000,1,16);
        OLED_ShowNum(56,0,Voltage_data/10000%10,1,16);
        OLED_ShowChar(64,1,'.',12);
        OLED_ShowNum(72,0,Voltage_data/1000%10,1,16);
        OLED_ShowNum(80,0,Voltage_data/100%10,1,16);
        OLED_ShowChar(91,0,'V',16);
        //显示信息--电流:
        OLED_ShowCHinese(0,2,3);//x,y
        OLED_ShowCHinese(20,2,4);//x,y
        OLED_ShowCHinese(40,2,5);//x,y
        //显示数据
        OLED_ShowNum(48,2,Current_data/10000%10,1,16);
        OLED_ShowChar(56,3,'.',12);
        OLED_ShowNum(64,2,Current_data/1000%10,1,16);
        OLED_ShowNum(72,2,Current_data/100%10,1,16);
        OLED_ShowNum(80,2,Current_data/10%10,1,16);
        OLED_ShowNum(88,2,Current_data%10,1,16);
        OLED_ShowChar(99,2,'A',16);
        //显示信息--功率:
        OLED_ShowCHinese(0,5,6);//x,y
        OLED_ShowCHinese(20,5,7);//x,y
        OLED_ShowCHinese(40,5,8);//x,y
        //显示数据
        OLED_ShowNum(48,5,Current_data*Voltage_data/100/1000000%10,1,16);
        OLED_ShowChar(56,6,'.',12);
        OLED_ShowNum(64,5,Current_data*Voltage_data/100/100000%10,1,16);
        OLED_ShowNum(72,5,Current_data*Voltage_data/100/10000%10,1,16);
        OLED_ShowNum(80,5,Current_data*Voltage_data/100/1000%10,1,16);
        OLED_ShowNum(88,5,Current_data*Voltage_data/100/100%10,1,16);
        OLED_ShowChar(99,5,'W',16);
    }
}
//读取数据-只用初始化
void read_data(void)
{
    int i=0;
    //TX[8]:00 03 00 01 00 04 14 18--读取命令可能每个模块都不太一样根据商家提供的软件来看
    //			FF 03 00 48 00 08 D1 C4--数据刷新同上
    Tx_Buffer[0]=0x01;
    Tx_Buffer[1]=0x03;
    Tx_Buffer[2]=0x00;
    Tx_Buffer[3]=0x48;
    Tx_Buffer[4]=0x00;
    Tx_Buffer[5]=0x04;
    Tx_Buffer[6]=0x14;
    Tx_Buffer[7]=0x18;

    for(i=0; i<8; i++)
    {
        USART_SendData(USART1,Tx_Buffer[i]); //发送命令
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//发送完数据
    }
    USART_RX_STA=0;
}
//分析数据-将发送的16进制转为10进制
void Analysis_data(void)
{
    //解析数据(16转10)--商家提供的
    Voltage_data=(((unsigned long)(USART_RX_BUF[3]))<<24)|(((unsigned
                 long)(USART_RX_BUF[4]))<<16)|(((unsigned long)(USART_RX_BUF[5]))<<8)|USART_RX_BUF[6];
    Current_data=(((unsigned long)(USART_RX_BUF[7]))<<24)|(((unsigned
                 long)(USART_RX_BUF[8]))<<16)|(((unsigned long)(USART_RX_BUF[9]))<<8)|USART_RX_BUF[10];
    Power_data=(((unsigned long)(USART_RX_BUF[11]))<<24)|(((unsigned
               long)(USART_RX_BUF[12]))<<16)|(((unsigned long)(USART_RX_BUF[13]))<<8)|USART_RX_BUF[14];
    Energy_data=(((unsigned long)(USART_RX_BUF[15]))<<24)|(((unsigned
                long)(USART_RX_BUF[16]))<<16)|(((unsigned long)(USART_RX_BUF[17]))<<8)|USART_RX_BUF[18];
    Pf_data=(((unsigned long)(USART_RX_BUF[19]))<<24)|(((unsigned
            long)(USART_RX_BUF[20]))<<16)|(((unsigned long)(USART_RX_BUF[21]))<<8)|USART_RX_BUF[22];
    CO2_data=(((unsigned long)(USART_RX_BUF[23]))<<24)|(((unsigned
             long)(USART_RX_BUF[24]))<<16)|(((unsigned long)(USART_RX_BUF[25]))<<8)|USART_RX_BUF[26];
}
//数据刷新-用来更新数据
void clear_data(void)
{
    int i=0;
    //TX[8]:00 03 00 01 00 04 14 18--读取命令可能每个模块都不太一样根据商家提供的软件来看
    //			FF 03 00 48 00 08 D1 C4--数据刷新同上
    Tx_Buffer[0]=0xFF;
    Tx_Buffer[1]=0x03;
    Tx_Buffer[2]=0x00;
    Tx_Buffer[3]=0x48;
    Tx_Buffer[4]=0x00;
    Tx_Buffer[5]=0x08;
    Tx_Buffer[6]=0xD1;
    Tx_Buffer[7]=0xC4;

    for(i=0; i<8; i++)
    {
        USART_SendData(USART1,Tx_Buffer[i]);//向串口一发送命令
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//发送完数据
    }
    USART_RX_STA=0;
}

																		致谢:覃学长、思怡
																		作者:杏林洁白
;原文链接:https://blog.csdn.net/qq_45774073/article/details/115617569
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐