去年年底,我手上的一台 2S 磷酸铁锂备电样机出了个挺尴尬的问题。两节串联的电芯,出厂压差只有二十几毫伏,跑了不到两百次循环,压差涨到两百多毫伏,整包容量直接少了三分之一。原来板上的被动均衡电阻,均衡电流只有几十毫安,塞在密闭壳子里发热也没人敢往大做。为了在储能和备用电源这类长期在线场景里稳住这串压差,我把均衡部分重做了一遍:用一颗 MP2642GR-Z 电源转换芯片做能量搬移,用一颗 MK20DN128VFM5 微控制器做采样与控制。这篇把方案架构、调试过程和踩过的坑完整记录下来,给同样在做 2S 电池均衡的同行一个参考。
1. 为什么两节电芯的压差会成为系统的短板
1.1 压差的来源:容量分散、内阻差异和自放电率
两节串联电芯不是天生一样。即使是同批次、同工艺出厂,容量也有正负 1% 到 2% 的分散;内阻出厂时差异不大,但循环几十次之后,因为电芯在壳体内的位置不同、散热条件不同,内阻增长速率也会拉开差距。更隐蔽的是自放电率:同一批锂电的自放电差异可以相差 1% 到 2%,长期浮充的备用电源恰恰最怕这个,自放电偏大的那节会被反复顶到过充区,加速衰减,然后衰减又进一步拉大压差,形成一个正反馈。
在磷酸铁锂这种电压平台非常平的体系里,SOC 的细微偏差在开路电压上往往不怎么明显,可一旦跑到接近充满或者放空的拐点,压差就会被放大。2S 系统的痛点就在这里:只有两节电芯,任何一节短板都会直接砍掉整包可用容量,还没办法像大电池组那样靠电芯串并联去平均。在我的样机上,200mV 的压差意味着放电阶段有一节已经到截止电压,另一节还剩不少能量,整包容量损失一眼就能测出来。
1.2 被动均衡为什么在这个项目里被否了
被动均衡的原理很简单:给电压高的那节电芯并一个放电电阻,把多余的能量以热的形式烧掉。均衡电流等于压差除以电阻,实际上为了保护电芯和避免发热失控,通常做成恒流放电,电流限制在 50 到 100mA 这个级别。问题就在于,这个电流对备电系统的工况来说太小了。
举个例子:两节 5Ah 电芯,压差 200mV 对应 SOC 差大约 2%,也就是 100mAh 的容量差。用 100mA 电流去均衡,理论上要 1 小时才能补回来,而且这个过程里能量全部变成电阻上的热。储能和备用电源的壳体大多是密闭的,几十毫安的热量在板子上待一会儿就是几十毫瓦,看着不多,但如果是长期浮充加上频繁浅循环,均衡电阻几乎没有休息时间,板温会被抬上去。更麻烦的是,被动均衡只能把高电压那节放低,不能把低电压那节补回来,能量方向是单向的,本质上有浪费。
1.3 主动均衡的拓扑选型:把能量搬过去,而不是烧掉
主动均衡的思路完全不同:电压高的那节电芯向电压低的那节转移能量,系统总能量基本守恒,损耗只来自功率级的转换效率。对于两节电芯,最常用的拓扑是双向 buck-boost 结构,中间一个电感,上下两个开关管,通过控制开关管的通断时序,能量既可以由电池 1 流向电池 2,也可以反向。
这个拓扑想在样机上落地,需要三个部分:一个可控的功率变换核心,负责电感和开关管的驱动,MP2642GR-Z 承担这个角色;一个逻辑控制核心,负责判断谁高谁低、什么时候切换、切多久,MK20DN128VFM5 承担这个角色;还有一组方向切换的 MOS 网络。三者配合,均衡电流可以做到 300mA 甚至更高,而发热远小于被动方案。
2. MP2642GR-Z 在均衡电路里到底干了什么活
2.1 功率核心:一个受控的能量搬运单元
MP2642GR-Z 是一颗电源转换芯片,在均衡电路里我把它当作一个受控的 DC-DC 功率级来用。具体到开关频率上限、最大输出电流、同步整流配置这些指标,设计时要以官方数据手册为准,我这里只说它在均衡拓扑里承担的角色:它以固定的开关频率工作,通过 PWM 占空比控制电流的流向和大小,将高电压侧电池的能量泵到低电压侧。
打个比方,它像一个小型抽水机,泵水的方向和流量由外面的 MCU 决定。芯片本身并不关心自己是在"放电"还是在"充电",它只负责按照开关管的时序把能量从输入端搬到输出端。因此,整个均衡电路的设计核心不在于芯片本身,而在于外围拓扑和方向控制。
2.2 外围参数:电感、取样电阻与环路补偿
围绕 MP2642GR-Z 搭建的功率级,有几个参数是必须仔细定的。电感是决定均衡电流纹波和峰值的关键:感值选小了,纹波太大,电流峰值容易超过设计值;选大了,响应慢,峰值电流不够,均衡效率也会下来。在我这套 300mA 均衡电流级别的板子上,10uH 到 22uH 之间比较合适,还得注意电感的饱和电流至少留 1.5 倍以上的裕量,否则电流一冲就饱和,整个功率级会剧烈发热。
取样电阻放在哪、怎么走线,是很多第一次做的人容易忽略的地方。不要用电流路径上的铜箔电阻来估算电流,而是用一颗低阻值的合金取样电阻,比如 25mΩ 或是 50mΩ,把差分信号引到控制端的电流检测放大器。反馈采样线要从电芯端子位置直接引,不要从功率回路的地线上接出来,否则地线上的压降会直接污染采样信号,让环路补偿失效。
2.3 方向切换的细节:为什么不能简单硬切
两节电芯之间搬能量,方向控制是最容易翻车的环节。常见做法是四颗 MOS 管组成两个方向开关,一组负责电池 1 到电池 2,另一组负责反向。这里面有几个细节很关键。
MOS 管的体二极管在关断状态下仍然可以导通电流,如果切换时没有死区时间,就可能出现一个瞬间的直通或者反向路径,轻则均衡电流失控,重则炸管。第二个问题是驱动时序:必须先完全关断当前方向的开关管,再打开另一个方向,这个过程要插入微秒级的死区。第三个问题是导通电阻,300mA 电流流过几十毫欧的 MOS,发热不大,但如果未来要放大均衡电流到 1A 级别,就必须换成低 Rdson 的管子,否则热损耗会吃掉主动均衡的效率优势。
3. MK20DN128VFM5 主控的采样、判定与保护逻辑
3.1 选型理由:外设匹配度比算力更重要
均衡控制对主控芯片的资源要求并不高,难在 ADC 精度、PWM 输出和可靠性的配合。MK20DN128VFM5 是一颗 ARM Cortex-M4 内核的微控制器,带浮点运算和 DSP 指令,这让我在写均衡算法时不需要刻意刁钻地省运算量。它的 16 位 ADC 对识别毫伏级压差非常有用,多路定时器可以输出带死区插入的互补 PWM,正好用来驱动上一节说的方向切换开关。
128KB Flash 看起来不少,实际用的时候你会发现均衡固件、故障记录、通信协议栈全都放进去之后,剩余空间也就一半左右。我选这颗料还有一个原因:它在电源控制类项目里用得很多,寄存器配置资料常见,出问题时不缺参考案例,对项目周期比较友好。
3.2 两节电芯电压的采样方式:共模问题是隐藏的坑
2S 串联结构的采样有一点特殊。电芯 1 的负极是系统地,电芯 1 的正极和电芯 2 的负极是同一个中间点,电芯 2 的正极是最高电位。测电芯 1 的电压很简单,直接分压到 ADC 就行;测电芯 2 的电压如果也直接用分压电阻接进去,那么 ADC 输入引脚看到的是叠加了十几伏共模电压的信号,有效识别精度会被吃掉一大截。
正确的做法是给电芯 2 做差分采样。可以用仪表放大器,也可以用运放搭减法器,把中间点电位减掉之后再送 ADC。分压电阻的精度也要注意,1% 的电阻在毫伏级均衡判断面前误差太大,一片电阻温度系数不同也会引入漂移,所以要么选 0.1% 精密电阻,要么在产线做一次软件校准,把每颗板子的分压比例误差记录下来。ADC 采集之后还要做滤波,我实际用的是多次采样取中位均值,能有效去掉功率级开关产生的尖峰干扰。
3.3 故障保护与低功耗:备电系统不能因为均衡把自己搞挂
备用电源系统对故障处理的要求和高消费电子不太一样:均衡电路失效可以,但不能影响主放电路径,不能把整包电源拖死。所以我在 MK20DN128VFM5 固件里做了几层保护:过压、欠压、过温、均衡超时。任一条件触发,先关断均衡功率级,再进入故障状态,等待系统重新上电或者恢复命令。
低功耗也要算。备电系统的待机电流预算通常很紧,均衡主控不能一上来就全速跑。我的做法是让 MCU 在均衡间隙进入低功耗睡眠,定时醒来做一次电压采样,平时只保留一个唤醒定时器和看门狗。这样均衡静态功耗控制在几十微瓦级别,对整机待机影响几乎可以忽略。
4. 均衡控制状态机的设计与实测调试
4.1 状态机:IDLE、MEASURE、BALANCE、PAUSE、FAULT
均衡控制的主逻辑不复杂,但状态迁移设计要仔细。我最终用的是五状态机:
| 状态 | 进入条件 | 动作 | 退出条件 |
|---|---|---|---|
| IDLE | 上电复位或故障恢复 | 所有 MOS 关断,等待采样 | 定时采样周期到,进入 MEASURE |
| MEASURE | 采样周期到 | 采集两节电芯电压,滤波运算 | 压差大于 30mV 进入 BALANCE,否则回到 IDLE |
| BALANCE | 压差大于 30mV | 按方向打开对应功率级,闭环控制均衡电流 | 压差小于 10mV,进入 PAUSE |
| PAUSE | 均衡结束 | 关断功率级,等待电压回稳 | 静置一定时间后回到 MEASURE |
| FAULT | 过压、欠压、过温或超时 | 关断全部驱动,置故障标志 | 收到恢复命令或断电复位 |
这里的滞回区间很关键。如果我设成到了 30mV 启动、到了 29mV 就停,那么在均衡过程的最后一个阶段,电路会因为噪声和测量波动在状态之间来回跳,功率级频繁启停,反而把电芯电压搅出毛刺。30mV 启动、10mV 停止,留出足够的窗口,结合 PAUSE 静置,能保证均衡过程收敛得干净。
4.2 调试顺序:先从模仿电池开始
这个系统直接上真电池调试,出了问题很难分清是采样问题还是功率级问题。我建议按下面的顺序来:
第一步,用两台可调直流稳压电源模拟两节电芯,先不带均衡功率级,只验证 ADC 采样。把两台电源输出分别设成 3.5V 和 3.4V,看 MCU 读回来的电压准不准,分压误差能不能通过对图纸校准修正到 2mV 以内。
第二步,固定 PWM 占空比开环输出,让均衡电流在一个安全值附近,用电流探头看电感电流波形对不对,方向切换时有没有直通。
第三步,切入闭环恒流均衡,在模拟电池上观察两节电压是否缓慢趋近。模拟电池的内阻很小,电压收敛过程会比真电池快,但足以验证闭环的方向和稳定性。
第四步,换真电芯。先小电流 100mA 跑一圈,确认压差趋势正确,再把电流提到目标值。真电池的极化效应和电压回弹现象会让系统行为变得复杂,要留足观察时间再下结论。
4.3 我踩过的三个坑
第一个坑是"假收敛"。均衡电流在电芯内阻上会产生电压降,比如 300mA 电流流过 20mΩ 内阻就有 6mV 的压差贡献。采样时如果不避开均衡时段,MCU 会看到压差被电流"拉平",以为均衡已经完成,实际 SOC 还没拉齐。我后来把采样放在 PAUSE 状态里,等电流关断几十毫秒后再读数,这个问题才解决。
第二个坑是方向切换烧管。最初我在切换时太着急,没有等 MOS 完全关断就打开了另一路,结果体二极管在换流瞬间被反向电压打通,波形成了难看的振铃,管子的温度直线上升。后来把驱动的死区时间从 0.5us 加大到 2us,并且用示波器确认先关后开,才把波形理干净。
第三个坑是电感啸叫。功率级环路在某些工作点会进入间歇振荡,占空比周期性跳变,电感发出人耳可闻的吱吱声。处理办法是把开关频率设在人耳敏感区之外,同时给环路比例积分参数加了输出限幅,让占空比不会大幅跳变。
5. 实测数据与整机联调结果
5.1 一组实际记录的收敛数据
这套系统调通后,我特意记录了真电池的收敛过程。起始条件是两节电芯分别开路电压 3.52V 和 3.41V,压差 110mV,均衡电流设定在 300mA。每五分钟记录一次电压,环境和电芯温度约 25 度:
| 时间(分钟) | 电芯1电压(V) | 电芯2电压(V) | 压差(mV) | 均衡电流(mA) |
|---|---|---|---|---|
| 0 | 3.520 | 3.410 | 110 | 300 |
| 5 | 3.508 | 3.423 | 85 | 300 |
| 10 | 3.497 | 3.435 | 62 | 300 |
| 15 | 3.488 | 3.446 | 42 | 300 |
| 20 | 3.480 | 3.455 | 25 | 300 |
| 25 | 3.474 | 3.462 | 12 | 300 |
| 30 | 3.469 | 3.465 | 4 | 0 |
从数据可以看到,前面 15 分钟压差下降最快,后面逐渐变缓,到 30 分钟压差已经回到 4mV,均衡停止。整个过程功率级表面温度只是温热,这是主动均衡对比被动方案最直观的优势。
5.2 长时间运行验证与故障注入测试
装回样机后我做了 72 小时浮充循环测试,压差始终稳定在 10mV 以内。放电循环后压差会有短暂反弹,但一旦进入空闲状态,均衡器就会自动把压差拉回来,系统的容量一致性明显改善。
故障注入测试也很重要。我故意断开了一路采样线,系统在下一轮采样时检测到电压跳变,立刻进入 FAULT 状态,均衡功率级关闭,主放电路径不受影响。这个测试告诉我,采样线束的接插件可靠性是整机最薄弱的环节,后来我把采样线束换成了带锁扣的连接器,并加了线序防呆。
5.3 复盘:如果再让我做一次
如果这个项目重新来一遍,我会把四管方向切换网络换成真正的双向功率级,也就是两边都用同步整流的高边和低边 MOS。这样做的效率更高,而且省去方向切换的死区时序设计,软件也会更简单。
均衡电流的取舍我也重新想清楚了。300mA 对付 5Ah 级别的 2S 电芯足够,但如果你要做大容量储能单元,比如 50Ah 级别,期望十几分钟拉平压差,那均衡电流得上到 1A 以上,这时候功率级的电感、MOS 和散热都要重新做预算,不是一个量级的方案。
最后分享一个经验:量产前一定要在产线上做一次电压校准,把每颗板子的分压电阻误差标定好。我在样机阶段因为采样误差吃过亏,以为算法有问题,查了半天才发现是两颗 1% 电阻的温漂叠加。校准虽然会增加几十秒工位时间,但换来的返修率下降是实实在在的。