ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

基于MP2642GR-Z与STM32的2S磷酸铁锂主动均衡方案详解

基于MP2642GR-Z与STM32的2S磷酸铁锂主动均衡方案详解

做储能和备用电源的朋友应该都有过这种经历:一组两串磷酸铁锂电池,刚出厂时电压差不到 5mV,充放循环几十次之后,Cell1 比 Cell2 高了 0.15V,整组容量肉眼可见地往下掉。串联电池的短板效应就是这么现实,容量永远由最低的那节电池说了算。这时候不给每串电池配上主动均衡机制,后面就只能靠人工补电或者直接拆组维护。这篇文章聊的是一套我实际调试过的方案:用 MP2642GR-Z 这颗双向升降压控制器,配合 STM32F405RG 主控,在两串电池之间做能量搬运,把高电压那节的能量搬到低电压那节去。适合做 BMS、储能逆变、UPS 后备电源的工程师参考,尤其是那些想从被动均衡升级到主动均衡,又不想把系统做太复杂的人。

这套方案做完以后给我的感受是:主动均衡没有很多人想的那么神秘,也没有一些人说的那么贵。关键是搞清楚能量往哪里搬、搬多少、什么时候停。下面的内容按我实际的开发顺序来写,从为什么必须均衡,到选型逻辑、硬件细节、固件流程,再到实测数据和踩坑记录,基本覆盖了把一个 2S 主动均衡功能从想法变成样机的全过程。

1. 为什么两颗电池串联,也必须把均衡当正事做

1.1 串联不一致的损失:容量由最弱一节说了算

先讲一个很多新手容易忽视的点:两串电池的不一致,不是充电器能解决的。锂电池在串联成组之后,充电时流过两节电池的电流完全一样,但每节电池因为内阻、自放电、温度差异,实际分到的电压并不同。容量偏低或者自放电偏大的一节会先充满,保护板为了保护它,只能切断整个充电回路;放电时它又先跌到截止电压,整组电也就放不出来了。

我见过一套 2S 的备用电源系统,电池放置三个月后,两节单体压差从出厂时的 0.01V 拉大到 0.2V。表面上看只是电压不平衡,实际可用容量已经下降了不少。对于储能备电这种长期挂在线上的场景,问题更明显:充电长时间浮充,电压高的一节一直顶着过充保护跑,电压低的一节永远吃不饱。时间一长,低的那节还会因为长期欠充加速劣化,形成恶性循环。

1.2 储能和备电场景的特殊压力:静置、浮充与温差

储能和备用电源跟消费电子产品最大的区别,在于它大部分时间不是在满负荷工作,而是在“等待工作”。UPS 电池常年浮充,太阳能储能系统晚上静置、白天充放,这种工作状态会让不一致问题不断累积。

温差是另一个被低估的因素。储能柜里上层和下层可能有几摄氏度的温差,电池自放电率随温度呈指数变化。两节电池即便出厂时完全一致,运行一两年后也会因为所处位置不同出现明显压差。所以均衡不能只是出厂前做一次,而是要在系统运行期间持续地、小电流地补救。这也是为什么我倾向主动均衡:它可以在整机不开负载的时候,自己慢慢把压差修回来。

1.3 被动均衡和主动均衡的本质差别

被动均衡的原理很简单:电压高的电池并一个放电电阻,把多余能量烧成热。它对 MOS 控制和算法要求低,很多保护板自带的均衡就是这种。但它有两个先天缺陷——均衡电流小,通常几十毫安到一百毫安;多余的能量全部浪费掉,还发热。

主动均衡则是把能量从高电压电池“搬运”到低电压电池,用双向 DC-DC 实现。同样是 500mA 的均衡电流,被动均衡是让高电量的电源白白耗散,主动均衡则相当于把电量转移到了需要的地方。下表是我在做方案时列过的对比:

对比项被动均衡主动均衡
能量去向电阻发热耗散搬到低压电池,能量重新利用
典型电流几十毫安级几百毫安甚至安培级
均衡效率接近 0%80% 以上
硬件复杂度电阻 + MOS 即可需要 DC-DC 控制器 + 电感
适用场景小容量、低串数、成本敏感储能、备电、长期运行系统

