前一阵做备用电源的小板,两节三元锂电池串联,标称7.4V。装完第一版样机,觉得电池都是同一批次,直接给电池组充电,结果充放不到20个循环,两节电池的电压差就开始拉大,最严重的时候到300mV。低压那节一直吃不饱,高压那节保护板又频繁报警。查了一圈,问题不是电芯品质,而是串联电池组本身就需要均衡。后来我用 MP2642GR-Z 做了主动均衡功率级,再用 STM32F410RB 做控制器,在储能和备用电源系统里对两个串联电池单元进行均衡,最终把压差稳定在10mV以内。这篇就把硬件、软件和调试过程完整拆一遍,给正在做2S均衡的同行一个参考。
1. 为什么两节串联电池也绕不开均衡这个坎
1.1 先看“同一电流”背后的误区
很多人觉得串联回路电流处处相等,既然两节电池流过同样的电量,容量消耗也应该一样。这个观点错在哪里?电流“一样”只是外部表现,电池内部的化学反应并不完全同步。每节电芯出厂时的实际容量普遍有百分之几的偏差,内阻、自放电率、温度系数也各不相同。偏差虽小,但在反复充放过程中会不断累积,反映到端电压上就是荷电状态偏移。可以类比成两根粗细不同的水管同时灌水,出水口再接到同一个杯子,虽然流速一样,但上游两个水箱的水位趋势不可能一直相同。
电池行业的实际测试也证明,即使是严格分容配对的两节电芯,几十个循环后也会出现可见的压差。备用电源的应用往往是“长期浮充、偶尔放电”,这种工况会放大偏差,不做均衡基本撑不住。
1.2 失衡在储能和备用电源里的特殊危害
备用电源的电池大多数时间挂在线路上,市电正常时一直保持满电或浮充状态。一旦出现失衡,高压那节会在过充区徘徊,低压那节则一直欠充。过充对三元和磷酸铁锂都不是好事,电解液分解、内压升高、负极析锂,严重时热失控;欠充那节长期得不到满充,可用容量越缩越小,系统整体续航也就跟着缩水。更麻烦的是,当市电中断、负载突然切入,低压那节会最先触底,保护板可能误判整个电池组没电,明明另一节还有能量,也不能继续供电。这对备用电源来说是非常严重的可靠性问题。
在储能系统里,虽然单节电池容量更大,但模组数量多,温度差异和老化差异更容易产生,所以均衡是所有安全和管理策略绕不开的基础。两串结构虽然简单,危害机制是完整的,不能因为电芯少就忽略。
1.3 耗散均衡做不成的两个真实原因
早版方案里我也考虑过最廉价的耗散均衡:把高压那节电池的能量通过一个电阻放掉,降到和低压那节一样为止。这确实够了简单,但在这个项目里有两个致命问题。一是能量被白白烧成热,两串电池容量本身就不大,均衡时高压侧还要额外承受发热,温度升高会进一步扩大自放电差异,形成正反馈。二是热量集中在局部,板子和电池结构紧凑时,局部高温很难处理。
而主动均衡是电荷转移,能量没有消失,只是从高电池搬到了低电池。MP2642GR-Z 这类的做法是用水泵搬水,不是挖一个坑把水放掉。所以虽然硬件复杂度高一些,从系统收益角度更划算。
1.4 均衡的目标不是治疗电池
顺手说一个容易被忽略的定位问题:均衡并不能恢复电池容量,它只是重新分配电荷,让每一节都工作在安全区间。如果低压那节已经老化得很厉害,容量衰减超过20%,均衡可以把压差拉平,但放电时短板还是那块短板,使用时间不会明显提升。所以这套板子的目标应该是“防止不一致扩大”,而不是“治好已经产生的不一致”。带着这个预期做设计,就不会对均衡能力做过高的要求。
2. MP2642GR-Z 与 STM32F410RB:分工逻辑
2.1 MP2642GR-Z 怎么搬运电荷
把结论放在前面:MP2642GR-Z 在这套方案里更像功率级核心,而不是带自动策略的完整均衡SoC。它内部集成高侧和低侧开关管,外部配一颗电感,组成一个可双向工作的同步开关网络。物理动作可以简化成“先把高电池的能量灌进电感,再让电感把能量放进低电池”。电感相当于一个临时能量仓库,开关管负责控制仓库的进出方向,整个过程没有把能量消耗在电阻上,所以叫主动均衡。
实际使用时,MP2642GR-Z 需要 MCU 给它提供控制信号或者调整反馈基准,才能决定均衡方向与电流大小。芯片手册里会给出典型外围电路,我按典型电路搭了一遍,没有去动内部的环路补偿。真正需要自己算的只有电感感值、峰值电流和开关频率的匹配,这些会在硬件部分细讲。
2.2 为什么非要加一颗 STM32F410RB
有人会问,芯片自己就能做均衡,为什么还要单独加 MCU?在我这个场景里原因很具体:备用电源的工作状态是变化的,充电、浮充、放电、待机,每种状态下均衡策略完全不同。自动均衡器通常用固定判据,比如“电压差超过某个值就开启”,不会管系统此时是在放电还是浮充。如果放电过程中盲目开启均衡,不仅毫无意义,还可能把低压电池直接拉崩。
STM32F410RB 在这里负责四件事:电压采样、策略判断、均衡使能、与充电器或上位机通信。选它而不是一颗 8 位单片机,是因为它带 12 位 ADC 和 12 位 DAC,采样和输出精度都能满足压差控制,Cortex-M4 核用来跑滤波算法也很轻松。实际调试时,ADC 的分辨率直接决定了均衡判据能做到多细,换成 10 位 ADC 就会感到误差吃掉了整个阈值空间。
2.3 两条闭环:能量流和数据流
整个系统可以拆成两条闭环来看。能量流是:电池组对外输出、充电器往里充电、MP2642GR-Z 在电池1和电池2之间搬运电荷。数据流是:两条电压采样线从电池端引出,经分压滤波进 STM32F410RB 的 ADC;MCU 算完之后输出控制信号给均衡功率级,形成一个电压闭环。这个闭环的周期大约 100ms,比均衡的电学过程慢,但比电池的热时间常数快很多,足够稳定。
这里要提醒一个关键点:电池组的地电位和 MCU 的地电位不是同一个参考。两节电池串联时,中间点电位会随充放电电流变化,如果把 MCU 的地直接接中间点,ADC 读到的电压会跟着负载抖动。因此硬件上必须单独拉采样参考线,下面我来展开。
3. 硬件搭建:从原理图到 PCB 的过程记录
3.1 均衡功率级核心元器件怎么选
MP2642GR-Z 外围不算复杂,选型却有几个点不能拍脑袋。电感我选了 10uH,额定电流 3A,饱和电流 5A。感值太小会让纹波电流偏大,开关管和电感发热都上来;感值太大又会让电流爬升太慢,同样占空比下搬电速度下降。按 1A 均衡峰值电流设计,10uH 配合合理的 PWM 频率能让电感电流处在连续模式,这是后续调试稳定性的基础。
输入输出电容也不要盲目加大。输入端用 22uF 陶瓷电容吸收开关纹波,输出端用 4.7uF 就够,太大会拖慢电压反馈,让 MCU 看到虚假的“已经平衡”。电流采样电阻要选高精度低温漂合金电阻,普通厚膜电阻温度漂移很严重,均衡电流一大读数就会飘。
3.2 电压采样线:开尔文连接是底线
我第一版板子把采样线和功率线走在一起,结果负载电流一变化,采样值整体漂移。原因是功率走线上的铜箔电阻虽然只有几毫欧,但均衡电流和负载电流叠加后,压降足以影响 mV 级采样。
正确做法是:从电池组的极耳处单独引出两条细线,一条取中间点电位,一条取总正极电位,采样线上不流过任何功率电流,这就是开尔文连接。采样线进入板子后,先经过电阻分压和 RC 滤波,再进 ADC 引脚。RC 滤波的时间常数不能太大,否则充电时电压变化会被拖慢,均衡判据跟不上真实状态。我选了 100R 串联电阻加 100nF 电容,截止频率约 16kHz,既能抑制开关噪声,又不明显影响电压趋势。
3.3 PCB 布局的三个教训
第一,功率回路要短且闭环。均衡电流在电池、高侧开关、电感、低侧开关之间形成回路,回路面积越小,辐射和振铃越少。MP2642GR-Z 的开关节点如果走线太长,测波形时会看到非常明显的振铃。第二,采样线和电感必须有物理距离,不能平行走线。第二版才把采样线绕到板边,远离电感,ADC 读数立刻干净了很多。第三,地平面要分区后单点相连。均衡功率级的地适合单独铺铜,再用 0R 电阻与 MCU 地单点连接,避免地环路。芯片如果有散热焊盘,记得用铺铜和过孔连到背面地平面,长期工作才不会局部闷热。
4. STM32F410RB 侧的均衡控制策略
4.1 ADC 采样:从原始值到可信电压
直接读 ADC 原始值做判决,一定会出现误动作。实际固件里我用定时器触发 1kHz 采样,连续采 8 次做排序取中值,再做滑动平均,既滤掉尖峰又保留缓慢变化趋势。上电初期还要做校准:用精密电压源给两路采样通道分别送几个标准电压,计算偏移和增益系数,存到 Flash。校准之后两路读数误差可以做到 ±2mV 以内,这样判压差才有实际意义。
这里有个细节:不同 ADC 通道之间的偏移和增益并不完全一致,如果只校准一个通道,另一个通道读数就会偏。我一开始偷懒省了这个步骤,结果压差一直存在 5mV 左右的系统误差,反复调了很多参数都消不掉,后来才意识到是两通道不一致。
4.2 均衡阈值:必须有迟滞和超时
最早我设的是“压差超过 10mV 开启,低于 10mV 关闭”,结果系统一直在开关之间振荡。原因很简单,电池电压本来就有小范围波动,阈值附近来回穿越太正常。后来加了迟滞:开启阈值 20mV,关闭阈值 5mV。这样从开启到关闭需要压差减少 15mV,开关动作被限制在一个稳定区间内。
迟滞之外还要有超时保护。如果均衡连续运行超过 2 小时压差仍然没有缩小,说明电池内阻异常或者电感参数不合适,程序必须拉停并报错。很多均衡板只做“开启/停止”,不做异常运行保护,这在储能场景里是不负责任的。认真对待每个异常分支,是电源类系统的重要习惯。
4.3 均衡时机:看系统工作状态再动作
备用电源最常见的状态是待机浮充和断电放电。浮充状态下,电池组由充电器维持电压,如果一边充电一边均衡,均衡器搬走的那部分能量很可能又被充电器补回来,等于空转。所以我选择先停充再均衡,或者在充电末期用小电流均衡,避免和充电环路打架。
放电状态下原则上不开启均衡,因为电压本身在快速下落,压差判断没有意义;而且均衡额外消耗能量,等于加速电池耗尽。实际固件里保留了一个“维护均衡”模式,维护人员可以通过调试口手动触发,用于定期把电池组重新拉齐。这样既不干扰正常工况,又保留了运维能力。
4.4 失效安全:均衡使能不能是普通 GPIO
这是整个设计里最不能省的一环。STM32F410RB 跑飞或者死机时,GPIO 会回到复位默认状态,如果默认恰好是“使能均衡”,功率级就会一直导通。备用电源长期无人值守,这种故障可能直接导致电池损坏。
我的做法是:给均衡使能信号加一个硬件与门,与门的另一个输入来自 MCU 的定时器通道。这个通道平时输出高电平,但 MCU 每个控制周期都会刷新一个喂狗事件;一旦 MCU 停止工作,通道输出回落到低电平,与门输出变低,均衡功率级强制关闭。等于给均衡器加了一个“心跳线”,程序活着才能运行,程序死了就断电。这个设计在联调阶段就救我一次,后面调试实录里会说。
5. 调试实录:三个问题的完整排查过程
5.1 均衡电流只有设计值的四分之一
第一版焊完,目标均衡电流 1A,实测只有 250mA。当时第一反应是电感问题,换大电感以后电流更小;又怀疑占空比不对,用示波器看开关节点波形,发现高电平时间明显偏窄。逐项查到最后才定位到基准电压:我给 DAC 设置的基准电压选错了参考源,DAC 输出在均衡启动后掉了 0.1V,误差放大器一直处于限流状态。检查原理图确认,VREF+ 不能直接接电源,要接独立高精度基准。换成独立基准后,均衡电流回升到 900mA 以上。
这个案例的教训是:遇到电流与设置不符,不要一上来就怀疑软件,先测基准和反馈网络的外部条件是否稳定。很多看似软件的问题,最终都是基准地漂移造成的。
5.2 MCU 复位瞬间均衡器误导通
调试中有一次按下复位键,示波器捕捉到均衡使能引脚出现 2ms 高脉冲,均衡功率级也导通了这么一下。时间很短,但足以让电池电压出现毛刺。原因很简单:STM32 复位后,引脚默认状态是浮空输入,均衡使能线如果悬空,噪声一推就变成高电平。
修复分三步:一是在使能引脚外部加 100k 下拉电阻,让默认电平为低;二是在初始化代码最开始立刻把该引脚配成低电平输出;三是加一个上电延迟,用 RC 电路把高阻状态延长到 10ms,确保 MCU 启动完成前不会误动作。对这个 2S 项目来说 2ms 误动作后果不大,但养成了习惯,以后做更大系统时才会更稳。
5.3 均衡启动后电压采样“假下跌”
还有一个挺迷惑的现象:均衡一开启,被测电池电压瞬间跌了 30mV,但用万用表量电池端并没有跌这么多。问题出在采样时刻,开关管切换时会在采样线上耦合尖峰,ADC 恰好采到尖峰的低压部分,再经过滤波就表现为整体下跌。
解决思路是给 ADC 采样做同步:不是自由运行去采,而是用定时器触发采样,让采样点落在 PWM 周期中相对平稳的区间。我还加了一个“透明窗口”逻辑,在采样前 2ms 暂时关断均衡,采样结束再恢复。这个操作牺牲了一点均衡工作时间,却换来了可靠的采样值,最终实测开启均衡前后电压读数基本一致。
5.4 地环路会让所有修复都显得失效
如果前面几个都检查完仍然读数飘,基本就是地环路。调试阶段我曾经把 MCU 板子用杜邦线连到功率板,结果 ADC 读数随负载电流明显漂移。原因就是两块板的地在多个地方形成环路,采样地参考不稳定。解决办法是只保留一个短而粗的地连接点,所有信号地都汇总到这个点。调试器和上位机串口的地也不能和功率地混在一起,否则问题会反复出现。这些经验用过一次以后就再也不想踩第二次了。
6. 实测数据与扩展思路
6.1 一组均衡前后的对照数据
在 25℃ 环境下,两节标称 2000mAh 的 18650 电池,初始压差 64mV。先用 500mA 均衡电流跑,4 小时后记录数据如下:
| 项目 | 均衡前 | 均衡后 4 小时 |
|---|---|---|
| 电池1电压 | 4.112V | 4.056V |
| 电池2电压 | 4.048V | 4.052V |
| 压差 | 64mV | 4mV |
| 均衡状态 | 未开启 | 进入迟滞区自动停止 |
这组数据显示,电荷从高压电池平稳转移到低压电池,压差收敛到迟滞关闭阈值以内,均衡过程自动结束。放在循环里看,后续充电时低压电池能够正常充满,整体可用容量比不均衡时好很多。需要再强调一遍,均衡没有修复电池,只是让两节都尽量处在安全区,那节容量已经衰减的电芯如果被拉到平台区,整组时间依旧受它限制。
6.2 从 2S 往多串扩展的取舍
这套方案非常适合两串结构。如果要做成 4 串,最简单的做法是拆成两组 2S,各用一片 MP2642GR-Z,由 MCU 统一调度。这里会遇到新的麻烦:两组 2S 的地参考电位不同,采样和控制信号都得处理隔离。如果目标是 4S 以上,我更倾向于直接选用支持多串的均衡前端,而不是无限堆这个双串方案。毕竟均衡本身是安全系统的一部分,扩展时稳定性和可维修性比省料更重要。
6.3 复盘:这套设计里最值钱的是什么
把整个项目捋一遍,我觉得最值钱的不是某颗芯片,而是“控制策略与硬件安全机制的配合方式”。没有 MCU 的均衡器只能做固定动作,不符合备用电源的多状态需求;有了 MCU 又容易在可靠性上出疏漏。这次用硬件与门和心跳信号把“程序死了也要安全”落实了,这是我个人最满意的地方。下次再做类似板子,我大概率会把采样通道改成隔离差分放大器,进一步提高抗干扰水平,同时把均衡电流档位做成可配置跳线,方便适配不同容量电池。
最后给最初做这个项目时的自己补一句经验:先想清楚“不均衡会坏”和“均衡太过也会坏”,再去调代码,均衡才不会帮倒忙。