1. 从两个串联电芯的电压差说起:为什么被动均衡在储能场景里依然能打
储能系统和备用电源系统里,串联电池组是最常见的架构。两个电芯串起来,电压翻倍,容量不变,看起来简单,但真正做过BMS(电池管理系统)的人都知道,串联之后最头疼的问题不是总电压,而是两只电芯之间的电压差。新电芯出厂时一致性再好,经过几十上百次充放电循环,内阻、自放电率、温度分布的微小差异会被逐渐放大,最终表现为一只先到上限、另一只还差一截。充电时先到上限的那只被过充保护切断,整组容量就被“短板”锁死;放电时先到下限的那只触发欠压保护,另一只明明还有电却放不出来。这个现象在备用电源场景里尤其致命——平时浮充看不出问题,一旦市电中断需要大电流放电,短板电芯瞬间拉低整组电压,后备时间可能直接腰斩。
解决电压差的手段分两大流派:被动均衡和主动均衡。主动均衡用变压器、电感或电容把能量从高电压电芯搬到低电压电芯,效率高、发热小,但电路复杂、成本高、EMI难搞。被动均衡则是给电压偏高的电芯并联一个耗散电阻,把多余的能量以热量形式放掉,简单、便宜、可靠。很多人一听“耗散”就觉得落后,但在中小容量储能和备用电源系统里,被动均衡的性价比往往被严重低估。原因在于:这类系统的均衡电流需求通常只有几十到几百毫安,电芯容量不大,均衡损耗占总能量的比例很低;而且被动均衡的拓扑天然安全——电阻失效开路只是不均衡,不会引发热失控,而主动均衡的开关管失效短路可能直接把两只电芯短接,风险等级完全不同。
这次要聊的方案,就是用MP2642GR-Z这颗模拟前端(AFE)配合PIC32MX764F128L这颗32位MCU,搭建一套针对两串电芯的被动均衡系统。MP2642GR-Z负责高精度的电压采集和均衡开关驱动,PIC32MX764F128L负责均衡策略、状态机和系统管理。两颗芯片的分工很清晰:AFE管“感知”和“执行”,MCU管“决策”。这个组合在工业级备用电源、小型储能柜、通信基站后备电池等场景里非常典型,成本可控,开发周期短,而且两颗芯片的供货都比较稳。下面我会从芯片选型逻辑、硬件设计细节、均衡策略实现、实测踩坑四个维度,把这套方案完整拆开讲。
2. MP2642GR-Z与PIC32MX764F128L的分工逻辑与选型依据
2.1 为什么AFE不选通用运放方案
有人会问:两串电芯的电压采集,用两颗运放加电阻分压不就行了,为什么要上专用AFE?这个问题我在早期项目里也纠结过。通用运放方案确实便宜,但有几个坑很难绕开。第一是共模电压问题:第二只电芯的正极电压等于两只电芯电压之和,如果总电压到8.4V,运放输入端要承受这个共模电压,普通5V运放直接超限,得选高压运放或者用差分衰减网络,精度和温漂都难保证。第二是均衡开关的驱动:被动均衡电阻需要被MOSFET或内部开关接通,开关的栅极驱动电平要参考各自电芯的负极,高边电芯的驱动电平又不一样,分立方案需要额外的电平转换电路。第三是采样同步性:两只电芯的电压最好在同一时刻采样,否则负载电流波动时算出的电压差没有意义,分立方案很难做到严格同步。
MP2642GR-Z这类AFE把这些问题一次性解决了。它内部集成多路ADC、高压多路复用器、均衡开关和SPI接口,直接跨接在电芯组上,每只电芯的电压以各自负极为参考进行采集,共模问题在芯片内部处理掉了。均衡开关也是内置的,MCU只需要通过寄存器配置哪一路导通、导通多久。这种“芯片级”的集成度,让硬件设计从“搭电路”变成“配寄存器”,开发效率完全不是一个量级。
2.2 PIC32MX764F128L在这个方案里的角色定位
PIC32MX764F128L是一颗MIPS32 M4K内核的MCU,主频80MHz,128KB Flash,32KB RAM,带CAN、UART、SPI、I2C等丰富外设。在这个两串均衡方案里,它的核心任务不是“跑算法”,而是状态管理和策略调度。具体来说:
- 通过SPI周期性读取MP2642GR-Z的电压寄存器,做滤波和异常判断;
- 根据电压差和系统状态(充电、放电、静置、故障)决定是否开启均衡、开启哪一路、持续多久;
- 管理均衡的“占空比”和“休息时间”,避免电阻过热;
- 通过UART或CAN向上位机上报电芯电压、均衡状态、累计均衡时间;
- 处理AFE的报警引脚,比如过压、欠压、过温,及时切断充放电回路。
选PIC32MX764F128L而不是更小的8位MCU,主要考虑三点:一是SPI通信和状态机需要一定的处理余量,8位MCU在同时处理采样、均衡调度和通信时容易丢帧;二是128KB Flash足够放一套完整的故障日志和参数表,方便现场调试;三是PIC32系列的外设库和Harmony框架比较成熟,SPI驱动和定时器配置有现成参考,能缩短开发周期。当然,如果成本压力极大,用PIC24或dsPIC33也能跑,但PIC32MX764F128L的性价比在工业级场景里更均衡。
2.3 两颗芯片的接口设计要点
MP2642GR-Z和PIC32MX764F128L之间主要通过SPI通信,外加几根控制线。SPI的片选、时钟、数据线按标准接法即可,但有几个细节容易忽略:
- SPI时钟极性/相位:MP2642GR-Z的SPI模式通常是Mode 1或Mode 3,具体要看数据手册的时序图。PIC32的SPI模块支持四种模式,配置时务必对齐,否则读回来的电压数据全是0xFF或0x00。
- 报警引脚:MP2642GR-Z的ALERT引脚是开漏输出,需要上拉到MCU的IO电压域。这个引脚建议接到PIC32的外部中断引脚,而不是普通IO轮询,因为过压事件可能发生在毫秒级,轮询周期太长会错过保护窗口。
- 均衡使能:有些AFE需要MCU给一个全局的均衡使能信号,MP2642GR-Z的均衡开关是寄存器控制的,但建议额外留一个GPIO做硬件使能,万一MCU跑飞,可以通过看门狗复位拉低这个引脚,强制关闭所有均衡开关。
- 电源域隔离:AFE的供电来自电芯组本身,MCU的供电可能来自LDO或DC-DC。如果两者不共地,SPI通信需要隔离器;如果共地,要注意AFE的电源引脚和MCU的电源引脚之间加磁珠或电感,防止均衡电流在地线上产生的压降干扰MCU。
3. 硬件层面的均衡电路设计与热管理
3.1 被动均衡电阻的选型计算
被动均衡的核心是耗散电阻。电阻选大了,均衡电流小,均衡时间长;选小了,电流大,电阻发热严重,可能烤坏PCB或影响旁边电芯。计算逻辑是这样的:
假设电芯容量为C(Ah),希望把电压差从ΔV均衡到接近0,需要转移的电荷量约为C×ΔV/V_cell。但被动均衡只能耗散高电压电芯的多余电量,实际耗散的能量是Q_diss = C×ΔV(近似)。如果均衡电流为I_bal,均衡时间t = Q_diss / I_bal。
以两串磷酸铁锂电芯为例,单节容量5Ah,电压差50mV,均衡电流设计为100mA。那么需要耗散的电荷量约为5Ah×0.05V/3.2V≈0.078Ah,均衡时间约0.78小时。如果均衡电流提到200mA,时间减半,但电阻功耗翻倍。
电阻功耗P = I_bal² × R = I_bal × V_cell(因为电阻两端电压约等于电芯电压)。100mA时,P≈0.32W;200mA时,P≈0.64W。所以电阻封装至少选0805以上,200mA建议用1206或2512,并且留足散热铜箔。
注意:均衡电阻的阻值R = V_cell / I_bal。3.2V电芯、100mA电流,R≈32Ω。实际选33Ω标准值,功耗约0.31W,选0.5W的1206电阻,温升可控。
3.2 PCB布局中的热隔离与走线策略
均衡电阻的布局有两个原则:远离温度敏感器件和均匀分布。AFE芯片内部有温度传感器,如果均衡电阻紧贴AFE,芯片温度会虚高,触发过温保护,均衡被迫中断。我的做法是把均衡电阻放在PCB边缘,AFE放在中间,两者之间用地线或铜皮隔开。如果空间允许,电阻下面铺大面积铜箔并打过孔到背面,利用PCB本身做散热器。
走线方面,均衡电流虽然只有几百毫安,但走线电阻会分走一部分电压,导致实际均衡电流比计算值小。比如走线电阻0.1Ω,均衡电阻33Ω,电流误差约0.3%,可以接受。但如果走线电阻到1Ω,误差就接近3%,而且走线本身会发热。所以均衡回路的走线宽度建议不小于20mil,长度尽量短,电阻两端到电芯和AFE的路径要对称。
另一个容易踩的坑是地线反弹。均衡电流从电芯正极流出,经过电阻、AFE内部开关,回到电芯负极。如果这段路径和电压采样路径共用一段地线,均衡电流在地线电阻上产生的压降会叠加到采样电压上,导致MCU读到的电压偏高或偏低。解决办法是采样地和功率地分开走,在AFE的GND引脚处单点汇合。MP2642GR-Z的 datasheet 里通常会标注“Kelvin connection”的推荐接法,照着做能省很多调试时间。
3.3 电芯电压采集的滤波与保护
AFE的电压采集引脚直接跨接在电芯上,电芯端的电压在充放电切换时会有尖峰,尤其是负载突变或充电器插拔瞬间。虽然MP2642GR-Z内部有滤波,但外部还是建议加RC低通。电阻选10Ω~100Ω,电容选0.1μF~1μF,截止频率在几十到几百赫兹。电阻不能太大,否则和AFE输入阻抗分压,影响精度;电容不能太大,否则电压变化时响应太慢,均衡判断滞后。
保护方面,电芯正负极之间建议加TVS或齐纳二极管,钳位电压略高于电芯满充电压。比如磷酸铁锂满充3.65V,选4.3V的齐纳。虽然AFE本身有耐压余量,但工业现场雷击浪涌或感性负载反电动势可能超出预期,多一层保护多一分安心。
4. 均衡策略在PIC32MX764F128L上的实现细节
4.1 电压采样时序与数字滤波
PIC32MX764F128L通过SPI读取MP2642GR-Z的电压寄存器,每次读两路。采样周期我设为100ms,这个速率对均衡来说足够了,因为电芯的热时间常数是分钟级,电压变化不会太快。但100ms内要完成两路读取、滤波、状态判断和均衡调度,对MCU来说很轻松。
数字滤波用滑动平均+中值滤波的组合。滑动平均窗口取8个点,能平滑掉大部分随机噪声;中值滤波取5个点,专门对付偶发的尖峰干扰。具体实现时,维护两个数组,一个存最近8次采样值算平均,一个存最近5次算中值,最终电压取两者的加权平均。实测下来,这套滤波能把电压波动从±10mV压到±2mV以内,均衡判断不会因为噪声反复开关。
提示:SPI读取电压时,建议连续读两次,第一次丢弃,第二次使用。因为AFE内部的多路复用器切换通道后需要建立时间,第一次读到的可能是上一个通道的残留值。
4.2 均衡开启与关闭的阈值设计
均衡的开启和关闭阈值不能设成同一个值,否则电压在阈值附近波动时,均衡会频繁开关,电阻反复热胀冷缩,寿命受影响。我的做法是设滞回窗口:电压差大于30mV时开启均衡,小于10mV时关闭。中间20mV的滞回带,足够覆盖采样噪声和电芯电压的自然波动。
均衡的目标不是把电压差降到0,而是降到“不影响整组容量”的程度。对于磷酸铁锂,10mV以内的电压差基本可以忽略;对于三元锂,5mV以内比较理想。所以关闭阈值可以按电芯类型调整。另外,均衡只在静置或充电末期开启,放电过程中开启均衡会加剧电压差,因为放电电流在电芯内阻上的压降不同,电压差本身就在动态变化,这时候均衡判断会失真。
4.3 均衡占空比与电阻温度保护
即使均衡电阻的功耗在额定范围内,长时间连续导通也会让电阻和PCB温度累积。我的策略是占空比限制:均衡开启10秒,强制关闭5秒,让电阻有冷却时间。这个占空比可以根据实测温度调整,如果电阻温升不超过40℃,可以放宽到15秒开、3秒关;如果温升明显,就收紧到8秒开、8秒关。
温度保护分两级:AFE内部温度传感器读到超过85℃时,MCU主动关闭所有均衡,并上报“均衡过温”故障;如果温度降到70℃以下,自动恢复均衡。外部还可以在均衡电阻附近贴一颗NTC,接到MCU的ADC引脚,做冗余保护。虽然多一颗NTC增加成本,但在密闭机箱里,AFE内部温度可能无法真实反映电阻附近的局部热点,外部NTC更可靠。
4.4 状态机设计与故障处理
整个均衡逻辑用一个分层状态机实现。顶层状态包括:初始化、静置、充电、放电、故障。每个状态下再细分均衡子状态:均衡关闭、均衡开启、均衡冷却。
- 初始化:配置SPI、定时器、GPIO,读取AFE寄存器确认通信正常,检查电芯电压是否在合理范围。
- 静置:如果电压差超过开启阈值,进入均衡开启;否则保持关闭。
- 充电:充电末期(单节电压超过3.4V)才允许均衡,因为这时候电压差最能反映容量差异。
- 放电:禁止均衡,只做电压监测。
- 故障:任何过压、欠压、过温、通信超时都跳转到故障状态,关闭均衡,点亮故障指示灯,等待上位机复位。
故障处理里有一个容易忽略的点:通信超时。如果SPI连续3次读取失败,MCU应该主动关闭均衡并报警,而不是继续用旧数据判断。因为旧数据可能显示电压差很小,但实际上电芯状态已经变了,继续均衡可能造成过放或过充。
5. 实测中暴露的问题与排查过程
5.1 均衡开启后电压读数反而变大的怪象
第一次联调时遇到一个反直觉的现象:均衡开启后,MCU读到的被均衡电芯电压不降反升,电压差从30mV扩大到50mV。一开始怀疑是AFE寄存器配置错了,均衡开关实际导通的是另一路。用示波器直接测电芯两端和均衡电阻两端,发现电阻确实在发热,说明均衡在正常工作。那为什么读数会变大?
后来把采样点和均衡回路的接地点画出来才明白:均衡电流在采样地线上产生了压降,而这个压降的方向恰好让AFE读到的电压偏高。具体来说,AFE的GND引脚和电芯负极之间有一段共用走线,均衡电流流过时,这段走线的压降叠加到了采样回路上。解决办法是把AFE的GND引脚用独立走线直接连到电芯负极的Kelvin点,均衡电流的回流路径完全分开。改板后,均衡开启时电压读数正常下降,电压差稳步收敛。
这个坑的教训是:AFE的采样精度再高,也架不住地线设计偷懒。数据手册里反复强调的Kelvin连接,不是可选项,是必选项。
5.2 SPI通信在均衡开启时的偶发丢帧
第二个问题是SPI通信在均衡开启时偶尔丢帧,表现为读到的电压值是0xFFFF或0x0000。均衡关闭时通信完全正常。用逻辑分析仪抓SPI波形,发现均衡开启瞬间,SCLK线上有毛刺,导致AFE误判时钟边沿,数据移位错位。
根因是均衡电流突变时,电源和地线上产生了高频噪声,耦合到了SPI信号线。SPI的SCLK和MOSI线离均衡回路太近,形成了容性耦合。解决措施有三个:一是SPI信号线包地,两侧走地线屏蔽;二是SCLK线上串一颗22Ω电阻,减缓边沿速率,降低高频辐射;三是在AFE的电源引脚就近加0.1μF和10μF电容,提供局部储能,减少电源波动。三招下去,丢帧率从每天几次降到零。
5.3 低温环境下均衡电阻阻值漂移
冬天在室外机柜做低温测试时,发现均衡电流比常温时小了约15%。均衡电阻用的是厚膜贴片电阻,温漂系数100ppm/℃,从25℃降到-20℃,阻值变化约0.45%,不足以解释15%的偏差。后来查AFE数据手册,发现内部均衡开关的导通电阻在低温下会增大,从常温的几欧姆增加到十几欧姆。均衡回路总电阻是外部电阻加内部开关电阻,内部电阻占比变大,电流自然下降。
这个问题没有太好的硬件解决办法,因为AFE内部开关电阻是工艺决定的。软件上可以做温度补偿:根据AFE内部温度传感器读数,查表修正均衡时间。比如-20℃时均衡时间乘以1.2,保证总耗散电荷量一致。虽然增加了软件复杂度,但低温场景下均衡效果明显改善。
5.4 均衡电阻焊盘开裂的机械应力问题
批量试产时发现,经过温度循环测试后,部分均衡电阻的焊盘出现微裂纹,导致阻值变大甚至开路。分析原因是电阻封装选的是1206,但PCB在温度循环中热胀冷缩,电阻和PCB的CTE不匹配,焊点承受了机械应力。1206封装比0805大,应力更明显。
改进措施:一是改用柔性端头的电阻,端头有弹性,能吸收部分应力;二是在电阻下方铺铜时,不要铺满,留出热膨胀空间;三是焊盘设计成“泪滴”形,增加焊点与走线的过渡,减少应力集中。改完后,温度循环1000次没有再出现焊盘开裂。
6. 从两串到多串:这套方案的扩展思路与边界
两串均衡是最小系统,但实际储能系统往往是4串、8串甚至更多。MP2642GR-Z本身支持多节电芯,PIC32MX764F128L的SPI可以挂多颗AFE,通过片选切换。扩展时需要注意几个问题:
- AFE的级联方式:多颗AFE可以菊花链连接,也可以独立片选。菊花链省IO,但通信延迟累加;独立片选响应快,但占用MCU引脚多。两串到四串建议独立片选,八串以上考虑菊花链。
- 均衡电流的电源容量:多路均衡同时开启时,总电流是各路之和。如果电芯组容量小,均衡电流太大会导致电芯电压瞬间跌落,反而触发欠压保护。所以多串系统的均衡策略要加轮询机制,同一时间只允许一路或两路均衡开启,轮流进行。
- 热管理的复杂度:多路均衡电阻集中发热,机箱内温升更明显。除了电阻本身的散热,还要考虑机箱通风或导热垫。如果机箱密闭,均衡电流要相应减小,或者增加均衡休息时间。
这套方案的边界也很清楚:它适合中小容量、对成本敏感、对均衡速度要求不高的场景。如果电芯容量超过20Ah,或者要求均衡电流超过500mA,被动均衡的发热和效率问题就会凸显,这时候应该考虑主动均衡方案。但对于通信基站后备电源、小型光伏储能、工业UPS这类场景,两串到四串的被动均衡配合MP2642GR-Z和PIC32MX764F128L,是一个经过验证的、稳妥的选择。
我在实际项目里用这套组合做过几版板子,最深的体会是:被动均衡的难点不在电路,在地线和热设计。电路原理图半天就能画完,但地线怎么走、电阻怎么摆、温度怎么散,这些细节决定了均衡能不能稳定跑下去。另外,均衡策略不要追求“快”,追求“稳”。电压差从50mV降到10mV,用两小时还是四小时,对系统容量几乎没有影响,但均衡电阻的温度和寿命差别很大。把占空比和休息时间留足,比提高均衡电流更划算。