ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

两串电芯主动均衡方案:MP2642GR-Z+STM32L031C6压差收敛5mV

两串电芯主动均衡方案:MP2642GR-Z+STM32L031C6压差收敛5mV

做过电池供电产品的朋友都清楚,两节串联电芯看着结构简单,实际用起来最容易翻车。出厂时电压差几个毫伏,几十次充放电循环后能拉开到上百毫伏,容量小的一节会先到截止电压,整组电池的容量只能按最差的那节算。这在储能和备用电源系统里是绕不开的问题。最近我参与的两串电池包均衡控制项目里,用 MP2642GR-Z 配合 STM32L031C6 搭了一套主动均衡方案,把压差从 80mV 拉回到 5mV 以内,不依赖外部均衡充电器,整机成本也压了下来。这篇文章就围绕这套方案,把硬件选型、均衡策略、调试踩坑和常见故障一次讲透。

1. 方案整体定调:为什么串联电芯一定要做均衡

1.1 两串电池不均衡的根源与危害

两个串联的锂离子电芯,理论上充电电流相同、放电电流相同,电压应该保持一致,但现实世界不存在两个完全一样的电芯。首先是制造公差,同一批次正极材料厚度、电解液浸润程度、隔膜一致性都存在微小差异,体现在容量、内阻和自放电率上。

其次是工作环境差异。电芯在电池包内部的位置不同,散热条件就不同。靠近发热元件的电芯温度可能比另一节高 3 到 5 摄氏度,化学反应速率跟着变化,充放电的伏安特性自然不同。第三是自放电率差异,静置不要紧,时间一长电压就会逐渐拉开。

危害不是“容量少一点”那么简单。两节串联放电时,容量低的那节先到放电截止电压,此时另一节还有余量,但保护板只要检测到任意一节欠压就会切断输出,整组电池可用容量等于两节中剩余最少的那节,木桶效应非常直白。充电时反过来,容量低的那节先到满电电压,如果不均衡,它就要承受过压风险,可能引发析锂、产气,甚至热失控。

1.2 主动均衡与被动均衡的取舍

市面上常见的均衡方案分两类。被动均衡是把高电压电芯的能量通过电阻放热消耗掉,直到和低电压电芯一致。这种方式电路简单,成本极低,但能量被白白浪费,均衡电流一般不超过 50 到 100mA,压差大时耗时很长,而且热量集中在 PCB 上,在密闭的备用电源外壳里不好处理。

主动均衡则是把高电压电芯的能量搬到低电压电芯里去,能量可以循环利用。它需要一个功率变换级,通常用电感或者电容作为能量中转。这次选的 MP2642GR-Z + STM32L031C6,走的是电感式主动均衡路线:芯片负责功率开关和能量转移,MCU 负责采样、策略判断和状态管理。

从成本上看,主动均衡通常会比被动均衡贵,但在这个项目里,MP2642GR-Z 集成度较高,外围只有电感、电容和采样电阻,总体物料成本比“被动电阻 + 复杂保护电路”没有高太多。从效果上看,均衡电流可以做到 200mA 以上,压差恢复速度远快于被动电阻,这对于经常处于浮充状态的备用电源系统尤其重要。

1.3 这套方案的适用场景与边界

这套方案并不是所有场景都适用。两个串联电芯是最基础的应用,比如 7.4V 的便携式储能电池、小型 UPS 备电单元、部分户外电源的次级电池组。如果电池串数超过两节,比如 3 串、4 串甚至 13 串,均衡拓扑会复杂很多,需要更多芯片级联或改用其他专用均衡芯片。

STM32L031C6 是一颗 Cortex-M0+ 内核的低成本 MCU,主频 32MHz,内存和 Flash 都比较有限。它的定位是轻量级控制器,适合处理单串、两串、最多三四串电池的均衡控制。对于复杂的电池管理系统,还是需要更强的 MCU 或者专用 AFE 配合。这个边界在项目一开始就要明确,否则后面容易陷入“代码塞不进 Flash”的尴尬。

