上周末在实验室跟一块 2S 锂电组较劲。电芯刚充满时电压看起来差不多,放一晚再用,好家伙,第一节 4.08V、第二节 3.92V,差了 160mV。这种场景在储能舱、备用电源、便携储能箱里特别常见:串联电池承担的电流完全一样,但内阻、容量、自放电率总有细微差异,加上使用时间一长,两极分化会越来越严重。我的解决办法是搭一个带主动均衡的 2S 管理模块:均衡主体用 MP2642GR-Z 芯片,负责把电压较高那一节电池的能量搬给较低一节;上层控制用 PIC18F96J94 单片机,负责采电压、算差值、按时序开关均衡。做了几轮迭代之后,静止压差从百毫伏级稳定压到 5mV 以内。这篇文章就把这套系统的原理、关键器件、固件状态机和调试中踩过的坑完整写出来,给正在做 2S 储能方案的工程师朋友一个参考。
1. 为什么两节电芯串联也必须认真对待均衡
1.1 串联电池的“木桶效应”从何而来
电池串联之后,流过每一节电芯的电流是完全相同的,但每节电芯到达相同 SOC 所需的电荷量并不相同。原因有几个:电芯在生产时容量存在公差,同批次可能相差 1%~3%;内阻不一致会让同样电流产生不同的欧姆压降;自放电率有差异,静置越久电压差越明显;电芯和电极、采样电阻的分布不均匀还会造成局部温度不同,温度低的那节电芯实际可用容量下降更快。
这里有件事我一开始没想透:电池包能放出的电量不是“两节平均电量”,而是“最少那节对应的电量”。以两串为例,第一节还有 60% 容量,第二节只有 40%,那么整包最多只能释放 40% 对应的容量,哪怕第一节还有余量也放不出来。这就是木桶效应。储能系统往往要求长时间低倍率循环,这种差异虽然不至于立刻爆掉,但会悄悄缩短整包寿命。作备用电源的场景更特殊:平时基本浮充,偶尔深度放电,电芯长期得不到完整循环,失配会比动力电池出现得更早。
1.2 不均衡带来的实际后果
我在实测中观察过这样的现象:当两节电芯 SOC 差扩大到 15% 左右,充电阶段只要领先那节先到达充电截止电压,BMS 就会强制停充。此时落后那节其实还没充满,用户拿到的“满电状态”只有真实容量的 85%;放电阶段也类似,电压低的一节先触发放电截止,整包只能用一半就报低压。
更往深层说,长期不均衡还有安全风险:落后电芯被反复欠放,内部可能析锂;领先电芯被长期过充,正极结构加速损耗,严重时发热甚至鼓包。所以在储能备电这种低维护、需要长期浮充的场景里,均衡不是可选功能,而是必要的保障。均衡的本质不是把两边电压做算术平均,而是把落后电芯的容量补回来,让整包保持“可用放电窗口最大化”。想通这一点,后面很多策略设计就顺了。
2. MP2642GR-Z 均衡主体:电感储能式电荷搬移的核心理念
2.1 它做的是“搬水”,不是“倒水”
传统常见的电阻均衡是给高电压电芯并联放电电阻,把多出来的电量变成热量放掉。这办法简单便宜,但有两个天然问题:一是能量全部变热,效率为零,在电池仓里还不好散;二是只能在整包内做“削高”,没法把能量送给低电芯,均衡时间很长,对 2S 系统来说尤其不经济。
MP2642GR-Z 这类主动均衡芯片的处理方式完全不同。它的核心是一个外置电感配合一组开关网络,工作方式可以理解成“电荷搬运泵”:检测到哪节电芯电压更高,就先让这节电芯给电感充磁储能,随后切换回路,让电感把能量释放给低电压那节电芯。等效于用一台微型水泵,把高处杯子里的水抽到低处杯子里,水总量不变。整个过程只有电感、开关和线路上的导通损耗,效率通常能到百分之七八十以上,发热远小于电阻耗散。我经常跟同事说:电阻均衡是拿杯子舀水倒掉,有源均衡是拿水泵搬水,后者才是储能系统该有的样子。
为什么方案里用专用均衡芯片,而不是用普通单片机加 MOS 自己搭同步整流?因为高侧低侧来回切换的时序必须做到“先断开再闭合、死区时间精确”,普通 GPIO 拼出来的电路很难处理开关瞬间的尖峰和续流方向。芯片本身集成了切换逻辑和过流保护,稳定性比离散方案可靠得多。PIC18F96J94 在这套系统里只负责决策,不直接碰高频功率开关,这就是我在整体设计上的一个明确分工。
2.2 外围电路与关键参数
MP2642GR-Z 做主动均衡需要的外围其实很少,核心就三块:
- 电感:我这次用了 15µH 的功率电感,DCR 越低越好,饱和电流建议按峰值均衡电流的 1.5~2 倍选;
- 功率开关管:一部分均衡芯片把开关集成在内部,一部分需要外部 MOS,具体要按封装和参考设计来定;
- 输入输出电容:在芯片电源脚和均衡节点放 1µF~10µF 陶瓷电容,高频去耦放 100nF。
具体数值应当以这颗芯片的数据手册和参考电路为准,我这边是参照同类电感式均衡板的通用参数做的第一版。我的经验是,电感不要选得太小,太小会让峰值电流过大,发热上升;也不宜过大,过大动态响应慢,均衡结束阶段不好收尾。更关键的是布局:均衡回路从开关节点到电感、MOS 之间的走线要短而宽,避免寄生电感叠出尖峰。可以拿水斗来类比:电感就是水斗,控制芯片是两个阀门,一次舀一小斗水倒进另一杯;阀门切换频率决定搬运速度,水斗容量决定每斗能搬多少。MP2642GR-Z 要做的就是把阀门切换做得又快又准。
3. PIC18F96J94 在系统里的真正角色:调度员而非执行者
3.1 电压采集与 ADC 处理
均衡芯片负责“怎么搬”,但“什么时候搬、搬多少”由 MCU 决定。我用了 PIC18F96J94 单片机做整块板子的大脑,它的多通道 ADC 刚好覆盖两节电芯电压、一路板温和一路均衡电流的采样需求。
采样链路很简单:用分压电阻把单节电芯电压降到 ADC 可测范围,再接一个 RC 低通滤波,时间常数取几毫秒到几十毫秒。我习惯用 10kΩ 与 0.1µF 的组合,配合 ADC 连续多次采样后的均值滤波。均衡开启时,电感开关切换会在采样线上引入高频干扰,我会让均衡在采样前暂停几毫秒,把开关尖峰躲过去,再采一组干净数据。这个“采样避让窗口”看着不起眼,实际效果非常明显,后面调试章节会再展开。
采样点必须接在电芯两端而不是功率回路中间,否则走线上的压降会被当成电芯电压,后面做判断就会失真。不要为了省一根线把采样并联在均衡电流路径上,这是我反复强调的重点。
3.2 均衡状态机与调度逻辑
软件层面我维护了一个非常简单的状态机,四个状态:待机态、检测态、均衡态和故障态。
| 状态 | 触发条件 | 动作 |
|---|---|---|
| 待机态 | 压差低于滞回下限 | 不动作,MCU 进入低功耗等待 |
| 检测态 | 定时唤醒周期到 | 采样两节电芯电压,计算压差并滤波 |
| 均衡态 | 压差超过启动阈值 | 使能 MP2642GR-Z,开始电荷搬移 |
| 故障态 | 超时、过温、电压越界 | 关闭均衡,上报故障码,等待复位 |
为什么用滞回而不是单阈值?因为单阈值会在 5mV 附近反复开关,均衡芯片频繁启停反而增加静态功耗,还可能让电芯电压来回抖动。滞回相当于给开关加上“摩擦”,避免系统在临界点附近反复横跳。这个思想在 BMS 里到处都是,但很多初次做的人容易忽略。我实际用的启动阈值是 20mV,停止阈值是 5mV,中间留了 15mV 的死区,现场表现非常干净。
3.3 与主控或上位机的通信
在真实储能系统里,均衡模块通常不是孤立的。我用 UART 把两节电芯电压、均衡状态、板温和均衡计数器上报给 BMS 主控板;调试时用 USB-TTL 转接到上位机看数据。PIC18F96J94 自带的串口资源在这里很够用,一条 TX、一条 RX 就完成交互,如果是工业储能通讯,再补一路 CAN 即可。
通信协议不需要复杂,用简单的帧格式:起始字符、设备地址、功能码、数据长度、数据、校验。我在实际项目里习惯把所有运行状态打包成一个结构体,通过逐字段发送,方便在串口助手里直接观察。这样做的好处是调试时直接用上位机就能看到整包状态,不用接仿真器。
4. 硬件实现中真正决定生死的细节:采样、供电与布局
4.1 采样走线的开尔文接法
硬件上最容易犯的错误,是把电芯电压采样走线接在功率电流路径上。举个例子:如果采样点放在均衡电流流过的一段 PCB 铜皮两端,铜皮电阻哪怕只有 5mΩ,1A 均衡电流也会产生 5mV 误差,这正好和均衡阈值同一量级,整个系统判断都会乱套。
正确的做法是每节电芯的采样线单独从电芯极柱引出,走一条不承载功率电流的细线,直到 MCU 的 ADC 输入端。这就是开尔文四线接法的简化版。我画的板子里,采样线和功率线分别从电池座的不同引脚引出,中间只在 ADC 输入附近汇合。第一版 PCB 偷懒共用了走线,结果压差波动 10mV 以上,改成独立采样后读数立刻稳定。这个教训成本很低,收益却很大,强烈建议直接做到第一版里。
4.2 均衡回路的 PCB 布局规则
MP2642GR-Z 的均衡回路是一个高频开关回路,布局上的原则是“回路面积越小越好”。电感、开关管、电容三者组成一个高频环路,应该放在同一面、尽量紧凑,不要让地回流路径绕一大圈。回路面积一大,不仅辐射干扰增多,还会让开关节点电压尖峰升高,严重时可能击穿芯片电源脚。
我的板子是双层板,顶层走功率与信号,底层做完整地平面,均衡回路和采样回路尽量远离。如果后续产品化,换四层板会更好,中间两层分别做电源与地,EMI 会明显改善。具体铺铜时还要注意:开关节点铜皮不要太宽太长,避免形成天线;采样线尽量短,必要时用 GND 包一下。这些都是高频开关电路的基本功,但在电池管理板上经常被忽视。
4.3 MCU 供电与待机功耗
PIC18F96J94 工作电压在 3.3V 左右,我是从整包电压通过一颗低压差 LDO 降压获得。注意 LDO 的静态电流要小,因为在备电系统里长期挂机,好几百微安的待机电流就会让整包自然放电加快。处理办法有两个:LDO 选低 Iq 型号;MCU 在不均衡时进入休眠,用定时器唤醒。均衡芯片不在必要时通过使能脚彻底关断。这样整套系统在 2S 电池下的待机电流可以压到几百微安以内。均衡功能说到底只是“调节功能”,不该成为吃电大户。这一点凡是做过便携储能的人都会有同感:待机功耗每多 0.1mA,充一次电放的次数就会少几次。
5. 固件侧的均衡策略进阶:什么时候均衡,均衡到多深
5.1 用电压差判断,但不要只看瞬时值
最简单的判断是实时电压差超过阈值就均衡。但在实际运行中,电芯电压包含极化电压分量:充电时高 SOC 电芯极化明显,电压显得虚高;停止充电后电压会回落。如果拿充电过程中的瞬时压差触发均衡,很可能出现“这节高、下节低”的误动作,白白浪费能量。
我的做法是区分运行场景:静置状态电压基本等于 OCV,电压差判断可信,可以做精细均衡;充电或放电过程中只做粗调度,比如压差超过 100mV 才开始介入,防止频繁启停;均衡结束前先暂停几秒,让电芯电压回落到真实值,再决定是否继续。这个“先回落再判断”的步骤,让均衡收敛效果更真实,而不是靠瞬时虚低骗过系统。比如充电结束后的半小时内,我完全禁止均衡介入,因为此时电压还在缓慢回落,动作了也是白动。
5.2 均衡节奏:一次到位不如细水长流
有人会把均衡阈值设得很激进,压差 30mV 就连续均衡几个小时。实际上主动均衡到后期边际收益很低:压差从 100mV 到 20mV 很快,但从 10mV 到 2mV 可能要多花好几倍时间,而 2mV 和 10mV 对整包容量影响几乎可以忽略。我最终采用的分档策略:
| 压差范围 | 执行节奏 |
|---|---|
| 大于 60mV | 连续均衡,目标尽快拉回 |
| 20mV ~ 60mV | 均衡 10 分钟,休息 5 分钟 |
| 小于 20mV | 每次均衡 30 秒,停止 60 秒 |
这样做的好处是避免开关管长期工作发热,也避免电感产生可闻噪声。主动均衡本身有损耗,细水长流的节奏能把损耗分散在长时间内,整体温升曲线更平滑。一个相关的小经验:均衡期间不要让系统同时做大电流充电,否则负载叠加会让均衡芯片的输入电源波动,影响切换节奏,我通常在固件里加一个“均衡正在进行”标志,充放电主流程读到这个标志后自动降额。
5.3 故障保护与状态恢复
均衡功能必须考虑“如果不正常会怎样”。我加的保护包括:软件看门狗,MCU 主循环超时自动复位;均衡超时保护,一次均衡超过上限立刻停止,防止算法卡死;温度保护,电芯温度或板温超过 45℃ 停止均衡,低于 35℃ 再恢复;电压越界保护,任何一节电芯低于 2.8V 或高于 4.35V 时,均衡功能直接禁用。
这些保护逻辑全部放在状态机外层,一旦触发就置位故障标志并上报故障码。均衡芯片本身有保护,但 MCU 层面的保护依然不能省:它能对“错误触发时序”和“异常采样值”这类非电气故障提供最终兜底。有一次我把均衡超时判据写错,均衡一直停不下来,温度保护先动作,才避免了板子持续发热,这让我确信保护逻辑是必须序列。
6. 实测数据与调试中最容易踩的四个坑
6.1 实测记录:一组失衡电芯的收敛过程
我在某储能 Demo 板上做了一组对比测试。初始状态:电芯 A 静置电压 4.06V,电芯 B 3.74V,压差 320mV,两节总电压 7.80V。开启均衡后,前 10 分钟压差迅速降到 90mV,均衡电流从初始的 1.2A 逐渐下降;30 分钟后压差约 35mV;60 分钟后稳定在 6mV 左右。全程电感和 MOS 温度大约比环境高 8℃,没有听到异常噪声。极端工况也测过:压差只有 12mV 时启动均衡,两分钟后压差降到 4mV,系统进入滞回区并停止,没有再反复开关。
这些数据受电芯容量、内阻、均衡电流和环境温度影响,不能直接套到别的项目里,但趋势很明确:主动均衡的收敛曲线前段陡、后段平,设计目标不要把压差设得太极限,5mV 以下的差值对整包容量几乎没有贡献,硬挖反而浪费时间。
6.2 坑一:电感饱和导致发热和啸叫
第一次调试时,我用了 10µH、饱和电流偏小的小电感。均衡刚开始,电感就发热,还伴随高频吱吱声。原因很简单:电感磁芯饱和后等效电感量骤降,电流变成尖峰形状,损耗全部集中在磁芯和铜线。换用 15µH、饱和电流余量更大的功率电感后啸叫消失,温升降了一大截。选电感的经验值按峰值均衡电流乘 1.5 到 2 倍余量,宁可体积大一点,也不要为了省空间牺牲可靠性。如果后期有静音需求,还可以考虑用大尺寸磁屏蔽电感。
6.3 坑二:ADC 采样被均衡噪声污染
板子刚跑起来时,采集到的电芯电压周期性跳变,幅度最大有 20mV,看起来就像电芯电压在抖。用示波器看采样引脚,发现有高频开关噪声耦合进来。解决方案是三管齐下:ADC 输入前加一级 RC 低通滤波,时间常数放大到约 10ms;软件上让均衡在采样前关闭 5ms;固件里再做 8 次采样的中值平均。这三件事组合之后,ADC 读数波动降到 2mV 以内。注意采样前短暂关闭均衡会略微降低均衡效率,但在 2S 系统里影响很小,完全可接受。
6.4 坑三:通信与均衡同时工作会丢帧
我最初把 UART 数据传输安排在均衡时刻附近,结果上位机偶尔出现校验错误。排查发现,均衡开关切换瞬间产生的地弹或辐射,把 TX/RX 线上的信号破坏了。解法很直接:把通信发送调成“均衡停止间隙”执行,或者给串口线增加 22Ω 串联电阻并缩短线长。这件事提醒我,在嵌入式调试里,很多问题不是“软件逻辑不对”,而是“硬件时序冲突”,需要在设计阶段就考虑模块间的时隙安排。后来我把均衡暂停、采样、通信都做了统一时隙调度,整个系统的稳定性立刻上了一个台阶。
6.5 坑四:状态机卡在“均衡”状态
有一次我的均衡超时判据写错,导致 MCU 始终认为“还没结束”,芯片一直被使能。结果电池电压已经相当一致了,均衡电流却始终流向低电压侧,因为低电压侧也在被充高,系统等于在做一个无意义的电荷循环,白白耗电。我后来加了一条保险逻辑:如果均衡执行超过预计时间且压差变化量小于 2mV,就认为当前处于无效均衡,强制退出。在 BMS 相关代码里,这类“死循环保护”属于必备设计,宁可多停几次也不要死扛。
7. 这套方案能往哪个方向延展
目前这套系统只解决 2S 的均衡问题,但它本身可以作为更完整 BMS 的最小原型。MP2642GR-Z 这类均衡前端是模块化的,如果把两节电芯之间的均衡原理推广出去,就可以组成级联的 3S/4S 均衡网络。我在规划下一版时,准备在 PIC18F96J94 这边复用多通道采样和通信接口,扩展成 12V/24V 储能电池包管理器的前端,只需把每节电芯的采样回路、均衡电路复制一份,并在主控里做一个多通道调度表。
均衡策略也可以继续升级。下一步我打算把均衡和充电策略联动起来:恒流充电阶段少均衡,恒压阶段多均衡;放电时对压差更宽容,回充时再精细化校准。这样主动均衡的能量能用在刀刃上,整包容量维持效果会更好。另一个方向是引入温度补偿阈值:不同温度下电芯极化程度不同,固定阈值在某些低温场景会过于激进,按温度查表修正阈值会更稳妥。
在这个项目里我最大的体会是,均衡系统的难点从来不在芯片本身,而在于采样是否干净、时序是否不冲突、退出条件是否完整。芯片把最难的高频开关做掉了,软件工程师真正要负责的是那些看起来很笨的判断逻辑。把基础细节踩扎实了,2S 均衡从“能用”到“稳定”其实没有想象中那么遥远。希望这篇记录能帮你少走几步弯路。