对 2S 系统来说,主动均衡成本增加有限,但效果差别巨大。尤其当系统要求长期免维护时,主动均衡可以明显减少人工干预次数。

2. MP2642GR-Z 在电路里的角色:双向升降压控制器

2.1 为什么必须用升降压而不是简单的降压或升压

两节电池串联后,高电压电池和低电压电池之间的电压差并不是固定的。均衡开始时,可能是 Cell1 比 Cell2 高 0.3V,能量得从 Cell1 往 Cell2 搬;下一次可能反过来,Cell2 比 Cell1 高,能量又得反向搬。如果只用降压或升压拓扑,方向就锁死了,没法适应。

MP2642GR-Z 这类双向升降压控制器,本质上是一个支持双向功率流动的 Buck-Boost 拓扑。它内部集成了同步整流控制逻辑,既可以工作在降压模式,也可以工作在升压模式,方向由控制端决定。打个比方:两个水桶水位不一样,你要用水管把水从高水位桶抽到低水位桶,水泵得能正转也能反转。单向泵当然也能用,但每次反转都得重新接管路,麻烦还不可靠。

对于 2S 磷酸铁锂电池组,单体电压范围大约在 2.5V 到 3.65V 之间,两串总电压在 5.0V 到 7.3V 之间。无论把哪一节当作输入端,另一节作为输出端,电压都落在这个区间内,升降压拓扑可以保证在整个电压范围内都能稳定工作。

2.2 芯片本身能干什么:频率、同步整流与 I2C 限流

MP2642GR-Z 有一个很实用的特点是支持 I2C 配置。芯片手册里给出的开关频率范围比较宽,实际应用里可以根据电感和 EMI 要求配置。我在样机上配置到 800kHz,这个频率下电感体积不大,开关损耗也还在可接受范围内。如果系统对 EMI 特别敏感,可以降到 400kHz 左右;如果追求极致体积,可以往上提,但要注意驱动损耗和电感磁芯损耗的增加。

同步整流是这类控制器标配的功能。简单说就是让功率 MOS 的体二极管尽量少参与导通,用 MOS 沟道代替二极管续流,从而降低导通压降和损耗。这直接决定均衡电流效率:效率高意味着搬运过程中浪费的热少,电池仓里的温升低。MP2642GR-Z 的数据手册里典型效率曲线在 90% 附近,实际使用中跟电感选型和 PCB 布局关系很大,这一点后面专门说。

I2C 可编程限流是这套方案里最关键的功能之一。均衡电流不是越大越好,它受电池容量、连接器载流能力、发热预算共同限制。通过 I2C 寄存器把限流值写进去,硬件上不需要换电阻,软件上就能灵活调整。我在连续均衡时把限流设置在 800mA 左右,短时预充电阶段用 300mA 的限流保护。

2.3 为什么不直接用 MCU 写全桥控制

有人可能会问:既然已经有 STM32F405RG,为什么不直接用它的 PWM 输出驱动 H 桥,自己写一个双向同步 Buck-Boost 的控制环?我试过这个思路,但很快放弃了。自己做控制环意味着要处理逐周期限流、过流保护、死区补偿、防止电感饱和、环路补偿等一系列底层问题。硬件平台稍有差异,参数就得重新调一遍。MP2642GR-Z 把这些问题都集成在芯片内部,MCU 只需要告诉它“现在往哪个方向搬、限制多少电流”,剩下的开关逻辑芯片自己搞定。

这就像开手动挡和自动挡的区别。手动挡上限高,但日常代步大多数人还是选自动挡。储能设备的开发周期本来就紧,在均衡这个功能上投入太多精力去调底层环,不划算。

3. 硬件设计里最容易被忽略的采样与限流细节

3.1 电压采样拓扑:别把 Cell2 的负极当地线

