ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

2S串联电池均衡设计与实测:基于MP2642GR-Z的BMS方案

2S串联电池均衡设计与实测:基于MP2642GR-Z的BMS方案

上周在调试一批备用电源样机时,我遇到一个很典型的毛病:两节串联的电芯,静置一天后压差从几毫伏扩大到两百多毫伏。客户端反馈说“电池总充不满,容量越用越少”。这其实就是串联电池组最常见的木桶效应——整包容量被最差的那节电芯卡死。当时我用的方案是 MP2642GR-Z 均衡控制芯片配合 PIC18F86J55 单片机,对两个串联电池单元做差异化均衡管理,效果很直观。这篇就把整套系统从选型、电路设计、控制逻辑到实测收尾完整讲一遍,适合正在做储能BMS、备用电源板或对电池均衡感兴趣的硬件工程师参考。

1. 为什么储能系统必须做电池均衡:核心需求与方案选型思路

1.1 两个串联电池单元的不均衡从哪来

很多人一开始会问:新电池出厂时电压不是都一致吗?为什么还要专门做均衡?实际用过就会发现,一致性只是出厂那一瞬间的假象。电芯在制造过程中存在容量、内阻、自放电率的离散性,哪怕同一批次,两节电芯也可能差出 1% 到 2%。这个差异在串联回路里会被不断放大。

拿 2S 电池包举例:假设 A 电芯实际容量 2000mAh,B 电芯只有 1900mAh。充电时,B 会先被充满;放电时,B 又先被放空。整包可用容量就被 B 卡死在 1900mAh,A 剩下 100mAh 用不上。更要命的是,备用电源系统长期处于浮充状态,B 每次都被充到更高电压、经历更极端的工作条件,老化速度比 A 快,容量差距只会越拉越大。

温度分布不均匀也会加剧这个问题。我在样机里用热成像看过,靠近功率器件的那节电芯温度比另一节高出 3 到 5 摄氏度。锂电芯的化学反应速率和温度强相关,温度高的那节容量衰减明显更快。电芯一旦在老化速度上产生分叉,不靠外部手段干预,压差和容量差就会进入恶性循环。

串联电池的均衡,本质上就是要把“强者”多余的能量转移或消耗掉,让每一节电芯都在相近的 SOC 区间工作。对 2S 这种小模组来说,成本敏感、结构紧凑,均衡方案不能太复杂,但又必须能稳定收敛压差。我最终选型的原则很简单:独立均衡芯片负责功率通路和电流控制,单片机负责采样判断和策略调度,各干各的活。

1.2 均衡策略怎么选:旁路放电还是能量搬移

均衡方案大致分两类:被动均衡和主动均衡。被动均衡又叫耗散式均衡,原理是给高电压电芯并联一个放电电阻,把多余的能量以热量形式消耗掉,直到它的电压与其他电芯对齐。主动均衡则是用电感或电容做能量搬移,把高电压电芯的能量转移到低电压电芯,能量利用率高,但电路体积大、成本高、控制复杂。

对比项被动均衡主动均衡
能量处理方式电阻耗散电感/电容转移
均衡电流一般 0.1A~0.5A0.5A~2A 或更高
发热量较大小
成本低高
控制复杂度简单中等偏复杂
典型应用小容量模组、2S~7S大容量储能、动力电池

储能和备用电源系统虽然对能量效率敏感,但 2S 模组的绝对容量不大,均衡时间通常也就几十分钟到一两个小时,被动均衡多消耗的能量完全可以接受。真正需要主动均衡的场合是几十安时以上的大包,那时耗散发热和能量损失会让散热系统吃不消。

我选 MP2642GR-Z 的原因在于它把均衡通道的控制集成了:外部只需要配一个功率电阻,芯片根据车CELL端采到的电压差来控制内部开关管导通时间,从而稳住均衡电流。MCU 不需要直接驱动大功率 MOSFET,也不用关心那么多模拟细节,只负责发使能、读状态、做策略,系统可靠性高了很多。

1.3 为什么选 PIC18F86J55 做管理核心

既然 MP2642GR-Z 已经承担了均衡通道本身的工作,那单片机还需要干什么?它要做的事情其实不少:采集两节电池的电压、计算压差、执行滞回控制、控制均衡通道开断、检测过温过压、和上位机通信,还要在备用电源待机时控制好自身功耗。

