久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 交流電充電樁電能計量模塊HLW8032程序 STM32單片機 [打印本頁]

作者: winsssss    時間: 2023-7-9 19:43
標題: 交流電充電樁電能計量模塊HLW8032程序 STM32單片機


  1. #include "stm32f10x.h"
  2. #include <stdbool.h>
  3. #include <stdio.h>
  4. #include "usart3.h"
  5. #include "delay.h"
  6. #include "usart.h"
  7. #include "LED.h"
  8. #include "timer.h"
  9. #include "string.h"
  10. #include "oled.h"
  11. #include "myiic.h"

  12. void Data_Processing(void);

  13. u8 link=0;

  14. u8 k=0;
  15. u16 old_reg=0,len=0;
  16. double V=0,C=0,P=0,E_con=0;
  17. int main(void)
  18. {        
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  20.         delay_init();        //延時初始
  21.         LED_Init();        //LED初始化
  22.         uart_init(9600);//串口1初始化
  23.         usart3_init(4800);//HLW8032模塊接線方式3.3V--3.3;G--G;T--PB11;P不接
  24.         IIC_Init();
  25.     OLED_Init();//0.96寸接線方式VCC--3.3;GND--G;SCL--PB12;SDA--PB13
  26.         OLED_P8x16Str(35,0,(unsigned char *)"Knight20");
  27.         delay_ms(20);//延時        
  28.         
  29.         printf("Init OK\r\n");
  30.         while(1)
  31.         {               

  32.                 if(USART3_RX_STA&0X8000)//接收到HLW8032一次數據了
  33.                 {        
  34.                         len=USART3_RX_STA&0x3fff;//得到此次接收到的數據長度
  35.                         Data_Processing();
  36.                         USART3_RX_STA=0;                           //啟動下一次接收        
  37.                 }
  38.                  delay_ms(50);
  39.                 LED0=!LED0;//STM32系統板自帶的指示燈
  40.         }
  41. }

  42. void Data_Processing(void)//電能數據解析
  43. {
  44.         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;
  45.         u8 dat[200];
  46.         u8 i=0;
  47.         if(USART3_RX_BUF[0]!=0xaa&&len==24)//芯片誤差修正功能正常,參數正常
  48.         {
  49.                 for(i=2;i<23;i++)
  50.                 {
  51.                         dat_sum=dat_sum+USART3_RX_BUF[i];//計算校驗和
  52.                 }
  53.                 if(dat_sum%256==USART3_RX_BUF[23])//檢查校驗位是否正確
  54.                 {
  55.                         VP_REG=USART3_RX_BUF[2]*65536+USART3_RX_BUF[3]*256+USART3_RX_BUF[4];//計算電壓參數寄存器
  56.                         V_REG=USART3_RX_BUF[5]*65536+USART3_RX_BUF[6]*256+USART3_RX_BUF[7];//計算電壓寄存器
  57.                         V=(VP_REG/V_REG)*1.88;//計算電壓值,1.88為電壓系數,根據所采用的分壓電阻大小來確定
  58.                         //printf("U:%0.2fV; ",V);
  59.                         
  60.                         CP_REG=USART3_RX_BUF[8]*65536+USART3_RX_BUF[9]*256+USART3_RX_BUF[10];//計算電流參數寄存器
  61.                         C_REG=USART3_RX_BUF[11]*65536+USART3_RX_BUF[12]*256+USART3_RX_BUF[13];//計算電流寄存器
  62.                         C=((CP_REG*100)/C_REG)/100.0;//計算電流值
  63.                         //printf("I:%2.3fA; ",C);
  64.                     sprintf((char *)dat,"U:%0.2fV  I:%2.2fA ",V,C);
  65.                         OLED_P6x8Str(0,3,dat);
  66.                         printf((char *)dat);
  67.                         if(USART3_RX_BUF[0]>0xf0)//判斷實時功率是否未溢出
  68.                         {
  69.                                 printf("NO Device!");
  70.                                 OLED_P6x8Str(30,4,"NO Device");
  71.                                 P=0;
  72.                         }
  73.                         else
  74.                         {
  75.                                 PP_REG=USART3_RX_BUF[14]*65536+USART3_RX_BUF[15]*256+USART3_RX_BUF[16];//計算功率參數寄存
  76.                                 P_REG=USART3_RX_BUF[17]*65536+USART3_RX_BUF[18]*256+USART3_RX_BUF[19];//計算功率寄存器
  77.                                 P=(PP_REG/P_REG)*1.88*1;//計算有效功率
  78.                                 sprintf((char *)dat,"P:%0.2fW   ",P);
  79.                                 OLED_P6x8Str(30,4,dat);
  80.                                 printf((char *)dat);
  81.                         }        
  82.                         if((USART3_RX_BUF[20]&0x80)!=old_reg)//判斷數據更新寄存器最高位有沒有翻轉
  83.                         {
  84.                                 k++;
  85.                                 old_reg=USART3_RX_BUF[20]&0x80;
  86.                         }
  87.                         PF=(k*65536)+(USART3_RX_BUF[21]*256)+USART3_RX_BUF[22];//計算已用電量脈沖數
  88.                         PF_COUNT=((100000*3600)/(PP_REG*1.88))*10000;//計算1度電對應的脈沖數量
  89.                         E_con=((PF*10000)/PF_COUNT)/10000.0;//計算已用電量
  90.                         sprintf((char *)dat,"E:%0.4lf kW.h  ",E_con);
  91.                         OLED_P6x8Str(10,5,dat);
  92.                         printf((char *)dat);
  93.                         printf("\r\n");
  94.                         delay_ms(100);
  95.                         memset((void *)USART3_RX_BUF,0,sizeof(USART3_RX_BUF));
  96.                 }
  97.                
  98.         }
  99. }

復制代碼
原理圖:無
仿真:無
Keil代碼下載: STM32F103C8T6驅動HLW8032源代碼.7z (202.14 KB, 下載次數: 73)

作者: 王秋冬    時間: 2023-7-10 11:21
謝謝分享,注釋詳細。
作者: LZ19992005    時間: 2023-7-24 08:57
謝謝分享,注釋詳細。
作者: fengche1915    時間: 2025-3-18 13:08
謝謝分享;學習了;
作者: 川流吳    時間: 2025-3-19 08:00
占樓
作者: eb900001    時間: 2025-3-19 09:35
學習了,資料程序很不錯,感謝分享  




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 午夜精品一区二区三区免费视频 | 久久久激情 | 日韩成人免费av | 天天操天天干天天爽 | 日韩精品无码一区二区三区 | 久久精品久久综合 | 中文字幕二区 | www.色.com| 日韩亚洲欧美一区 | 日日淫| 成人免费视频网站在线看 | 国产视频一区二区 | 欧美日韩在线观看一区 | 欧美日一区 | 久久久高清| 中文字幕1区 | 国产一区二区三区免费观看在线 | 国产在线一 | 91一区二区三区 | 嫩草视频网 | 一级a性色生活片久久毛片波多野 | 国产成人精品免高潮在线观看 | 中文字幕亚洲区一区二 | 欧美日韩中文在线观看 | 精品亚洲一区二区三区四区五区 | 国产精品美女久久久久久免费 | 久久三区| 精品视频久久久久久 | 中文字幕亚洲视频 | 毛片网站免费观看 | 伊人网伊人 | 日韩国产欧美一区 | 久久久网 | 久久里面有精品 | 久久999| 狠狠爱免费视频 | 日本久久精 | 久久国产精品久久久久久久久久 | 国产成人99久久亚洲综合精品 | av网站在线看 | 国产日韩欧美在线 |