
大家做储能或者备用电源最容易忽略的往往不是那些大的功能模块而是电池本身的细节处理。这篇文章想聊一个看起来很“小”、实际上很要命的问题两个串联电池单元的均衡。我调试过的某便携储能样机、某通信备电模块都用过一套组合方案——主控用 STM32F302VC均衡功率链路用 MP2642GR-Z专门解决双节串联锂电池组在长期使用中电压发散的问题。为什么说它要命因为两串电池系统一旦单体电压跑偏过充过放、容量衰减、甚至安全风险都会接踵而来。尤其是磷酸铁锂这种放电平台特别平坦的电池单纯靠电压判断SOC本来就不准如果连均衡都不做系统到后期基本是“一个电芯扛全队”。这套方案适合谁做中小容量储能BMS的硬件/固件工程师或者想给自家双节锂电产品补上均衡功能的开发者。看完你至少能知道均衡电路为什么这么搭、软件策略怎么设计才不出幺蛾子、现场调试会踩哪些坑。1. 方案概览两串电池到底为什么越用越不平衡1.1 不一致性来源不是玄学很多人有个误区觉得新电芯出厂配好了装在一起就没事了。实际上两节电芯的差异从一开始就存在只是被系统的“容量余量”掩盖了。首先电芯出厂容量本身就有离散度。同一批次标称10Ah的电芯实测容量可能分别是10.05Ah和9.95Ah差值0.3%以内还算好但循环几百次之后这个差异会被放大。其次自放电率不同。长期静置时自放电流大的那节电芯电压天然偏低而且这个差异会持续累积。再有就是温度不均匀比如两节电芯一节靠近散热风道一节挨着功率电感温度差个两三度内阻和老化速度都不一样。用数据说话假设两节电芯初始容量差0.3%充放电电流相同的情况下每轮循环的SOC差会累积约0.3%。如果不做任何均衡循环500次后潜在的SOC偏差能到5%以上。5%对于10Ah电池来说就是0.5Ah的电荷量差异反映到电压上可能就是几十毫伏甚至上百毫伏。这些差异在抽屉里放着不会自己消失它们只会在充电末端和放电末端集中爆发。所以在2S系统里做均衡不是“锦上添花”而是“救命稻草”。1.2 不平衡的后果与安全风险两串电池组是“木桶效应”的典型场景。充电时电压高的那节先顶到保护电压BMS必须停充另外一节却还没充满系统永远充不满放电时反过来电压低的那节先跌到欠压值BMS断电保护另外一节的能量全剩在电池里。整体容量始终由最弱的那节电芯决定。更麻烦的是安全风险。长期过充会让正极结构发生变化析锂风险上升长期过放会让负极集流体溶解内阻升高然后进入恶性循环——内阻越高的电芯充放电压降越大SOC偏差被进一步放大。我在某个备电项目里就遇到过这样的情况两节磷酸铁锂串联由于长时间浮充加上环境温度偏高其中一节电压被顶到3.65V以上另一节只有3.35V整组电池保护后直接无法正常备电。换掉电芯后发现真正的根因不是电芯坏了而是系统根本没有均衡机制电压发散后把电芯“用”坏了。这就是我们常说的“电芯死于不均衡”。1.3 为什么用“MCU专用均衡芯片”而不是全分立早些年确实有人用全分立方案做两串均衡两个MOS、几个电阻、一颗比较器硬搭一个耗散型均衡电路。优点是便宜缺点是精度差、一致性差、调试痛苦。手动电位器校准这种操作在实验室里还能忍到了生产线上完全不可复制。所以现在主流做法是“MCU专用均衡芯片”的组合。MP2642GR-Z这类均衡控制芯片把功率开关、电流反馈、保护逻辑这些核心电路集成在内部外围只需要搭功率电感、采样电阻和少量被动元件就能构成一个可控的能量转移通道。而STM32F302VC这类带丰富模拟外设的MCU则负责电压采样、策略判断、保护逻辑和人机交互。选STM32F302VC还有一个很现实的原因它内部带运算放大器。做双节电池电压采样如果用普通MCU你得在外部加仪表放大器或者差分放大器成本高还占面积。F302内置运放加12位ADC刚好够用。而且它内核是Cortex-M4带FPU后期算滤波、算SOC虽然用不上太多算力但写代码的手感比M0好太多。2. 均衡原理与核心指标2.1 被动均衡与主动均衡的取舍均衡分两大类被动均衡和主动均衡。被动均衡的原理最简单高电压单体通过并联电阻放电把多余能量以热量形式损耗掉。优点是电路简单、成本低、好调试缺点是效率低能量白白浪费而且均衡电流一大PCB和电池本体都得承受额外温升。在小容量两串系统里被动均衡勉强能用但一旦均衡电流超过100mA散热问题就很头疼。主动均衡则讲究“能量搬运”。把高电压单体的一部分能量通过开关变换器转移到低电压单体而不是烧掉。效率高、发热小但电路复杂度明显提高需要开关管、电感、控制逻辑成本也上去了。储能和备电场景对效率是敏感的。备电系统通常长期处于浮充状态被动均衡意味着均衡电阻长期耗电功耗可观储能系统则希望每一次充放电循环的能量都能被利用。所以只要预算允许两串系统的主动均衡是更合理的选择。MP2642GR-Z的定位就是解决这个需求它把“搬运”这个动作的功率级做成专用电路MCU只需要指挥它干活就行。2.2 MP2642GR-Z 在双串联系统中的工作方式从应用角度看MP2642GR-Z在双节串联电池组里的角色就像是一个受控的双向电荷泵或者升降压变换器核心。它负责把高电压电池的能量先抽出来储存在功率电感中再切换到低电压电池侧释放从而完成一次“抄家式”的能量搬运。具体怎么搬运并不需要开发者完全关心芯片内部拓扑重点在于应用层如何组织“检测、判定、搬、停”这套动作。MP2642GR-Z通常提供使能控制和状态反馈STM32F302VC通过这些引脚量控制均衡的开启和关闭同时根据ADC采样结果决定当前应该往哪个方向搬、搬多久。外围设计上功率电感是核心元件。电感值决定开关纹波和峰值电流饱和电流则必须留足余量。采样电阻负责提供电流反馈阻值和温漂直接影响均衡电流的一致性。芯片的电源去耦、滤波电容、保护电阻也要严格按照规格书来因为均衡芯片对电源纹波比较敏感我后面会专门说。2.3 均衡电流、效率和电压窗口怎么算做主动均衡首先要定均衡电流。假设我的系统是两节10Ah磷酸铁锂串联均衡电流选0.5A。这不是拍脑袋定的而是综合了发热、搬运时间和PCB面积。能量搬运不是无损的。MP2642GR-Z这类芯片升降压效率大概在85%到92%之间。按90%算从高电压侧抽取0.5A低电压侧实际能得到的电流大约是0.45A差额大约0.05A折算成热损耗在0.5A工况下发热量大概0.5到1W。这个热量需要PCB铺铜和散热设计来带走如果均衡电流改成1A损耗翻倍很多小板子就吃不消了。压差阈值怎么设被动均衡一般20mV就启动因为电阻耗散没什么代价无非多烧点电。主动均衡不一样每启动一次开关切换、电感储能、控制逻辑都会有一次瞬态损耗频繁启停不划算。所以我实际用的策略是压差超过30mV启动回差降到10mV停止中间再加一个延时去抖防止临界点反复切换。搬运时间估算也有公式。假设高低单体SOC差1%对应电荷量就是0.1Ah。净搬运速率是0.45A那么理论上搬平需要13分钟左右。实际中因为压差越接近均衡后期差异越小需要的总时间会更长而且等静置后重新测压差极化电压消失电压读数还会变。所以均衡从来不是一个“搬一次就结束”的动作策略要持续监测、持续修正。3. 硬件设计的关键细节3.1 单体电压采样精度会决定均衡质量均衡的本质是跟电压较真所以采样精度是整套系统的地基。如果采样电路在几十毫伏级别发飘那后面所有均衡逻辑都是空中楼阁。两串系统里一节电芯的负端在系统参考地上另一节电芯的负极则挂在中间电位上直接把电池端电压接入MCU的ADC会超过输入共模范围。我见过很多入门者直接拿电阻分压后接ADC结果大电流时采样值疯狂跳变。正确的做法是使用差分或者伪差分结构把两个单体的电压分别调理到以MCU地为准的0到3.3V范围内。STM32F302VC内部的运算放大器在这里就能派上用场。用内置OPAMP构成差分放大电路配合外部精密电阻分压网络把单体电压映射到ADC量程内。F302的内置运放不是仪表放大器输入端共模范围有限所以分压比要算好让运放输入始终处于安全范围。还有一个老生常谈但很容易踩的坑增益和失调的校准。电阻总有误差运放总有失调电压12位ADC本身也不是绝对线性。如果不做校准两个通道的增益差个0.1%读出来的压差可能就是几毫伏到十几毫伏的假误差。解决办法是出厂前用精密电压源做两点校准把每个通道的增益系数和失调存到EEPROM或Flash里每次上电自动修正。这个步骤在实验室里看似麻烦但量产时没有它均衡精度根本没法保证。3.2 采样滤波与噪声抑制采样电路必须加一阶RC滤波。电池端电压本身是缓慢变化量但系统里开关电源、均衡开关切换、负载突变都会带来高频干扰。RC截止频率我习惯设在1kHz左右既能滤掉开关纹波又不至于让电压响应慢到跟不上策略节奏。电容值选100nF级别电阻选几kΩ具体数值按芯片的ADC采样时间要求来。滤波还有第二层就是软件滤波。硬件RC只能滤高频低频噪声和工频干扰要靠软件。常用的是滑动平均加中值滤波窗口长度取16个点。F302的12位ADC对单体电压的原始分辨率大约1.1mV以4.5V满量程算过采样四倍等效分辨率能提高到0.3mV以下对均衡判断来说足够了。这里有个实际体会均衡开启的瞬间芯片内部开关切换会产生近场噪声如果采样正好卡在这个时点ADC读出的电压可能跳变几百毫伏。解决思路是错开时间采样——均衡开关动作后等待至少100微秒再启动ADC转换同时软件里丢到采样序列前几个异常值。这个时序上的“躲”比任何增加滤波电容都有效。3.3 关键元器件与PCB布局功率电感的选择第一看饱和电流第二看直流电阻。饱和电流至少要留到均衡电流的1.5倍以上比如0.5A均衡电流电感饱和电流不能低于0.75A我实际会选1A以上的留足裕量应对瞬态过流。DCR当然越小越好DCR越大同样的均衡电流下热损耗就越大。采样电阻必须是低温漂合金电阻最好用4端子连接避免焊盘铜箔参与感阻。别小看这个细节一度我在某个项目里发现采样出来的均衡电流比设定值偏小10%查到最后是采样电阻焊盘太宽PCB铜箔电阻跟采样电阻并联了相当于把采样电阻值拉低了几毫欧导致反馈失真。布局方面功率回路要短粗MP2642GR-Z、功率电感、采样电阻、电池端子的环路面积要尽量小大面积铺铜走功率路径。模拟采样部分要远离功率电感避免磁耦合干扰。供电去耦上芯片的电源引脚建议磁珠加22uF陶瓷电容的组合这个不是拍脑袋均衡芯片内部有比较器对电源轨上的尖刺非常敏感去耦不到位会出现均衡误触发或者电流失控。还有一个非常容易被忽略的热设计点。主动均衡虽然效率高但0.5A持续工作下芯片加电感加采样电阻的整体耗散功率在0.5到1W。这些热量如果集中在某个区域会对电池温度采样造成干扰。NTC测温点绝对不能放在均衡功率器件旁边否则测出来的“电池温度”会虚高触发误保护。4. 软件控制逻辑与工程实现4.1 均衡状态机设计软件层面均衡控制的第一步是搭状态机。我的习惯是分成四个状态空闲、测量、均衡中、等待迟滞。空闲状态下系统只做周期性电压巡检不启动任何均衡动作。测量状态下软件对两个单体电压做滤波和校准计算压差。当压差大于启动阈值时进入均衡状态芯片使能打开开始搬运能量。搬运过程中持续监测两侧电压当压差小于停止阈值时进入等待迟滞状态此时均衡已经关闭但是系统保持一定时间的观察确认压差确实稳定再回到空闲状态。这个“等待迟滞”很关键没有它均衡会在阈值边界反复启停芯片开关管的应力加大系统也显得很不稳定。我用的参数是启动阈值30mV停止阈值10mV迟滞观察时间30秒。伪代码大概长这样typedef enum { EQ_IDLE, EQ_MEASURE, EQ_BALANCING, EQ_HYSTERESIS } EQ_State; void eq_task(void) { switch (state) { case EQ_IDLE: if (system_ready voltage_delta EQ_START_THRESHOLD) { state EQ_MEASURE; } break; case EQ_MEASURE: cell[0] get_filtered_voltage(0); cell[1] get_filtered_voltage(1); delta (cell[0] cell[1]) ? (cell[0] - cell[1]) : (cell[1] - cell[0]); if (delta EQ_START_THRESHOLD) { eq_direction (cell[0] cell[1]) ? DIR_0_TO_1 : DIR_1_TO_0; enable_balancer(eq_direction); state EQ_BALANCING; } else { state EQ_IDLE; } break; case EQ_BALANCING: if (delta EQ_STOP_THRESHOLD) { disable_balancer(); delay_start HAL_GetTick(); state EQ_HYSTERESIS; } break; case EQ_HYSTERESIS: if (HAL_GetTick() - delay_start 30000) { state EQ_IDLE; } break; } }实际工程里还会加入均衡超时保护单次连续均衡最多30分钟超过就强制关闭让系统散热。这个参数可以做成可配置项根据电池容量和环境温度动态调整。4.2 电压滤波与校准实现滤波这块刚才在硬件章节提到了一部分软件里我建议做两级处理第一级滑动平均窗口长度16点用于滤除随机噪声第二级是中值滤波窗口长度5点用于剔除偶发的离群值。两级配合使用算出的单体电压偏差可以稳定在几个毫伏以内。校准是另一个关键点。每次上电我对两个采样通道做一次软件校零先关闭均衡短接采样输入或者读一次已知的参考电压算出失调。增益标定则通过开机时读取一个精密分压网络产生的参考电压来完成。这两个系数都存到非易失区后续每次采样都做一次线性修正。有一个细节F302的ADC在低温下的偏置漂移比较明显如果设备要在户外低温环境运行建议在温度变化超过10度后重新做一次通道校准。否则低温下采样误差可能会涨到二三十毫伏均衡策略就会误判。4.3 保护逻辑与通信设计均衡系统不是独立工作的它必须跟充放电管理、温度保护、通信互联集成在一起。我的保护逻辑包括过压保护、欠压保护、过温保护、均衡超时保护。过压保护优先级最高。只要任意单体电压超过过压阈值均衡必须立即停止因为你再搬运电荷可能把高压侧继续顶上更高的电位。欠压保护同理低电压侧如果已经接近欠压不能再从这个方向抽出能量。温度保护不能只看平均值。两节电芯各放一个NTC分别监测各自温度。任何一节温度超过限定值均衡关闭回到空闲状态。只有两个温度都回到安全区间并持续一段时间均衡才允许重新启动。通信方面我给F302VC预留了CAN接口。备电系统里上位机需要知道当前电池状态尤其是“是否正在均衡”“压差多大”“均衡电流多少”。这些信息通过CAN周期上报一方面方便监控另一方面方便现场调试时用上位机实时调整阈值。没有CAN的场合退一步用UART或I2C也行但备电领域CAN还是最省心的。5. 实测表现与避坑经验5.1 实测中的均衡过程我用两节磷酸铁锂电芯做过一组模拟测试。测试前电芯静置充分实测压差48mV高电压侧电芯明显比低电压侧SOC高。开启主动均衡设定均衡电流0.5A方向从高电芯向低电芯转移。前15分钟压差下降比较快从48mV降到了20mV左右。这是因为SOC差在平台区映射为较小的压差能量转移初期效果显著。之后下降速度变慢到了20分钟左右压差降到15mV进入回差区间均衡自动关闭进入迟滞观察。30秒后重新测量压差稳定在12mV左右系统回到空闲状态。这个过程中芯片和电感表面温度大约上升了10度左右没有触发过温保护整板摸上去温温的。连续进行三次循环后两节电芯的压差被控制在10mV以内系统整体一致性明显改善。5.2 常见问题与对策速查我把调试中遇到过的典型问题整理成了一个速查表方便大家遇到类似现象时直接对号入座。故障现象常见原因处理办法均衡开启瞬间电压采样跳变开关噪声耦合进采样回路采样延时避开开关时刻加强RC滤波压差越均衡越大两个采样通道增益不一致做两点校准修正增益系数均衡反复启停无法稳定迟滞窗口过小或没有去抖延时加大回差增加延迟观察时间芯片温度异常升高功率电感饱和电流不足换更大饱和电流的电感均衡电流比设定值偏低采样电阻焊盘分流改用4端子连接缩小焊盘铜箔宽度低温环境下误触发高温保护NTC离功率器件过近将NTC移到电芯表面远离均衡热点静置后压差反弹极化电压消失导致真实电压偏差暴露属正常现象拉长均衡时间窗口多轮循环修正5.3 一条最值得说的坑最后分享一个我印象最深的调试经历。某个备电项目均衡板在低温环境下频繁触发高温保护但板子摸上去明明不热。一开始怀疑是NTC型号不对查半天发现NTC布局被放到了功率电感的正下方——均衡工作时电感铜损发热热量往上跑NTC测到的温度比电池本体高将近十度。低温环境下电池本来就容易触发低温限流再加上这个虚假的高温读数系统就出现“又冷又热”的矛盾保护。后来把NTC从PCB上移走用引线贴到电芯表面问题立即消失。这件事给我的教训是热敏元件的位置有时候比热敏元件本身更重要。做均衡系统热量管理和电气管理同样重要尤其是两串这种小系统功率器件和电芯挤在一块板上任何局部的热点都可能误导系统的温度判断。说点实在的体会做了几个双串均衡项目之后我最大的感受是均衡系统好不好用跟芯片性能和MCU算力关系没那么大真正决定成败的是采样精度、阈值策略和热管理这些“慢功夫”。STM32F302VC算力完全够用MP2642GR-Z的功率链路也足够可靠但如果不做通道校准、不设回差、不处理NTC布局再好的硬件也白搭。如果你正在做类似的2S系统我建议你先把单体电压采样精度做到5mV以内再谈均衡策略。另外主动均衡不是一锤子买卖它可以做得更智能比如结合SOC估算或者充电末期的电压斜率来判断搬运量这些都是在基础均衡跑稳定之后很自然的扩展方向。