2S 电池组里,Cell1 的负极是系统地,Cell1 的正极同时也是 Cell2 的负极。测量 Cell2 的电压时,如果用 MCU 的 ADC 直接对 Cell2 正极采样,得到的其实是两节电池的串联总电压,不是 Cell2 单独电压。这是一个非常经典的错误,我第一次画板子时也踩过。

正确做法是差分采样。Cell2 的电压等于 Cell2 正极电位减去 Cell1 正极电位,所以需要把两个采样点都引到 MCU 的差分输入通道。STM32F405RG 的 ADC 本身支持差分输入,但要注意输入共模范围。如果系统里同时有 5V 和 3.3V 电源,还需要做电平匹配。实际设计时我建议用精密电阻分压把电压拉到 ADC 可测的范围内,再用 RC 滤波。

3.2 分压电阻精度:均衡误差的源头在这里

均衡功能的基本逻辑是:检测到压差超过阈值就启动,压差回落到阈值以下就停止。如果采样本身误差超过 10mV,那你做的所有控制逻辑都会被噪声淹没。分压电阻的精度在这里起决定性作用。

我在 BOM 里选用 0.1% 精度的电阻做分压,温漂控制在 25ppm 以内。有人觉得 0.1% 电阻贵,但你要算账:一节电池采购价几十块钱,两串就是上百块,为了省几毛钱的电阻导致系统在压差判断上反复误动作,后期的维护和售后成本远超这点差价。另外,PCB 上分压电阻附近不要走大电流走线,否则热漂移会影响采样精度。

ADC 参考电压也很关键。STM32F405RG 内置参考电压可以用,但温漂和初始误差较大。对均衡这种高精度判断场景,我最终使用了外部参考电压源,实测下来不同温度下的电压读数稳定了很多。

3.3 电感与限流设定:别让电感饱和吃掉整个方案

升压或降压电路里,电感的饱和电流一定要大于最大限流值。MP2642GR-Z 的限流设置在 800mA,那么电感的饱和电流至少留 1.5 倍以上余量,我选的是饱和电流 2A 的电感。原因很简单:限流环路是芯片内部控制的,如果电感先饱和了,芯片还没反应过来,电流尖峰就可能损伤 MOS 管。

电感值的选择则要跟开关频率配合。频率越高,需要的电感值越小,但纹波电流也越大。对于 800kHz 和 800mA 均衡电流的组合,典型的电感值在 4.7uH 到 10uH 之间。我选了 6.8uH,纹波电流实测在 250mA 左右,温升也能控制住。

均衡电流方向的控制逻辑要特别留意。MP2642GR-Z 的使能和限流引脚配合 MCU 的 GPIO 控制,方向切换时必须先让功率级软停止,再调整方向,不能直接硬切。硬切会产生电流尖峰,严重的会把 MOS 管击穿。我在固件里加了一个 10ms 的安全间隔,实测可靠。

4. STM32F405RG 这边:采样校准、状态机和电流闭环

4.1 ADC 采样:先做两点校正,别信理论分压比

很多工程师直接按分压电阻的标称值算 ADC 对应的电池电压,这个做法在电压容差要求不高时没什么问题,但均衡控制需要分辨出十几毫伏的压差,必须做校准。

我用的方法是一次简单的两点校准:首先用精密电压源给采样电路输入两个已知电压,比如 3.0V 和 3.6V,从 ADC 读到两个原始值,然后算出实际电压与 ADC 转换值之间的斜率和偏移。这个斜率和偏移可以存到 Flash 里,每次开机后加载。原理很简单,效果却非常明显,校准后采样误差可以稳定控制在 3mV 以内。

4.2 均衡状态机:空闲、预充、搬能、退出

固件里我实现了一个四状态均衡状态机,逻辑如下:

  • 空闲态:定时采样两节电池电压,计算压差。压差超过启动阈值(我设为 30mV)且持续超过 5 秒,进入预充态。
  • 预充态:以较小的限流启动 DC-DC,防止电池电压突变引发保护,持续约 1 秒。
  • 搬能态:切换到目标均衡电流,持续搬运能量,同时实时监测电压变化。
  • 退出态:压差小于 5mV 或者达到最大均衡时间,先软停止 DC-DC,延迟 10ms 后回到空闲态。

