ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

基于MP2642GR-Z与STM32H743的两串磷酸铁锂主动均衡设计

基于MP2642GR-Z与STM32H743的两串磷酸铁锂主动均衡设计

做储能或者备用电源系统的时候,电池均衡往往不是最先被考虑的功能。大家一开始盯的通常是总容量够不够、充放电保护怎么设、通信调度怎么走,压差问题常常要等样机跑了几十个循环后才暴露出来。前阵子我处理一台两节磷酸铁锂电池串联的备用电源样机,两节电芯的电压差从初期的十几毫伏慢慢拉大到超过一百五十毫伏,低压侧先触发保护,整机放电被迫中断。后来我用 MP2642GR-Z 做主动均衡控制器,搭配 STM32H743ZI 做主控,把两个串联电池单元的均衡嵌进系统里,这个问题才算彻底解决。如果你也在做储能、备用电源这类小规模电池系统,尤其只需要均衡两串电池,这篇文章可以当作一条可以直接复现的设计路线。

1. 为什么这个项目值得做:两串均衡到底难在哪里

1.1 电芯压差是怎么被放大的

很多人以为两节新电芯串联不会有压差问题,但实际用下来,压差几乎是必然出现的。制造工艺再接近,两节电芯的容量、内阻、自放电率也不可能完全一致。并联充电时电流路径上的接触电阻不一样,温度场不一样,循环次数一多,容量衰减速度也不一样。这些细微差异平时看不出来,但在储能和备用电源这种反复充放电的场景里会被不断累积放大。

我的实测样本里,两节标称容量一致的磷酸铁锂电芯,经过六七十次循环后,静置电压差就从十几毫伏拉到了将近一百五十毫伏。备用电源的设计逻辑是尽量维持整机可用,结果低压侧电芯率先到欠压保护点,系统直接锁死,整包还有容量却放不出来。这种情况不解决均衡,换再多电芯也一样。

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

两串系统听起来简单,但均衡方案的选择还是有讲究。被动均衡的思路是给每节电芯并一个放电电阻,电压高的电芯通过电阻把多余能量以热量形式耗散掉。电路简单,成本低,但问题也很明显:它只能"削高",不能"填低",能量全部浪费在电阻上;而且均衡电流一大,PCB 局部温度就会很难看。

主动均衡的思路则是能量转移,把高压电芯的能量搬给低压电芯,而不是烧掉。效率高、发热小,均衡速度也可以做得更快。缺点是电路复杂,需要开关管、储能电感、驱动电路和对应的控制策略。MP2642GR-Z 这类专用均衡芯片的价值,恰恰就是把最复杂的功率变换部分封装好,让上层主控只负责决策和监控。

1.3 系统框架:主控、均衡器、电池组的分工

整个系统的分工我总结下来是三句话:电池组负责把能量存住,MP2642GR-Z 负责能量的搬移,STM32H743ZI 负责什么时候搬、搬多少、搬的过程中出了异常怎么处理。

更具体一点,MP2642GR-Z 的功率端口直接跨接在两个电池单元的串联端,储能电感作为能量中转站;STM32H743ZI 这边,先通过高精度采样链路读回每节电芯的电压,再结合电流、温度等信息判断是否需要启动均衡,确认需要后通过控制引脚使能 MP2642GR-Z,同时通过通信接口读回芯片的寄存器状态,形成一个完整的闭环管理。

2. MP2642GR-Z 选型分析:一颗芯片把均衡电路简化了大半

2.1 这颗芯片的均衡原理

MP2642GR-Z 本质上是针对两节串联电池设计的主动均衡控制器,内部集成了开关管和对应的驱动逻辑,外部只需要很少的功率器件就能搭起完整的能量转移回路。工作的时候,芯片以一定的开关频率控制内部开关管通断,让电流先流过储能电感,再从电压高的一侧流向电压低的一侧,每完成一个开关周期,就有一定数量的电荷被搬移到低压侧。

这种拓扑的特点是双向性:如果你把采样得到的电池电压反过来判断,芯片同样能把能量从高电压单元搬到低电压单元,方向由主控的策略决定。它不像被动均衡那样只能单向泻放,这也是我在备用电源里坚持用主动均衡的主要原因——系统经常处于长时间浮充或者小电流放电状态,能量利用率必须优先考虑。

2.2 为什么没有自己搭分立方案