2. 核心器件选型与硬件电路拆解

2.1 MP2642GR-Z 在均衡电路中的角色

MP2642GR-Z 在这套方案里不是拿来当普通 DC-DC 用的,而是作为可控的功率开关和能量转移单元。很多电源管理芯片内部都集成了一组同步开关 MOSFET,具备电流检测和使能控制脚,通过外部电感就能搭成 Buck-Boost 拓扑。两节电池之间做电感式均衡,本质就是用 Buck-Boost 把电压高的那节电池的能量抽出来,灌进电压低的那节里。

芯片的具体引脚功能我建议以数据手册为准,但项目里用到的核心功能可以列一下:一个是使能控制,MCU 通过 GPIO 拉高或拉低控制均衡开始和停止;一个是 PWM 开关输入,用来决定开关频率和占空比;还有一个是电流采样反馈,芯片内部检测到过流后能反向通知 MCU 做保护。

需要注意,MP2642GR-Z 对外围电路的要求并不复杂,但电感选型非常关键。均衡电路的工作电流一般不大,150mA 到 500mA 之间,但因为是串联电池包,拓扑里的地参考点是电池总负极,芯片的 SW 节点电压会出现大幅跳变,电感的饱和电流要留足 1.5 倍以上余量。我在第一版设计里用了 10uH 的贴片功率电感,饱和电流只有 600mA,均衡启动稍微久一点就发热严重,后来换成 15uH / 1A 规格才稳定。

2.2 STM32L031C6 的选型理由

选择 STM32L031C6,第一看中的是低功耗。备用电源系统很多时候处于待机状态,整机待机电流要求微安级别。这款 MCU 在 Stop 模式下的典型功耗只有几微安,内部有 RTC 和多个外部唤醒引脚,可以定时醒来做一次电压采样和均衡判断,然后继续睡。

第二看中的是模拟外设。两串电池采样需要两个 ADC 通道,均衡控制需要至少两个 GPIO,再加一个用于指示状态或者通信的串口,整个外设资源刚刚好。它自带的 12 位 ADC 采集分辨率足够,配合分压电阻和软件平均滤波,电压分辨率能稳定到 1mV 以内。

第三看中的是封装。LQFP32 封装手工焊接友好,尺寸也不大,适合放在电池保护板这种紧凑板卡上。它的 Flash 有 32KB,在写完整均衡策略和故障处理逻辑后,还剩一部分空间做存储参数,日常维护足够。

2.3 两串电芯采样与功率路径设计

硬件上最核心的是电压采样网络。两节电池串联时,B+ 是总正极,B1+ 是第一节正极同时也是第二节负极,B- 是总负极。MCU 的 ADC 引脚不能直接接电池电压,需要电阻分压。这里有个常见坑:MCU 芯片 AD 引脚输入阻抗不够,分压电阻如果选得太大,采样值会偏低且不稳定。

我采用的是“高阻分压 + 运放跟随”方式。第一节电池采样点取 B+ 和 B1+ 之间的电压,第二节取 B1+ 和 B- 之间的电压,分别经过 200k 分压电阻得到约 0.1 倍的比例,再由一个低功耗运放做电压跟随进入 MCU ADC。这样既保证了采样精度,又避免了电池长时间通过分压电阻放电。

功率路径要单独讲。MP2642GR-Z 的 SW 节点所接电感的一端连到两节电池中点的 B1+,另一端通过开关管和电容配合接地或接 B+。均衡时,电流路径要尽量短粗,避免在 PCB 走线上产生明显的压降和热量。我实测下来,功率回路走线宽度如果低于 1mm,200mA 均衡电流下走线温升会超过 10 度,直接影响了邻近采样电路的稳定性。

2.4 元器件清单与关键参数参考

