欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 嵌入式开发_电能计量芯片HLW8110与HLW8112

嵌入式开发_电能计量芯片HLW8110与HLW8112

2025/9/15 9:14:04 来源:https://blog.csdn.net/13011803189/article/details/147252511  浏览:    关键词:嵌入式开发_电能计量芯片HLW8110与HLW8112

1 芯片简介

HLW8110/HLW8112 是一款高精度的电能计量IC,它采用CMOS 制造工艺,主要用于单相应用。它能够测量线电压和电流,并能计算有功功率,视在功率和功率因素。
HLW8110与HLW8112都有1路电压检测通道。
支持3.3V/5V

HLW8110

HLW8110有1路电流通道。UART接口进行数据通讯。
在这里插入图片描述
在这里插入图片描述

HLW8112

HLW8112有2路电流通道,多出的一路电流通道常用来检测漏电流。支持UART和SPI接口进行数据通讯。
在这里插入图片描述
在这里插入图片描述

2 项目说明

这个项目应客户要求,使用STC89C52RC单片机,驱动LCD1602显示数据,再通过485发送测量结果。

电路设计

高低压电路之间做了隔离,485和控制部分也做了隔离。由于是客户定制项目,所以电路图就不放出来了。基本上是参照合力为的参考电路做的。485部分可以参照我的USB转串口电路。
由于需要485通讯占用串口,所以选用HLW8112进行SPI通讯,SPI口单独做了引出,以方便调试。
由于是用的89C52单片机,资源极其有限,只有一个串口,下载又必须占用串口,数据通讯也要用串口,就只能分时使用。放一个拨动开关开切换工作状态。

吐槽一下

1602的驱动,和SPI接口,都用的是IO口模拟时序的方式,最头疼的是这个MCU资源太少了,FLASH才8K,稍微不小心就超容量了。
还有调试过程,Keil C51这个开发环境,举个例子,4个字节组合成一个32位的long,

val = w<<24 | x<<16 | y<<8 | z;

组完了以后,低16位正常,高16位不对,你要说他是8位机,必须用以下的方式吧,但上面的写法组16位int又是正确的

val = (u32)w<<24 | (u32)x<<16 | (u32)y<<8 | (u32)z;

编译器还有一个出错,具体是啥情况我忘了,反正就是各种不好用。

避坑

之前做信号处理时,都是芯片直接到MCU,这次是过了隔离芯片才到的MCU,所以有一个信号延迟的问题,开始没有注意,耽误了一些时间,发出来让大家避个坑。
如下图:
在这里插入图片描述

从上到下依次是MOSI,MISO,CLK,CS,读出来的数据是0x8502,实际应该是0x0A04,其实这时数据已经对了,只是由于HLW8112与MCU之间过了一个隔离用的π141U31,它支持的速度是150K,而SPI时钟频率仅为20K,理论上是没问题的。
但是就因为隔离芯片的延迟,导致数据错位了。
取下隔离芯片,直接将输入输出短路,波形和解码均正常。
在这里插入图片描述

最后在逻辑分析仪上调整了一下,将时钟的有效改为下降沿,也就是延迟半个时钟周期再做协议分析,结果就正常了。如下图:
在这里插入图片描述
软件处理,由于是IO口模拟SPI时序,所以很容易的做一个延时采样,发送完上升沿之后,再延时一段时间(好像是100us),再做数据采样,就行了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词