两串电芯的均衡电路,如果完全用分立元件搭,通常需要自举驱动、半桥电路、电感电流采样、逻辑保护这些模块,设计周期至少多出两到三周。最关键的是,分立方案的可靠性验证要花大量时间,开关管的驱动时序稍有问题,就可能出现磁饱和或者管子击穿,排查难度远高于芯片方案。

MP2642GR-Z 这类专用芯片把功率级、驱动、保护逻辑都集成好了,我需要关心的主要是外围参数匹配和控制接口设计。对一个小型储能项目来说,这个取舍很值得:用体积和成本上的一点代价,换取开发周期的大幅缩短和整体可靠性的提升。

2.3 外围电路需要准备的东西

按照芯片手册里的典型应用,外围其实不需要太多东西。核心是储能电感,电感值决定了均衡电流的纹波和峰值,我的选择思路是先按目标均衡电流算出电感的饱和电流余量,再留出 20% 以上的降额。其次是输入输出端的滤波电容,负责吸收开关动作产生的电压尖峰,容值太小会导致环路不稳,容值太大又拖慢动态响应。再就是芯片的使能引脚、状态输出引脚、通信接口的上拉电阻和滤波电容。

这里有一个细节:芯片内置的电压检测功能一般用于快速保护判断,比如过压、欠压的硬保护,而不是做高精度策略决策。真正用于均衡门限判断的电压数据,还是要靠主控侧的独立采样链路。两边数据互为校验,系统的安全性会高一个等级。

3. STM32H743ZI 在主控侧负责什么

3.1 主控的任务划分

STM32H743ZI 用在这个项目里,很多人第一反应是大材小用。确实,均衡控制本身逻辑并不复杂,Cortex-M0 级别的芯片也能跑,但储能和备用电源系统不只是均衡这一件事。要做电池电压的连续监测、充放电保护的快速响应、和上位机或者总控系统的通信,还要给后续扩展留余地。H743 的 480MHz 主频、多路高精度 ADC、丰富的通信接口,让整套系统只用一个主控芯片就能全部覆盖。

我把主控的职责划分成四块:采样链路管理、均衡策略决策、故障保护、对外通信。其中均衡策略决策只是一个小任务,真正吃资源的是采样数据的滤波处理和保护逻辑的多级联动。

3.2 电压采样链路与精度预算

均衡决策的基础是电压测量,所以采样链路的精度直接决定了均衡的效果。我用的方案是:每一节电芯的正负端各通过一组精密电阻分压,把电压缩放到 STM32H743ZI 内置 ADC 的量程以内,再经过运放电压跟随器缓冲后送进 ADC 通道。

以磷酸铁锂电芯为例,单体电压范围按 3.0V 到 3.65V 考虑,两串总压最高 7.3V。分压比取 1/3,最高输入 ADC 的电压只有 2.43V,给 3.3V 参考电压留出了充足的裕量。H743 的内置 ADC 是 12 位分辨率,3.3V 参考电压下的量化步长约 0.8mV,对应回实际电池电压就是 2.4mV 左右。这个原始精度配合过采样平均和两点校准,完全可以做到 ±10mV 以内的系统误差,满足均衡控制对电压测量的基本要求。

3.3 控制与状态接口设计

主控和 MP2642GR-Z 之间的接口,我用了两种:一条快速控制线和一条低速通信线。快速控制线用来做均衡的使能/关断,响应速度快,适合保护逻辑在微秒级直接切断。低速通信线用于读取芯片内部的状态寄存器,包括当前均衡状态、故障标志、温度信息等,主控根据这些信息调整策略。

把硬保护放在芯片自身、把策略放在主控的好处是,即使主控死机,均衡功率级也不会失去保护。我在调试时故意测试过主控复位的场景,芯片能维持在当前安全状态,不会出现功率管直通或者过流的情况。

4. 硬件原理图与 PCB 布局里的关键细节

4.1 均衡功率回路的接法

功率回路的接法直接决定电路能不能稳定工作。两个电池单元串联时,公共连接点既是第一节的负极、也是第二节的正极,这个点在布局中必须作为整个功率回路的参考地来处理。MP2642GR-Z 的功率端口、储能电感、滤波电容和电池连接器之间的回路要尽量短,环路面积要尽量小。

储能电感的选型我在前面提过,这里补一个具体思路:目标均衡电流比如 0.5A,开关频率几百千赫兹,那么电感值取 10μH 到 22μH 之间比较合适。电感值太小,纹波电流会很大,加快电池发热;电感值太大,均衡速度变慢,磁元件体积也变大。实际可以先按芯片手册推荐的典型值起步,再用示波器测电感电流波形微调。