PIC18F86J55 是 8 位单片机,很多人一听 8 位就觉得是上古产物。但均衡控制本质上是一个慢速控制任务,开关频率低、算法简单,根本不需要跑复杂的操作系统或浮点运算。反而是 MCU 的稳定性、环境适应性、外设数量和长期供货更关键。PIC18F86J55 自带 12 位 ADC、多路 UART/SPI/I2C、多个定时器,程序空间也够用,80 引脚的封装给采样电路留了充足的独立引脚,在储能柜这种温湿度变化大的场景里表现稳定。

还有一个实际工程问题:BMS 控制系统经常需要存校准系数、故障记录和出厂信息。PIC18F86J55 内部有 EEPROM,我可以在生产线上把每块板的 ADC 校准参数直接写进芯片,换板不丢参数。这一点在后文实测部分会再展开。

2. 硬件电路核心设计:把均衡芯片接入两串电池包

2.1 MP2642GR-Z 的均衡工作方式与外围搭配

先梳理一下 MP2642GR-Z 在电路里的角色。它内部集成了均衡开关管和控制逻辑,外部需要接一个限流功率电阻,形成耗散式均衡通路。芯片实时检测电芯两端电压或接收 MCU 的使能信号,决定内部开关是否导通。当某节电芯电压偏高时,开关导通,电芯通过外部电阻放电;当电压回落到设定范围后,开关关断。

外围设计里最重要的参数就是那个功率电阻。以三元锂电池为例,满充电压按 4.2V 算,均衡电流可以根据 R = V / I 来选。如果我想要约 0.4A 的均衡电流,电阻取值 R = (4.2 - V_MOS) / 0.4,考虑到内部开关管导通压降约 0.2V,算下来 R ≈ 10Ω。

电阻功率必须认真算:P = I² × R = 0.4² × 10 = 1.6W。这看起来不大,但电阻是持续发热器件,如果均衡时间长达一两个小时,热量会非常可观。选电阻时功率降额至少留一倍余量,也就是 2W 起步。我曾经在第一版板子上用过 1/4W 的贴片电阻,均衡跑了不到五分钟就开始冒烟,这个坑后面细说。

PCB 布局上,均衡电阻应该放在板边,远离 MCU、采样电路和电芯温度传感器。均衡动作时电阻表面温度可能到 85 摄氏度以上,如果紧挨着热敏电阻,温度检测会直接失真,系统误判过温保护就麻烦了。电阻附近要铺大面积铜箔辅助散热,采样线则要走开尔文接法,避免大电流在采样路径上产生压降。

2.2 两串电池的均压采样电路

均衡控制能不能做好,前提是电压测得准。两节串联电池的采样有个典型坑:不能把一个 8.4V 的电压直接送到 MCU 的 ADC 引脚,必须先分压。而且第二节电芯的正极相对 MCU 地(电池负极)是浮动的,需要分别采样“总电压”和“中间点电压”,再做差分计算。

我的做法是:总电压 BAT+ 通过一个高阻分压网络送到 ADC 通道 0,中间点电压通过另一个分压网络送到 ADC 通道 1,两节电芯的电压在 MCU 内部做减法求得。分压电阻必须用 0.1% 精度的低温漂电阻,否则一个千分之一的偏差在 4V 满量程上就是 4mV 误差,加上 ADC 本身的量化误差,均衡阈值设计得再精细也白搭。

滤波电容也不能随便选。我用的是 100nF 加 10kΩ 电阻组成的 RC 低通,截止频率约 159Hz,既能滤掉开关电源的高频噪声,又不至于让电压采样响应太慢。ADC 采样时刻要避开充电器 PWM 开关瞬间,软件里做多次采样取平均也能进一步抑制噪声。

另外,分压电阻网络的静态电流也要考虑。备用电源系统长期挂电待机,如果分压电阻选得太小,比如各用 10kΩ,从电池上拉的电流就是微安到毫安级别,长时间下来会白白消耗电池。我的做法是用大阻值分压,总静态电流控制在 10μA 以下,同时给每个 ADC 通道加一个模拟开关,只在采样瞬间接通分压网络。

2.3 控制器供电与保护逻辑

PIC18F86J55 的工作电压一般在 3.3V 左右,而电池包电压是 7.4V 到 8.4V,中间需要一级稳压。这个稳压器的选择有讲究:如果直接用 LDO,待机电流好控制,但压差大、效率低;如果上 DC-DC,效率高但会引入开关噪声,可能影响 ADC 采样。我最终选了低静态电流的 LDO,并在 LDO 输出端加了二级 RC 滤波,给 MCU 和 ADC 基准供电。

