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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8222|回復: 4
打印 上一主題 下一主題
收起左側

STM32F4開發的HLW8032串口發送數據,單片機接收數據并且串...

[復制鏈接]
跳轉到指定樓層
樓主
ID:499190 發表于 2019-10-11 08:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
HLW8032測量代碼
實測了兩組數據
第一組
第二組
測小的電壓時,數據會比較準,測大的電壓時,誤差會比較大,這不是代碼的問題,應該是板子或者芯片的原因。


單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "key.h"  
  6. #include "dma.h"
  7. #include "oled.h"
  8. #include "stdio.h"
  9. ////////////////////////////////////////////////////////
  10. //因為電壓電流功率那個系數是根據電路所用器件參數算出來的,所以不同板子參數
  11. //器件參數誤差也不同,可以根據實際情況更改參數,校準電壓電流值等等
  12. //注意:串口連接的時候一定要共地,要不然接收到的電壓電流值都會是0,一開始沒注意到這個問題,以為是程序錯了
  13. //這里用到了F4串口1和串口6,串口1(波特率為9600)用來接收HLW8032傳輸過來的數據
  14. //串口二(波特率為115200)用來發送接收到的數據到串口


  15. int main(void)
  16. {  
  17.         uint32_t VpR  = 0;                            // 電壓參數寄存器
  18.         uint32_t VR   = 0;                            // 電壓寄存器
  19.         uint32_t CpR  = 0;                            // 電流參數寄存器
  20.         uint32_t CR   = 0;                            // 電流寄存器
  21.         uint32_t PpR  = 0;                            // 電流參數寄存器
  22.         uint32_t PR   = 0;                            // 電流寄存器
  23.        
  24.         float VoltValue = 0.0;         //電壓值
  25.    double IcurrentValue = 0.0;    //電流值
  26.         float PowerValue = 0.0;        //功率值

  27.        
  28.         /**********相關外設函數的初始化*****************************/
  29.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  30.         usart_x_Init();           //初始化串口
  31.         delay_init(168);     //初始化延時函數
  32.         LED_Init();                                //初始化LED
  33.         KEY_Init();                         //按鍵初始化
  34.         OLED_Init();              //OLED初始化
  35.        
  36.         /******************OLED初始顯示**************************/
  37.   OLED_ShowCHinese(12,0,4,1);    //電
  38.   OLED_ShowCHinese(24,0,5,1);    //壓
  39.   OLED_ShowCHinese(36,0,10,1);   //:
  40.   OLED_ShowString(108,0,"V",12); // V
  41.   
  42.   OLED_ShowCHinese(12,12,6,1);   //電
  43.   OLED_ShowCHinese(24,12,7,1);   //流
  44.   OLED_ShowCHinese(36,12,10,1);   //:
  45.   OLED_ShowString(108,12,"A",12);  // A
  46.   
  47.   OLED_ShowCHinese(12,24,8,1);   //功
  48.   OLED_ShowCHinese(24,24,9,1);   //率
  49.   OLED_ShowCHinese(36,24,10,1);   //:
  50.   OLED_ShowString(108,24,"W",12); // W
  51.   OLED_Refresh_Gram();//更新顯示到OLED       
  52.        
  53.        
  54.    printf("Hello!\r\n");
  55.        
  56.         while(1)
  57.         {
  58.                  LED0=!LED0;     //程序運行標志
  59.                
  60.                 /************串口1接收數據,串口6打印數據****************************************/               
  61.                 if((Rx_InfoLen!=0 ) && ((ReceiveInfo[0] == 0xF2) || (ReceiveInfo[0] == 0x55))&&(ReceiveInfo[1] == 0x5A)) //判斷數據是否有效,是否存在和被檢測到
  62.                 {

  63.                                 printf("\r\n");
  64.                                 printf("State REG is %X\r\n",ReceiveInfo[0]);                                                //打印狀態寄存器的值
  65.                                 printf("Check REG is %X\r\n",ReceiveInfo[1]);                                                //打印檢測寄存器的值
  66.                                
  67.                                 printf("Voltage parameter REG is %X %X %X \r\n",ReceiveInfo[2],ReceiveInfo[3],ReceiveInfo[4]);     //電壓參數寄存器
  68.                                 printf("Voltage REG is %X %X %X \r\n",ReceiveInfo[5],ReceiveInfo[6],ReceiveInfo[7]);               //電壓寄存器
  69.                        
  70.                                 VpR = (ReceiveInfo[2]<<16) + (ReceiveInfo[3]<<8) + ReceiveInfo[4];                           //把寄存器的值移位相加起來
  71.                            VR = (ReceiveInfo[5]<<16) + (ReceiveInfo[6]<<8) + ReceiveInfo[7];
  72.                            VoltValue = (VpR/VR)*1.88 ;                                                                  //根據公式計算電壓
  73.                                 printf("VoltValue is %f  \r\n",VoltValue);                                                   //打印電壓值到串口助手
  74.    
  75.                                 printf("Current parameter REG is %X %X %X \r\n",ReceiveInfo[8],ReceiveInfo[9],ReceiveInfo[10]);    //電流參數寄存器
  76.                            printf("Current REG is %X %X %X \r\n",ReceiveInfo[11],ReceiveInfo[12],ReceiveInfo[13]);            //電流寄存器
  77.                        
  78.                                 CpR =(ReceiveInfo[8]<<16) + (ReceiveInfo[9]<<8) + ReceiveInfo[10];
  79.                                 CR  = (ReceiveInfo[11]<<16) + (ReceiveInfo[12]<<8) + ReceiveInfo[13];
  80.                            IcurrentValue = ((float)CpR/(float)CR)*0.1;                                                  //根據公式計算電流
  81.                            printf("IcurrentValue is %lf \r\n",IcurrentValue);                                           //打印電流的值到串口助手
  82.                        
  83.                                 printf("Power parameter REG is %X %X %X \r\n",ReceiveInfo[14],ReceiveInfo[15],ReceiveInfo[16]);     //功率參數寄存器
  84.                                 printf("Power REG is %X %X %X \r\n",ReceiveInfo[17],ReceiveInfo[18],ReceiveInfo[19]);               //功率寄存器
  85.                                 PpR = (ReceiveInfo[14]<<16) + (ReceiveInfo[15]<<8) + ReceiveInfo[16];
  86.                                 PR  = (ReceiveInfo[17]<<16) + (ReceiveInfo[18]<<8) + ReceiveInfo[19];
  87.                                 PowerValue = (PpR/PR)*1.6*0.1;                                                                     //根據公式計算功率
  88.                                 printf("PowerValueis %f \r\n",PowerValue);                                                          //打印功率的值到串口助手

  89.                                 printf("Data Updata REG is %X\r\n",ReceiveInfo[20]);                                                 //數據更新寄存器                                               
  90.                                 printf("PF REG is %X %X\r\n",ReceiveInfo[21],ReceiveInfo[22]);                                       //電能脈沖個數
  91.                                 printf("CheckSumREG is %X\r\n",ReceiveInfo[23]);                                                     //檢驗和
  92.                        
  93.                           
  94.                  }
  95.                         memset(ReceiveInfo,0x00,Rx_InfoLen);          //數據處理結束后,將數據存儲數組清零
  96.          Rx_InfoLen = 0;                              //數據長度清零
  97.          
  98.         /************OLED顯示電流電壓功率****************************************/                 
  99.                                 OLED_ShowFloatNum_12(48,0,VoltValue,5,12);        //顯示電壓
  100.                       OLED_ShowFloatNum_12(48,12,IcurrentValue,5,12);   //顯示電流
  101.                                 OLED_ShowFloatNum_12(48,24,PowerValue,5,12);      //顯示功率
  102.                                 OLED_Refresh_Gram();                         // 更新到OELD
  103.                           
  104.                
  105.         }         
  106.        
  107. }
