
两串电池也要做均衡我第一次听到这个需求时觉得小题大做两节同一批次的电芯出厂压差不超过几毫伏有什么好折腾的。但真正跑了大半年的备用电源项目后我彻底改了这个想法。柜子里那对磷酸铁锂电芯从装机时的几乎零压差到充电末端稳定压差180mV再到一次容量测试里整组提前40分钟掉到欠压保护——我才意识到在储能和备用电源系统里哪怕只有两个串联电池单元均衡也不是可有可无的装饰。后来我把方案推倒重来用MP2642GR-Z做双串均衡前端用PIC24HJ256GP610做主控专门做了一套针对两节串联电芯的均衡板问题才算真正解决。这篇文章会把这套板子的设计思路、均衡控制逻辑、实测数据以及调试时踩过的三个坑完整捋一遍给正在做储能备电BMS或者考虑给备用电源加均衡的同行做一个参考。方案不复杂但里面有几处取舍和细节是光看芯片手册根本不会告诉你的。1. 两串电池为什么也要均衡差异远比你想象的大1.1 同一批电芯也会有离散自放电、内阻老化与温度很多人觉得“同一批、同一化成柜”的电芯一致性一定好这个假设在出厂那一刻勉强成立但放到实际系统里能维持多久就说不准了。备用电源和储能系统跟消费电子不一样电池不是天天深度充放而是常年挂在线上小电流浮充偶尔带载。这种工况下三件事会慢慢把电芯拉开差距。第一是自放电率差异。电芯内部副反应、轻微微短路、隔膜工艺波动都会让每个电芯“自己偷跑”的速度不一样。别小看这百分之零点几的差别一个月下来就可能差出1%到2%的SOC。第二是内阻增长曲线不同。循环次数相同但温度、充电倍率、过充历史不一样SEI膜增厚速度也不同。内阻差在空载时看不出来一旦有电流流过端电压会被明显拉开。第三是温度分布不均。电池柜里总有一节更靠近发热元件或者通风更好长期高个1到2℃老化速度就不一样。这三个因素叠加结果就是两节同一批次的电芯半年后静置压差能到几十甚至上百毫伏。我见过最夸张的一组存放一年后两节电芯开路电压差了接近500mV那已经不是均衡能解决的问题了直接判废。所以均衡一定要在差异还小的时候就开始做不要等压差大了才补救。1.2 储能和备用电源场景下不均衡的后果更隐蔽两节串联的备电系统容量定义是“整组充到截止电压再放到欠压”这段区间。可一旦两节电芯不均衡整个过程就会变成木桶效应充电时高压那节先撞上充电截止电压BMS为了保护必须切充电低压那节其实还没满放电时低压那节先到欠压保护高压那节里还有能量但已经放不出来了。我在100Ah的2S磷酸铁锂组上实测过静置压差180mV对应有效可用容量损失大概8%。听起来不算特别吓人但备电系统的关键指标恰恰是“断电后能撑多久”损失掉的那部分容量很可能就是最不该丢的那三十分钟。更讨厌的是不均衡会自我强化高压那节长期被顶到上限老化更快内阻更大于是压差进一步拉大最后整个模组提早退役。所以在储能和备用电源系统里哪怕只有两个串联电池单元均衡板也不是奢侈品。事前做均衡成本可能就是几个电阻、一个模拟前端、一段固件逻辑事后再处理电芯一致性那就是整个模组换新的代价。2. 均衡前端MP2642GR-Z与主控PIC24HJ256GP610的硬件分工2.1 为什么选MP2642GR-Z做前端而不是让MCU直接采样最早做实验的时候我试着让PIC24HJ256GP610自带的ADC直接去采两节电芯电压。理论上12位ADC分辨率不算差稍微规划一下也能跑但实际做下来问题一堆分压电阻网络本身的漏电流会拉偏高压电芯均衡MOS开关动作时地平面被瞬间扰动采样值乱跳要想在充放电回路里安全地处理共模电压还得加隔离和运放成本比预想高得多。后来我把模拟前端交给MP2642GR-Z这颗双串均衡前端芯片系统的负担一下子就减轻了。它在电路里的角色很清晰负责两节电芯的差分电压采样、均衡放电控制、过压欠压监测并通过SPI接口把这些数据送给MCU。PIC24HJ256GP610不需要自己去摸电芯正极它只跟低压侧的寄存器打交道逻辑上干净物理上安全。被动均衡的原理可以这样理解两个串联电池就是一高一低两个水杯均衡就是把高水位的那只杯子的水稍微泼掉一点代价是能量变成热量散掉。主动均衡效率高可以把多余能量灌到低压侧但电路复杂、成本高对两串小容量备电系统来说被动均衡的发热完全可控稳定性反而最好。所以在这套方案里我选择“MP2642GR-Z采样与驱动 外部均衡电阻耗散”的被动均衡拓扑。2.2 参考电路两个电芯、均衡电阻与MOS的接法以2S磷酸铁锂为例每节电芯工作范围在2.5V到3.65V之间串联后最高约8.4V。主回路连接顺序是BAT接到CELL2CELL2-与CELL1相连CELL1-接BAT-。均衡支路则是在每节电芯两端并联一组“均衡电阻低边MOS管”由MP2642GR-Z的均衡控制引脚去驱动MOS。我在第一版板子上的参数如下表所示。这些值不是随手拍的每一项都跟系统容量和热预算相关。器件参数用途备注均衡电阻 Rbal3.3Ω / 5W限制放电电流见下方电流计算放电MOS管低压低导通电阻SOT-23受控开关栅极下拉10k确保关闭采样滤波电容100nF / X7R抑制采样尖峰靠近AFE采样引脚SPI串阻22Ω抑制反射靠近MCU发送端放置电源TVS反向截止约9V保护AFE供电防止母线尖峰损坏前端均衡电流按照电芯最高工作电压3.65V算3.65V除以3.3Ω约等于1.1A。对20Ah电芯来说这个数值接近0.05C既不会让电芯端电压塌陷太多又能在一个浮充周期内把几十毫伏的压差拉回来。电阻功率按I²R算1.1A的平方乘3.3Ω约4W所以我选了5W线绕电阻并且把电阻安装在板边尽量远离电芯温度采样点。2.3 PIC24HJ256GP610的资源分配与逻辑电平匹配PIC24HJ256GP610在这块板子上的任务主要是三个读MP2642GR-Z的寄存器、维护均衡状态机、上报状态。资源分配我这样安排SPI1作为主接口连接AFE两个普通GPIO分别做片选和复位控制RB4和RB5控制两路均衡指示灯UART1接调试口和上位机OC1模块产出PWM用来对均衡MOS做软启动。这里有个容易被忽略的点MP2642GR-Z的逻辑电源和PIC24HJ256GP610的I/O电源都是3.3V所以电平直连没有问题不需要再加电平转换。真正需要花心思的是地。电芯采样输入的地、AFE的模拟地、PIC24HJ的数字地要在PCB上单点汇合。我第一次画板时数字地和模拟地靠一根细走线连接结果均衡电流一波动SPI读回来的数据偶发乱码后来改成星型接地才稳定。另外MP2642GR-Z的电芯采样引脚是高压域走线到主回路必须保证足够的爬电距离。两串电芯最高不到10V危险程度比几十串的储能系统低很多但我也把电芯采样区域的爬电距离留到了4mm以上防止浮充久了PCB受潮导致漏电。3. 均衡控制逻辑不是电压差小就停而是看SOC差3.1 为什么不能只按“电压相等”判断结束这是很多第一次做均衡的人最容易犯的错看到两节电芯电压一样就觉得均衡完了。但端电压相等并不代表荷电状态一致。真实电芯的端电压表达式大概是 V OCV I × R_internal 极化电压。举个例子充电时回路电流是1A两节电芯内阻差20mΩ那么伏特表上就会出现20mV的虚假压差实际上两节电芯的SOC可能是一样的。如果以“在线电压一致”作为均衡结束条件系统就会一直给不需要放电的那节电芯放电浪费能量不说还可能把本来均衡的电芯越搞越偏。所以我的做法是分两种情况如果系统允许尽量用静置电压做判据也就是在电流为零一段时间后再读MP2642GR-Z的电压值这时候极化已经恢复得差不多了电压更接近OCV如果必须在线判断就要加上电流补偿或者干脆在软件里对电压差做滞后和滤波。两串系统规模小不需要做复杂的SOC估算但“用静置回弹值做最终判断”这条原则一定要写进逻辑省很多麻烦。3.2 控制流程与代码骨架采样、迟滞、保护联锁均衡状态机不复杂我把它抽象成三步定时采样、条件判断、执行动作。PIC24HJ256GP610每500ms通过SPI读一次MP2642GR-Z返回的两节电芯电压和温度经过滤波后得到压差再判断是否开启某一侧的均衡MOS。启动阈值我设为20mV关闭阈值设为10mV中间留了10mV迟滞。为什么不用同一个阈值因为均衡一旦打开高压电芯会通过电阻放电端电压会明显下降如果开关阈值相同程序会在均衡和关闭之间来回切换像个振荡器一样停不下来。加一段迟滞之后整个系统就稳定多了。下面是一个极简骨架实际项目里还需要加故障标志、看门狗和EEPPROM存储但核心逻辑就是这几行。#define BAL_ON_LIMIT 20 #define BAL_OFF_LIMIT 10 void balancer_service(void) { uint16_t vcell1 read_cell_voltage(0); uint16_t vcell2 read_cell_voltage(1); int16_t diff (int16_t)vcell2 - (int16_t)vcell1; if (diff BAL_ON_LIMIT) /* CELL2明显偏高 */ bal_enable(2); else if (diff -BAL_ON_LIMIT) /* CELL1明显偏高 */ bal_enable(1); else bal_disable(); }只要保证MP2642GR-Z返回的电压值是经过正确滤波的这套逻辑就能稳定跑。但要注意绝对不能省略保护联锁。我实际使用的版本里至少包含四个硬件条件电芯电压必须处于2.5V到3.65V窗口内、温度低于45℃、充电电流没有超过设定值、AFE没有上报过压欠压故障。任一条件不满足均衡立刻关闭故障状态置位。3.3 均衡窗口充电末段和静置阶段分开策略备用电源系统绝大多数时间处于浮充状态这也决定了均衡不能“猛干”而是要细水长流。我把均衡窗口分成两段。充电末段是黄金窗口。浮充电流很小高压那节电芯很容易被顶到上限此时开启对应支路的放电MOS相当于给高压电芯“泄压”让低压电芯还能继续接收充电电流。我在这个阶段把均衡电流控制在0.5A左右避免放电电阻发热影响到旁边的低压电芯。静置阶段做静态均衡。系统没有充放电电流时电压恢复接近OCV判断最准。这时候目标可以设得更严格比如压差10mV以内关闭。这个阶段不需要太大电流细水长流慢慢拉平就行。我的经验是每次静置均衡最多跑30分钟然后强制休息一段时间防止均衡电阻的热量积累到电芯温度采样点附近。放电期间我一般不开均衡。一方面放电时端电压受内阻影响大判断不可靠另一方面在储能备电场景里放电往往意味着正在带负载没必要把宝贵的电量当成热量耗散掉。4. 实测复盘数据、三个坑和不能省的硬件保护4.1 一个完整均衡周期的数据表现这块板子调试稳定后我拿一对存放了两个月的20Ah磷酸铁锂电芯做了均衡测试。上电静置24小时后CELL1电压3.612VCELL2电压3.587V压差25mV超过启动阈值程序开启CELL1侧的均衡支路。下面是那一次测试记录下来的数据节选。时间点CELL1电压CELL2电压压差均衡状态0h3.612V3.587V25mVCELL1放电2h3.601V3.590V11mVCELL1放电4h3.597V3.593V4mV关闭6h3.595V3.594V1mV保持从数据能看出一个特点均衡期间高压电芯的电压一直在缓慢下降低压电芯几乎不动所以压差在收窄。4小时后压差掉到4mV低于关闭阈值程序关闭均衡。此时整组并没有充满均衡只是让两节电芯的电量“切线”拉平了后续再靠充电回路把整组带上去。这一点很多刚接触均衡的人会误解以为均衡结束后两节电芯都应该在同一个高电压其实被动均衡只降不升。另一个值得注意的点是4到6小时间压差没有反弹说明最初的25mV压差主要来自静置自放电差异不是内阻伪差。如果关闭均衡后压差快速弹回那就要检查是不是采样点接到均衡电阻后面、在线电压判断被误导了。4.2 坑一均衡期间采到的电压偏低导致均衡反复启停第一次联调时发现一个奇怪现象开启均衡后下一次采样显示CELL1电压猛降压差瞬间从25mV变成18mV再变成8mV于是程序关闭均衡关掉后CELL1电压又慢慢回升压差又超过20mV均衡再次打开。整个波形像锯齿一样永远消不掉。当时我先怀疑软件滤波没写好加了滑窗滤波还是不行。后来用示波器直接量MP2642GR-Z的采样输入引脚才明白问题出在硬件时序上均衡MOS导通的瞬间大电流流过均衡电阻和采样路径上的公共阻抗采样点被拉低等读取电压的时候电压已经不是真实OCV了。解决办法很简单采样和均衡分时。每次读电压前先关断均衡30ms到50ms让电芯电压恢复一下然后再采样采样完再重新打开均衡。这套“先断开、后采样、再恢复”的时序写进状态机后锯齿波形就消失了。如果你的AFE内部集成了同步采样也可能不需要这么麻烦但无论如何都不应该在均衡导通的同时读取作为均衡判据的电压值。4.3 坑二低温下均衡MOS关不断电压缓慢下掉低温试验时又踩了一个坑。把板子和电芯放进-20℃环境箱跑均衡停止之后电流钳显示均衡电流还有大约50mA的漏流CELL1电压在“均衡结束”后仍在缓慢下降。第一感觉是MOS坏了换了几颗还是这样说明不是单个器件问题。用示波器看栅极波形发现PIC24HJ输出关断电平只有0.2V左右但这时MOS的栅源极电压还悬在阈值边缘并没有被真正夹断。我选的MOS是普通逻辑电平高边P-MOS开启阈值大概在2.5V低温下阈值漂移后栅极必须被拉到更低的电位才能保证彻底关断。解决办法是两处一是把MOS换成低阈值、带明确关断规格的型号确保1.8V以下可靠夹断二是在栅源之间加一个10k下拉电阻同时软件里每周期固定把均衡使能引脚输出锁存为低电平而不是只靠往AFE寄存器里写一次配置。从那以后不止低温在电源上电瞬间MOS误开的问题也一并解决了。4.4 坑三备用电源切换瞬间SPI通信读到0xFF备用电源最核心的动作是市电断电后自动切到电池输出可偏偏就在切换瞬间PIC24HJ的SPI读到了一大串0xFF均衡策略直接误动作保护中断也被触发。这个坑最隐蔽因为平时测试通信完全正常只有大电流切换时才复现。排查过程我分三步走。第一步怀疑SPI线路太长但缩短距离后问题依旧第二步拿示波器看切换瞬间发现MP2642GR-Z的供电引脚出现了明显跌落SPI的SCK和MOSI波形边缘带着振铃第三步确认了根因AFE的电源和主功率回路共用了较长的PCB走线切换时直流母线大电容充电地平面被顶起来AFE瞬间复位。修复方案是硬件和软件一起上。硬件上AFE电源入口加RC滤波和一颗TVSSPI三根线串联22Ω电阻靠近接收端数字地和功率地做单点汇合。软件上SPI每次读取连续读三遍两次结果一致才采用否则丢弃这一帧。加了这层冗余之后我再用电子负载反复模拟切换通信错误率降到了零。4.5 两个不能省的安全设计均衡板再小也不能省安全设计。我在这块板子上保留了至少两处“独立于MCU”的保护。第一是AFE的过压欠压保护必须直连主回路功率开关不经过MCU。PIC24HJ虽然有硬件看门狗但固件跑飞后恢复需要时间而磷酸铁锂过充到危险电压可能就在十几秒内发生。MP2642GR-Z这类前端芯片内部有比较器可以直接把故障信号送到功率链路这才是最后一道防线。第二是均衡电阻的温度监测。1A左右均衡电流通过3.3Ω电阻时功耗接近4W电阻外壳温度可以轻松超过80℃。如果板子密封在电池柜里热量还可能传导到NTC温度采样点让系统误判电池过热。我在均衡电阻旁边加了一颗热敏电阻温度超过90℃就自动降占空比降到30%还压不住就直接关闭均衡并上报。这个小设计后来确实救了一次长时间满载均衡的现场。最后说一个我吃了亏才记住的习惯均衡结束后不要立刻让PIC24HJ256GP610进入休眠。程序里保留20分钟静置窗口回读两节电芯电压并写入EEPROM。很多均衡板看起来“已经完成”其实只是电压瞬间一致回弹后差值又回来了。把这20分钟的数据存下来作为下一次均衡周期起始判断的参考比盲目定时执行可靠得多。这套MP2642GR-Z加PIC24HJ256GP610的两串方案后来也做了几次改版如果你做的是更大容量的备电柜只要把每片前端芯片的片选、中断和地线梳理清楚两串均衡的思路一样能往更多串联级扩展。希望这篇记录能帮你少走一点弯路。