4.2 采样链路布局的三条经验

电压采样电路属于典型的"低速高精度"信号,虽然信号变化不快,但对干扰非常敏感。我在 PCB 布局里总结出三条经验:

第一,采样电阻取电点必须直接从电池端引出,不能从功率回路上就近搭线,否则均衡电流在铜箔上产生的压降会被叠加进采样信号。第二,分压电阻和滤波电容要靠近 MCU 的 ADC 引脚放置,中间不要穿行长距离的细走线,减少耦合噪声。第三,所有采样走线用 0.5mm 以上的线宽,并在地平面上方走线,必要时两侧加地包边。

4.3 安全保护与接口防护

储能设备的安全冗余再怎么强调都不过分。我在原理图上额外加了三个保护点:电池输入端的防反接电路,防止安装电池时方向错误;采样通道的输入限流电阻和钳位二极管,防止异常高压损坏 ADC;以及均衡使能信号的逻辑互锁,确保主控输出的控制信号不会因为上电时序问题导致误开启。

连接器选型也需要注意。两串电池虽然电压不高,但均衡电流在 0.5A 上下时,连接器的接触电阻直接决定发热量,我遇到过接触不良导致均衡电流上不去的问题,排查到最后竟然是连接器压线不牢。后来统一改为焊接连接,问题消失。

5. 软件状态机与均衡策略的具体实现

5.1 均衡使能条件不只是"压差大"

均衡听起来很简单,压差超过阈值就打开芯片,压差回到阈值内就关闭。但实际不能这么草率,否则会遇到三个问题:电池带载时电压本身就有波动,直接用实时电压判断容易频繁误触发;均衡过程中的极化效应会让电压读数暂时失真;长时间均衡还会导致电芯过放或者过充。

所以我的软件里,均衡使能是否生效要同时满足四个条件:压差超过启动阈值、电池处于静置状态、电芯温度和 PCB 温度在允许范围、没有充电或者放电电流。

5.2 均衡状态机的完整流程

软件的逻辑我实现成一个五状态的状态机,比起直接用 if-else 堆逻辑,状态机的好处是每个状态下的行为边界清晰,以后加新功能也只需要增加状态而不需要重构主流程。

空闲状态会周期性采样电压并做低通滤波,压差高于启动阈值而且持续 N 个周期后,进入待机确认状态。待机确认状态会做一次精确的静置判断,确认没有充放电电流后进入均衡状态。均衡状态下才真正使能 MP2642GR-Z,并持续监测压差、温度和时间。若压差降到停止阈值以下,或者超过最长均衡时间,或者温度越限,状态机会回到空闲或者进入故障状态。

判断逻辑的简化代码大概长这样:

typedef enum { BAL_IDLE = 0, BAL_WAIT_STABLE, BAL_RUNNING, BAL_PAUSE, BAL_FAULT } bal_state_t; void balancer_task(void) { uint16_t v1 = get_cell_voltage(CELL_1); uint16_t v2 = get_cell_voltage(CELL_2); int32_t delta = (int32_t)v1 - (int32_t)v2; switch (state) { case BAL_IDLE: if (abs(delta) > BAL_START_DELTA && check_stable_condition()) { state = BAL_WAIT_STABLE; } break; case BAL_WAIT_STABLE: if (has_charge_discharge_current()) { state = BAL_IDLE; } else if (abs(delta) > BAL_START_DELTA) { enable_balancer(1); state = BAL_RUNNING; } break; case BAL_RUNNING: if (abs(delta) < BAL_STOP_DELTA) { enable_balancer(0); state = BAL_IDLE; } else if (is_temperature_over_limit() || get_running_time() > BAL_MAX_TIME) { enable_balancer(0); state = BAL_FAULT; } break; case BAL_FAULT: clear_fault_after_cooldown(); break; default: break; } }

关键阈值我用了一个表来管理,方便不同电芯体系直接调整:

参数磷酸铁锂推荐值说明
均衡启动压差30mV低于这个值不动作,防止频繁启停
均衡停止压差10mV目标死区,避免临界抖动
启动压差持续周期连续 5 次采样每次采样间隔 1s,去抖
单次最长均衡时间120 分钟防止极端情况下长时间误均衡
温度保护上限60°C同时监控电芯和 PCB 温度

