基于MP2642GR-Z与PIC32MX764F128L的两串电池被动均衡方案设计与实现
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主频80MHz128KB Flash32KB 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或影响旁边电芯。计算逻辑是这样的假设电芯容量为CAh希望把电压差从Δ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.32W200mA时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用两小时还是四小时对系统容量几乎没有影响但均衡电阻的温度和寿命差别很大。把占空比和休息时间留足比提高均衡电流更划算。