復制代碼

所有資料51hei提供下載:
HLW8032測量代碼.7z (1.65 MB, 下載次數: 169)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:143486 發表于 2020-1-2 23:50 | 只看該作者
不錯 學習學習了
回復

使用道具 舉報

板凳
ID:703787 發表于 2020-4-6 22:18 | 只看該作者
你好,我想問一下,選用的oled顯示屏是什么型號的?
回復

使用道具 舉報

地板
ID:510170 發表于 2020-4-8 07:44 | 只看該作者
謝謝樓主,學習了。
回復

使用道具 舉報

5#
ID:704106 發表于 2022-10-26 13:01 | 只看該作者
請問你的有沒有靜態電流,我的不接負載也有0.03A的電流
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99热在线播放 | 日韩在线观看 | 成人二区 | 精品国产一区二区三区性色av | 国产一区二区视频在线观看 | www.日韩系列 | 久久三级影院 | 国产中文字幕在线观看 | 欧美综合久久 | 国产ts人妖系列高潮 | 成人免费av在线 | 日韩精品在线看 | 妖精视频一区二区三区 | 欧美日韩精品一区二区三区视频 | 日韩欧美在线视频 | 精产国产伦理一二三区 | 精品国产欧美一区二区三区成人 | 日韩欧美一区二区三区在线播放 | 久久一区二区三区四区五区 | 久久久婷| 久久婷婷色 | 一级在线观看 | 久久久久久久久久久高潮一区二区 | 99国产精品视频免费观看一公开 | 免费国产视频在线观看 | 亚洲精品在线免费观看视频 | 成人天堂 | 国产一区 在线视频 | 日韩在线精品 | 国产精久久久久久久妇剪断 | 一级毛片中国 | 中文字幕精品一区 | 日本小视频网站 | 久久久激情视频 | 看片一区 | 国产一区二区三区四区五区加勒比 | 毛片一级片 | 日韩在线免费视频 | 国产精品免费视频一区 | 久久国产精品99久久久大便 | 国产亚洲精品美女久久久久久久久久 |