状态机里设置了滞回窗口:启动阈值 30mV,停止阈值 5mV。这样不会因为采样噪声导致均衡频繁启停。曾经我把启动阈值和停止阈值设得过于靠近,结果系统在临界点来回切换,电压读数都跟着跳,加了滞回之后问题彻底消失。

4.3 电流闭环与均衡结束条件

MP2642GR-Z 可以通过 I2C 设置限流值,这本身已经是硬件级的电流环。但在实际使用中,固定的均衡电流在小压差场景下会有问题:当压差只有 10mV 时,太大的均衡电流可能会让低压电池电压迅速上升,造成过冲。更合理的做法是让 MCU 根据当前压差动态调整限流值。

我用了一个简单的比例控制:压差大时使用大电流,压差接近停止阈值时把电流降到最低档,保证电压平滑过渡。控制周期设在 100ms 左右,不必太快。下面是一段示例逻辑:

// 根据当前压差计算目标限流值(示例) int calc_limit_current_ma(uint16_t voltage_gap_mv) { if (voltage_gap_mv >= 300) return 800; if (voltage_gap_mv >= 100) return 600; if (voltage_gap_mv >= 30) return 300; return 100; // 接近停止阈值时的最小档位 }

这段逻辑确保均衡过程前半段高效、后半段平稳,实测下来电池电压在接近收敛时没有出现过冲。

4.4 均衡方向判断:一个容易被忽略的时序问题

判断“哪节电压高”看起来很直接,但实际工程里有个细节容易被忽略:ADC 采样不是瞬时完成的,两次采样之间如果有时间差,采到的电压可能是电池在不同负载状态下的值。尤其在系统同时处理充放电时,负载波动会让电压读数跳动。

我的做法是同步采样。STM32F405RG 支持 ADC 多通道注入式同步采样,或者用同一 ADC 在极短时间内完成两个通道的转换。如果主控资源紧张,至少要保证两次采样之间 MCU 不处理高负载任务。否则你以为是 Cell1 高,实际可能是 Cell2 高,方向判断反了,均衡变成“越均越不衡”。

5. 实测:一次完整均衡过程、波形和调参经验

5.1 实测数据记录:从 300mV 压差到 5mV 收敛

样机搭好之后,我用两节磷酸铁锂电池做了一组实测。初始状态是 Cell1 电压 3.42V,Cell2 电压 3.12V,压差 300mV。启动均衡后,记录数据如下:

时间点Cell1 电压Cell2 电压压差均衡电流
启动前3.42V3.12V300mV0mA
1 分钟后3.42V3.15V270mV800mA
10 分钟后3.44V3.32V120mV600mA
30 分钟后3.48V3.44V40mV300mA
50 分钟后3.50V3.49V10mV100mA
60 分钟后3.51V3.51V5mV退出均衡

从数据可以看出,均衡电流随压差减小逐步降档后,低压电池电压没有出现反弹或过冲。均衡结束后静置 2 小时,压差仍保持在 5mV 附近,没有回弹。这说明能量搬运是真实的,低压电池确实被充进去了,而不是测量噪声造成的假象。

5.2 示波器看波形:SW 节点振铃和采样干扰

实测中我用示波器抓了电感电流和 SW 节点波形。800kHz 频率下,SW 节点在开关切换瞬间有适度振铃,这是正常的,过度追求振铃最小反而可能让效率变差。真正需要关注的是振铃是否耦合到电压采样线路。

我遇到过一次奇怪的问题:均衡电流一加大,ADC 读到的电池电压就往下掉,但用万用表量实际电压并没有变化。查到最后是采样线从电感附近走过,磁场耦合把高频噪声引入了 ADC 输入端。解决办法是在固件里加平均滤波,更重要的是调整布线,让采样线避开功率级。

5.3 意外情况:低压差下的方向频繁切换和待机漏电