位置器件关键参数选型说明
均衡主控MP2642GR-Z同步开关控制器集成功率级,PWM 控制
控制核心STM32L031C632KB Flash, 12bit ADC低功耗,资源刚好
均衡电感贴片功率电感15uH, 1A 饱和电流储能核心元件,选型要保守
采样分压电阻0402/0603 厚膜电阻200k 精度 1%比例一致性影响均衡精度
运放跟随单通道低功耗运放静态电流小于 10uA提高采样输入阻抗稳定性
去耦电容MLCC100nF + 10uF芯片电源脚必加,就近放置
均衡电阻采样电阻50mR / 1%用于电流检测和保护判断

这些参数是我在这个项目里最终定型的,不同电池容量和系统功耗需求下可以调整,但比例关系基本一致。

3. 均衡控制策略与软件实现细节

3.1 电压采样与数据处理

均衡控制的前提是电压测准。STM32L031C6 的 ADC 虽然分辨率 12 位,但电池电压会随负载波动,采样瞬间如果均衡 MOSFET 刚好开关,SW 节点的振铃会串到采样电路里。我实测发现,均衡进行中如果直接采 ADC,采样值最大能跳变 15mV 左右,这个噪声足够让均衡策略误判。

解决办法有两个层面。硬件上,ADC 采样触发要在均衡 PWM 的固定相位点,比如在开关管关断后的某个延时点采样,避开振铃区间。软件上,单次采样后还要做滑动平均滤波。我取 8 次采样去掉最大最小再平均,效果比较理想。每次启动均衡前先停 2ms 采样窗口,等电压稳定后再判断。

电压换算公式不能依赖理论分压比就完事。实际项目中分压电阻有 1% 误差,运放有失调电压,必须校准。我的校准方法是:先用电芯模拟源分别给 B+ 和 B1+ 加标准电压,用高精度万用表记录实际值,和 ADC 读数对比,然后算出每块板子的增益和偏移量,写进 MCU 的 Flash 参数区。这一步很繁琐,但能显著提升均衡一致性。

3.2 均衡条件与回差控制

均衡策略不能“看到压差就均衡”。电池在浮充状态下压差会产生微小波动,如果阈值设置太小,均衡电路会在瞬间反复通断,既增加功耗又加速器件老化。我在这套系统里设定的均衡启动条件是压差大于 20mV,且持续 30 秒以上;均衡停止条件是压差小于 5mV,或者任一节电压跌出安全工作区间。

回差控制在软件里就是两个不同阈值,一个启动阈值,一个停止阈值。这个设计很关键。只用一个阈值会出现临界振荡:压差 20mV 时启动,均衡到 20mV 以下立刻停止,停止后因为自放电和负载波动又回到 20mV,又启动,如此反复。加上 5mV 回差后,均衡动作变得干净利落。

均衡方向判定也很直观:第一节电压高于第二节,则让 MP2642GR-Z 执行正向 Buck-Boost,从 B+ 向 B1+ 转移能量;反过来则执行反向。芯片的 PWM 占空比决定转移电流大小,我通常把目标均衡电流设在 200mA 左右,占空比限幅在 60% 以下,防止重载时电感饱和。

3.3 状态机设计与低功耗实现

整个控制程序我拆成了四个状态:待机、采样、均衡、故障。待机时 MCU 进入 Stop 模式,RTC 定时器每 10 秒唤醒一次,进入采样状态;采样完成后判断压差和电压范围,决定是否进入均衡状态;均衡状态里每 100ms 循环执行一次 ADC 采样和 PWM 更新;如果出现过温、过压、通讯异常等,直接进入故障状态,关闭芯片使能并记录错误标志。

状态机的好处是逻辑清晰,不会出现“均衡还没停又去采样”的纠缠。MCU 在均衡状态下功耗在 3mA 左右,在待机状态下整体功耗不到 30uA。对于备用电源系统来说,这个功耗完全可以接受,不会显著缩短电池的静置寿命。