保护逻辑不能只指望均衡芯片自己。我在 MCU 侧做了完整的过压、欠压、过温和短路保护检测:两节电芯电压分别超过 4.25V 或低于 2.8V 时,MCU 立刻关断均衡通路并置位故障标志;板载温度传感器检测到环境温度超过 60 摄氏度时也会禁止均衡。这些保护逻辑写在中断服务程序里,优先级最高,保证异常情况下能快速响应。

和上位机的通信我留了 UART 转 RS485 的接口,因为储能和备用电源系统经常要接到总控箱,RS485 的抗干扰能力和传输距离比裸 UART 强得多。通信内容主要是电压、压差、均衡状态、故障码和累计均衡时间,方便后续做大数据分析和维护诊断。

3. 均衡控制逻辑:从阈值判定到完整状态机

3.1 两种核心均衡时机:充电末端与静置时段

均衡不是任何时候都适合开。放电过程中强行均衡没有意义,因为电池电压本身在剧烈变化,你根本分不清压差是“不均衡”还是“动态响应差异”。我把均衡控制分成两个主要窗口:充电末端均衡和静置均衡。

充电末端均衡发生在充电进入恒压阶段之后。这时候某节电芯电压已经接近满充电压,继续大电流充电会导致过充风险。此时打开对应电芯的均衡通道,让它通过外部电阻泄放一部分电流,充电电流就会更多流向电压偏低的电芯,把两节电芯拉回更接近的 SOC。

静置均衡则是系统处于待机或轻载时执行。电池既不充电也不放电,端电压最能反映真实的 SOC 差异,这时候做均衡效果最准确。备用电源系统的特性就是大部分时间处于待机状态,静置均衡的窗口非常充裕。

状态机的设计大概是这样的:系统上电后先做自检,确认 ADC 校准参数有效、温度正常,然后进入待机状态。待机时持续监测压差和电压,一旦满足均衡条件就切入对应状态。如果检测到温度过高或通信故障,就锁定故障状态,只允许通过断电或人工指令恢复。

3.2 阈值参数怎么算:滞回、死区与实际效果

均衡阈值是控制策略里最需要细心调的参数。阈值设得太小,均衡频繁启停,开关管和电阻反复承受热冲击;阈值设得太大,压差收敛标准太松,均衡失去意义。

我的初始参数设定是这样的:压差均衡开启阈值为 30mV,关闭阈值为 10mV。也就是说,只有当两节电芯电压差超过 30mV 时才启动均衡,而压差降到 10mV 以下就停止。开启和关闭阈值之间留了 20mV 的滞回窗口,目的是防止 ADC 采样噪声把均衡通道反复触发和关闭。

充电末端的均衡阈值则参考满充电压:三元电池按 4.15V 触发,关闭阈值放到 4.10V;磷酸铁锂按 3.60V 触发,关闭阈值放到 3.55V。这样做的原因是恒压阶段充电电流在逐渐减小,均衡电流不需要太大就能对充电分配产生明显影响。

均衡电流大小也要和充电电流匹配。假设充电电流是 1A,均衡电流 0.4A,那么高压电芯实际充电电流只有 0.6A,低压电芯则维持 1A,相当于 0.4A 的“差额”都被用来补充低压电芯。如果充电电流只有 0.2A,均衡电流开到 0.4A,高压电芯不但没充电反而在放电,压差虽然能快速收敛,但高压电芯会掉电过多,整体电量反而下降。所以均衡电流一般取充电电流的 30% 到 50%,或者干脆做成 PWM 可调模式。

3.3 MCU 软件实现要点与伪代码

单片机上跑的均衡逻辑并不复杂,但要注意代码的可读性和可维护性,毕竟现场调试主要靠状态变量判断问题。我习惯用状态机 + 定时中断的结构,主循环处理非实时任务,定时中断里做 ADC 采集和阈值判断。

采样处理流程每 100ms 执行一轮:ADC 连续采样 16 次取平均,滤掉最大值和最小值,再把 ADC 原始值通过校准系数换算成实际毫伏电压。校准系数存在 EEPROM 中,出厂时逐板标定。压差计算放在平均值滤波之后,防止单次采样异常导致误动作。

