两节电池串联组成的储能/备用电源系统,最大的隐性问题不是容量不够,而是两节电池越用越不齐。我最近做了一套主动均衡样板:以 MP2642GR-Z 同步降压转换器作为能量搬运功率级,PIC18F87J60 作为主控和网络通信核心,专门解决两节串联电池在长期浮充、循环后的电压失衡问题。整套硬件拓扑、控制逻辑和调试踩坑记录都在下面,适合正在做 BMS、UPS 或者户用储能均衡模块的工程师参考。这版方案不追求花哨,胜在功率级好找、代码可控、远程能看得见状态,也算是一条能落地的主动均衡路线。
1. 串联电池"SOC差"为什么会被储能系统放大——先说清均衡的必要性
1.1 一个 24V 备电系统里最容易被忽略的"电量黑洞"
我在一次连续 48 小时放电测试里发现,两节出厂配对的 12V 铅酸电池,在浮充状态下电压几乎完全一致,但一旦进入循环放电,落后电池的端电压会以肉眼可见的速度往下掉。原因是串联回路的电流处处相等,但两节电池的内阻、容量、自放电率不可能完全相同。出厂差 1%,循环 50 次后可能拉大到 10% 以上。
用数字更直观:假设两节电池实际容量差 2%,每完成一次 50% DOD 的放电,落后电池就比另一节少放出约 24mAh 电量。如果系统每天循环一次,一个月后这个差值就会累积到 700mAh 左右。到真正需要备电切换的时刻,落后电池最先撞上欠压保护点,整组直接停机,储能系统等于白装。
这恰恰是所有备用电源最怕的"容量黑洞":平时静态电压看着正常,带载后立刻现形。市面上的保护板只做总电压高/低压保护,根本发现不了单体失衡。所以必须有一个能感知单体状态、主动拉平能量的环节。
1.2 被动均衡的代价:把能量变成热量,还均衡不快
传统 BMS 里最常见的被动均衡,原理很简单:通过一个并联电阻给电压偏高的电池放电,把富余能量变成热量耗掉。实现成本很低,所以在消费类电池包里用得很多。但它有两个硬伤。
一是慢。受限于散热和 PCB 面积,均衡电流通常只有 100~200mA。要对 100mV 左右的压差完成校正,往往需要连续放电几个小时,期间均衡电阻一直发热,电路板温度升高还会拉低采样精度。
二是在储能场景不划算。备用电源的本质是"关键时刻把能量放出来",被动均衡却是把本来可以保留的能量提前变成热。如果系统经常处于浅充浅放状态,被动均衡不仅没有提升可用容量,反而每次都在浪费能量。主动均衡的意义就在于把高电池的富余能量搬到低电池去,理论上 80%~90% 的能量可以被重新利用。
1.3 主动均衡的路径选择:为什么是"DC-DC 功率级"
主动均衡的常见实现有电容飞渡、电感转移、反激变压器隔离、DC-DC 变换器。电容飞渡实现简单,但只在相邻单元之间搬运,电流做大后开关损耗很高,适合小容量手持设备。电感转移开关时序复杂,双向控制要写不少逻辑。反激变压器能实现大压差跨单元转移,但变压器设计和漏感吸收都需要额外精力。
两节串联是最简单的拓扑,DC-DC 方案的性价比就体现出来了。MP2642GR-Z 内部集成同步高/低边 MOS,本质是一个完整的半桥功率级,配合一只电感和中点节点,就能在上下两个电池之间搬运能量。外围元件少,效率高,控制量只有"目标中点电压"这一个自由度。这就是我把标题里的主动均衡落在 MP2642GR-Z 上的原因。
2. 硬件骨架:把 MP2642GR-Z 变成电池间能量搬运工
2.1 选型逻辑:为什么一颗同步降压转换器够用
MP2642GR-Z 是很常见的同步降压转换器,输入电压范围覆盖常见电池组,持续输出能力到 2A,内部集成高低边 MOSFET 和同步整流控制。在这里我没有把它当成传统的 Buck 降压器去给某个固定的低电压轨供电,而是借用它内部的半桥开关单元,配合外部电感,让它可以双向搬移能量。
它要实现的场景是:两节电池串联,总正极为 BAT+,中间节点为 MID,总负极为 GND。MP2642 的输入接 BAT+ 与 GND,SW 引脚通过一只功率电感接到 MID。这样功率级实际上就是一个同步 Buck,但负载不是普通电阻,而是电池中点。通过控制 SW 的平均电压,可以让电感电流正向流动(从 SW 向 MID),也可以反向流动(从 MID 向 SW),从而决定能量从哪一节电池搬向另一节。
这里要提醒一点:很多工程师第一次听到"降压转换器做均衡"会下意识认为输入接高电池、输出接低电池,其实那需要两个相互隔离的浮动输入端,普通非隔离 Buck 很难切换目标。真正好用的接线方式就是把半桥并接在整个串联组的正负两端,让电感一端落到中点。这也是"通过 MP2642GR-Z 实现均衡"这句话的准确含义。
2.2 功率级连接与能量方向控制
连接关系可以整理成下面这张表,理解之后再看控制逻辑就顺了。
| 端口 | 连接对象 | 说明 |
|---|---|---|
| MP2642 VIN | BAT+(串联组总正极) | 输入母线 |
| MP2642 GND | GND(串联组总负极) | 与输入共地 |
| MP2642 SW | 功率电感 L 的一端 | L 的另一端接 MID |
| MP2642 FB | 中点电压取样分压电阻 | 参考被 MCU 微调 |
| MP2642 EN | MCU GPIO | 均衡使能,低有效禁用 |
稳态情况下,忽略电感直流电阻和开关压降,SW 的平均电压等于电感的平均电压,也就是 MID 点电压。MP2642 内部的误差放大器会持续调节开关占空比,把 FB 电压稳住。FB 分压电阻的取点接到 MID,本质上可以让转换器"跟踪"中点电压,相当于一个主动负载。
想要能量从高边电池搬向低边电池时,MCU 通过 FB 注入电流抬高参考,MP2642 认为输出电压偏低,自动增大占空比,SW 平均电压升高,电感电流从 SW 流向 MID,给低边电池充电。与此同时,整个串联组都会因为功率级从输入母线取电而承受相同的输入电流,高边电池也在被消耗,于是净效果就是高边电池能量减少、低边电池能量增加。
反过来,MCU 降低参考电压,SW 平均电压低于 MID,电感电流反向,低边电池的能量流回输入母线侧,等效给高边电池补充。控制方向和电流大小,本质上就是控制 FB 参考偏移量和闭环速度。
功率电感建议选 10uH~22uH、饱和电流 3A 以上,DCR 越低越好。开关频率内产生的纹波电流控制在 0.3A 左右,既能保证半桥工作稳定,又不至于在电池上叠加明显噪声。MP2642 的输入侧要放低 ESR 的陶瓷电容,总容量至少 22uF 起步。
2.3 电压采样链路:两节电池的端电压怎么读才可信
PIC18F87J60 自带的 ADC 是 10 位,直接拿它衡量 100mV 量级的均衡差会很难受。我的做法是先用高精度电阻分压把 BAT+ 和 MID 分别降到 ADC 量程内,然后对两个通道采样,再在软件里做差分:V1 = VBAT+ - VMID,V2 = VMID - GND。
分压电阻要用 0.1% 精度、低温漂的金属膜电阻;每个采样点对地加 100nF 电容做 RC 滤波,时间常数选在毫秒级,既能滤掉开关噪声,又不会拖慢动态响应。
这里有一个容易被忽略的细节:绝对精度远不如通道间一致性重要。均衡判据看的是 V1 和 V2 的差值,而不是它们各自相对于真实值有多准。只要两个通道采用相同型号的分压电阻、同样的布局长度,温漂系数一致,差分结果就能稳定到几个毫伏级别。我甚至没有另外做高精度基准校准,而是靠差分设计把 10 位 ADC 的缺陷绕开了。
电流采样放在功率电感的输入侧或 MID 侧。采样电阻可以选 0.01Ω/1W 的锰铜电阻,经过仪表放大器放大后再进 ADC。仪表放大器的共模抑制比很关键,因为在均衡过程中 MID 点电位会小幅波动,不能简单用单端采样电阻看电流。
2.4 PCB 布局的几条具体经验
布局上,MP2642 的 SW 节点是整个板子最脏的地方。电感必须紧贴 SW 引脚,环路面积尽量小;输入电容要靠近 VIN 和 GND 引脚,否则开关尖峰抑制不住。采样走线要远离 SW 和电感,用细线从电池端直接拉回 MCU,中间不要穿过功率地。
地线建议采用单点回流:功率地、模拟地、数字地在 ADC 采样附近汇合。电池连接端子用开尔文接法,采样线独立于功率线,避免大电流在 PCB 铜箔上产生 10mV 级压降,直接影响均衡判断。
热设计方面,我实际跑 1A 均衡电流时,MP2642 和电感本身的损耗会让局部温升接近 15℃,所以顶层和底层都要为功率器件铺设大面积敷铜过孔散热。温度采样探头贴在电池极耳和 MOS 附近,超过 60℃ 就降流或停机。
3. PIC18F87J60 主控:ADC 精度、均衡状态机与以太网监控
3.1 为什么选这颗自带以太网接口的 MCU
备用电源系统的痛点在于"没人值守"。如果均衡器只会本地工作,故障了只能等人拿着万用表去查,这不符合实际运维需求。PIC18F87J60 系列一大特点就是内部集成了以太网 MAC 和 PHY,外部只需要一个带隔离变压器的 RJ45 插座就能联网,不用额外接 PHY 芯片,PCB 面积和调试成本都省下一大截。
MCU 本身主频、Flash、RAM 应付均衡状态机和轻量 TCP/IP 协议栈足够。Microchip 生态里也有现成的 TCP/IP 协议栈可以参考,不需要从零写网络协议。对两节电池的均衡控制来说,IO 和定时器资源绰绰有余。
3.2 ADC 采样链路与校准方法
ADC 不是越高越好,关键是采样策略。我每个通道连续采样 64 次,软件排序后取中位值,再对中位值做滑动平均。这样可以同时抑制随机噪声和脉冲干扰。采样时机上,尽量避开功率级开关动作和以太网发送瞬间,减少电源串扰对 ADC 参考电压的影响。
我另外在板上留了一个 2.5V 精密基准,接在某一个 ADC 通道上。每次上电先测基准通道,把计算到的增益误差用到整个系统上。这个校准不能解决差分电阻带来的绝对误差,但能保证同一颗芯片在不同温度下读数更稳定。
需要特别说明的是,均衡是否完成的判断不能只看瞬时压差。我建议加一个"稳定窗口":只有连续 2 分钟压差都小于阈值,才判定均衡结束。因为均衡电流切断的瞬间,电池内部的极化电压会回弹,瞬时读数很容易造成误判。
3.3 均衡状态机设计
整个均衡逻辑用状态机实现,状态包括 IDLE、BALANCE、DONE、FAULT。IDLE 状态下每隔 5 秒做一次压差判断;|V1-V2| 大于 30mV 且持续一定时间才进入 BALANCE,防止负载波动造成误触发。BALANCE 状态下根据压差符号决定电流方向,每 200ms 闭环一次电流。DONE 状态保持监控 10 分钟,观察电压回弹情况。FAULT 状态下立即切断均衡使能,禁止 MOSFET 动作,等待上位机复位。
| 状态 | 触发条件 | 动作 | 退出条件 |
|---|---|---|---|
| IDLE | 上电初始化完成 | 采样监控 | 压差大于 30mV 持续 5s |
| BALANCE | 压差有效 | 恒流均衡,方向自动 | 压差小于 10mV 持续 2min |
| DONE | 均衡完成 | 停止搬移,观察回弹 | 回弹大于 30mV 重新均衡 |
| FAULT | 过压/欠压/过温/超时 | 关断所有输出 | 上位机手动复位 |
超时保护非常关键。我设置了最大均衡时间 4 小时,超过后强制进入 FAULT,并把故障码和累计均衡电量通过网络上报。这样可以防止因为某节电池微短路导致均衡器无限工作下去,给故障排查留出现场。
3.4 以太网监控:从 Modbus TCP 到简单 JSON 状态页
网络通信方面,我第一版协议用的是 Modbus TCP。寄存器地址 0x100 到 0x105 分别映射 V1、V2、压差、均衡电流、状态字和温度;Modbus 写寄存器可以设置均衡允许、目标压差阈值和强制均衡开关。Modbus TCP 的好处是上位机组态软件直接支持,不用额外写调试工具。
如果需要快速 Web 调试,也可以在 TCP/IP 协议栈上方加一个极简 HTTP 服务,返回 JSON 格式状态。Wireshark 抓包做通信验证时,Modbus 报文更容易解释,所以我更推荐先上 Modbus TCP。需要注意 Modbus TCP 本身没有认证机制,工程上不能把它们直接暴露在公网或办公网,需要放进独立的设备管理 VLAN,或者用防火墙做来源 IP 白名单。
4. 均衡控制的关键细节:判断阈值、搬运时长与安全边界
4.1 用电压差还是 SOC 差来触发均衡
最直观的触发条件是端电压差,但它受负载电流、极化和温度影响很大。大电流放电时,内阻大的电池端电压低,不代表 SOC 一定低。如果这时候触发均衡,很可能把能量搬到错误的方向。
我的做法是:均衡只有在"空闲且无充放电"条件下才触发,而且要等开路静置 5 分钟以上。如果系统正在带载,即使看到压差很大,也只记录不动作。判断方向时优先使用开路电压差,因为开路电压与 SOC 的对应关系比端电压靠谱得多。
对要求更高的系统,可以再做一张 OCV-SOC 查表:根据开路电压估出两节电池各自的 SOC,SOC 差超过 3% 再启动均衡。两节电池的场景下表很小,我实测下来用简单电压差加静置条件已经足够稳定。
4.2 均衡电流设定:为什么我限制在 1A 而不是 2A
MP2642 的持续电流能力是 2A,但我实际工程里把均衡目标电流限制在 0.8A~1.2A,原因有三。
第一,均衡电流产生在电池内阻上的压降会干扰采样。以一节内阻 120mΩ 的电池为例,1A 电流会在端子上产生 120mV 的压降,和要校正的压差同一个数量级。如果电流再大,采样时必须加入 IR 补偿,否则方向判断都可能反掉。
第二,热管理。1A 均衡电流下 MP2642 半桥的开关损耗、导通损耗和电感铜损叠加,板上温升已经能达到十几摄氏度。跑到 2A 需要有强风冷或大面积散热器,不符合备用电源系统的体积要求。
第三,均衡不是充电,没有人要求半小时内把差填平。铅酸和锂电的极化效应决定了压差收窄后,大电流反而让效率大幅下降。我在程序里做的是"压差大时用 1A,压差小于 40mV 时自动降流到 0.4A",这样后半段既不激进,又不会让系统处于功率级长时间高负荷状态。
4.3 滞环和超时保护防止"无尽均衡"
电池是存在自恢复特性的。
均衡做完后如果立刻检测,压差大概率会反弹。我设置的结束条件是"压差小于 10mV 并持续 2 分钟",而重新启动条件是"压差大于 30mV 持续 5 秒"。这个 10mV/30mV 的滞环能避免系统在边界处反复启停,对 MOSFET 和功率电感也都友好。
超时保护的前面提过,这里补一个细节:均衡过程中每 10 秒记录一次累计搬运电量,如果 1 小时内的压差改善小于 5mV,程序认为电池可能存在微短路或容量严重匹配问题,直接进 FAULT 而非继续空转。这种"效率监看"比单纯超时要更能暴露隐藏问题。
4.4 失败模式分析:MOS 误导通、FB 参考注入不稳定、采样漂移
调试过程中最容易翻车的是上电时序。MCU 的 GPIO 在复位期间是高阻态,如果 MOSFET 栅极没有下拉电阻,VDD 爬升过程中栅极可能被噪声拉起,导致均衡功率级意外开启,电池组瞬间形成短路通路。解决方法是每个控制 MOS 栅极都并联 10kΩ 下拉电阻,同时在 MCU 程序 main 函数第一步就把所有均衡控制脚配置为输出低电平,最后再使能 MP2642 的 EN。
FB 参考注入如果直接用 PWM 滤波,纹波会叠加到 MP2642 的误差放大器上,表现为均衡电流周期性抖动。我的处理是将 PWM 频率放在 10kHz 以上,做两级 RC 滤波,时间常数 10ms 左右,让它变成一个足够干净的直流电平。注入电阻的取值也要控制,否则会影响 FB 分压网络的默认工作点。
采样漂移是另一个常见陷阱。分压电阻的温度系数虽然是 50ppm,听起来很小,但两节电池采样通道如果布局不对称,温差 20℃ 就能带来几个毫伏的误差。均衡判定要留出余量:触发阈值设 30mV 而不是 10mV,就是为了避免热噪声把均衡器变成"永动机"。
5. 实测结果、踩坑经历与对这套方案的复盘
5.1 一次完整的均衡过程记录
我用两节标称 12V/7Ah 的铅酸串联组做了完整验证。初始开路电压分别是 12.31V 和 12.19V,压差 120mV。程序判定方向为高边向低边搬运能量,启动 1A 恒流均衡。
| 时间 | 状态 | V1 | V2 | ΔV | 均衡电流 | 备注 |
|---|---|---|---|---|---|---|
| 0:00 | IDLE | 12.310 | 12.190 | 120mV | 0 | 开始 |
| 0:10 | BALANCE | 12.280 | 12.240 | 40mV | 0.83A | 前半段快速收窄 |
| 1:00 | BALANCE | 12.250 | 12.230 | 20mV | 0.78A | 极化效应显现 |
| 2:10 | BALANCE | 12.240 | 12.230 | 10mV | 0.42A | 自动降流 |
| 2:30 | DONE | 12.238 | 12.230 | 8mV | 0 | 停止搬移 |
| 2:40 | HOLD | 12.235 | 12.222 | 13mV | 0 | 电压回弹 |
这条曲线说明两件事:压差大时均衡速度主要受制于安全电流;压差缩到 20mV 以下后,继续大电流均衡的效率很低,降流是对的。最终停止后回弹到 13mV,处于滞环以内,系统不会误重启。
5.2 调试中遇到的三个坑,逐个说清
第一个坑是 MCU 上电瞬间的 MOS 误导通。有一次我在上电波形里看到均衡电流瞬间冲高到 2.5A,检查后确认是 GPIO 复位期间的高阻态让栅极漂移。加了 10kΩ 下拉,并延长均衡使能延时到上电 500ms 之后,这个问题彻底消失。
第二个坑是轻载反向电流。MP2642 作为半桥功率级,电感电流在均衡结束阶段会降到很低,如果内部控制进入非连续导通模式,反向电流会导致 FB 检测混乱,电流读数来回跳。我在程序里设置了最小均衡电流 0.2A,一旦检测到目标电流低于下限,直接切断功率级,而不是让它在小电流下"硬撑"。
第三个坑比较隐蔽:以太网变压器中心抽头接法不对,导致网口完全 Link 不上。自查发现是中心抽头到地的电容漏焊。重新按参考设计补齐中心抽头退耦电容后立即恢复。这个坑提醒我,网络隔离变压器的参考设计不能想当然删减。
5.3 效率、温升与优化建议
实测效率在压差 1.2V、电流 1A 时约 88%,压差降到 0.3V 以下时效率只有 40% 左右,原因主要是开关损耗占比迅速上升。这个现象很正常,也说明主动均衡系统不该在极小压差下持续大电流运行,收益太低。我在逻辑里增加"压差小于 0.3V 时进入低频小电流补能模式",就是基于这个实测。
温升最明显的地方是功率电感和 MP2642 底部。如果机箱有自然对流,1A 长时均衡后局部温度会到 55℃~60℃;2A 时直接奔着 85℃ 去,这已经逼近器件规格上限。所以散热设计应该以 1A 为基准,如果系统想跑更大电流,必须补强制风冷或者降低环境温度指标。
电感选型上,DCR 每降低 10mΩ,1A 电流下就能少 10mW 损耗,听着不多,但积少成多。我最后用了铁硅铝磁环绕制电感,发热比普通功率电感小得多,饱和特性也更好。
5.4 扩展到更多节串联的思路
两节只是这套方案的最小闭环。四节串联时,可以有两种扩展方向:要么每两节相邻电池之间放一个同样的半桥均衡器,形成链式结构;要么做一个集中式母线,用多个开关矩阵把任意一节电池的正极接入功率级,MCU 统一仲裁。
链式结构优点是不需要高压开关矩阵,控制逻辑可以复用现有状态机,缺点是非相邻单元之间要靠中间单元中转,均衡速度略有损失。矩阵方案速度快,但 MOSFET 数量、驱动电路和故障保护都要复杂很多,适合电池节数更多的储能机柜。
我建议先在两节样板上把所有异常状态处理明白,再往四节扩充。因为均衡器真正难的不是"正常搬运",而是"异常时不出事"。两节时都很难靠仿真覆盖全部边界,多节之后状态爆炸,更需要成熟的状态机和保护逻辑。
以太网部分在扩展后价值更明显。每个均衡模块上报自己的电压和电流,集中监控后台可以看到整组电池的健康度曲线。将来做电池更换决策时,这些数据比任何出厂报告都可靠。