5.3 与充放电策略的联动

均衡不应该是孤立运行的功能,必须和系统的充放电策略联动。我的做法是:充电过程中只做监控,不做均衡;放电过程中同样不做均衡;只有系统进入静置状态并且满足电压条件才允许均衡。原因很简单,充放电时电芯的欧姆压降和极化会叠加到电压读数上,这时候启动均衡很可能搬错方向,反而扩大压差。

这套联动逻辑挂在系统的电源管理状态上而不是单独跑,实现成本很低,但规避了绝大多数误均衡场景。

6. 实测结果与踩坑记录:均衡效果和三个典型案例

6.1 均衡过程的实测数据

样机装好后,我专门做了一轮静置均衡测试。电池包是两串 6Ah 磷酸铁锂,人为把电芯电压弄出明显压差,然后放空静置一小时,记录均衡过程中的电压变化:

时间Cell1 电压Cell2 电压压差状态
0 min3.83V3.97V140mV均衡启动
5 min3.85V3.95V100mV均衡运行
10 min3.87V3.93V60mV均衡运行
15 min3.88V3.91V30mV均衡运行
20 min3.88V3.90V20mV接近停止
25 min3.89V3.90V10mV均衡停止

这个速度对应大概 350mA 的平均均衡电流,整个过程电池包电压只出现了很小的变化,因为能量是在两节电芯之间转移,而不是被电阻耗散掉。相比我之前用被动均衡方案的样机,同样压差下,主控侧能明显感觉到发热少了,均衡速度也快了将近一倍。

静置十分钟后我又复测了一次,压差停在 10mV 附近,没有出现明显的反弹,说明 25 分钟不是靠虚压差"糊弄"过去的,能量确实进行了重分布。

6.2 三个典型问题的排查过程

问题一:均衡刚启动时 ADC 读数乱跳。现象是使能均衡的一瞬间,主控读到的电压值出现十几毫伏的跳变,导致状态机误判为压差异常。排查到最后发现,均衡电感离采样网络太近,开关动作的磁场耦合进了采样走线。解决方法是把电感挪到板边,采样走线在底层用地平面完整屏蔽,并且在软件里对使能后的前几百毫秒做了采样值丢弃处理。

问题二:均衡在静置状态下反复启停。压差降到停止阈值后,均衡关闭,电压因为极化退去会产生小幅回弹,压差又超过启动阈值,于是再次打开。看起来功能正常,但长期反复启停会加快芯片和电感的温度循环。解决方法是把启动阈值和停止阈值拉开距离,并且规定均衡停止后必须锁定一段时间不允许再次启动,实现层面就是状态机里的冷却计时器。

问题三:系统带载时电压骤变导致保护误动作。备用电源从空闲切到负载放电的瞬间,两节电芯的瞬间压降不一样,低内阻的一节压降小,高内阻的一节压降大,短时压差会冲到几十毫伏。如果主控在这个瞬间读取电压触发保护,就会误判。解决方式是把均衡评估放到静置条件下执行,带载状态下只监控极端压差,不做普通均衡判断。

6.3 实测中的其他心得

还有一个细节值得提:磷酸铁锂电芯的电压平台很平,荷电状态在小范围变化时电压变化不大,这意味着单纯靠电压判断均衡完成度会有一定盲区。工程项目里我不追求把压差压到零,只要压差进入 10mV 以内的死区并且能稳定保持,就认为均衡完成了。为了更精确地评估一致性,我还会配合内阻测试数据一起看,压差正常但内阻差距大的电芯对,即使在均衡后也会很快重新拉开,这类情况要考虑直接更换电芯而不是依赖均衡补救。

温升数据也记录过。连续均衡半小时,PCB 上均衡区域只比环境温度高出大约 8°C,相比以前被动均衡动辄十几度的温升,这个表现让热设计压力小了很多。如果均衡电流还要加大,散热风险点主要还是在电感和芯片封装底部,PCB 上对应位置多打过孔帮助散热就够了。

最后说一下个人体会。均衡方案不是越贵越好,关键是和系统的能量规模匹配。两串小系统用主动均衡芯片加高性能主控,很多人觉得成本高,但我算下来,省掉的调试时间、提高的可靠性和减少的售后问题,早就把芯片成本赚回来了。做储能和备用电源,用户要的不是最便宜的板子,而是长期不出毛病的系统。均衡这件事,提前重视永远比事后补救划算。

RELATED READING

延伸阅读

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