调试过程中遇到两个比较有价值的问题。第一个是压差减小到接近停止阈值时,均衡方向偶尔会反过来。原因不是硬件坏了,而是采样回路的偏差让 MCU 误判哪节电池更高。加入 5mV 滞回窗口后,这个问题就消失了。

第二个问题是 MP2642GR-Z 在待机状态下并非完全断电。虽然均衡功能关闭,但芯片本身的静态功耗还是有的,对一块几十瓦时的电池组来说虽然不多,但对于长期静置的备电系统属于不可忽略的消耗。我在硬件上加了一个负载开关,系统判定不需要均衡时直接把功率级电源切断,整机待机功耗可以降到微安级。如果你要在产品里做长待机,这一步别省。

6. 工程化落地:从样机到能出货该盯的几个点

6.1 PCB 布局:功率地、模拟地和采样走线

MP2642GR-Z 的开关电流回路要尽量短。功率级的地和 MCU 模拟地要分开,最后在电池负极附近单点连接。很多主动均衡方案推不动电流,或者一跑就发热,多半是地的连接方式不干净。我在第二版 PCB 上把功率级和采样电路用铺地隔开,均衡效率比第一版高了不少。

采样走线也要特别注意:要用差分走线,两根采样线尽量平行靠近,减少环路面积;采样线不要靠近电感或 SW 走线;滤波电容要靠近 MCU 的 ADC 引脚,而不是靠近采样电阻。

6.2 保护逻辑:过压、欠压、过温与均衡联动

均衡功能不是独立存在的,它必须和电池保护机制联动。我在固件里加了几个约束条件:电池任意一节电压超过过压保护值,均衡只降不升;温度超过 60℃ 时,均衡电流自动降为最低档位;温度超过 70℃ 直接停止均衡。同时,均衡状态不能出现在系统充放电切换瞬间,否则电流叠加可能触发保护板硬件保护。

还要防止过均衡。过均衡的意思是低压电池已经被充满了,但均衡还在继续往它里面充电。我根据电池容量和均衡电流估算了安全均衡时间上限,达到上限后无论压差是否消除都要暂停,下次再评估。

6.3 量产一致性:分压电阻、芯片校准和老化

样机调通只是第一步。量产时,每块板子的分压电阻实际值会有偏差,MP2642GR-Z 的限流精度也可能有差异。我的建议是在产线测试阶段,对每块板做一次电压采样校准,写入 Flash 存储;限流值则选在芯片手册规定的典型值附近,不要卡着上限。

均衡功能的验证要有专门的测试工装。用两节可调电源模拟压差场景,检验不同压差下均衡电流是否正确、方向切换是否平滑、停止阈值是否满足要求。这部分自动化测试能做到位,出厂后现场的问题会少很多。

6.4 从 2S 到多串的扩展方向

最后聊一下扩展性。2S 是主动均衡最小的单元,很多 4S、8S 甚至更高串数的系统,本质上是多个 2S 均衡单元的堆叠。如果你用的是相邻电池间能量搬运的拓扑,2S 的 MP2642GR-Z 方案可以直接复用:每一对相邻电池配一个均衡单元,通过 I2C 挂在同一条总线上,MCU 分别控制各单元。当然这时要注意共地问题和 I2C 地址冲突,通常需要加地址选择引脚或者用 I2C 多路复用器。

多串系统的均衡策略比 2S 复杂得多——相邻搬运方式在压差分布不均匀时可能存在效率问题,可能需要配合总电压级搬运结构。但如果先把 2S 这套逻辑吃透了,多串只是工程量的增加,而不是原理上的跳跃。

最后分享一个小经验:均衡功能的验证一定要放在和真实应用一致的电压区间里做。有些板子用可调电源测试一切正常,一接到真实电池上就出问题,因为电池的电压-容量曲线和可调电源的恒压输出完全不同。我在测试时特意用了一组已经老化的旧电池,压差大、内阻也大,更能暴露问题。这种环境里跑通,产品到现场才不容易掉链子。

RELATED READING

延伸阅读

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