久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32F4開發的HLW8032串口發送數據,單片機接收數據并且串...
[打印本頁]
作者:
我的南方有佳人
時間:
2019-10-11 08:54
標題:
STM32F4開發的HLW8032串口發送數據,單片機接收數據并且串...
HLW8032測量代碼
實測了兩組數據
第一組
第二組
測小的
電壓時,數據會比較準,
測大的
電壓時,誤差會比較大,這不是代碼的問題,應該是板子或者芯片的原因。
單片機源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "dma.h"
#include "oled.h"
#include "stdio.h"
////////////////////////////////////////////////////////
//因為電壓電流功率那個系數是根據電路所用器件參數算出來的,所以不同板子參數
//器件參數誤差也不同,可以根據實際情況更改參數,校準電壓電流值等等
//注意:串口連接的時候一定要共地,要不然接收到的電壓電流值都會是0,一開始沒注意到這個問題,以為是程序錯了
//這里用到了F4串口1和串口6,串口1(波特率為9600)用來接收HLW8032傳輸過來的數據
//串口二(波特率為115200)用來發送接收到的數據到串口
int main(void)
{
uint32_t VpR = 0; // 電壓參數寄存器
uint32_t VR = 0; // 電壓寄存器
uint32_t CpR = 0; // 電流參數寄存器
uint32_t CR = 0; // 電流寄存器
uint32_t PpR = 0; // 電流參數寄存器
uint32_t PR = 0; // 電流寄存器
float VoltValue = 0.0; //電壓值
double IcurrentValue = 0.0; //電流值
float PowerValue = 0.0; //功率值
/**********相關外設函數的初始化*****************************/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
usart_x_Init(); //初始化串口
delay_init(168); //初始化延時函數
LED_Init(); //初始化LED
KEY_Init(); //按鍵初始化
OLED_Init(); //OLED初始化
/******************OLED初始顯示**************************/
OLED_ShowCHinese(12,0,4,1); //電
OLED_ShowCHinese(24,0,5,1); //壓
OLED_ShowCHinese(36,0,10,1); //:
OLED_ShowString(108,0,"V",12); // V
OLED_ShowCHinese(12,12,6,1); //電
OLED_ShowCHinese(24,12,7,1); //流
OLED_ShowCHinese(36,12,10,1); //:
OLED_ShowString(108,12,"A",12); // A
OLED_ShowCHinese(12,24,8,1); //功
OLED_ShowCHinese(24,24,9,1); //率
OLED_ShowCHinese(36,24,10,1); //:
OLED_ShowString(108,24,"W",12); // W
OLED_Refresh_Gram();//更新顯示到OLED
printf("Hello!\r\n");
while(1)
{
LED0=!LED0; //程序運行標志
/************串口1接收數據,串口6打印數據****************************************/
if((Rx_InfoLen!=0 ) && ((ReceiveInfo[0] == 0xF2) || (ReceiveInfo[0] == 0x55))&&(ReceiveInfo[1] == 0x5A)) //判斷數據是否有效,是否存在和被檢測到
{
printf("\r\n");
printf("State REG is %X\r\n",ReceiveInfo[0]); //打印狀態寄存器的值
printf("Check REG is %X\r\n",ReceiveInfo[1]); //打印檢測寄存器的值
printf("Voltage parameter REG is %X %X %X \r\n",ReceiveInfo[2],ReceiveInfo[3],ReceiveInfo[4]); //電壓參數寄存器
printf("Voltage REG is %X %X %X \r\n",ReceiveInfo[5],ReceiveInfo[6],ReceiveInfo[7]); //電壓寄存器
VpR = (ReceiveInfo[2]<<16) + (ReceiveInfo[3]<<8) + ReceiveInfo[4]; //把寄存器的值移位相加起來
VR = (ReceiveInfo[5]<<16) + (ReceiveInfo[6]<<8) + ReceiveInfo[7];
VoltValue = (VpR/VR)*1.88 ; //根據公式計算電壓
printf("VoltValue is %f \r\n",VoltValue); //打印電壓值到串口助手
printf("Current parameter REG is %X %X %X \r\n",ReceiveInfo[8],ReceiveInfo[9],ReceiveInfo[10]); //電流參數寄存器
printf("Current REG is %X %X %X \r\n",ReceiveInfo[11],ReceiveInfo[12],ReceiveInfo[13]); //電流寄存器
CpR =(ReceiveInfo[8]<<16) + (ReceiveInfo[9]<<8) + ReceiveInfo[10];
CR = (ReceiveInfo[11]<<16) + (ReceiveInfo[12]<<8) + ReceiveInfo[13];
IcurrentValue = ((float)CpR/(float)CR)*0.1; //根據公式計算電流
printf("IcurrentValue is %lf \r\n",IcurrentValue); //打印電流的值到串口助手
printf("Power parameter REG is %X %X %X \r\n",ReceiveInfo[14],ReceiveInfo[15],ReceiveInfo[16]); //功率參數寄存器
printf("Power REG is %X %X %X \r\n",ReceiveInfo[17],ReceiveInfo[18],ReceiveInfo[19]); //功率寄存器
PpR = (ReceiveInfo[14]<<16) + (ReceiveInfo[15]<<8) + ReceiveInfo[16];
PR = (ReceiveInfo[17]<<16) + (ReceiveInfo[18]<<8) + ReceiveInfo[19];
PowerValue = (PpR/PR)*1.6*0.1; //根據公式計算功率
printf("PowerValueis %f \r\n",PowerValue); //打印功率的值到串口助手
printf("Data Updata REG is %X\r\n",ReceiveInfo[20]); //數據更新寄存器
printf("PF REG is %X %X\r\n",ReceiveInfo[21],ReceiveInfo[22]); //電能脈沖個數
printf("CheckSumREG is %X\r\n",ReceiveInfo[23]); //檢驗和
}
memset(ReceiveInfo,0x00,Rx_InfoLen); //數據處理結束后,將數據存儲數組清零
Rx_InfoLen = 0; //數據長度清零
/************OLED顯示電流電壓功率****************************************/
OLED_ShowFloatNum_12(48,0,VoltValue,5,12); //顯示電壓
OLED_ShowFloatNum_12(48,12,IcurrentValue,5,12); //顯示電流
OLED_ShowFloatNum_12(48,24,PowerValue,5,12); //顯示功率
OLED_Refresh_Gram(); // 更新到OELD
}
}
復制代碼
所有資料51hei提供下載:
HLW8032測量代碼.7z
(1.65 MB, 下載次數: 169)
2019-10-11 17:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
1018954083
時間:
2020-1-2 23:50
不錯 學習學習了
作者:
在下,小生
時間:
2020-4-6 22:18
你好,我想問一下,選用的oled顯示屏是什么型號的?
作者:
ttmax3
時間:
2020-4-8 07:44
謝謝樓主,學習了。
作者:
colin988
時間:
2022-10-26 13:01
請問你的有沒有靜態電流,我的不接負載也有0.03A的電流
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本午夜网站
|
天天综合网7799精品
|
91精品国产91久久久久久吃药
|
精品国产乱码久久久久久图片
|
亚洲午夜精品久久久久久app
|
国产欧美一区二区在线观看
|
欧美成人影院
|
二区成人
|
五月天婷婷激情
|
国产精品明星裸体写真集
|
日韩欧美不卡
|
国产女人第一次做爰毛片
|
久久1区
|
国产精品久久国产精品
|
91色站
|
狠狠婷婷综合久久久久久妖精
|
成人免费影院
|
精品一区av
|
国产成人精品一区二
|
久亚州在线播放
|
九色在线视频
|
亚洲性免费
|
美女视频黄色片
|
国产精品福利网站
|
www.黄色片视频
|
国产欧美在线
|
久操伊人
|
国产精品日韩欧美一区二区三区
|
日韩午夜精品
|
亚洲va欧美va天堂v国产综合
|
91av免费看
|
麻豆changesxxx国产
|
亚洲天堂一区二区
|
激情网五月天
|
成人一区在线观看
|
免费99精品国产自在在线
|
av资源中文在线天堂
|
国产黄色小视频
|
亚洲电影第1页
|
91久久精品国产免费一区
|
国产精品久久久久久久毛片
|