1. 储能电池均衡的底层逻辑与方案选型
1.1 为什么串联电池组必须做均衡
先聊一个很多人踩过的坑。两组标称容量一致的电池单元串联使用,用了半年发现整组续航掉了将近三成,拆开一测,其中一节还剩八成容量,另一节已经掉到五成出头。这不是电池质量问题,而是串联结构本身的“木桶效应”在作祟。
串联回路里电流处处相等,充电时容量小的那节先到截止电压,放电时也是它先触底。BMS如果只监测整组总压,就会误判——充电时总压还没到阈值,但弱电芯已经过充;放电时总压看着还行,弱电芯却已经被过放。一次两次没事,循环几百次之后,弱的那节衰减加速,整组寿命被它拖垮。
均衡要解决的就是这个“电量对齐”问题。被动均衡靠电阻放电,把高的那节电量烧掉,简单便宜但发热大、效率低,适合小容量场景。主动均衡则是把电量从高的一节搬到低的一节,效率高、发热小,代价是电路复杂、成本上去了。储能和备用电源系统对效率、发热、长期可靠性都有要求,所以主动均衡是更合理的选择。
1.2 为什么选 MP2642GR-Z 做均衡执行器
MP2642GR-Z 这颗芯片在电池管理圈子里口碑不错,核心原因是它把“双向主动均衡”这件事做得足够集成。它内部集成了功率开关管和驱动逻辑,外部只需要配少量电感和电容,就能搭出一个双向 Buck-Boost 拓扑,实现两节串联电池之间的电量搬移。
选它的几个实际理由:
- 双向能量转移:不是单纯放电,而是可以把电量从电压高的那节搬到电压低的那节,均衡效率实测能到 90% 以上,比被动均衡的“烧电阻”方案省电得多。
- 集成度高:功率管内置,外围元件少,PCB 面积能压下来,对空间敏感的储能模块很友好。
- 保护机制齐全:过流、过温、欠压锁定这些都有,不用自己再搭一堆保护电路。
- 控制接口简单:通过几个使能引脚和 PWM 信号就能控制均衡方向和强度,跟 MCU 配合起来很顺手。
注意:MP2642GR-Z 的均衡电流能力跟外部电感选型直接相关,电感饱和电流不够会导致均衡电流上不去甚至芯片保护,选型时务必留足余量。
1.3 为什么用 STM32F723ZE 做均衡大脑
均衡执行器有了,还得有个“大脑”来决定什么时候均衡、往哪个方向均衡、均衡多大力。STM32F723ZE 在这个场景里扮演的就是这个角色。
它的几个关键优势:
- Cortex-M7 内核,216MHz 主频:均衡算法里涉及电压采样、滤波、比较、PWM 占空比计算,还要兼顾系统其他任务,M7 的算力绰绰有余。
- 丰富的外设:多路 12 位 ADC 可以同时采两节电池电压和温度,高级定时器能输出高精度 PWM 控制均衡强度,CAN/FDCAN 接口方便跟上层 BMS 通信。
- 浮点单元:做电压滤波和均衡电流闭环控制时,浮点运算不用软件模拟,省心。
- 低功耗模式:备用电源系统很多时候是待机状态,MCU 能进 STOP 模式等事件唤醒,对系统静态功耗友好。
这套组合的逻辑就是:STM32F723ZE 负责“看”和“想”,MP2642GR-Z 负责“干”。一个管决策,一个管执行,分工明确。
1.4 整体方案架构与信号流
整个均衡系统的信号流可以这样理解:
- STM32F723ZE 通过 ADC 采集两节电池的端电压和电池温度。
- MCU 内部跑均衡判断逻辑:比较两节电压差,超过阈值才启动均衡。
- 根据电压差大小和方向,MCU 决定均衡方向和 PWM 占空比。
- MCU 通过 GPIO 和定时器输出控制信号给 MP2642GR-Z。
- MP2642GR-Z 驱动外部电感,在两节电池之间搬移电量。
- MCU 持续监测电压变化,达到平衡或触发保护条件时停止均衡。
这个闭环里,采样精度、判断阈值、PWM 频率、电感参数是几个关键变量,后面会逐一拆开讲。
2. 硬件设计核心细节与参数计算
2.1 两节串联电池的采样电路怎么搭
采样是均衡的前提,采不准后面全白搭。两节串联电池的电压采样有个坑:上节电池的正极对地电压是两节之和,不能直接进 MCU 的 ADC,得做电平搬移或者用差分采样。
常见做法有两种:
- 电阻分压 + 运放跟随:上节电池用精密电阻分压到 ADC 量程内,下节电池直接采。分压电阻要用 0.1% 精度的,否则两节采样比例不一致,均衡判断会偏。
- 专用电池监测 AFE:如果系统里已经有 AFE 芯片,直接读寄存器更省事,精度也有保障。
这里假设用电阻分压方案,具体参数计算:
假设单节电池最高电压 4.2V,两节串联最高 8.4V。STM32F723ZE 的 ADC 参考电压 3.3V,所以上节电池分压比要满足:
分压比 = 3.3V / 8.4V ≈ 0.393选 R1 = 100kΩ,R2 = 64.9kΩ(标准值),分压比 = 64.9 / (100 + 64.9) ≈ 0.393,刚好合适。
下节电池最高 4.2V,直接进 ADC 没问题,但为了阻抗匹配,也加一级 RC 滤波。
提示:分压电阻的温漂会影响采样精度,建议选低温漂的金属膜电阻,别用普通碳膜。
2.2 均衡电感选型与电流能力计算
MP2642GR-Z 的均衡电流由外部电感和开关频率决定。芯片内部开关频率典型值 500kHz,电感纹波电流计算公式:
ΔIL = (Vbat × D × (1 - D)) / (fsw × L)其中 D 是占空比,均衡时两节电压接近,D 大约 0.5,Vbat 取 3.7V,fsw = 500kHz。
假设目标均衡电流 1A,纹波电流控制在 30% 以内,即 ΔIL = 0.3A:
L = (3.7 × 0.5 × 0.5) / (500000 × 0.3) ≈ 6.2μH选 6.8μH 标准值电感,饱和电流至少 2A,直流电阻越小越好,DCR 大了均衡效率会掉。
实测下来,电感 DCR 每增加 10mΩ,均衡效率大概掉 1 个百分点。所以别在这省成本,选个 DCR 在 20mΩ 以内的。
2.3 控制信号接口与保护电路
STM32F723ZE 跟 MP2642GR-Z 之间的接口主要有这几根线:
| 信号名 | 方向 | 作用 | 备注 |
|---|---|---|---|
| EN_BAL | MCU→MP2642 | 均衡使能 | 高电平有效 |
| DIR | MCU→MP2642 | 均衡方向 | 高/低对应不同方向 |
| PWM | MCU→MP2642 | 均衡强度 | 频率 500kHz,占空比可调 |
| FAULT | MP2642→MCU | 故障指示 | 低电平有效,需上拉 |
| ISENSE | MP2642→MCU | 电流监测 | 模拟输出,接 ADC |
保护电路方面,MP2642GR-Z 本身有过流保护,但建议在电池回路里再加一颗自恢复保险丝,防止极端情况下电感短路把电池拉爆。FAULT 引脚一定要接到 MCU 的外部中断,一旦触发立刻停均衡,别等轮询。
注意:PWM 信号走线尽量短,远离电感和功率回路,否则开关噪声会串进控制信号,导致均衡电流抖动。
2.4 PCB 布局的几条硬规矩
功率回路和控制回路要分开,这是老生常谈但每次都有人栽。具体做法:
- 电感和 MP2642GR-Z 的功率引脚围成的环路面积越小越好,减少辐射干扰。
- 采样走线用差分对,包地处理,远离功率节点。
- 模拟地和功率地单点连接,别搞大面积铺地混在一起。
- 芯片的散热焊盘一定要打足够过孔,均衡电流 1A 时芯片会有一定温升,散热不好会触发过温保护。
我试过一版布局把电感和采样走线放太近,结果 ADC 读数跳得厉害,均衡判断频繁误触发。后来把采样走线挪到板子另一侧,加屏蔽地,问题才解决。
3. 均衡控制算法与固件实现
3.1 电压采样滤波与真实值提取
ADC 采回来的原始值不能直接用,开关噪声和电池内阻导致的电压波动会让读数跳来跳去。得做滤波。
简单有效的做法是“中值滤波 + 一阶低通”组合:
#define FILTER_ALPHA 0.1f float voltage_filter(float new_sample, float old_value) { return FILTER_ALPHA * new_sample + (1 - FILTER_ALPHA) * old_value; }中值滤波去掉明显的尖峰,低通滤波平滑波动。FILTER_ALPHA 越小越平滑但响应越慢,0.1 到 0.2 之间比较合适,具体看采样频率。
采样频率建议 1kHz 左右,太快了噪声大,太慢了响应跟不上。每次均衡判断前连续采 16 次,去掉最大最小各 4 个,剩下 8 个取平均,这样出来的值基本可信。
提示:电池内阻在均衡电流流过时会产生压降,采样要在均衡间歇期做,或者对采样值做内阻补偿,否则会误判。
3.2 均衡启动阈值与迟滞设计
阈值设多少合适?设太小,两节电压差在正常波动范围内就触发均衡,频繁启停反而伤电池;设太大,均衡效果不明显。
经验值:启动阈值 30mV,停止阈值 10mV。这就是迟滞设计,防止在阈值附近来回震荡。
#define BAL_START_THRESHOLD 0.030f // 30mV #define BAL_STOP_THRESHOLD 0.010f // 10mV void balance_control(float v1, float v2) { float diff = v1 - v2; float abs_diff = fabsf(diff); if (!balancing && abs_diff > BAL_START_THRESHOLD) { balancing = 1; balance_direction = (diff > 0) ? DIR_CELL1_TO_CELL2 : DIR_CELL2_TO_CELL1; } else if (balancing && abs_diff < BAL_STOP_THRESHOLD) { balancing = 0; } }这个迟滞窗口不是随便定的。电池电压在充放电过程中本身就有波动,30mV 的启动阈值能过滤掉大部分正常波动,10mV 的停止阈值保证均衡做到位才停。
3.3 PWM 占空比与均衡电流闭环控制
均衡电流大小通过 PWM 占空比调节。但占空比和实际电流的关系受电池电压、电感参数、温度影响,开环控制不够准。加个电流闭环更稳。
思路:MCU 读 ISENSE 引脚的电流反馈,跟目标电流比较,用 PI 调节器调整 PWM 占空比。
float current_pi_control(float target, float actual) { static float integral = 0; float error = target - actual; integral += error * KI; // 积分限幅 if (integral > INTEGRAL_MAX) integral = INTEGRAL_MAX; if (integral < INTEGRAL_MIN) integral = INTEGRAL_MIN; float output = KP * error + integral; // 输出限幅 if (output > DUTY_MAX) output = DUTY_MAX; if (output < DUTY_MIN) output = DUTY_MIN; return output; }KP 和 KI 的整定靠试。先只加 KP,从小到大加直到电流开始震荡,然后退回一半,再加 KI 消除静差。实测 KP 在 0.5 左右,KI 在 0.05 左右比较稳,具体看电感参数。
目标电流怎么定?一般设 0.5A 到 1A 之间。太大了发热严重,太小了均衡慢。电压差大时可以适当加大电流,电压差小了就降下来,做个分段控制。
3.4 温度保护与故障处理逻辑
温度保护分两级:预警和关断。
- 电池温度超过 45°C,降低均衡电流到 50%。
- 电池温度超过 60°C,直接停止均衡,报故障。
- 芯片温度通过 MP2642GR-Z 的 FAULT 引脚间接判断,触发就停。
故障处理逻辑要干脆,别犹豫:
void fault_handler(void) { // 立即停止均衡 BAL_EN_LOW(); PWM_DUTY_ZERO(); balancing = 0; // 记录故障码 fault_code |= FAULT_OVERTEMP; // 通知上层 can_send_fault(fault_code); }FAULT 引脚接外部中断,中断里只做最紧急的动作——停均衡,其他记录和上报放到主循环里做。中断里别做耗时操作,这是铁律。
4. 实测调试与常见问题排查
4.1 上电调试步骤与关键波形观测
第一次上电别直接接电池,先用直流电源模拟两节电池,限流设小一点,比如 100mA。
调试步骤:
- 上电后先测 MP2642GR-Z 的供电引脚电压是否正常。
- 用示波器看 PWM 引脚有没有信号,频率是不是 500kHz。
- 给一个固定的均衡方向信号,看电感两端波形,应该是方波,占空比跟设定一致。
- 慢慢加大电源限流,观察均衡电流是否跟着起来。
- 用热成像仪看芯片和电感温度,确认没有异常发热。
关键波形要看这几个:PWM 驱动波形、电感电流波形、ISENSE 反馈波形。电感电流应该是三角波,如果看到尖峰或者震荡,说明电感参数不对或者布局有问题。
注意:调试时电源限流一定要设小,万一均衡方向搞反了,电源会被倒灌,限流能保护设备。
4.2 均衡电流上不去的几种原因
实测中最常遇到的就是均衡电流达不到设计值。排查下来无非这几个原因:
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 电流只有设计值一半 | 电感饱和电流不够 | 看电感电流波形是否削顶 | 换大饱和电流电感 |
| 电流上不去且芯片发热 | 开关频率不对 | 测 PWM 实际频率 | 检查定时器配置 |
| 电流抖动大 | 采样噪声大 | 看 ISENSE 波形 | 加 RC 滤波,改布局 |
| 电流时有时无 | FAULT 误触发 | 测 FAULT 引脚 | 检查过流阈值设置 |
电感饱和是最常见的。电感一旦饱和,电流会突然飙升,芯片过流保护触发,均衡就断了。选电感时饱和电流至少要是目标均衡电流的 2 倍,别卡着边选。
4.3 采样跳变与均衡误触发处理
采样跳变导致均衡频繁启停,这个问题很烦人。表现是电压差明明不大,但均衡一会儿开一会儿关。
根因通常是这几个:
- 采样走线受功率回路干扰。
- 电池内阻在均衡电流下的压降被采进去了。
- 滤波参数太激进,响应跟不上。
解决办法:采样在均衡关断的间隙做,或者对采样值做内阻补偿。补偿公式:
V_real = V_sample - I_balance × R_internalR_internal 可以事先测出来,一般几毫欧到几十毫欧。补偿之后采样值就准了。
另外,均衡启停加个最小持续时间,比如启动后至少跑 10 秒再判断是否停止,避免频繁开关。
4.4 长期运行可靠性与老化观察
均衡系统不是跑一次就完事,得长期观察。我一般会记录这几个数据:
- 每天均衡启动次数和总均衡时长。
- 两节电池电压差的长期趋势。
- 芯片和电感温度记录。
- 均衡电流的实际值跟设定值的偏差。
如果发现均衡越来越频繁,但电压差还是压不下来,说明电池本身衰减不一致了,均衡只能缓解不能根治。这时候要考虑换电池或者降级使用。
温度方面,长期运行下芯片温度应该稳定在 60°C 以内,电感温度不超过 80°C。超过这个范围要么是散热设计有问题,要么是均衡电流设太大了。
提示:建议在固件里加个均衡次数统计,存到 Flash 里,方便后期分析电池健康状态。
5. 系统集成与扩展思考
5.1 与上层 BMS 的通信接口设计
均衡模块不是孤立的,得跟上层 BMS 通信。STM32F723ZE 的 CAN 接口这时候就派上用场了。
通信内容主要包括:
- 上报两节电池电压、温度、均衡状态。
- 接收上层下发的均衡使能、目标电流、均衡阈值等参数。
- 上报故障码和统计数据。
CAN 报文设计要紧凑,别浪费带宽。比如用一帧 8 字节报文上报核心数据:
Byte 0-1: 电池1电压 (mV) Byte 2-3: 电池2电压 (mV) Byte 4: 温度 (℃ + 40偏移) Byte 5: 均衡状态和方向 Byte 6-7: 故障码周期上报 100ms 一次,故障时立即上报。这样上层能实时掌握均衡模块状态。
5.2 多节串联时的扩展方案
两节均衡是最小单元,实际储能系统往往是多节串联。扩展思路有两种:
- 分布式:每两节配一个 MP2642GR-Z,各自独立均衡,MCU 统一管理。优点是模块化,缺点是芯片多、成本高。
- 集中式:用多路复用开关切换,一个 MP2642GR-Z 轮流给不同电池对均衡。优点是省芯片,缺点是均衡速度慢,开关寿命有限。
实际项目里,4 节以内用分布式比较划算,再多就得权衡了。STM32F723ZE 的 GPIO 和定时器资源够多,管几路 MP2642GR-Z 没问题。
5.3 低功耗待机与唤醒策略
备用电源系统很多时候是待机状态,均衡模块的静态功耗要控制。
策略:
- 待机时 MCU 进 STOP 模式,MP2642GR-Z 关断。
- 定时器或者外部事件唤醒,周期性检查电压。
- 电压差超过阈值才唤醒均衡,否则继续睡。
STOP 模式下 STM32F723ZE 的功耗大概几十微安,加上 MP2642GR-Z 关断后的漏电流,整体静态功耗能控制在 100μA 以内。对备用电源系统来说这个水平可以接受。
唤醒周期设 1 秒一次比较合适,太频繁了功耗上去了,太慢了响应不及时。
5.4 方案成本与性能的平衡取舍
最后聊聊成本。这套方案里,MP2642GR-Z 和 STM32F723ZE 是主要成本,外围电感和电容占小头。
如果项目对成本敏感,可以考虑:
- 用 STM32F723ZE 的较低配版本,只要外设够用就行。
- 均衡电流要求不高的话,电感可以选小一号的,成本降一点。
- PCB 层数从 4 层降到 2 层,但布局难度上去了,得权衡。
性能方面,均衡效率、响应速度、长期可靠性是三个核心指标。效率靠电感和布局,响应靠算法和采样,可靠性靠保护和散热。这三块都做到位,方案就稳了。
我在实际项目里踩过的最大坑是低估了散热。第一版没给芯片加散热过孔,均衡跑 10 分钟就触发过温保护。后来加了过孔和铜皮,温度降了 20 多度,问题解决。所以别省散热设计,这是长期稳定运行的基础。