做储能和备用电源系统的朋友应该都深有体会:串联电池组最怕的就是“不一致”。哪怕是同一批次出厂的两颗电芯,循环几十次之后,电压、内阻、自放电率都会慢慢拉开差距。这个差距如果不处理,轻则容量越用越少,重则过充过放引发安全问题。我近期在一个两串磷酸铁锂电池组的储能备电模块里,用 MP2642GR-Z 这颗升降压控制器配合 STM32F767BI 做了一套主动均衡方案,把两颗串联电芯的压差稳定控制在 10mV 以内。这篇就从头到尾拆一拆这套系统的设计思路、硬件参数、软件逻辑,以及调试时踩过的坑,给正准备做双节均衡或者小容量储能BMS的朋友一个参考。
1. 为什么双节串联非要加均衡
1.1 不一致性从哪来
很多人觉得,两节电芯都是新的、同一批次,串联起来用应该问题不大。实际完全不是这样。电芯在出厂时就存在容量、内阻、自放电率的微小差异,这些差异在出厂检测里是合格的,但放进系统里会被持续放大。
我举个实际例子:假设两节磷酸铁锂电芯,出厂容量分别是 10.2Ah 和 9.8Ah,内阻分别是 3mΩ 和 5mΩ。串联使用时电流相同,内阻大的那节发热更多、压降更大、每次循环的充放电深度更深,容量衰减更快。循环三四百次之后,两节电芯的实际可用容量可能拉开到 10% 以上。
再加上系统内部的温度梯度,靠近发热器件的那节电芯老化速度明显更快。备用电源系统里电芯长期处于浮充状态,浮充电压下自放电率高的电芯会持续被“顶”到更高电压,进一步加速电解液分解。
1.2 不均衡会造成什么后果
两串电池不均衡,最直接的问题是可用容量下降。串联电池组的容量由最低的那节决定。一节 10Ah、另一节只有 8Ah,整组可用容量就是 8Ah,那 2Ah 的容量被白白浪费了。
更危险的是充电过程中的过充风险。充电时整组电压达到上限,BMS 判断“充满”并停止充电,但此时那节容量小的电芯已经处于过充状态。磷酸铁锂过充到 3.65V 以上,正极材料结构会受损,析锂风险大幅上升。
放电方向也一样。容量大的电芯还有电,容量小的已经到截止电压。如果负载继续拉电,小容量电芯会被拉到 2.0V 以下,造成不可逆的容量损失,甚至内部微短路。
在备用电源场景里还有个特殊问题:备用电源平时不放电,长期浮充状态下不均衡电芯的电压差会缓慢累积。一旦市电中断、需要电池组带载,压差过大的电池组可能在几分钟内就触发低压保护,导致负载掉电。电源备援的意义就完全失去了。
1.3 为什么选主动均衡而不是被动均衡
被动均衡的思路是给高电压电芯并联一个电阻,把多余的能量以热量形式放掉。电路极简,成本极低,控制逻辑就是一个开关加一个比较器。但问题也很明显:能量全部变成热,均衡电流受限于电阻功耗,一般只能做到 50mA 到 200mA。压差 50mV、容量差 1Ah 的情况下,靠 100mA 被动均衡理论上要 10 个小时才能补回来,实际因为均衡后期压差变小、电流进一步降低,时间会翻倍。
主动均衡则把能量从高电压电芯搬到低电压电芯,而不是烧掉。能量利用率高,发热小,均衡电流可以做到 1A 甚至更高,均衡速度快一个数量级。
双串均衡还有一个天然优势:拓扑简单。两节电芯之间做电荷搬移,只需要一套升降压变换器,不需要复杂的开关矩阵。这就是我选择 MP2642GR-Z 做功率级的原因,它集成了同步升降压控制所需的主要功能,外围器件少,适合在尺寸紧凑的备电模块里做双向能量转移。
2. 系统方案与硬件核心
2.1 整体架构:两块芯片各自负责什么
这套系统把任务切得很清楚。
MP2642GR-Z 负责功率变换。它作为同步升降压控制器,驱动外围的 MOSFET 和电感,实现电池单元间的双向能量搬移。当第一节电芯电压高于第二节时,能量从 Cell1 流向 Cell2;反过来,能量从 Cell2 流向 Cell1。芯片内部集成了驱动、限流比较器和必要的保护逻辑,我只需要给它 PWM 控制信号、设定工作频率和限流点。
STM32F767BI 负责管理和决策。它做四件事:采集两节电芯的电压、电流和温度;运行均衡控制算法;输出带死区的互补 PWM 给 MP2642GR-Z;通过 CAN 或 Modbus 与上位 BMS 通信,上报均衡状态和告警。
选 STM32F767BI 而不是更低成本的 M3/M4 内核芯片,原因是这套系统后续还要扩展 SOC 估算、绝缘检测和更多串数的均衡管理。F767 的主频到 216MHz,内部有双精度浮点单元,跑卡尔曼滤波或者 SOC 算法比较从容,同时 Flash 容量足够放下完整的协议栈和日志系统。对于当前两串均衡这个任务来说性能是溢出的,但考虑到产品线扩展,一步到位反而省事。
2.2 均衡拓扑与能量搬移路径
核心拓扑是经典的升降压变换器。我把 MP2642GR-Z 配置成双向工作模式,电感的左侧连接 Cell1,右侧通过开关网络连接 Cell2。
具体工作过程分两种情况。
第一种,Cell1 电压高,需要把能量搬到 Cell2。此时变换器工作在降压模式:Cell1 通过上管向电感充电,下管续流,电感电流流入 Cell2。受控的输出电流大小决定均衡速率。
第二种,Cell2 电压高,需要把能量搬回 Cell1。此时变换器切换成升压模式:Cell2 通过下管给电感充电,上管关断时电感能量通过上管体二极管和同步管流向 Cell1。
双向工作的关键是四个 MOSFET 组成的 H 桥结构,或者两相半桥结构加上适当的控制逻辑。我这里用的方案是 MP2642GR-Z 外加两组半桥驱动,通过 MCU 输出的互补 PWM 控制。
这里有个容易忽略的点:升降压变换器在输入输出电压接近时,占空比接近 50%,电感电流纹波最大;电压差大时占空比偏离 50%,纹波反而小。设计时不能只按额定工作点算电感,还要算最恶劣纹波点。
2.3 关键参数计算:电感、频率、均衡电流
均衡系统的核心参数有三个:开关频率、电感量、均衡电流设定值。
开关频率我选 400kHz。这个频率下电感体积适中,MP2642GR-Z 的驱动损耗不高,EMI 也相对好处理。频率再高到 800kHz 以上,磁芯损耗和开关损耗明显上升,对于备电系统这种对效率敏感的场合不划算。
电感量按电流纹波系数 30% 计算。系统工作电压范围是 2.5V 到 3.65V(磷酸铁锂单体),假设源电池电压 Vin=3.3V,目标电池电压 Vout=3.0V,期望均衡电流 IL=1A,纹波电流 ΔIL=0.3A。
升降压变换器在导通阶段电感两端电压约等于 Vin,因此有:
[ L = \frac{V_{in} \times D}{f_{sw} \times \Delta I_L} ]
其中占空比 D 按升降压关系近似为:
[ D = \frac{V_{out}}{V_{in} + V_{out}} = \frac{3.0}{3.3 + 3.0} \approx 0.476 ]
代入得:
[ L = \frac{3.3 \times 0.476}{400000 \times 0.3} \approx 13.1 \mu H ]
实际取 15μH,留一点裕量。电感额定电流选 3A 以上,避免均衡电流加上纹波峰值后接近饱和。饱和电感的表现是电流突然飙升且失去线性,轻则均衡电流不可控,重则烧 MOSFET。
均衡电流的设定取决于电池容量和散热能力。1A 均衡电流对 10Ah 电芯来说是 0.1C,属于安全范围。对于容量更大的电芯,可以适当提高限流点,但要注意功率级的散热设计,MP2642GR-Z 周边的 MOSFET 在持续 1A 均衡时的损耗不容忽视。
2.4 采样与保护电路细节
均衡控制的前提是精准的电压采样。我用开尔文接法,从电芯正负极单独引采样线到分压电阻,避免大电流走线压降影响采样结果。两节电芯的电压都经过电阻分压后送入 STM32F767BI 的 ADC 通道。
STM32F767BI 的 ADC 是 12 位,3.3V 参考电压下理论分辨率约 0.8mV,经过分压比折算到电池端约 1.6mV。实际使用中我开启了芯片内部的过采样功能,配合软件的滑动平均滤波,把有效精度提升到 1mV 以内。
温度采样使用 NTC 热敏电阻,分别贴在电芯表面、电感和功率 MOSFET 附近。F767 的 ADC 通道足够,我用一个多路选择器依次采集。温度数据有两个作用:一是做电压采样温度补偿,磷酸铁锂的 OCV 随温度有约 -0.5mV/°C 的漂移;二是触发过温保护,功率器件温度超过 85°C 时立即停止均衡。
保护逻辑布置在硬件和软件两层。硬件层面,MP2642GR-Z 本身有输入欠压锁定和过流保护,设置得当可以在微秒级响应。软件层面,STM32F767BI 每毫秒巡检一次电压和温度,发现异常立即关断 PWM 并锁存故障状态,需要通过 CAN 指令或重新上电才能恢复。
3. 软件控制策略与实现
3.1 状态机设计
均衡系统的软件不复杂,但状态划分必须清晰。我用了一个标准状态机,包含五个状态:待机、检测、均衡中、完成、故障。
待机状态下,系统只做电压巡检,不输出 PWM。检测状态下,连续采样 10 秒电压数据并做均值处理,排除瞬时波动干扰。只有当压差持续超过启动阈值时才进入均衡状态。
均衡中状态下,系统根据压差方向确定能量搬移方向,并运行 PI 控制器调节均衡电流。每 100ms 刷新一次占空比输出。
当压差小于停止阈值并持续 30 秒,进入完成状态,关闭 PWM 并向上位机发送“均衡完成”事件。如果压差再次扩大,从完成状态重新回到检测状态。
故障状态是所有异常的统一归口。过温、过压、通信超时都会把系统踢进故障状态,并在清除原因前不允许恢复均衡。
3.2 电压、电流采样与滤波
采样滤波是整个控制精度的基础。我用了两级处理:硬件 RC 低通 + 软件滑动平均。
硬件上,每个采样通道在 ADC 输入前加一个 1kΩ 电阻和 100nF 电容构成低通滤波器,截止频率约 1.6kHz,主要滤除开关噪声和高频干扰。软件上,对 ADC 原始值做 64 次采样的滑动平均,等效采样周期约 8ms,可以有效抑制工频干扰和随机噪声。
这里有个实践中的细节:滑动平均窗口不是越大越好。窗口太长会导致电压变化被严重滞后,均衡方向判断变慢。我曾试过 256 次平均,压差响应时间接近 200ms,结果在均衡接近尾声时出现方向反复切换。后来缩短到 64 次,配合滞回控制,现象消失。
电压判据我也做了温度补偿。以 25°C 为基准,电芯电压修正值等于实测电压减去温度系数与温差之积。磷酸铁锂的温度系数大约 -0.5mV/°C,即温度升高时同样 SOC 对应的电压略低,补偿后判断更准确。
3.3 PI 闭环与 PWM 输出
均衡电流控制我用的是 PI 调节器。目标电流由压差大小决定,压差越大目标电流越大,但不超过硬件限流点。
// 均衡电流PI控制器简化代码 float balance_pi_controller(float target_current, float measured_current, float dt) { static float integral = 0.0f; float error = target_current - measured_current; float kp = 0.15f; float ki = 0.05f; integral += error * dt; // 积分限幅,防止积分饱和 if (integral > 1.0f) integral = 1.0f; if (integral < -1.0f) integral = -1.0f; float output = kp * error + ki * integral; // 输出限幅到PWM占空比范围 if (output > 0.85f) output = 0.85f; if (output < 0.0f) output = 0.0f; return output; }实际运行时,我通过 ADC 采样电流检测电阻上的电压,换算成实际均衡电流,与目标电流比较后由 PI 调节占空比。电流环的响应带宽不需要很高,20Hz 左右就行,太高的增益反而容易引入噪声。
输出 PWM 由 STM32F767BI 的高级定时器产生互补输出,并配置死区时间。对于 400kHz 的开关频率,死区时间设置为 100ns 到 150ns。死区过大,续流期间体二极管导通损耗增加;死区过小,上下管直通风险增大。这个参数必须在实际电路上试,不能只看理论值。
控制代码放进定时器中断里,中断频率 10kHz。每 100 个中断周期做一次 PI 运算,这样既保证了 PWM 的实时性,又让控制环有足够时间处理滤波后的数据。
3.4 通信与上位机交互
系统通过 CAN 总线上报状态,也可以走 Modbus RTU 接到上位机。我预留了两种接口,实际备电项目里用的是 CAN。
通信报文包含三类:周期状态帧、事件帧、参数配置帧。周期状态帧每 500ms 发一次,包含两节电芯电压、温度、均衡电流、当前状态机状态。事件帧在状态切换或故障发生时立刻发送,比如“均衡启动”“均衡完成”“过温保护触发”等。参数配置帧用于远程修改均衡阈值和 PI 参数,方便现场调试。
参数配置支持掉电存储,我使用了 F767 内部的 Flash 扇区,将配置参数按固定结构存储,并加上校验和,防止数据损坏。
4. 调试过程与实测数据
4.1 上电调试步骤
调试顺序很重要,我经历过一次教训后总结出了固定流程。
第一步,先断开功率级,只给 MCU 供电,单独调试采样电路。通过串口打印两节电芯电压,与万用表实测值对比。如果偏差超过 5mV,就要检查分压电阻精度和 ADC 参考电压。这个阶段把所有采样通道的误差都标定好。
第二步,只给功率级供电,但不接电池,用电子负载代替,验证 MP2642GR-Z 的驱动波形是否正确。用示波器观察开关节点,确认占空比在正常范围内,死区时间没有导致直通。
第三步,接上电池组,但把均衡目标电流调低到 0.2A,先验证控制方向对不对。这一步很关键。方向接反的话,系统会把高电压电芯的能量的确搬到低电压电芯——但如果因为采样线接反或者 PWM 逻辑反了,变成把低电压电芯的能量抽到高电压电芯,压差会越拉越大。Ramp 一下就能看出来。
第四步,压差确认能被拉回后,再把目标电流逐步提高到 1A,同时观察电感温度和 MOSFET 温度。
4.2 关键波形怎么看
调试均衡系统,示波器主要看三个点:开关节点 SW 波形、电感电流波形、输出电压纹波。
开关节点 SW 波形应该是一个干净的方波,幅值等于源电池电压,上升沿和下降沿没有明显振铃。如果沿口有过冲和振铃,说明驱动回路电感过大,需要优化布局,或者在开关节点加 RC 缓冲吸收。
电感电流波形在 CCM 模式下是三角波,平均值等于均衡传输的平均电流。如果波形出现平台、电流突变,大概率是电感饱和了,要立即断电检查。
输出电压纹波与输出电容的 ESR 直接相关。均衡电流 1A 时,纹波一般应该在 50mV 以内。如果纹波过大,首先检查陶瓷电容容值是否因直流偏压而衰减。我遇到过标称 22μF 的陶瓷电容在 3.3V 偏压下实际容量只有不到 10μF 的情况,换成正温度系数的电容后纹波立刻正常。
4.3 实测均衡效果
实验条件如下:两节全新的磷酸铁锂电芯,标称容量 10Ah,分别充到不同 SOC。Cell1 电压 3.42V,Cell2 电压 3.15V,初始压差 270mV。均衡目标电流设定为 1A,启动阈值 20mV,停止阈值 10mV,滞回 10mV。
实测从启动到压差降到 10mV 大约用了 85 分钟。按照容量差估算,270mV 压差对应约 5% 的 SOC 差,即 0.5Ah 能量差。1A 均衡电流理论上需要 30 分钟就能搬完,实际用了 85 分钟,主要是因为随着压差减小,目标电流也在减小,PI 控制器逐渐降低电流,后期以 0.2A 左右的电流做“涓流均衡”。
整个过程里,电感温度从室温升到约 52°C,MOSFET 温度约 61°C,在自然散热条件下可以接受。均衡结束后,两节电芯电压恢复到 3.30V 和 3.29V,静态压差 10mV。
我还做了反向均衡测试,Cell1 电压低、Cell2 电压高,能量从第二单元搬向第一单元,控制方向切换正常,最终效果一致。
5. 常见问题与避坑指南
5.1 问题速查表
调试和现场运行中遇到的问题,我整理成了一张表,基本都是真实踩过的坑。
| 问题现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 均衡电流始终上不去 | 电感饱和、驱动信号弱、检测电阻值不准 | 用示波器看电感电流波形,换更大饱和电流电感;检查驱动电阻和栅极电容匹配 |
| 压差越均衡越大 | 采样线接反、PWM 逻辑反相 | 先降电流到 0.2A,确认方向后再加大;检查采样线开尔文接法是否接到功率线上 |
| 均衡方向反复切换 | 滤波窗口过长、无滞回控制 | 缩短滑动平均窗口,增加 10mV 滞回,延长状态切换确认时间 |
| 电压采样跳动超过 10mV | 地线噪声、ADC 参考不稳 | 采样地单独走线,功率地单点连接;参考电压外加 100nF 去耦电容 |
| 开关节点严重振铃 | 驱动回路寄生电感大 | 缩短 MOSFET 栅极走线,增加栅极电阻,必要时加 RC 吸收电路 |
| 电感发烫 | 纹波过大或电感饱和 | 提高开关频率或加大电感量;确认电感额定电流大于峰值电流 |
| 过温保护频繁触发 | 散热不足、均衡电流过大 | 加大铜箔散热面积,增加导热垫;在软件里限制最大均衡电流 |
表格里每一条都是实际项目里出现过的。特别是第一条“均衡电流始终上不去”,我第一次调试时排查了两天。最终发现是电流检测电阻的 PCB 走线太长,检到的电压掺入了地噪声,PI 控制器误以为电流已经很大,一直压低占空比。后来把采样走线改成开尔文接法,问题消除。
5.2 调机心得与避坑经验
我想强调一个很多人容易忽略的点:均衡系统的调试一定要先在低压差条件下验证控制方向,不要上来就挑战大压差。
我在另一个实验里试过直接把两节电芯充到 3.6V 和 2.8V,压差 800mV,期望均衡电流 1.5A。结果因为控制方向没验证清楚,实际运行了十几分钟,压差不但没缩小,反而扩大了。原因是采样滤波延迟太大,加上 PI 参数整定不当,系统在方向判断上产生了振荡。这不是芯片问题,是调试方法问题。
另外,MP2642GR-Z 这类升降压控制器的外围参数不能完全照搬 datasheet 的典型值。datasheet 里的推荐值是针对特定输入输出条件的,实际电路要按自己的电压范围重新计算电感、电容和限流电阻。我第一次直接照搬典型电路,在 3.3V 输入、3.0V 输出的工况下,电感纹波比预期大了将近一倍,原因就是典型值对应的输入输出电压比我实际用的高。
关于 ADC 参考电压,我建议直接使用 F767 内部的 VREF+ 引脚输入外部基准电压,而不是直接使用 3.3V 电源。3.3V 电源上的纹波会直接影响转换精度。我外接了一颗低噪声基准源,电压采样稳定性明显改善。
还有一点,通信协议里务必要包含均衡状态和故障码的上报。现场调试时,看不到内部状态机就只能靠猜。有了状态上报,远程就能判断系统是处于方向判断、电流调节还是保护状态,定位问题快得多。
6. 项目结束后我的几点体会
这套两串主动均衡系统做下来,我最深的感受是:主动均衡的硬件拓扑和控制算法本身并不复杂,真正的复杂度在采样精度、保护逻辑和调试方法上。
如果只做被动均衡,可能用一颗比较器加一颗电阻就能完事。但被动均衡在储能和备用电源场景里的短板太明显——能量浪费、发热严重、均衡速度慢。主动均衡虽然外围器件多一些,但效率和速度的优势是压倒性的。在 10Ah 电芯上,1A 的主动均衡电流意味着一次完整均衡只需要一到两个小时,这是被动均衡做不到的。
MP2642GR-Z 和 STM32F767BI 的配合,本质上是把一个专业的电源控制问题拆成了“功率变换”和“智能决策”两部分。前者交给专用芯片,把反馈环路的稳定性做好;后者交给 MCU,让系统具备灵活的阈值配置、状态管理和通信能力。这种软硬件解耦的思路,在后续扩展到四串、六串甚至更高串数的电池系统时,优势会越来越明显。
最后再分享一个实用小技巧:均衡系统调试完,建议做一次完整的“压差拉偏测试”——人为把两节电芯弄出不同的 SOC,模拟最恶劣的现场工况,连续运行 24 小时看均衡是否稳定收敛、保护是否误触发。这个过程能暴露大部分隐藏问题,比任何理论分析都有效。这套系统在模拟测试里稳定跑了一周,我才放心让它进入量产验证阶段。