下面是均衡控制核心代码的简化示例,方便理解整体结构:

#define BAL_EN_DIFF_ON 30 // mV #define BAL_EN_DIFF_OFF 10 // mV #define BAL_EN_CELL_ON 4150 // mV #define BAL_EN_CELL_OFF 4100 // mV uint16_t vcell1, vcell2; // 实际电压 单位mV uint8_t bal_state = BAL_IDLE; // 状态机变量 void bal_control(void) { uint16_t diff = abs(vcell1 - vcell2); switch (bal_state) { case BAL_IDLE: if (diff >= BAL_EN_DIFF_ON) bal_state = BAL_DIFF; else if (vcell1 >= BAL_EN_CELL_ON || vcell2 >= BAL_EN_CELL_ON) bal_state = BAL_CHG_END; break; case BAL_DIFF: bal_channel_enable(1); // 打开压差均衡 if (diff <= BAL_EN_DIFF_OFF) { bal_channel_enable(0); bal_state = BAL_IDLE; } break; case BAL_CHG_END: bal_channel_enable(2); // 打开充电末端均衡 if (diff <= BAL_EN_DIFF_OFF && vcell1 < BAL_EN_CELL_OFF && vcell2 < BAL_EN_CELL_OFF) { bal_channel_enable(0); bal_state = BAL_IDLE; } break; default: bal_channel_enable(0); bal_state = BAL_IDLE; break; } }

这里有个工程细节要注意:均衡通道导通时间不能无限长。即使压差没到关闭阈值,MOS 管和均衡电阻的热量也在持续累积。我在定时中断里维护一个“均衡占空比”计数器,默认开 60 秒、关 30 秒,等效把平均功耗降为原来的三分之二。这样即便长时间均衡,板子温度也能稳住。

4. 实测调试验证与整机集成

4.1 从硬件调试到功能点亮

板子打样回来,上电前先做静态检查:拿万用表量电池正负极之间有没有短路,量均衡电阻两端阻值是否和设计一致,量 MCU 供电电压是否正确。确认没问题后才接上电池,否则一个低级焊接错误就可能毁掉整块板子。

我习惯先用两台可调直流电源模拟两节电池,而不是直接用真实电芯。把两台电源分别调到 4.2V 和 4.0V,模拟出 200mV 的人为压差。这样做的最大好处是电压可以精确控制,不会因为电芯自放电让实验条件漂移。

MCU 程序烧录后,第一件事是验证 ADC 读数和万用表读数是否一致。如果偏差超过 10mV,先查分压电阻阻值和基准电压。我用的办法是用 6 位半万用表在电池端实测电压,然后和 MCU 上报值对比,逐个通道记录偏差,最后拟合成增益和偏置两个校准系数,写进 EEPROM。

功能点亮的标准是:模拟压差超过 30mV,均衡通道立刻打开;把高电压那台电源往下调,当压差小于 10mV 时,均衡通道自动关闭。逻辑正确后再接真实电芯做循环测试。

4.2 均衡效果实测数据解读

为了验证均衡效果,我特意挑了两节状态差异明显的电芯:一节充满到 4.20V,另一节只充到 3.95V,初始压差 250mV。这个压差在真实备用电源系统里已经很严重了,如果不处理,低压电芯在整机负载下会很快触发欠压保护。

整机接上充电器开始充电,开始时压差几乎没有变化,因为两节电芯都在恒流充电阶段。当高压电芯电压到达 4.15V 后,充电末端均衡启动,均衡通道按 60 秒开、30 秒关的节奏工作。高压电芯的充电速度明显被压制,低压电芯电压则持续爬升。

时间Vcell1(mV)Vcell2(mV)压差(mV)均衡状态
开始42003950250关闭
15分钟42014060141充电末端均衡
45分钟4200417228充电末端均衡
75分钟4198418810压差均衡
120分钟419641915关闭

从数据可以看到,均衡大约经过 45 分钟把压差从 250mV 收敛到 30mV 以内,之后进入静置均衡模式,最终稳定在 5mV 左右。整个过程中,均衡电阻表面温度最高到过 82 摄氏度,MCU 温度保持正常,待机电流测到 0.8mA,符合备用电源系统对静态功耗的要求。

4.3 储能和备用电源整机集成注意事项

均衡板单独工作正常,不代表塞进整机后依然正常。我遇到过好几次,单板调试没问题,装进机箱后均衡不启动或者压差变大,最后排查都是系统集成层面的问题。

