概要:向电量检测模块发出采集命令,并处理电量检测模块的响应数据。 一方面,它将接收到的单相数据进行转换并驱动屏幕显示相关数据。 同时,相位数据重新打包并通过串口发送至以太网模块。
以RISC-V MCU为核心、载人云物联网平台监测数据的智能电表 1、预期功能 2、系统配置 3、硬件介绍 4、软件介绍 1 主要功能2.功率测量模块相关驱动功能 3.以太网模块相关驱动功能 5.载人云平台控制面板 6.功能验证 1.成品展示 2.OLED屏显示测试 3.载人云平台测试 7.演示视频
1. 预期特点
基于32位通用扩展RISC-V MCU CH32V103开发板作为核心控制主板,接收实际采集的单相数据并进行处理。 通过单相电源时间检测模块。 驱动OLED屏时计算电压、电流、有功功率、无功功率、电能、功率因数、二氧化碳含量、频率、芯片温度等相关数据,更新显示单相电能及组织数据。 打包后的数据包通过串口发送至以太网模块,以太网模块将数据包上传至云端,实现远程数据监控和数据指令下发功能。 载人云平台。
2.系统框架
3.硬件介绍
智能电表硬件主要包括RISC-V MCU CH32V103开发板、电能表模块、以太网模块、驱动模块组成, 它。 它由 OLED 屏幕、电源板和其他组件组成。
RISC-V MCU CH32V103开发板:作为核心主板。 向电量检测模块发出采集指令,并对电量检测模块返回的数据进行处理。将接收到的单相数据转换后,激活OLED屏幕显示相关数据。 同时,将单相数据重新打包并通过串口发送至以太网模块。
电表模块:通过排插连接用电设备,实时检测外部用电设备的单相数据。 收到主板的接收命令后,将检测到的数据发送到主板。
以太网模块:作为开发板与云端数据传输的媒介。 当模块接收到主板发送的数据包时,通过路由器将数据包上传到云端。 人云平台接收数据并显示在监控界面上。 用户也可以通过人云监控接口发送至主板。 数据和说明。
驱动模块:根据主板指令驱动散热器开关及转速。
OLED屏幕:显示相关数据。
电源板:可连接外部电器,支持220V交流电源。 运行过程中,电量检测模块不断采集插排所连接用电设备的单相数据。
四、软件介绍 1、主函数 int main(void){uint8_t OLED_Show_Change = 0;uint8_t OLED_Show_First_In = 0;DisableGlobalIRQ();board_init(); //必须保留。 该函数用于初始化MPU时钟调试串口。 gpio_init(B2, GPO, 0, GPIO_PIN_CONFIG); //GPIO 初始化 PB2//外部 LED2gpio_init(C0, GPO, 1, GPIO_PIN_CONFIG); //GPIO 初始化 PC0//外部 KEYgpio_init(C1, GPO, 1, GPIO_PIN_CONFIG) ; /GPIO初始化PC1//外接LED1gpio_init(C3, GPO, 0, GPIO_PIN_CONFIG);gpio_init(C4, GPO, 0, GPIO_PIN_CONFIG);uart_init(UART_1, 4800, UART1_TX_A9, UART1_RX_A10);uart_init(UART_2, 115200, UART2_TX_A2, UART2_RX_A3);uart_rx_irq(UART_1, ENABLE);//uart_tx_irq(UART_1, ENABLE) ;uart_rx_中断(UART_2,启用);// uart_tx_irq(UART_2, ENABLE);U_OLED_Init(); //用户初始化OLED函数 U_OLED_Clear(); //清屏函数timer_pit_interrupt_ms(TIMER_1, 10);//初始化定时器TIM1,每10毫秒中断一次 EnableGlobalIRQ (0);while ( 1 ){if (U_Tim_Count > 250)//定时{U_Tim_Count = 0;OLED_Show_Change++;if (OLED_Show_Change > 2){OLED_Show_Change = 0;OLED_Show_First_In = 0;}}开关(OLED_Show_Change)//OLED屏开关 {case 0:U_Show_IM1253B_Data1 ( OLED_Show_First_In, U_IM1253B_Data);OLED_Show_First_In = 1;中断;情况 1:U_Show_IM 1253B_Data2(OLED_Show_First_In, U_IM1253B_Data) );OLED_Show_First_In = 0;中断;情况 2:U_ Show_IM1253B_Data3(OLED_Show_First_In, U _IM1 253B_Data);OLED_Show_First_In = 1;break;default:break;}if (MCU_Interrupt0_Timer_1S_End) //向IM1253B模块发送正常1S读取相关寄存器数据的命令 {U_Send_RendCommand_IM1253B(); //向IM1253B模块发送读取相关寄存器数据的函数IM1253B 模块 Send MCU_Interrupt0_Timer_1S_End = 0 ;U_Send_Ethernet_Data();//向以太网模块发送电量数据 systick_lay_ms(100);//延时 100ms,分段发送数组 U_Send_Ethernet_Data2() ;//向以太网模块发送开关量数据}U_Calculation_IM1253B_Data () ; //IM1253B相关电量数据函数 receive_key();//接收以太网发送的数据}} 2.电量测量模块相关驱动函数
串口1中断函数
void USART1_IRQHandler (void){static uint8_t U_GetData ;uart_query( UART_1, &U_GetData);USART_ClearITPendingBit(USART1, USART_IT_RXNE);U_MCU_UART1_GetData_End = U_Get_IM1253B_Data(U_GetData); //接收IM1253B电能测量模块的驱动函数}
读取电能表发送的数据,对其进行评估,并将其存储在特定的数组中。
uint8_t U_Get_IM1253B_Data(uint8_t Get_Data){static uint8_t i = 0;static uint8_t Get_Data_Buf[37] ={ 0 }; //存储获取数据数组 Get_Data_Buf[i++] = Get_Data;将获取到的数据存入数组 if (Get_Data_Buf[0] != 0x01) //判断帧头 {i = 0;}if ((i == 2) && (Get_Data_Buf[1] != 0x03)) //判断帧头 {i = 0;}if ((i == 3) && (Get_Data_Buf[2] != 0x20)) //判断帧头 {i = 0;}if (i > 2){ if ( i ! = (Get_Data_Buf[2] + 5)){return 0;}if (Get_Data_Buf[2] == 0X20){memcpy(IM1253B_Data_Buf, Get_Data_Buf, 37); // 将数据复制到 IM1253B_Data_Buf 数组 return 1; 0;}
向电能表发送相关寄存器读命令函数
void U_Send_RendCommand_IM1253B(void){static uint8_t ReadCommad[8] ={ 0x01 , 0x03, 0x00, 0x48, 0x00, 0x08, 0xc4, 0x1a }; //读取IM1253B相关寄存器命令 uint8_t i = 0;for (i = 0; i >= 1;//直接移动}}CRC_L = wcrc & 0xff;//crc*U_Data_Buffer = CRC_L的低8位; CRC_H = wcrc >> 8;//crc的高8位*(U_Data_Buffer + 1) = CRC_H;} 5.人人云平台控制面板
人人云平台控制界面编辑排版并进行相关定义。 . 功能验证 1. 成品显示
2. OLED 屏幕显示测试
将设备连接到负载上,OLED 屏幕将显示正常,数据将显示。
3.有云平台。测试
打开电源和电器后,打开电脑上的云平台。 如上图,数据正常显示并实时更新。
打开移动云平台小程序。 如上图,数据正常显示并实时更新。
正常情况下散热器不会打开。
打开开关发出命令。 如上图,可以看到散热器已经开始旋转,云平台已经成功下发命令,开发板也成功执行命令。
基于以上测试,以RISC-V MCU CH32V103芯片为核心的开发板能够实现电能数据的发送、接收、处理,并能正常与OLED显示,并进行数据交换。和远程。 云平台控制。 上下发送无线指令,执行功能,达到预期功能,测试成功。
7. 演示视频
演示视频
评论前必须登录!
注册