標題: 基于STM32的HLW8032電量采集系統源程序 [打印本頁]
作者: 騎士20 時間: 2021-8-23 13:03
標題: 基于STM32的HLW8032電量采集系統源程序
一、準備材料
1.STM32F103C8T6最小系統板;
2.HLW8032電參數采集模塊;
3.OLCD 0.96寸顯示屏,用的是IIC的驅動方式;
4.ST-Link下載器,用其他下載器也可以,有啥用啥;
5.11根杜邦線,1根220V的電源線;
二、接線
1.ST-Link下載器與STM32連接;
下載器 | STM32 |
3.3V | 3.3 |
SWDIO | DIO |
SWCLK | DCLK |
GND | GND |
2.HLW8032與STM32連接;
HLW8032 | STM32 |
3.3V | 3.3 |
P | 不接 |
T | B11 |
GND | GND |
3.OLED屏與STM32連接;
OLED | STM32 |
GND | GND |
VCC | 3.3 |
SCL | B12 |
SDA | B13 |
三、下載程序
把上面接好的ST-Link下載器,插入電腦;打開提供的代碼程序,然后點擊下載即可:
1.png (24.19 KB, 下載次數: 130)
下載附件
2021-8-23 14:55 上傳
四、接入220V交流電 燒錄完程序后,如果接線正確,這個時候0.96寸的顯示屏就會顯示Knight20字樣了,但是還不會有電參數顯示,因為還沒接入220V交流電。
注:HLW8032模塊需要接了220V的交流后,才會進行工作并輸出數據!
把準備好的電源線,接到HLW8032的IN接線端子上:
通電后就這樣子了:
2.png (63.8 KB, 下載次數: 138)
下載附件
2021-8-23 14:55 上傳
單片機源程序如下:
- #include "stm32f10x.h"
- #include <stdbool.h>
- #include <stdio.h>
- #include "usart3.h"
- #include "delay.h"
- #include "usart.h"
- #include "LED.h"
- #include "timer.h"
- #include "string.h"
- #include "oled.h"
- #include "myiic.h"
- void Data_Processing(void);
- u8 link=0;
- u8 k=0;
- u16 old_reg=0,len=0;
- double V=0,C=0,P=0,E_con=0;
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- delay_init(); //延時初始
- LED_Init(); //LED初始化
- uart_init(9600);//串口1初始化
- usart3_init(4800);//HLW8032模塊接線方式3.3V--3.3;G--G;T--PB11;P不接
-
- IIC_Init();//如果不接0.96寸顯示屏,這句需要刪掉
- OLED_Init();//0.96寸接線方式VCC--3.3;GND--G;SCL--PB12;SDA--PB13//如果不接0.96寸顯示屏,這句需要刪掉
- OLED_P8x16Str(35,0,(unsigned char *)"Knight20");//如果不接0.96寸顯示屏,這句需要刪掉
-
- delay_ms(20);//延時
-
- printf("Init OK\r\n");
- while(1)
- {
- if(USART3_RX_STA&0X8000)//接收到HLW8032一次數據了
- {
- len=USART3_RX_STA&0x3fff;//得到此次接收到的數據長度
- Data_Processing();
- USART3_RX_STA=0; //啟動下一次接收
- }
- delay_ms(50);
- LED0=!LED0;//STM32系統板自帶的指示燈
- }
- }
-
- void Data_Processing(void)//電能數據解析
- {
- u32 VP_REG=0,V_REG=0,CP_REG=0,C_REG=0,PP_REG=0,P_REG=0,PF_COUNT=0,PF=0,dat_sum=0;
- u8 dat[200];
- u8 i=0;
- if(USART3_RX_BUF[0]!=0xaa&&len==24)//芯片誤差修正功能正常,參數正常
- {
- for(i=2;i<23;i++)
- {
- dat_sum=dat_sum+USART3_RX_BUF[i];//計算校驗和
- }
- if(dat_sum%256==USART3_RX_BUF[23])//檢查校驗位是否正確
- {
- VP_REG=USART3_RX_BUF[2]*65536+USART3_RX_BUF[3]*256+USART3_RX_BUF[4];//計算電壓參數寄存器
- V_REG=USART3_RX_BUF[5]*65536+USART3_RX_BUF[6]*256+USART3_RX_BUF[7];//計算電壓寄存器
- V=(VP_REG/V_REG)*1.88;//計算電壓值,1.88為電壓系數,根據所采用的分壓電阻大小來確定
- //printf("U:%0.2fV; ",V);
-
- CP_REG=USART3_RX_BUF[8]*65536+USART3_RX_BUF[9]*256+USART3_RX_BUF[10];//計算電流參數寄存器
- C_REG=USART3_RX_BUF[11]*65536+USART3_RX_BUF[12]*256+USART3_RX_BUF[13];//計算電流寄存器
- C=((CP_REG*100)/C_REG)/100.0;//計算電流值
- //printf("I:%2.3fA; ",C);
- sprintf((char *)dat,"U:%0.2fV I:%2.2fA ",V,C);
- OLED_P6x8Str(0,3,dat);//如果不接0.96寸顯示屏,這句需要刪掉
- printf((char *)dat);
- if(USART3_RX_BUF[0]>0xf0)//判斷實時功率是否未溢出
- {
- printf("NO Device!");
- OLED_P6x8Str(30,4,"NO Device");//如果不接0.96寸顯示屏,這句需要刪掉
- P=0;
- }
- else
- {
- PP_REG=USART3_RX_BUF[14]*65536+USART3_RX_BUF[15]*256+USART3_RX_BUF[16];//計算功率參數寄存
- P_REG=USART3_RX_BUF[17]*65536+USART3_RX_BUF[18]*256+USART3_RX_BUF[19];//計算功率寄存器
- P=(PP_REG/P_REG)*1.88*1;//計算有效功率
- sprintf((char *)dat,"P:%0.2fW ",P);
- OLED_P6x8Str(30,4,dat);//如果不接0.96寸顯示屏,這句需要刪掉
- printf((char *)dat);
- }
- if((USART3_RX_BUF[20]&0x80)!=old_reg)//判斷數據更新寄存器最高位有沒有翻轉
- {
- k++;
- old_reg=USART3_RX_BUF[20]&0x80;
- }
- PF=(k*65536)+(USART3_RX_BUF[21]*256)+USART3_RX_BUF[22];//計算已用電量脈沖數
- PF_COUNT=((100000*3600)/(PP_REG*1.88))*10000;//計算1度電對應的脈沖數量
- E_con=((PF*10000)/PF_COUNT)/10000.0;//計算已用電量
- sprintf((char *)dat,"E:%0.4lf kW.h ",E_con);
- OLED_P6x8Str(10,5,dat);//如果不接0.96寸顯示屏,這句需要刪掉
- printf((char *)dat);
- printf("\r\n");
- delay_ms(100);
- memset((void *)USART3_RX_BUF,0,sizeof(USART3_RX_BUF));//清空緩存
- }
-
- }
- }
復制代碼
所有代碼51hei附件下載:
本站鏈接:
STM32F103C8T6驅動HLW8032.7z
(204.11 KB, 下載次數: 128)
2021-8-23 15:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
云鏈接:
https://pan.baidu.com/s/1rx4tQ_7dYXMAbpy_HychDw 提取碼:1234
作者: 大男孩1 時間: 2022-1-3 17:23
51單片機可以使用源代碼嗎?
作者: 1693695895 時間: 2022-4-13 19:26
這是stm32的,不能直接用
作者: jzx123345 時間: 2023-4-10 22:06
我按照上面連接方法連接后oled一直顯示Knight20,接上220v交流電后還是只顯示Knight20。是接上負載后才會顯示那些參數值嗎?
作者: li64331218 時間: 2023-4-11 13:06
描述準確,全面,邏輯清楚,51有你更精彩!
作者: 騎士20 時間: 2024-1-29 10:54
不用接負載,只要接入了HLW8032模塊就會顯示電參數了
作者: lllxxxhhsjs 時間: 2024-7-22 20:35
我用的這個程序,為什么電壓值不是隨時變化的,而是固定值變化,就好像有檔位一樣
作者: asdqwerasd 時間: 2025-3-5 17:59
請問這個測量值實時變化的嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
中文字幕在线观看视频网站
|
亚洲欧美精品
|
久久精品一区二区视频
|
亚洲午夜精品
|
国产精品久久久久免费
|
欧美精品在线一区二区三区
|
国产97视频在线观看
|
亚洲人在线|
亚洲成人免费在线观看
|
色婷婷综合在线观看
|
日韩免费网站
|
亚洲日日夜夜
|
久久国产福利
|
久久不卡视频
|
亚洲精品99|
在线观看中文字幕
|
久久99精品国产麻豆婷婷
|
久久新
|
九九热精品视频
|
亚洲免费成人
|
91社区在线高清
|
亚洲入口
|
四虎影院在线观看免费视频
|
成人综合视频在线
|
亚洲国产一区在线
|
91久久精品国产91久久
|
无码一区二区三区视频
|
久久综合一区二区三区
|
国产区精品
|
青草青草久热精品视频在线观看
|
亚洲免费视频网址
|
久久国产精品-久久精品
|
国产精品美女久久久久久久久久久
|
美女福利视频一区
|
久综合|
亚洲精品久久
|
亚洲一区二区免费电影
|
男女羞羞视频在线观看
|
一道本在线
|
国产精品视频久久久
|
国产在线一区二区三区
|