第一,均衡窗口必须和充电策略配合。如果充电器进入恒压阶段的时间太短,均衡可能还没来得及把压差拉回来充电就结束了。我建议在充电器的充电曲线里预留“均衡等待时间”,比如恒压阶段至少保持 30 分钟以上,让均衡控制有时间见效。

第二,采样线要远离功率路径。机箱内功率线电流变化会产生磁场,采样线如果和功率线长距离并行走线,会在 ADC 输入端感应出共模噪声。我要求生产装配时采样线使用双绞线,并且和功率线保持至少 5cm 距离,交叉处垂直走线。

第三,通信和故障上报要走到系统层。备用电源系统通常有总控单元,均衡板的状态不能只是“自己知道”。我把均衡累计工作时间、当前压差、最近一次均衡时间都通过 RS485 上报,这样系统维护时能直接判断电池健康状态,而不需要拆机测试。

5. 常见问题与排查技巧实录

5.1 高频问题速查表

整理了几个我实际调试中经常遇到的问题,做成表格方便快速对照排查。

现象可能原因排查方法
均衡通道不开启使能信号没拉高;电压未达阈值;分压电阻虚焊检查 GPIO 配置;万用表量使能脚电压;加焊分压电阻
电压测量偏差大于 20mV分压电阻精度不够;基准电压漂移;采样点接触电阻换 0.1% 电阻;校准基准;检查开尔文接线
均衡电阻严重发热功率余量不足;均风占空比过高;散热铜箔不够降额选电阻;调低占空比;加大铜箔面积
压差越均衡越大采样点接错;均衡电流过大;地回路共模干扰核对接线;降低均衡电流;采样线远离功率线
待机电流超标MCU 未进入睡眠;分压电路常通;LDO 静态电流大配置睡眠模式;采样时切换分压电源;换低功耗 LDO
通信数据乱码波特率偏差;电平不匹配;总线缺终端电阻核对波特率;检查收发器电平;补 120Ω 终端电阻

5.2 我踩过最深的几个坑

第一个坑是开尔文采样。第一版板子我把采样线和均衡电流路径接在同一个焊盘上,均衡导通时 0.4A 电流在铜箔上产生的压降直接叠加到采样电压里,导致系统误判电压偏高、均衡持续导通,直到电阻过热才发现。后来把采样线单独拉到电池端子的采样点,电流路径和采样路径完全分开,问题才消失。

第二个坑是均衡电阻功率降额不足。最开始计算用的是瞬时功耗,忽略了长时间工作的热积累。后来统一要求均衡电阻按计算功耗的 2 到 3 倍选型,板上预留散热铜箔,并在软件里加了间歇均衡模式,热问题才算根治。

第三个坑和 EEPROM 校准数据有关。量产时有一批板子换过 MCU 后均衡阈值表现明显不对,查了半天发现是校准参数没有写入新芯片,MCU 用的还是默认值。后来在产测流程里增加了强制校准步骤:每块板子都用精密可调电源模拟两档电压,逐通道校准并写入 EEPROM,生产现场没再出过这种问题。

第四个坑是通信和均衡争抢 MCU 时间。我在定时中断里放了 ADC 采样和均衡状态机,UART 发送放在主循环。当 RS485 在大量上传调试数据时,主循环被发送任务占住,均衡状态机虽然还在定时中断里跑,但状态上报明显延迟,影响了上位机的实时监控体验。后来把发送改成了 DMA 方式,主循环负担大部分降到通信模块上,问题就解决了。

至于换电芯后要不要重新校准,我的建议是:如果只是同型号电芯替换,校准参数不需要变;如果换了不同材料体系的电芯,满充电压、均衡阈值、过压保护点这些参数必须全部重新标定,不能沿用旧数据。均衡系统是为特定电芯的电压平台设计的,跨材料体系复用参数很容易出安全风险。

整套方案做下来,我最深的体会是:均衡电路看着简单,真正决定成败的其实是采样精度和控制节奏。芯片选得再好,采样一塌糊涂,均衡就成了盲人摸象。量产阶段给每块板子做一次压差自检和校准,把补偿值写进 EEPROM,这个步骤看起来繁琐,却能省掉大量售后排查时间。如果你也在调类似的 2S 均衡板,建议先把采样精度搞定,再去调均衡策略,这条路走下来会顺畅很多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进