
这两年跟储能和备用电源打交道我越来越觉得“串联电池单元均衡”不是大容量系统才需要操心的。这次项目里我们做了一台DC-UPS样机电池组是两串磷酸铁锂设计目标是在市电掉电后给负载供电同时交流恢复后还能让两个电芯始终工作在相近的荷电状态。方案核心就用了一片 MP2642GR-Z 作为能量转移功率级配合一颗 PIC32MX460F512L 做单体电压采样、均衡策略和故障保护。整块小板大约是6厘米见方功能却比很多“大BMS”还直白。这篇文章不说理论空话就把我们从选型、画板到联调踩坑的过程完整记录下来给同样在做储能和备用电源均衡设计的同行参考。1. 为什么两个串联单元也要动“均衡”的念头1.1 2S系统里的“木桶效应”怎么被放大的两个电池串联时回路里的充放电电流完全一样但每个单元自己的容量、内阻、自放电率不可能一模一样。哪怕出厂分选过用了半年以后两个单元的荷电状态也会慢慢拉开。这个现象很像木桶效应串联电池组的可用容量由最差的那一个单体决定而不是平均值。在2S系统里这个差距往往被大家低估。很多人觉得两串电池嘛容量差不多内阻差不多直接串上去用就行。实际上储能和备用电源通常会长时间浮充两个电芯的自放电差异在浮充阶段会被持续放大。一个电芯自放电快端电压偏低另一个电芯自放电慢端电压偏高均衡器又没介入时间久了偏高的那个电芯一直处于过充边缘偏低的那个又可能被过放。等到真正掉电需要备用电源顶上去时整组电池的供电时间已经悄悄缩水了。我们项目里第一次发现这个问题是拿两节全新的磷酸铁锂电芯做了循环测试。前50次循环电压差基本在10mV以内到了第120次左右静置末端电压差已经冲到35mV以上放电末端更是差了接近0.2V。如果不做均衡这个趋势会随着循环继续恶化。所以别觉得2串电池“简单”恰恰因为简单采样点少很多人反而不愿意专门为均衡花钱最后出问题的概率反而更高。1.2 先判断问题性质容量失配、内阻差还是自放电差动手做均衡之前一定要先回答一个问题两个单元之间的差异到底是什么原因造成的。不同原因对应的均衡策略完全不同盲目把电压拉到一样有时候反而会害了电池。我们当时的排查方法是先用PIC32MX460F512L的ADC把两个单体电压、总电压、充放电电流全部采回来然后观察几个特征容量失配充电末端和放电末端电压差明显变大中间平台阶段反而接近。内阻差负载电流突变瞬间两节电压跳变幅度不同电流为零时电压差迅速回落。自放电差静置阶段电压差缓慢增大而且没有电流流过时也一样增大。这三种情况里MP2642GR-Z这种能量转移式的均衡器对容量失配和自放电差都有效因为它本质上是把高电压单元的电荷搬到低电压单元能同时改善两个单元的荷电状态偏差。但如果是内阻差造成的均衡只能暂时糊住电压读数真正要做的是换掉内阻异常的那节电芯或者至少提高内阻报警阈值。我们在样机上把这三个判断做成了启动前的预检流程只有确认是荷电状态偏差而不是内阻异常均衡器才允许开机。1.3 从电阻耗散到能量转移为什么最后选了 MP2642GR-Z最初我们的方案其实是被动均衡简单说就是给每节电池并联一个开关电阻电压高的那节会被电阻放掉一点电强行拉低电压。这种方案便宜、控制逻辑简单很多电摩保护板都在用。但放到储能和备用电源里有几个问题很难接受第一被动均衡把能量白白变成热量电池仓往往是密闭的散热条件很差第二2S系统里两节电池经常是紧贴着放电阻均衡工作时局部温升很快我们实测10Ω均衡电阻在0.3A均衡电流下表面温度能到70℃以上看着就不放心第三被动均衡只能放电不能给低电压单元补电本质上是“削高”而不是“填谷”。所以后来我们转向了能量转移式主动均衡。选型时看了几种方案有电感式的有电容式的也有基于DC-DC模块的。电感式在2S相邻单元场景下最合适因为只需一个电感和两个开关管电流可控效率也够。MP2642GR-Z吸引我们的点是它把驱动、控制和保护集成在了一起外围用两个MOSFET加一颗功率电感就能构成双向Buck-Boost功率级PIC32MX460F512L只需要给出使能和PWM/控制信号不用去管高频环路的细节。这里给个对比被动均衡和MP2642GR-Z主动均衡在同一个2S备用电源项目里的差异项目电阻被动均衡MP2642GR-Z主动均衡均衡方向只能高电压单元放电高电压单元向低电压单元转移能量均衡电流由电阻阻值和压差决定通常0.1~0.5A可编程设定我们设为0.8A热量全部转化为热局部发热严重功率级发热效率约80%~87%对容量利用不能补低单元组端容量改善有限两单元SOC趋向一致组端容量提升明显控制复杂度一个GPIO就能控制需要采样、策略、状态机配合故障保护基本靠电阻限流过流、过温、断线都可纳入MCU管理当然主动均衡不是没有代价。代码复杂度上来了PCB布局也要更小心成本也比一颗电阻高不少。但对储能和备用电源来说可靠性优先级远高于那几块钱所以我们最终敲定了MP2642GR-Z加PIC32MX460F512L这个组合。2. MP2642GR-Z 的功率级是怎样把能量搬来搬去的2.1 均衡拓扑一个电感解决双向搬运问题先说拓扑这是把整个均衡电路看懂的关键。两节电池串联中间有一个节点叫电池中点。我们把高电压单元、低电压单元和电感接成一个半桥拓扑开关管Q1的高端接Cell1正极Q1的低端接Cell2负极兼系统地电感的一端接电池中点另一端接两个开关管的连接点。当Cell1电压偏高时MP2642GR-Z先打开下管Q2让电流从电池中点流过电感、Q2回到Cell2负极这时候电感储存能量然后关断Q2打开上管Q1电感上的电流不能突变会通过Q1续流把能量灌到Cell1等于把Cell2的能量往Cell1搬。反过来当Cell2电压偏高时控制时序颠倒能量就从Cell1往Cell2搬。这其实就是经典的双向Buck-Boost变换器只是输入输出都是电池而已。MP2642GR-Z在里面负责产生带死区保护的PWM信号、检测流过电感的电流、做峰值电流限制我们只要给它配置好开关频率、电流环参数和使能逻辑就行。PIC32MX460F512L不直接参与高频环路它更像一个“决策大脑”决定什么时候搬、搬多少、搬到什么时候停。2.2 一个完整的均衡周期是怎么走通的均衡不是一直不停地搬能量那样效率低还可能在电压差已经很小时造成来回倒腾。我们把整个均衡过程拆成了五个阶段来控制巡检阶段PIC32MX460F512L每500ms采样一次两个单体电压做滑动平均滤波同时读取温度和总电压。判断阶段如果两节电压差绝对值大于30mV并且连续3次巡检都成立才认为确实需要均衡避免瞬时负载或采样噪声误触发。软启动阶段PIC32通过GPIO使能MP2642GR-Z目标均衡电流从0逐步升到0.8A防止大电流突然冲击电感和电容引起电压跌落。稳定均衡阶段MP2642GR-Z按照设定的电流工作PIC32继续监控电压差、温度和电流同时启动一个30分钟的最长均衡定时器。退出阶段电压差降到10mV以下并持续2分钟或者到达超时时间PIC32先让PWM进入续流安全状态再延时几百微秒断开使能信号然后回到巡检阶段。这个流程看起来简单但每个阶段的时序都是实测调出来的。比如退出阶段如果不做“先停PWM再断使能”电感电流还没有衰减就被硬生生切掉会产生很高的反压尖峰对MOSFET和采样电路都是威胁。2.3 电感、开关频率和采样电阻的关键参数主动均衡的参数不是抄别人电路就能复用的因为电芯容量、均衡电流和目标效率都不一样。我们项目里的目标均衡电流是0.8A电池平台电压3.2V~3.6V最后定下来一套参数给你做参考参数取值说明开关频率250kHz兼顾电感体积和MOSFET开关损耗功率电感22uH饱和电流不小于2ADCR约50mΩ均衡电流0.8A综合散热和均衡时间选择电流采样电阻10mΩ开尔文连接避免走线压降影响MOSFET低压大电流N沟道体二极管压降低反向恢复快PWM死区80ns防止上下管直通电感的选型我们做了简单计算。双向Buck-Boost在均衡时如果两节电压接近占空比接近0.5电感电流纹波可以用公式 ΔI V_high × D / (f × L) 估算。代入V_high3.6VD0.5f250kHzL22uH算出来ΔI大约0.33A。平均电流0.8A纹波率约41%在CCM连续导通模式的合理范围内。如果你把开关频率降到100kHz同样纹波率就需要更大的电感否则电流会出现断续效率下降。这里有个刚入行容易忽略的点电感饱和电流一定要留足余量。均衡过程中可能遇到电压差较大、电流环响应来不及的瞬间电感峰值电流可能冲到1.5A以上。我们选2A饱和电流就是为了避免饱和后电感值骤降、电流尖峰失控。实测在最恶劣情况下峰值电流1.6A左右离饱和点还有余量。2.4 效率、发热与PCB布局需要注意的地方MP2642GR-Z这套功率级的实测效率在两节电芯电压相等附近最高大约87%当电压差很小、电感电流断续时效率会掉到80%上下。对于均衡器来说这个效率完全可以接受因为它的工作时间通常有限发热量比电阻均衡小两个量级。但效率数据好看不代表PCB随便画。我们第一版布局踩了一个很典型的坑采样电阻离电感太近而且没有开尔文连接结果均衡电流一到0.8A采样到的电压就带很多尖峰MP2642GR-Z的电流环被干扰均衡电流忽大忽小。后面把采样电阻改成四线制接法两根大电流走线、两根细线专门连到芯片的电流检测引脚问题才解决。另一个布局准则是功率地和控制地要单点相连PIC32MX460F512L的ADC参考地不要直接接到功率电流流过的地铜皮上。我们画板时把MP2642GR-Z、MOSFET、电感这一块放在板子右侧PIC32和采样调理电路放在左侧中间用一个窄铜桥单点连接实测ADC噪声明显改善。功率换流回路尽量短开关节点露铜面积不要太大可以降低电磁辐射和开关振铃。3. PIC32MX460F512L 负责的采样与均衡策略3.1 单体电压采样差分采样与浮地处理两节串联电池里Cell2的负极就是Cell1的正极附近那个节点严格说Cell2相对Cell1负极是“浮地”的不能直接用MCU的ADC单端采样电池组负极做参考。很多小保护板为了省成本用两个大电阻分压后让MCU分别采两节电压但这样测Cell2时共模电压比较高误差很容易到几十甚至上百毫伏。我们用的是差分转单端方案先用一个高输入阻抗的差分放大器把Cell2正极相对Cell1负极的差分电压转成以MCU地也就是Cell2负极为参考的电压信号再做滤波进PIC32MX460F512L的ADC。Cell1的电压相对Cell2负极本来就是正的可以直接用电阻分压加运放跟随录取。这里要给PIC32MX460F512L的ADC输入条件留好余量。它的ADC输入范围是0到VDD超过VDD0.3V就可能损坏引脚。分压电阻的阻值选择要考虑运放偏置电流和输入阻抗我们每路采样都串了1kΩ限流电阻并联100nF电容做低通滤波截止频率大概1.6kHz对电池电压这种缓变信号足够了。如果你不想用运放也可以用高精度电阻分压后直接进ADC但要注意等值电阻的温漂一致性否则温度一变两路采样误差就分开了。3.2 均衡判断策略滞回、阈值与时序均衡策略的核心是“什么时候启动、什么时候停止”。我们最初写了一个最简单的逻辑电压差大于30mV就开均衡小于10mV就关。结果发现系统会在边界附近反复开关均衡器一会儿启动一会儿停止电感和MOSFET热循环很频繁。后来改成滞回控制加连续确认启动条件两节电压差绝对值 30mV并且连续3次巡检都满足。停止条件两节电压差绝对值 10mV并且持续2分钟。超时保护单次均衡最长30分钟时间到就强制暂停冷却5分钟后再重新判断。运行限制只有充电结束后的静置状态、或者小电流负载状态才允许均衡大电流放电或交流掉电应急供电时绝对禁止均衡。为什么大电流放电时禁止均衡因为均衡器搬移的几百毫安电流对应急供电没有帮助反而增加了系统损耗还会让本来就偏低的那节电芯负担更重。备用电源的核心任务是维持负载不是恢复电芯一致性。这个时序取舍我们在联调里吃过亏后面专门加了状态位来屏蔽均衡动作。3.3 主循环状态机的参考代码PIC32MX460F512L端的主循环我们没跑RTOS就一个带状态机的超级循环。参考代码如下typedef enum { BAL_IDLE, BAL_PRECHECK, BAL_RUNNING, BAL_PAUSE, BAL_FAULT } bal_state_t; bal_state_t bal_state BAL_IDLE; void balancer_task(void) { float v1, v2, vdiff; adc_update(); fault_update(); switch (bal_state) { case BAL_IDLE: vdiff get_voltage_diff(); if (vdiff BAL_START_THRESHOLD_MV) { bal_state BAL_PRECHECK; bal_check_count 0; } break; case BAL_PRECHECK: if (get_voltage_diff() BAL_START_THRESHOLD_MV) { bal_check_count; if (bal_check_count 3) { balancer_power_on(); bal_timer 0; bal_state BAL_RUNNING; } } else { bal_state BAL_IDLE; } break; case BAL_RUNNING: bal_timer; if (get_voltage_diff() BAL_STOP_THRESHOLD_MV) { balancer_power_off(); bal_state BAL_IDLE; } else if (bal_timer BAL_MAX_TICKS) { balancer_power_off(); bal_state BAL_PAUSE; } break; case BAL_PAUSE: if (bal_cool_down_timer BAL_COOL_DOWN_TICKS) { bal_state BAL_IDLE; } break; case BAL_FAULT: balancer_power_off(); break; } }这段代码的核心思路是状态转移清晰。特别要注意BAL_FAULT一旦进入就不要再尝试自动恢复必须等人工清除故障或者系统重新上电因为故障往往意味着采样断线、过温或者过流自动恢复反而可能扩大损坏。3.4 过温、断线和过流保护保护功能我们分了两层PIC32MX460F512L做慢保护MP2642GR-Z做快保护。慢保护主要包括过温保护电感旁边放一个NTC热敏电阻PIC32每200ms读一次。温度大于55℃时暂停均衡降到45℃以下才允许重新启动。断线保护同时采集Cell1电压、Cell2电压和总电压做一致性校验。如果Cell1Cell2与总电压偏差超过1V说明采样线松了或者接插件接触不良立刻切断均衡并上报故障。低压保护任何一个单元电压低于2.5V或高于3.65V都不允许均衡。尤其是磷酸铁锂在2.5V以下时继续搬移能量风险很大。MP2642GR-Z负责的快速保护则是通过电流采样电阻的电压和片内比较器实现硬件过流关断。我们设定1.5A阈值正常0.8A均衡电流下不会误触发一旦电感饱和或MOSFET异常芯片能在一个开关周期内关断PWM这比PIC32中断响应快得多。做储能系统软硬件保护的边界一定要分清楚软件负责“判断该不该动”硬件负责“出事时先兜底”。4. 联调现场我们踩过的大坑4.1 “假失衡”参考地偏移让两节电压读数总差30mV第一版样机焊好后屏幕上显示Cell1电压3.32V、Cell2电压3.69V差了差不多0.37V我一度以为电池到货就是坏的。结果万用表直接量电池两端两节都是3.5V左右。问题出在采样参考地上。我们的Cell2采样电路是以Cell2负极为参考的但Cell2负极同时也是均衡功率级的功率地。均衡器没启动时采样还正常一旦启动功率地铜皮上有脉冲电流流过会在地线上产生几十mV的瞬态电压这个电压叠加到低电压采样信号上PIC32读到的就是被污染的数值。后来我们做了两个改动一个是把功率地和控制地严格分开单点连接另一个是ADC采样前先等均衡PWM一个完整周期结束让LC滤波网络把反向尖峰消化掉。改完以后开机显示和万用表误差缩小到了2mV以内。4.2 均衡开启后ADC噪声变大电压跳变第二个坑是均衡器真正工作以后PIC32的ADC读数出现规律性跳动。用示波器看开关节点振铃频率大概在几十兆赫兹采样线一靠近功率电感噪声就被耦合进来读数能跳50mV。这种跳动特别坑人因为它会把“电压差30mV”的启动条件反复触发均衡器变成打嗝模式。处理办法有三个我们全部用上了第一采样线远离开关节点和电感走线尽量贴地平面第二PIC32的模拟输入串入1kΩ电阻和100nF电容组成RC低通第三在代码里对ADC采样结果做滑动平均连续采32次去掉最大最小值再取平均。这里要注意的是RC滤波和软件平均都会引入延迟如果你是做高速过压保护不能依赖这套滤波但电池电压本身变化很慢滤波后完全够用。4.3 低压差下电流倒灌MOSFET体二极管造成的问题实验做到第三天我们发现一个比较隐蔽的现象当两节电池压差已经小于10mV、均衡器本该停止的时候万用表测电感电流还有微小流动方向还是从原本的低压单元往高压单元流。说白了就是停没停干净。原因在关断时序。MP2642GR-Z收到使能信号拉低后PWM会停止但电感和MOSFET的体二极管还会形成续流通路。如果此时立刻断开使能体二极管上的压差会把剩余能量从低压侧推到高压侧。虽然电流不大但长期看会抵消均衡效果特别是在静置电压差已经很小时会造成两个单元电压在小范围内来回晃。我们最后在退出流程里加了一个“放电关断”步骤先让MP2642GR-Z切换到同步整流模式把电感里残余的能量主动释放掉再等300us最后才切断使能。这样改完关断后的残余电流基本测不到了。这个细节光看芯片手册不容易发现联调时用示波器电流探头抓一下很容易看到反向电流尖峰。4.4 看门狗复位与主循环卡死还有一个印象很深的坑系统跑了几小时后会无缘无故复位。查了很久最后发现是PIC32在ADS采样等待完成的期间主循环里喂狗的地方被挡住了。具体来说ADC采样我用了阻塞式等待一次转换最长要几十微秒但某些异常情况下触发条件没满足程序卡在等待循环里看门狗先超时复位了。解决方法是重新梳理喂狗策略看门狗周期设置成主循环最坏执行时间的2倍以上喂狗点放在主循环开头长时间等待操作全部改成带超时计数的轮询。从那以后复位现象再也没出现过。很多做软件的人容易忽略硬件看门狗和ADC时序之间的冲突这种问题在实验室里可能要跑几十个小时才暴露一次量产后却是致命的偶发故障。5. 长期循环数据和量产取舍5.1 200次循环后的均衡效果对比样机稳定以后我们做了两组对比测试一组带均衡一组不带均衡。电芯都用同一批分选过的磷酸铁锂初始容量差约120mAh充放电制度完全一致环境温度25℃左右。200次循环后不带均衡的那组两节电芯的静置电压差最大到了0.35V放到截止电压时放电容量比带均衡组少大约8%。带均衡的那组整个测试过程中电压差始终控制在20mV以内多数时间在10mV以下放电容量曲线非常平滑。这个数据说明对2S系统来说主动均衡确实能延缓容量失配的恶化速度。循环次数不带均衡组电压差带均衡组电压差不带均衡组放电容量带均衡组放电容量05mV5mV4.20Ah4.20Ah5018mV8mV4.10Ah4.15Ah10035mV12mV3.98Ah4.10Ah150100mV15mV3.82Ah4.06Ah200350mV18mV3.61Ah3.95Ah当然这个结果是在电芯本身健康、均衡策略合理的前提下得到的。如果你拿一组内阻差很大的电芯来做均衡效果会差很多这一点前面已经强调过。5.2 从样机到交板成本、占板面积、一致性从样机到可以交给产线的阶段我们重新梳理了一遍BOM和制板要求。MP2642GR-Z方案整体成本确实比被动均衡高但多出来的部分换来的是可控的均衡电流、低发热和更长的系统寿命。在备用电源这种需要长期无人值守的场景里这个成本划算。占板面积方面均衡功率级加上PIC32采样控制一共约2cm×2cm整板总器件数量控制在25个以内。对2S系统来说这个体积完全能塞进电池仓或者电源模块的预留空间。唯一要注意的是电感的一致性。量产后如果换了一家电感供应商饱和电流和DCR可能都有差异建议在试产阶段就锁定规格书里的关键参数并且来料做随机抽测。产线反馈最大的问题反而是测试工位不够快。均衡电路本身没有太多可调点但每一块板都要做一次“模拟电压差均衡”测试检查PIC32的阈值判断和MP2642GR-Z的电流响应。我们在测试治具里加了一个可编程电压源能快速在Cell1和Cell2之间切换压差整板测试时间压到了20秒以内。5.3 下一步可能扩展的方向这套方案如果将来要做更多串联节数MP2642GR-Z这种相邻单元电感均衡结构需要适当调整。4串系统至少需要三个均衡器或者改成多绕组变压器方案。PIC32MX460F512L的ADC通道数和GPIO足够算法上只要把“两节电压差”换成“相邻单元电压差数组”就能复用。也可以增加CAN或者I2C上报均衡状态方便后台监控。最后说一点个人体会。均衡不是把两节电池电压强行拉到一样就完了真正可靠的做法是让均衡器只在系统允许的时候工作、在故障出现之前安全退出。MP2642GR-Z和PIC32MX460F512L这个组合把功率级和控制层分得很清楚调试起来也容易定位问题。这个项目做完我最大的感受是两串电池的均衡没有想象中那么难但也没有想象中那么可以随便对付。所有细节都是从一次次示波器波形里逼出来的把这些记录下来希望后来人能少走点弯路。