代码逻辑用伪代码写出来大概是这样:

typedef struct { uint16_t v1_mv; // 第一节电压,单位 mV uint16_t v2_mv; // 第二节电压,单位 mV int16_t diff_mv; // v1 - v2 uint8_t state; // 当前状态 } BatteryManager; void Balance_Task(BatteryManager *bat) { if (bat->state == STATE_FAULT) { DisableBalance(); return; } // 压差绝对值大于启动阈值且持续 30 秒 if (abs(bat->diff_mv) > START_THRESHOLD_MV) { if (bat->state != STATE_BALANCING) { bat->state = STATE_BALANCING; EnableBalance(); } // 根据压差方向设置 PWM if (bat->diff_mv > 0) { SetBalanceDirection(DIR_TOP_TO_MID); } else { SetBalanceDirection(DIR_MID_TO_BOT); } UpdatePwmDuty(BALANCE_DUTY); } // 压差小于停止阈值且已均衡时复位 if (bat->state == STATE_BALANCING && abs(bat->diff_mv) < STOP_THRESHOLD_MV) { DisableBalance(); bat->state = STATE_SAMPLE; } }

实际工程里还需要加持续时间和次数限制,防止某次采样异常导致长时间误均衡。

4. 调试过程与实测结果记录

4.1 焊接和第一版测试踩坑

第一版样板回来,我先没接电池,用可编程电源模拟两节电池电压。上电后发现一个奇怪现象:ADC 采到的第二节电压总是比万用表实测低 10mV 左右。排查时发现是运放供电问题。运放供电取自电池 B+,而输入信号在 B1+ 附近,当 B+ 对 B- 的电压有纹波时,运放电源纹波直接叠加到输出端。后来给运放供电单独加了一颗 10uF 电容,并把地线单独走回 B-,问题基本消除。

第二个坑是均衡电感啸叫。电感啸叫通常是因为 PWM 频率落在听觉范围内,并且电感内部机械振动被放大。我的第一版 PWM 频率设在 20kHz,刚好在人耳听觉上限附近,部分听觉敏感的人能听到轻微“嘶嘶”声。后来我把频率提高到 50kHz,啸叫消失,电感体积和损耗也在可接受范围。

第三个坑比较隐蔽:均衡启动瞬间,MCU 会因为地弹复位。原因是芯片使能引脚一拉高,大电流从 SW 节点切换,功率地瞬间产生压差,把 MCU 的地电位抬高了。解决方法是 MCU 的地和功率地在 PCB 上单点连接,并且靠近电池负极汇流点,同时 MCU 电源脚增加一颗 1uF 和一颗 100nF 电容。

4.2 均衡性能实测数据

硬件调试完,我用一组实际电池做了均衡测试。电池为两节标称 3.7V、容量 2200mAh 的锂离子电芯,初始状态刻意通过预放电让两节电压拉开到约 80mV。测试环境温度 25 摄氏度,均衡电流目标 200mA。记录数据如下:

时间点第一节电压第二节电压压差状态
0 min3.812V3.732V80mV启动均衡
5 min3.801V3.743V58mV均衡中
15 min3.778V3.754V24mV均衡中
25 min3.771V3.757V14mV均衡中
35 min3.765V3.761V4mV停止均衡

从 80mV 拉到 5mV 以内大约 32 分钟,比之前用被动均衡电阻快了近一倍,而且整个过程电池包的总电压只下降了不到 30mV,能量损耗明显低于被动方案。换一批容量差异更大的旧电池测试时,初始压差 120mV,均衡时间约 50 分钟,但最终仍能收敛到 5mV。

4.3 低功耗与长期稳定性验证

均衡不做的时候,系统功耗是关键指标。我测了 12 小时待机电流,MCU Stop 模式加 RTC 定时唤醒,包括采样电路静态电流和运放功耗,整机平均电流 31uA。对 2200mAh 电池来说,这个待机电流需要 7 年以上才会耗尽电量,实际影响可以忽略。

长期稳定性方面,我做了七天的浮充测试。电池一直在 8.4V 浮充电压下,MCU 每 10 秒采样一次,压差只要超过 20mV 就启动均衡。七天里均衡动作一共触发了 23 次,每次持续时间不超过 8 分钟,没有出现均衡反复振荡或 MCU 死机的情况。芯片温度最高 52 摄氏度,在密闭外壳内可以接受。

5. 常见问题排查与可靠性设计建议

5.1 典型故障速查表

实际调试和后期测试中遇到过的常见问题,我整理成了一张表,方便现场快速定位:

现象可能原因排查步骤解决方案
均衡不启动压差未达到启动阈值用万用表复核采样电压校准ADC,检查分压电阻
均衡不启动状态机卡在故障态查看MCU错误标志位清除故障,检查使能引脚电平
压差越均衡越大均衡方向反了测量高低压电芯位置修正PWM方向定义
均衡电流只有几十mA电感饱和或占空比太低用示波器看SW节点波形增大PWM频率或换饱和电流更大的电感
均衡过程中MCU复位功率地弹导致电源跌落示波器观察MCU VDD波形单点接地,加强去耦
ADC采样跳动超过20mV采样时刻和PWM噪声重合示波器触发看采样点相位固定相位采样,延长软件滤波
均衡停止后压差快速反弹电芯自放电差异太大静置观察每小时压差变化率提高均衡唤醒频率,检查电池健康度

5.2 布局和布线建议

PCB 布局对这套方案的影响非常大。均衡功率路径要按“开关回路最小化”的原则走:输入电容、芯片 SW 引脚、电感、输出电容之间围成的面积越小越好,否则会辐射大量磁场噪声。

采样电路和 MCU 尽量放在功率回路外侧,模拟地和功率地不要共用粗铜箔,而是通过一个小焊盘或 0 欧电阻单点连接。我在第二版布局中,把 MCU 放在了板子一角,均衡电感放在对角,效果明显改善,ADC 原始跳动从 25mV 降到了 3mV 以内。

去耦电容的位置也很重要。芯片电源脚的 100nF 电容必须尽可能靠近引脚,不能通过过孔绕一圈再接。我见过有人把电容放在背面,结果引脚到电容之间经过了两个过孔,PWM 高频纹波根本滤不干净,均衡电流波形畸变,严重时还会导致芯片误判过流。

5.3 安全与可靠性兜底设计

均衡控制不能所有逻辑都依赖 MCU。即使 MCU 程序跑飞,MP2642GR-Z 的使能端也要默认处于关闭状态,硬件上最好用一个下拉电阻保证上电瞬间均衡不会自动开启。同时在电池总正极附近加一个保险丝或 PTC,防止均衡路径出现短路时电流不受控制。

软件侧要加均衡超时保护。我设置单次均衡最长 60 分钟,超过后强制关闭,并在日志里记录一次异常;连续三次超时则直接锁死均衡功能,提示用户检查电池。另外,在电池电压低于 3.0V 或高于 4.25V 时,无论压差多大,均衡都要停止。这些边界条件是锂电池安全设计里最不能讨价还价的部分,宁可均衡效果差一点,也要避免过压和过放。

最后再分享一个个人经验:刚开始做均衡方案时,不要把精力全花在“如何把压差收敛到 0mV”上。两节电芯之间存在 2 到 3mV 的压差是完全正常的,测量误差和自放电差异决定了你不可能做到绝对相等。把目标设定为“长期运行压差不超过 10mV”才是更工程化的思路。这套方案在我手头项目里已经连续运行两个多月,还没有出现过一次因均衡误动作导致的保护触发,稳定性和成本都达到了预期。如果你也在做两串电池相关产品,建议先按这个方法搭一个最小系统,把采样和均衡逻辑跑通,再考虑后续扩展更多串数。

RELATED READING

延伸阅读

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