国产芯片WiFi物联网智能插座—电耗采集功能设计
目录
1、硬件设计
2、软件设计
WiFi物联网智能插座的电耗采集依托于合力为的HLW8110计量芯片实现,选取它的主要原因是精度不错,价格美丽,并且可以通过串口驱动,使用便捷。
1、硬件设计
HLW8110是一款高精度的电能计量 IC,它采用 CMOS 制造工艺,主要用于单相计量应用。它能够测量线电压和电流,并能计算有功功率,视在功率和功率因素。该器件内部集成了二个∑-Δ型 ADC 和一个高精度的电能计量内核。输入通道支持灵活的 PGA 设置,因此 HLW8110 适合与不同类型的传感器使用,如电流互感器(CT)和低阻值分流器。
HLW8110 电能计量 IC 采用 3.3V 或 5.0V 电源供电,内置 3.579M 振荡器,可以通过 UART 口进行数据通讯,波特率为 9600bps。
HLW8110的典型电路,外围电路简单,外围器件非常少,单路通道可用于检测负载设备的功率、电压、电流和用电量,通过 UART 或接口传输数据至 MCU,HLW8110 内部可以设置功率过载、电压过载和电流过载阀值,通过内部寄存器可以查询,并可以检测电压过零点。
官方测试,使用采样电阻或者互感器的理论数据误差如下所示:
在使用之前先简单设计一块Demo板进行调测,实物模块如下所示:
原理图、PCB如下所示:
2、软件设计
由于代码量较多,部分配置代码不再赘述,仅仅展示核心算法代码。
读取通道电流,实现代码如下所示:
void Read_HLW8110_IA(void)
{ float a;Uart_Read_HLW8110_Reg(REG_RMSIA_ADDR,3);delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){U32_RMSIA_RegData = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]); printf("A通道电流寄存器:%lx\n " ,U32_RMSIA_RegData);}else{printf("A通道电流寄存器读取出错\r\n");B_Read_Error = 1;}//A通道电流PGA = 16,电压通道PGA = 1;电流采样电阻1mR,电压采样电阻1M//计算公式,U16_AC_I = (U32_RMSIA_RegData * U16_RMSIAC_RegData)/(电流系数* 2^23)if ((U32_RMSIA_RegData & 0x800000) == 0x800000){F_AC_I = 0;}else{a = (float)U32_RMSIA_RegData;a = a * U16_RMSIAC_RegData;a = a/0x800000; //电流计算出来的浮点数单位是mA,比如5003.12 a = a/1; // 1 = 电流系数a = a/1000; //a= 5003ma,a/1000 = 5.003A,单位转换成Aa = a * D_CAL_A_I; //D_CAL_A_I是校正系数,默认是1F_AC_I = a;}
}
读取通道电压,实现代码如下所示:
void Read_HLW8110_U(void)
{float a;Uart_Read_HLW8110_Reg(REG_RMSU_ADDR,3);delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){U32_RMSU_RegData = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);printf("电压通道寄存器:%lx\n " ,U32_RMSU_RegData);}else{printf("电压通道寄存器读取出错\r\n");B_Read_Error = 1;}//电压//计算:U16_AC_V = (U32_RMSU_RegData * U16_RMSUC_RegData)/2^23if ((U32_RMSU_RegData &0x800000) == 0x800000){F_AC_V = 0;}else{a = (float)U32_RMSU_RegData;a = a*U16_RMSUC_RegData; a = a/0x400000; a = a/1; // 1 = 电压系数a = a/100; //计算出a = 22083.12mV,a/100表示220.8312V,电压转换成Va = a*D_CAL_U; //D_CAL_U是校正系数,默认是1, F_AC_V = a;}
}
读取通道功率,实现代码如下所示:
void Read_HLW8110_PA(void)
{float a;float b;Uart_Read_HLW8110_Reg(REG_POWER_PA_ADDR,4);delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){U32_POWERPA_RegData = (unsigned long)(u8_RxBuf[0]<<24) + (unsigned long)(u8_RxBuf[1]<<16) + (unsigned long)(u8_RxBuf[2]<<8) + (unsigned long)(u8_RxBuf[3]);printf("A通道功率寄存器:%lx\n " ,U32_POWERPA_RegData);}else{printf("A通道功率寄存器读取出错\r\n");B_Read_Error = 1;}if (U32_POWERPA_RegData > 0x80000000){b = ~U32_POWERPA_RegData;a = (float)b;}elsea = (float)U32_POWERPA_RegData;//功率需要分正功和负功//计算,U16_AC_P = (U32_POWERPA_RegData * U16_PowerPAC_RegData)/(2^31*电压系数*电流系数)//单位为W,比如算出来5000.123,表示5000.123Wa = a*U16_PowerPAC_RegData;a = a/0x80000000; a = a/1; // 1 = 电流系数a = a/1; // 1 = 电压系数a = a * D_CAL_A_P; //D_CAL_A_P是校正系数,默认是1F_AC_P = a; //单位为W,比如算出来5000.123,表示5000.123W
}
读取通道有功电量,实现代码如下所示:
void Read_HLW8110_EA(void)
{float a;Uart_Read_HLW8110_Reg(REG_ENERGY_PA_ADDR,3); delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){U32_ENERGY_PA_RegData = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);printf("A通道有功电量寄存器:%lx\n " ,U32_ENERGY_PA_RegData);}else{printf("A通道有功电量寄存器读取出错\r\n");B_Read_Error = 1;}Uart_Read_HLW8110_Reg(REG_HFCONST_ADDR,2); delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){U16_HFConst_RegData = (unsigned int)(u8_RxBuf[0]<<8) + (unsigned int)(u8_RxBuf[1]);printf("HFCONST常数 = :%d\n " ,U16_HFConst_RegData);}else{printf("HFCONST常数寄存器读取出错\r\n");B_Read_Error = 1;}//电量计算,电量 = (U32_ENERGY_PA_RegData * U16_EnergyAC_RegData * HFCONST) /(K1*K2 * 2^29 * 4096)//HFCONST:默认值是0x1000, HFCONST/(2^29 * 4096) = 0x20000000a = (float)U32_ENERGY_PA_RegData; a = a*U16_EnergyAC_RegData;a = a/0x20000000; //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH a = a/1; // 1 = 电流系数a = a/1; // 1 = 电压系数a = a * D_CAL_A_E; //D_CAL_A_E是校正系数,默认是1F_AC_E = a;F_AC_BACKUP_E = F_AC_E;
}
读取通道的线性频率,实现代码如下所示:
void Read_HLW8110_LineFreq(void)
{float a;unsigned long b;Uart_Read_HLW8110_Reg(REG_UFREQ_ADDR,2);delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){b = (unsigned long)(u8_RxBuf[0]<<8) + (unsigned long)(u8_RxBuf[1]);printf("A通道线性频率寄存器:%ld\n " ,b);}else{printf("A通道线性频率寄存器读取出错\r\n");B_Read_Error = 1;}a = (float)b;a = 3579545/(8*a); F_AC_LINE_Freq = a;
}
读取通道功率因素,实现代码如下所示:
void Read_HLW8110_PF(void)
{float a;unsigned long b;//测量A通道的功率因素,需要发送EA+5A命令
//测量B通道的功率因素,需要发送EA+A5命令 Uart_Read_HLW8110_Reg(REG_PF_ADDR,3);delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){b = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);printf("A通道功率因素寄存器:%ld\n " ,b);}else{printf("读取A通道功率因素寄存器出错\r\n");B_Read_Error = 1;}if (b>0x800000) //为负,容性负载{a = (float)(0xffffff-b + 1)/0x7fffff;}else{a = (float)b/0x7fffff;}if (F_AC_P < 0.3) // 小于0.3W,空载或小功率,PF不准a = 0; //功率因素*100,最大为100,最小负100F_AC_PF = a;
}
读取通道相位角,实现代码如下所示:
void Read_HLW8110_Angle(void)
{float a; unsigned long b;Uart_Read_HLW8110_Reg(REG_ANGLE_ADDR,2);delay_ms(10);if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) ){b =(unsigned long)(u8_RxBuf[0]<<8) + (unsigned long)(u8_RxBuf[1]);printf("A通道线相角寄存器:%ld\n " ,b);}else{printf("A通道线相角寄存器出错\r\n");B_Read_Error = 1;}if ( F_AC_PF < 55) //线性频率50HZ{a = b;a = a * 0.0805;F_Angle = a;}else{//线性频率60HZa = b;a = a * 0.0965;F_Angle = a;}if (F_AC_P < 0.5) //功率小于0.5时,说明没有负载,相角为0{F_Angle = 0;}if (F_Angle < 90){a = F_Angle;printf("电流超前电压:%f\n " ,a);}else if (F_Angle < 180){a = 180-F_Angle;printf("电流滞后电压:%f\n " ,a); }else if (F_Angle < 360){a = 360 - F_Angle;printf("电流滞后电压:%f\n " ,a); }else{a = F_Angle -360;printf("电流超前电压:%f\n " ,a); }
}
国产芯片WiFi物联网智能插座—电耗采集功能设计相关推荐
- 国产芯片WiFi物联网智能插座—项目简介
目录 1.项目背景 2.项目功能 3.硬件设计 随着智能电子设备的不断进步和发展,必然会提升智能设备的使用率,诸如智能移动设备.智能家居等设备发展极为迅速.物联网作为一个互联网和通信网络的信息载体,能 ...
- HLW8110电耗采集芯片的硬件设计和软件驱动方法
目录 1.硬件设计 2.软件设计 1.硬件设计 HLW8110是一款高精度的电能计量 IC,它采用 CMOS 制造工艺,主要用于单相计量应用.它能够测量线电压和电流,并能计算有功功率,视在功率和功率因 ...
- 物联网信号测试软件,物联网开关量信号采集 NPN转WIFI 检测计数器
原标题:物联网开关量信号采集 NPN转WIFI 检测计数器 产品概述: WJ160产品是一种物联网和工业以太网采集模块,实现了传感器与网络之间形成透明的数据交互.可以将传感器的开关量数据转发到网络. ...
- Kithings如何选择Wi-Fi物联网芯片(第一篇)
kithings.com 我们做Wi-Fi物联网解决方案已经思考.实践了许久了,在原来的公司里,也早就开始动手做准备了,比如智能工卡就是去年就已经开发原型出来,并已经接洽在一些试用了. 作 ...
- 《安富莱嵌入式周报》第278期:基于RUST编程语言RTOS,固态继电器芯片,微软发布物联网组件框架,支持多款蜂窝,LoRa和WiFi芯片工业物联网4.0书籍
往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...
- 乐鑫ESP32完美对标AP6212,国产芯片不缺货,不涨价!牛
继乐鑫ESP8089对标瑞昱RTL818后,已经有不少做OTT盒子.Ipcamera以及无人机的客户实现完美替换,国产芯片的崛起,终于让他们不用再为MCU缺货.涨价而烦恼! 此次AP6212缺货导至价 ...
- 国产芯片、数字人体……今年的服贸会正上演一场“科技大秀”
科技云报道原创. 戴上VR眼镜,在虚拟世界中逛街购物,商品直接快递到家:换上"超级SIM卡",手机摇身变为数字钱包,关机状态也能实现数字人民币支付:负载能力达到150公斤的磁吸附机 ...
- 上海亚商投顾:沪指低开高走 国产芯片板块掀涨停潮
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股. 市场情绪 三大指数今日低开高走,深成指尾盘涨近1%,科创50指数大涨超2%.芯片板块掀涨停潮,景嘉 ...
- 2023年最新国产芯片生态图谱(附80+类国产名录)
刚刚过去的2022年,半导体由热遇冷,进入调整期.但展望未来,全球半导体产业将很快走出周期低估,市场规模也将随之扩张,根据WSTS的数据,今年市场有望超过6000亿美元,半导体企业将迎来新一轮的机遇. ...
最新文章
- Gartner 2019 年供应链技术八大趋势:AI、高级分析、物联网、RPA、自主设备、数字孪生...
- Hibernate使用C3P0配置
- 代码之美 - 小函数总结
- 谈谈程序链接及分段那些事
- IP phone配製學習
- 2021.01.30 Visual QA论文阅读
- SAP OData 服务在 gateway 层出错,应该如何处理?通过一个错误消息 Query XXX is invalid or contains errors 来举例说明
- nodejs从服务器返回静态文件,nodejs静态资源服务器
- 阿里小二平时和商家交流的时候,明确告知流量喜欢什么样的产品?
- 命令行编译java文件
- 云骞开源即时通讯软件 WEBIM
- vue-sytle样式抽离
- kaggle房价预测代码
- 数据结构入门6-2(图 - 图的应用)
- 基于Java web的论坛BBS系统设计与实现
- android os仿ios,安卓仿ios12桌面全套仿安卓完美版
- python安装包下载及安装教程
- 多校联考 CSP-J 2019 第三次模拟赛 题解
- iPhone14 3D模型免费下载
- Invalid array length