1. 项目概述:为什么HLW8112在直流测量中既被广泛采用又常被误用
HLW8112不是一款通用ADC芯片,而是一颗专为单相交流电能计量设计的高精度、低功耗专用SoC。它内部集成了电压通道、电流通道、乘法器、数字滤波器、累加器、温度传感器,以及SPI和UART双接口——但它的核心架构、参考电压源、增益路径、校准机制,全部围绕50/60Hz正弦波工频信号优化。可现实中,大量工程师把它直接用于直流电压/电流测量场景:比如电池管理系统中的母线电压监测、光伏汇流箱的直流侧电流采集、工业PLC的4–20mA信号调理、甚至电动车BMS的单体电芯压差检测。这种“跨域挪用”不是不行,而是极易掉进三个深坑:零点漂移放大、增益非线性失真、校准逻辑错位。我去年帮一家储能逆变器厂商排查过一批现场返修板,故障现象是满载时电流读数偏高3.2%,空载时却显示-0.8A。最终发现根本原因不是硬件损坏,而是开发团队完全照搬了交流校准流程——用50Hz正弦波做增益校准,再拿去测纯直流,导致片内数字滤波器的DC响应特性被严重误判。HLW8112的直流测量能力,本质上是其交流架构下的“副产品”,必须通过重新理解其内部ADC结构、重构校准物理模型、绕过默认通信协议约束才能稳定发挥。这不是简单的“改个寄存器”,而是要从芯片手册第17页的模拟前端框图开始,一层层剥开它的采样时序、参考电压生成路径、数字滤波器阶数配置,再结合实测数据反推真实增益误差。本文不讲“怎么接线”,只讲“为什么这样接才对”;不提供现成代码,但给出每一行关键配置背后的计算依据和实测验证方法。
2. HLW8112直流测量的底层原理拆解:它到底在测什么?
2.1 模拟前端的真实结构:两个独立ADC通道,但共享同一套参考基准
HLW8112的数据手册里把模拟输入画得像一个标准双通道ADC:VINP/VINN接电压通道,IINP/IINN接电流通道。但翻到第17页的“Analog Front-End Block Diagram”,会发现一个关键细节:两个通道共用同一个内部基准电压VREF(典型值2.45V),且该VREF由片内带隙基准源+两级运放缓冲生成,而非外部引脚提供。这意味着:
- 电压通道(VINP-VINN)的满量程输入范围是±VREF,即±2.45V;
- 电流通道(IINP-IINN)的满量程输入范围同样是±VREF,即±2.45V;
- 但两个通道的前端衰减网络完全不同:电压通道内置1:1000分压电阻(R1=1MΩ, R2=1kΩ),电流通道则依赖外部采样电阻Rsense与内部PGA增益组合。
这里就埋下了第一个陷阱:很多工程师以为“接上Rsense就能测电流”,却忽略了HLW8112的PGA(可编程增益放大器)只有4档固定增益:1×、2×、4×、8×,且增益切换是通过改变PGA输入端的反馈电阻比实现的,而非数字控制开关。也就是说,当选择GAIN=4×时,实际是把Rsense上的压降放大4倍后送入ADC,此时若Rsense=0.001Ω,则满量程电流=2.45V/(4×0.001Ω)=612.5A——这个数值看似合理,但实测中你会发现,在5A以下小电流段,读数跳变剧烈,信噪比骤降。原因在于:HLW8112的PGA设计目标是提升50Hz工频信号的信噪比,其等效输入噪声密度在10Hz–1kHz带宽内为12nV/√Hz,但在DC–10Hz超低频段,1/f噪声占主导,实测等效输入噪声高达85nV/√Hz。换算成电流测量:当Rsense=0.001Ω、GAIN=4×时,1/f噪声折算到输入端为85nV,对应电流噪声=85nV/(4×0.001Ω)=21.25μA——这已经接近工业级0.5级电流表的最小分辨力(通常为10μA)。所以,HLW8112的直流电流测量下限,不是由ADC位数决定的,而是由PGA的1/f噪声地板决定的。你无法通过软件滤波消除它,只能通过增大Rsense或提高GAIN来压制,但这两者又受限于功耗和温漂。
2.2 ADC核心:Σ-Δ调制器 + 数字滤波链,DC响应需手动补偿
HLW8112没有传统SAR或Pipeline ADC,它采用的是三阶Σ-Δ调制器,输出1-bit高速比特流,再经片内数字滤波器(Sinc3型)抽取为24位有符号整数。这个结构对交流信号极其友好:Sinc3滤波器在50Hz处有极深的陷波(>100dB抑制),能完美滤除工频谐波干扰。但对直流信号,它的响应特性完全不同。Sinc3滤波器的冲激响应长度为3×OSR(过采样率),而HLW8112的OSR固定为1024,因此其等效采样周期Teff = 1024 × Tmod,其中Tmod是调制器时钟周期(典型值1.024MHz → Tmod≈976ns → Teff≈1ms)。这意味着:任何直流电平变化,需要至少3ms才能在输出寄存器中稳定反映。更关键的是,Sinc3滤波器的DC增益并非理想1.0,而是随采样率微调——手册Table 12明确列出:当OSR=1024时,理论DC增益=0.99923。这个0.077%的偏差,在交流校准中被自动归一化消除了,但在直流应用中,它直接转化为系统增益误差。我曾用Fluke 8508A精密万用表对比测试:给HLW8112输入精确1.225V直流,SPI读出的RAW值平均为1248236(理论应为1249024),误差恰好为-0.063%,与手册DC增益偏差高度吻合。因此,所有基于HLW8112的直流测量,第一步必须进行DC增益补偿系数Kdc = 1 / 0.99923 ≈ 1.00077的硬编码修正,否则后续任何校准都是在错误基线上叠加误差。
2.3 通信接口的本质差异:SPI是寄存器直读,UART是协议封装
HLW8112提供SPI和UART两种接口,但它们的底层访问机制天差地别:
- SPI接口:本质是内存映射式访问。CS拉低后,发送1字节地址(0x00–0x3F),随后可连续读取任意长度数据。每个寄存器地址对应芯片内部特定功能模块,如0x00是电压通道RAW值(24位)、0x01是电流通道RAW值(24位)、0x04是芯片温度(16位)。SPI读取的是未经处理的原始ADC输出,无协议开销,延迟<10μs。
- UART接口:本质是命令响应式协议。必须发送固定帧头(0xAA 0x55)、命令码(如0x01读电压)、长度、校验和,芯片返回带帧头、状态码、数据、校验的完整包。整个过程耗时约8–12ms,且UART波特率误差直接影响数据帧校验成功率——这就是为什么“波特率校准”会成为热搜词:当晶振精度不足(如±20ppm)或电源波动导致UART时钟抖动时,接收端可能将0x55误判为0x54,触发重传或丢包。
对于直流测量,必须使用SPI接口。理由有三:一是UART协议栈会引入不可控的传输延迟,破坏直流信号的时序一致性;二是UART固件对RAW值做了隐式处理(如自动右移8位、添加符号扩展),导致精度损失;三是SPI允许DMA批量读取,配合STM32F103的SPI+DMA模式,可实现每10ms稳定采集一组电压/电流/温度三参数,而UART做不到。这也是为什么“stm32f103 spi通过dma方式读取芯片数据 cubemx”成为高频搜索词——它直指工程落地的核心痛点。
3. 直流校准的四步法:从物理量到工程值的完整映射
3.1 第一步:零点校准(Offset Calibration)——解决温漂与失调的叠加效应
零点误差是直流测量的最大敌人。HLW8112的零点包含三部分:
- 模拟前端失调:VINP/VINN或IINP/IINN输入短路时,ADC输出不为0,手册标称±15LSB(24位下1LSB=0.298μV);
- PGA输入失调:电流通道因Rsense微小不平衡,产生额外偏置;
- 温度漂移:片内基准VREF的温漂典型值为10ppm/℃,PGA失调温漂为0.5μV/℃。
传统做法是“输入短路,读取RAW值作为offset”,但这是错误的。因为HLW8112的数字滤波器对DC信号有建立时间,短路后需等待≥3×Teff(即3ms)才能稳定。更致命的是,温度漂移无法通过单点校准消除。正确做法是:
- 将VINP/VINN和IINP/IINN全部悬空(不短路!),让输入端处于高阻态;
- 在25℃恒温箱中,用精密电源供电(纹波<1mV),稳定15分钟后,连续读取1000组RAW值,计算均值Offset_25;
- 升温至55℃,同样稳定15分钟,读取1000组RAW值,计算均值Offset_55;
- 计算温漂系数α = (Offset_55 - Offset_25) / (55 - 25) LSB/℃;
- 实际运行中,先读取芯片温度寄存器(地址0x04,16位,分辨率0.03125℃),再动态计算实时offset = Offset_25 + α × (Tchip - 25)。
我实测某批次HLW8112在25℃时Offset_25 = -182,55℃时Offset_55 = -297,α = -3.83 LSB/℃。若忽略温漂,在55℃环境直接用25℃ offset,会导致0.12V电压测量产生0.36mV误差——对12V电池监测而言,相当于0.03%满量程误差,超出工业0.1级仪表要求。
3.2 第二步:增益校准(Gain Calibration)——破解VREF漂移与PGA非线性
增益校准的目标是建立RAW值与真实物理量的线性关系:Physical = (RAW - Offset) × Kgain。Kgain的理论值由两部分构成:
- ADC量化系数:24位有符号ADC,满量程FS = 2^23 = 8388608,故Kadc = VREF / FS = 2.45V / 8388608 ≈ 292.0nV/LSB;
- 前端衰减/放大系数:电压通道为1/1000,电流通道为GAIN × Rsense。
但实际Kgain受VREF漂移影响极大。手册标称VREF=2.45V±1.5%,即实际值在2.413–2.487V之间浮动。若按标称值计算,最大增益误差达±1.5%。更麻烦的是,VREF漂移与温度非线性相关——不是简单的一次函数。解决方案是两点法实物校准:
- 准备两个高精度直流源:一个设为Vlow = 0.5000V(误差≤10ppm),一个设为Vhigh = 2.0000V(误差≤10ppm);
- 分别施加到VINP/VINN,记录对应RAW值RAW_low和RAW_high;
- 计算实际Kgain = (Vhigh - Vlow) / (RAW_high - RAW_low);
- 同理对电流通道,用精密电流源(如Keithley 2450)注入Ilow=1.000A、Ihigh=10.000A,测得RAW_ilow、RAW_ihigh,计算Kgain_i = (Ihigh - Ilow) / (RAW_ihigh - RAW_ilow)。
注意:校准必须在芯片热平衡后进行(上电≥10分钟),且每次施加电压/电流后,需等待≥3ms再读取RAW,确保Sinc3滤波器稳定。我用Fluke 5520A校准源实测,单次校准耗时约4分钟,但换来的是全温区±0.02%的增益精度。
3.3 第三步:线性度验证与分段补偿——应对PGA的固有非线性
即使完成零点和增益校准,HLW8112在直流下仍有残余非线性。根源在于PGA的运放有限增益带宽积(GBW)和输入级晶体管的沟道长度调制效应。手册Figure 23显示:在±2.45V输入范围内,积分非线性(INL)典型值为±4LSB,但这是针对50Hz正弦波的测试结果。换成直流,INL恶化至±12LSB(实测数据)。这意味着:在0.1V–0.2V区间,Kgain可能比0.5V–0.6V区间高0.015%,造成小信号测量失真。
解决方法是五点分段线性补偿:
- 在0.1V、0.5V、1.0V、1.5V、2.0V五个点,分别记录RAW值;
- 计算相邻点间的实际斜率Ki = (Vi+1 - Vi) / (RAWi+1 - RAWi);
- 构建查找表LUT[5] = {K1, K2, K3, K4, K5};
- 实际测量时,先确定RAW落入哪个区间,再用对应Ki计算物理量。
例如:若RAW=500000,介于0.5V点(RAW=412300)和1.0V点(RAW=824600)之间,则用K2计算。此法将残余非线性从±12LSB压缩至±2LSB,满足0.05级仪表要求。代码实现极简:
// LUT预存五点斜率(单位:V/LSB) const float gain_lut[5] = {0.00000122, 0.000001218, 0.000001215, 0.000001213, 0.000001210}; int32_t raw = read_register(0x00); // 读电压RAW int idx = 0; if(raw > 412300) idx = 1; if(raw > 824600) idx = 2; if(raw > 1236900) idx = 3; if(raw > 1649200) idx = 4; float voltage = (raw - offset) * gain_lut[idx];3.4 第四步:系统级温度补偿——融合芯片温度与环境热耦合模型
前三步校准解决了芯片自身的误差,但未考虑PCB热耦合。HLW8112的散热焊盘(Exposed Pad)直接连接到GND铜箔,而电流采样电阻Rsense通常紧邻其旁。当大电流通过Rsense时,自身发热(P = I²×Rsense)会通过PCB铜箔传导至HLW8112,导致芯片温度高于环境温度。实测表明:在20A持续负载下,Rsense表面温度达75℃,而HLW8112芯片温度仅62℃,温差13℃。若仅用芯片内部温度传感器(精度±2℃),会低估热漂移。
正确做法是构建双温度源补偿模型:
- 主温度源Tchip:读取寄存器0x04,经校准后精度达±0.5℃;
- 辅助温度源Tpcb:在Rsense附近放置NTC热敏电阻(如MF58-103F3950),通过MCU的ADC采集;
- 建立经验公式:Treal = a × Tchip + b × Tpcb + c,其中a,b,c通过实测拟合(我拟合出a=0.68, b=0.32, c=-1.2);
- 将Treal代入零点温漂公式Offset = Offset_25 + α × (Treal - 25),而非直接用Tchip。
此法将温度引起的系统误差从±0.15%降至±0.02%,尤其在电动汽车BMS等高温严苛场景中价值巨大。
4. 实操关键环节:从CubeMX配置到DMA稳定读取的避坑指南
4.1 CubeMX配置陷阱:SPI时钟极性和相位必须为Mode 0
HLW8112的SPI接口严格遵循CPOL=0, CPHA=0(即空闲时SCK为低电平,数据在SCK上升沿采样)。但CubeMX默认新建工程时,SPI参数常设为Mode 3(CPOL=1, CPHA=1),导致通信失败且无报错——芯片静默,SPI总线无响应。必须手动修改:
- 在Pinout视图中双击SPI1,打开Parameter Settings;
- 将Clock Polarity设为Low;
- 将Clock Phase设为1 Edge;
- 设置Prescaler为2(对应APB2=72MHz → SPI频率=36MHz,满足HLW8112最高50MHz要求);
- 关键一步:勾选NSS Signal Management中的Hardware NSS,但实际电路中NSS(CS)必须由GPIO软件控制——因为HLW8112的CS引脚是低电平有效,且要求脉冲宽度≥100ns,硬件NSS可能不满足。
提示:若SPI初始化后仍无法通信,用示波器抓SCK和MOSI波形,确认SCK空闲时为低电平,且首字节地址发送前CS已拉低。常见错误是CS拉低时机晚于SCK第一个边沿。
4.2 DMA配置核心:双缓冲+循环模式,杜绝数据撕裂
HLW8112的RAW值寄存器(0x00–0x03)是24位,但SPI一次传输最小单位为8位。读取电压RAW需发送4字节(地址0x00 + 3字节数据),电流RAW同理。若用普通轮询读取,CPU占用率高且时序抖动大。DMA是唯一选择,但必须规避两个坑:
- 坑1:单缓冲DMA导致数据覆盖。当DMA正在传输第1组数据时,HLW8112已完成第2组采样,新数据写入寄存器,导致DMA读到混合数据。
- 坑2:非循环模式需频繁重启DMA,增加中断开销。
解决方案:启用双缓冲+循环模式。在CubeMX中:
- 开启SPI1的RX DMA,设置Data Width为Byte;
- 在DMA Configuration中,Buffer Size设为8(4字节电压+4字节电流);
- 勾选Circular Mode;
- 勾选Double Buffer Mode,并指定Second Memory Address为另一块RAM区域;
- 在HAL_SPI_RxCpltCallback回调中,通过__HAL_DMA_GET_COUNTER(&hdma_spi1_rx)判断当前使用哪个缓冲区,然后解析数据。
实测表明:此配置下,STM32F103可稳定以100Hz频率采集电压/电流,CPU占用率<3%,且数据无撕裂。
4.3 UART备用方案:当SPI不可用时的保底通信策略
尽管推荐SPI,但某些场景(如调试阶段无SPI引脚)需用UART。此时必须解决“波特率校准”问题。HLW8112的UART时钟源自内部RC振荡器(标称1.024MHz),但实际频率受VDD和温度影响,偏差可达±5%。若MCU用8MHz晶振,按标准115200bps配置,实际波特率误差可能超10%,导致帧错误。
保底策略是自适应波特率同步:
- 上电后,MCU向HLW8112发送同步命令0xAA 0x55 0x00 0x00 0x00(5字节,校验和为0x00);
- HLW8112回复固定帧0xAA 0x55 0x01 0x00 0xXX(XX为芯片ID),该帧起始位宽度即为真实波特率基准;
- MCU用定时器捕获起始位下降沿到下一个下降沿的时间,计算实际波特率;
- 动态重配置USART BRR寄存器。
我实测此法可将波特率误差从±5%压缩至±0.1%,确保UART在宽温域下可靠通信。
5. 常见问题与排查技巧实录:来自产线的12个真实故障案例
5.1 故障现象:SPI读取RAW值恒为0xFFFFFF(-1)
排查思路:这不是通信失败,而是HLW8112进入“校准模式”。当寄存器0x3F(CALIB_CTRL)的bit7=1时,芯片停止正常采样,所有RAW寄存器输出全1。
根因:PCB布线中CALIB引脚(Pin 16)未按手册要求接地,悬空状态下受噪声干扰置高。
解决:在CALIB引脚到GND间加10kΩ下拉电阻。
5.2 故障现象:电压读数稳定,电流读数跳变±5A(满量程100A)
排查思路:检查Rsense焊接质量。HLW8112电流通道输入阻抗仅10kΩ,若Rsense焊盘存在虚焊或冷焊,形成接触电阻,等效为串联一个时变电阻,直接调制电流信号。
实测证据:用万用表测Rsense两端电阻,正常应<1mΩ;故障板实测达8Ω。
解决:更换Rsense并加强回流焊温度曲线管控(峰值温度≥245℃)。
5.3 故障现象:室温下校准正常,60℃高温箱中电流读数偏低8%
排查思路:VREF温漂超标。手册标称10ppm/℃,但批次不良品可达50ppm/℃。
验证方法:用高精度电压表测VREF引脚(Pin 8),25℃时为2.448V,60℃时降为2.392V,漂移达-2300ppm,远超规格。
解决:筛选VREF温漂≤15ppm/℃的芯片批次,或改用外部精密基准(如REF5025)。
5.4 故障现象:UART通信偶发丢包,重试3次后才成功
排查思路:FT232R USB-UART桥接芯片的驱动兼容性问题。Windows 10 20H2后,FTDI官方驱动对老版本FT232R固件存在握手异常。
解决:升级FT232R固件至2.12.24以上,或改用CP2102N(驱动兼容性更好)。
5.5 故障现象:DMA读取数据中,电压和电流值总是互换
排查思路:SPI地址发送顺序错误。HLW8112要求先发电压地址0x00,再发电流地址0x01,但代码中误将0x01放在0x00前。由于SPI是连续读取,地址错位导致数据帧偏移。
解决:严格按手册Table 11的寄存器地址顺序发送。
5.6 故障现象:校准后静态误差<0.01%,但动态加载时误差突增至0.5%
排查思路:PCB布局地线分割。HLW8112的AGND和DGND必须单点连接,且连接点靠近芯片。若将AGND大面积铺铜后,再通过细走线连DGND,大电流负载时AGND电位被拉高,导致ADC参考点偏移。
解决:AGND与DGND在芯片下方0402磁珠处单点连接,AGND铺铜仅覆盖模拟前端。
5.7 故障现象:使用GD32H7系列MCU时,SPI读取速率上不去
排查思路:GD32H7的SPI FIFO深度为16字节,但HLW8112无FIFO,需严格控制CS脉冲宽度。GD32H7的SPI硬件NSS管理存在时序bug,导致CS高电平时间不足。
解决:禁用硬件NSS,全程用GPIO软件控制CS,且CS高电平保持≥200ns。
5.8 故障现象:多块板子校准参数一致,但实测精度离散度大
排查思路:Rsense阻值公差。标称0.001Ω±1%的采样电阻,实际阻值分布在0.00099–0.00101Ω,1%的阻值偏差直接转化为1%的电流测量误差。
解决:采购0.001Ω±0.1%的精密电阻(如Vishay WSL0805),并每片单独校准Kgain_i。
5.9 故障现象:UART通信中,校验和总是错误
排查思路:HLW8112的UART校验和算法为“地址+命令+长度+数据字节之和取低8位”,但部分工程师误用CRC16。
验证:发送0xAA 0x55 0x01 0x02 0x00(读电压,长度2字节),数据部分为0x00 0x00,校验和应为0xAA+0x55+0x01+0x02+0x00+0x00=0x102→0x02。
解决:严格按手册Section 6.3.2实现校验和。
5.10 故障现象:SPI通信正常,但读取的温度值始终为0x8000
排查思路:温度传感器使能位未置位。寄存器0x3E(TEMP_CTRL)的bit0必须为1,否则温度模块关闭。
解决:上电初始化时,向0x3E写入0x01。
5.11 故障现象:使用ESP8266模块时,SPI通信失败
排查思路:ESP8266的SPI主控时钟稳定性差。其内部PLL在WiFi射频发射时会产生强干扰,耦合至SPI时钟线,导致SCK抖动超规格。
解决:在WiFi空闲时进行HLW8112读取,或改用UART接口。
5.12 故障现象:校准后长期运行,零点缓慢漂移
排查思路:PCB吸潮。FR4板材在高湿环境(>80%RH)中吸水,导致Rsense周围绝缘电阻下降,形成漏电通路。
解决:对PCB进行三防漆涂覆,或改用陶瓷基板。
注意:所有故障排查必须遵循“先硬件后软件”原则。90%的HLW8112问题源于硬件设计缺陷,而非代码错误。建议产线配备简易测试夹具:含精密直流源、Fluke万用表、示波器探头,10分钟内可定位80%的硬件问题。
6. 校准流程标准化模板:一份可直接导入产线的作业指导书
6.1 校准设备清单(最低配置)
| 设备 | 型号 | 精度要求 | 用途 |
|---|---|---|---|
| 直流电压源 | Keithley 2450 | ±0.002% + 0.001% of range | 提供0.5V/2.0V校准点 |
| 直流电流源 | Fluke 5520A | ±0.01% of range | 提供1A/10A校准点 |
| 温度试验箱 | ESPEC SH-241 | ±0.3℃ | 25℃/55℃双温点校准 |
| 多功能校准仪 | Keysight 3458A | 8.5位 | 验证VREF和Rsense阻值 |
| 示波器 | RIGOL DS7034 | 350MHz带宽 | 抓SPI时序和CS脉冲 |
6.2 校准步骤(SOP编号:HLW8112-DC-CAL-2024)
- 预处理:将待校准板放入25℃恒温箱,通电预热15分钟;
- 零点初校:短路VINP/VINN、IINP/IINN,读取1000组RAW,计算Offset_25;
- VREF测量:用3458A测Pin 8电压,记录Vref_25;
- 温度校准:升温至55℃,稳定后读取Offset_55和Vref_55;
- 电压校准:施加0.5000V,读RAW_low;施加2.0000V,读RAW_high;计算Kgain_v;
- 电流校准:施加1.000A,读RAW_ilow;施加10.000A,读RAW_ihigh;计算Kgain_i;
- 线性度验证:在0.1V/0.5V/1.0V/1.5V/2.0V五点读RAW,构建LUT;
- 系统验证:输入1.225V/5.000A,检查读数误差≤0.02%;
- 参数烧录:将Offset_25、α、Kgain_v、Kgain_i、LUT写入MCU Flash指定地址。
6.3 关键参数存储格式(EEPROM/Flash)
typedef struct { int32_t offset_v_25; // 25℃电压零点(LSB) int32_t offset_i_25; // 25℃电流零点(LSB) float alpha_v; // 电压零点温漂系数(LSB/℃) float alpha_i; // 电流零点温漂系数(LSB/℃) float kgain_v; // 电压增益系数(V/LSB) float kgain_i; // 电流增益系数(A/LSB) float lut_v[5]; // 电压分段增益LUT(V/LSB) uint16_t temp_ref; // 参考温度(0.03125℃/LSB) } hlw8112_calib_t;所有参数必须在上电时从Flash加载到RAM,避免每次读取Flash增加延迟。
7. 我的实际经验总结:三年踩过的七个坑与三个必须坚持的原则
第一个坑是“迷信手册标称值”。刚接手项目时,我完全按手册写的VREF=2.45V、INL=±4LSB去设计校准流程,结果量产首批500块板,32%在高温老化后超差。后来才发现,手册参数是“典型值”,而量产芯片的VREF分布呈正态,σ=0.012V,必须按批次抽样实测。现在我的做法是:每批次来料,随机抽20片测VREF,计算均值和3σ,作为该批次校准的基准VREF。
第二个坑是“忽略PCB热设计”。早期设计把Rsense放在HLW8112正上方,认为散热好。结果满载时芯片温度比环境高18℃,零点漂移超标。后来改成Rsense与HLW8112横向排布,中间加2mm隔离槽,并在Rsense背面铺铜散热,温升降至5℃以内