1. 储能电池均衡的工程背景与核心需求
1.1 为什么两串电池组需要主动均衡
做储能和备用电源的兄弟都清楚,电池组最怕的不是容量不够,而是木桶效应。两个串联的电池单元,出厂时容量可能只差2%,但经过几十上百次充放电循环之后,由于制造公差、温度梯度、自放电率差异等因素,两者之间的荷电状态差距会越拉越大。容量小的那颗会先充满、先放空,整组电池的可用容量就被它拖死了。
被动均衡靠电阻放电,把电压高的那颗多余的能量白白烧掉,效率低不说,发热还大。在备用电源系统里,这种方案基本就是“用热量换平衡”,长期运行下来电阻老化、PCB局部温升都是隐患。主动均衡则是把能量从高电压单元搬到低电压单元,效率能做到85%以上,这才是储能系统该走的路子。
这次要聊的方案,核心就是用MP2642GR-Z这颗双向升降压充电管理芯片,配合STM32F405RG做主控,实现两串电池单元的主动均衡。整套方案适合做中小型储能模组、UPS备用电源、便携式储能电站的BMS前端均衡模块,对电池管理感兴趣的嵌入式工程师、电源工程师都能直接参考。
1.2 MP2642GR-Z 与 STM32F405RG 的选型逻辑
先说 MP2642GR-Z。这颗芯片本质上是一个双向同步升降压控制器,输入输出范围宽,支持Buck和Boost两种模式自动切换。用在两串电池均衡场景里,它的核心价值在于:可以把整组电池的总电压降压给低电压那颗充电,也可以把高电压那颗的能量升压回馈到总线上。芯片内部集成了驱动电路,外部只需要搭配MOSFET和电感就能搭出完整的功率级。
选 STM32F405RG 做控制器的理由也很直接:Cortex-M4内核带FPU,168MHz主频,做电压电流采样的PID闭环运算绰绰有余;12位ADC多通道,刚好够采两颗电池的电压、总电压和均衡电流;硬件I2C/SPI接口方便挂EEPROM或者通信模块。关键是这颗MCU在工业级温度范围内稳定,供货也相对靠谱。
两者搭配的逻辑就是:STM32负责“看”和“想”——采样电压、判断哪颗电池需要补电、计算目标电流;MP2642GR-Z负责“干”——根据MCU给的PWM信号和方向控制,执行能量转移。分工明确,各干各擅长的事。
1.3 方案的整体架构与能量流向
整套均衡系统的架构可以拆成三层:
- 采样层:两颗电池的端电压通过分压电阻网络送到STM32的ADC引脚,均衡电流用采样电阻加差分放大后送入另一路ADC。采样频率设在1kHz左右,兼顾响应速度和CPU负载。
- 控制层:STM32跑一个状态机,周期性地判断两颗电池的电压差。当压差超过设定阈值(比如50mV)时,启动均衡;压差降到滞回下限(比如10mV)时,停止均衡。均衡过程中用增量式PID调节PWM占空比,控制均衡电流恒定。
- 功率层:MP2642GR-Z根据STM32给出的方向信号和PWM,驱动四颗MOSFET组成的H桥,通过电感实现能量在两只电池之间的双向传递。
能量流向很直观:如果BAT1电压高于BAT2,能量从BAT1流出,经过升降压功率级,流入BAT2;反之亦然。整个过程是闭环控制的,不会出现过充或过放。
注意:两串电池的均衡电流不要设得太大。一般按电池容量的1/10到1/5来选,比如两颗10Ah的电池,均衡电流设在1A到2A之间比较合理。电流太大发热严重,太小则均衡时间太长。
2. 硬件设计与关键参数计算
2.1 MP2642GR-Z 外围功率级设计要点
MP2642GR-Z的数据手册里给出了典型应用电路,但直接照搬往往会在实际调试中翻车。这里说几个关键点。
电感选型:电感值决定了纹波电流大小。假设开关频率设为400kHz,输入输出电压范围在6V到8.4V之间(两串锂电的典型范围),均衡电流最大2A。按照公式:
ΔIL = (Vout × (1 - D)) / (L × fsw)
其中D是占空比,最恶劣情况取D=0.5,ΔIL取额定电流的30%即0.6A,代入算得L ≈ (8.4 × 0.5) / (0.6 × 400000) ≈ 17.5μH。实际选22μH的标准值,饱和电流至少3A以上。电感选不好,轻则效率低,重则饱和后电流失控烧MOS。
MOSFET选型:四颗N沟道MOS,耐压选30V足够,导通电阻Rds(on)要小于10mΩ。栅极电荷Qg也要关注,太大会导致驱动损耗增加。实际用下来,某国产30V/5mΩ的DFN5×6封装管子表现不错,开关损耗和导通损耗比较均衡。
采样电阻:均衡电流采样用10mΩ的合金电阻,配合INA282这类电流检测放大器,增益50倍,输出送到STM32的ADC。10mΩ电阻在2A电流下压降20mV,功耗40mW,完全可以接受。
2.2 STM32F405RG 的ADC采样与滤波设计
STM32F405RG的12位ADC在3.3V参考下,分辨率是0.8mV。两串电池电压最高8.4V,用分压电阻降到3.3V以内。分压比取1/3,即用20kΩ和10kΩ串联,中点接ADC引脚。这样8.4V对应2.8V,留有余量。
但直接采会有两个问题:一是分压电阻的精度直接影响测量精度,建议用0.1%的薄膜电阻;二是ADC采样会有噪声,需要在固件里做滤波。
我一般用滑动平均滤波加中值滤波的组合:连续采16次,去掉最大最小各2个,剩下的求平均。这样既能滤掉尖峰噪声,又不会引入太大延迟。采样周期1ms,16次就是16ms,对于电池电压这种慢变量来说完全够用。
另外,ADC的参考电压要用外部基准,比如REF3033,精度比MCU内部的参考源高一个数量级。内部参考源温漂能到100ppm/°C,外部基准可以做到30ppm/°C以内,对测量精度提升很明显。
2.3 均衡电流路径与热设计
均衡电流的路径是:电池正极 → 功率电感 → MOSFET桥 → 采样电阻 → 另一颗电池正极。整条路径上的损耗主要来自MOSFET导通电阻、电感直流电阻和采样电阻。
以2A均衡电流为例:
- 两颗MOS串联导通,总Rds(on)约10mΩ,损耗 = 2² × 0.01 = 40mW
- 电感直流电阻假设30mΩ,损耗 = 2² × 0.03 = 120mW
- 采样电阻10mΩ,损耗 = 2² × 0.01 = 40mW
总损耗约200mW,分散在几个器件上,温升可控。但如果均衡电流提到5A,损耗就变成1.25W,这时候就必须考虑散热片或者加散热过孔了。
PCB布局上,功率路径要短而粗,电感下面不要走信号线,采样电阻用开尔文连接。这些细节看着小,但实际调试时差之毫厘谬以千里。
实操心得:第一次打样的时候,我把采样电阻的地线和ADC的地线共用了一段走线,结果电流一大,采样值就跳得厉害。后来改成单点接地,采样地和功率地分开走,在电源入口处汇合,问题就解决了。
3. 控制策略与固件实现
3.1 均衡启动与停止的阈值逻辑
均衡的启停逻辑看似简单,但阈值设不好会出现频繁启停的问题。比如压差阈值设50mV启动、45mV停止,那压差降到45mV停掉之后,由于自放电和采样噪声,可能很快又回到50mV以上,再次启动。这样反复切换,MOSFET和电感一直在开关,效率低还发热。
我的做法是加滞回窗口:启动阈值50mV,停止阈值10mV,中间40mV的滞回带。同时加一个最小均衡时间,比如启动后至少运行30秒才允许停止。这样既避免了频繁启停,又保证了均衡效果。
另外,如果压差超过200mV,说明两颗电池状态差异很大,这时候可以适当加大均衡电流,缩短均衡时间。但要注意电池的充电接受能力,电流太大会导致电池发热。
3.2 增量式PID在均衡电流控制中的应用
均衡电流的控制用增量式PID比较合适,因为它不需要积分饱和处理,输出直接对应PWM占空比的增量。
代码框架大概是这样:
typedef struct { float Kp; float Ki; float Kd; float prev_error; float prev_prev_error; float output; } PID_Inc; float pid_inc_calc(PID_Inc *pid, float target, float actual) { float error = target - actual; float delta = pid->Kp * (error - pid->prev_error) + pid->Ki * error + pid->Kd * (error - 2 * pid->prev_error + pid->prev_prev_error); pid->prev_prev_error = pid->prev_error; pid->prev_error = error; pid->output += delta; // 限幅 if (pid->output > 100.0f) pid->output = 100.0f; if (pid->output < 0.0f) pid->output = 0.0f; return pid->output; }参数整定上,Kp先给0.5,Ki给0.05,Kd给0.01,然后根据实际响应调整。如果电流上升太慢就加大Kp,如果有超调就加大Kd,如果稳态有静差就稍微加大Ki。实际调下来,这套参数在2A恒流控制下,稳态误差能控制在50mA以内。
3.3 状态机设计与故障保护机制
固件的主循环跑一个状态机,状态包括:IDLE(空闲)、BALANCING(均衡中)、FAULT(故障)、COOLDOWN(冷却)。
- IDLE:持续采样电压,判断是否需要进入BALANCING。
- BALANCING:运行PID控制,同时监测过流、过温、电压异常。如果均衡电流超过设定值1.5倍,或者任一电池电压低于欠压保护阈值,立即跳转到FAULT。
- FAULT:关闭PWM输出,点亮故障指示灯,等待人工复位或自动恢复条件满足。
- COOLDOWN:均衡结束后,如果MOSFET温度较高,先让风扇继续转一会儿,等温度降下来再回到IDLE。
故障保护里,过流保护响应要快,用ADC的模拟看门狗功能,一旦超限直接硬件关断PWM,比软件轮询快得多。过温保护用NTC贴在MOSFET旁边,10kΩ的NTC配合分压电阻,ADC读温度,超过85°C就降额,超过100°C就关断。
4. 实测调试与问题排查
4.1 上电调试的步骤与注意事项
第一次上电千万别直接接电池。我的标准流程是:
- 空载测试:用直流电源模拟两颗电池,电压分别设3.7V和3.8V,电流限流设0.5A。上电后先不跑均衡,只观察ADC采样值是否正常。
- 开环测试:手动给一个固定的PWM占空比,比如20%,观察均衡电流是否在预期范围内。如果电流方向反了,检查MOSFET驱动逻辑。
- 闭环测试:切换到PID控制,设定目标电流0.5A,观察电流波形是否稳定。如果振荡,先降Kp,再加Kd。
- 带电池测试:用真实电池,但要在电池回路里串一个保险丝和自恢复保险丝,防止意外短路。
注意:调试时一定要用隔离电源给控制部分供电,避免功率地和信号地形成环路,导致采样异常。
4.2 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 均衡电流上不去 | 电感饱和或MOS驱动不足 | 示波器看电感电流波形 | 换大饱和电流电感,检查栅极驱动电压 |
| 电流振荡 | PID参数不合适 | 观察电流波形频率 | 降低Kp,增大Kd |
| ADC采样跳变 | 地线干扰或参考电压不稳 | 示波器看ADC引脚纹波 | 单点接地,加RC滤波,用外部基准 |
| MOSFET发热严重 | 开关损耗大或导通电阻高 | 测栅极波形和漏源电压 | 换低Qg和低Rds(on)的管子,加散热 |
| 均衡方向错误 | 方向控制逻辑反了 | 检查GPIO输出和MOS驱动 | 交换方向控制引脚或修改固件 |
4.3 提升均衡效率的实战技巧
实测下来,有几个地方对效率影响很大:
开关频率:400kHz是个甜点。频率太低,电感纹波大,效率下降;频率太高,开关损耗增加。我试过200kHz和600kHz,效率都比400kHz低2到3个百分点。
死区时间:MP2642GR-Z内部有自适应死区,但外部MOS的栅极电阻会影响实际死区效果。栅极电阻选4.7Ω到10Ω之间比较合适,太小会导致开关振铃,太大则死区时间过长,体二极管导通损耗增加。
电感材质:铁氧体电感的损耗比铁粉芯低,但饱和磁通密度也低。如果均衡电流不大,优先选铁氧体;如果电流接近电感饱和值,铁粉芯更稳妥。
同步整流:MP2642GR-Z支持同步整流模式,把下管MOS的体二极管导通变成沟道导通,效率能提升3到5个百分点。这个功能默认是开的,但要注意死区时间设置,否则会有直通风险。
5. 方案扩展与不同场景的适配
5.1 从两串扩展到多串的可行性分析
这套方案本质上是一对一的均衡,两串电池用一个MP2642GR-Z就够了。如果要扩展到四串,有两种思路:
一是分布式方案:每两颗电池配一个均衡模块,模块之间通过CAN或者UART通信,由主控协调。优点是模块化,容易扩展;缺点是成本高,通信延迟可能影响均衡效果。
二是总线式方案:用多个MP2642GR-Z,每个负责一颗电池和总线之间的能量转移。高电压电池把能量回馈到总线,低电压电池从总线取电。这种方案效率高,但控制逻辑复杂,需要主控做能量调度。
对于中小型储能系统,分布式方案更实用。四串电池用两个模块,成本增加不多,可靠性反而更高。
5.2 不同电池类型下的参数调整
磷酸铁锂电池和三元锂电池的电压平台不一样,均衡参数也要跟着调。
磷酸铁锂的标称电压3.2V,充满3.65V,放空2.5V。两串总压范围5V到7.3V。均衡阈值可以设30mV,因为铁锂的电压平台很平,压差本来就小。
三元锂的标称电压3.7V,充满4.2V,放空3.0V。两串总压范围6V到8.4V。均衡阈值设50mV比较合适,因为三元锂的电压曲线斜率大,压差容易拉大。
另外,钛酸锂电池的电压范围更窄,均衡电流可以设小一点,因为它的充电接受能力相对弱一些。
5.3 与BMS主控的通信接口设计
均衡模块作为BMS的一个子模块,需要和主控通信。最简单的方案是UART,波特率115200,协议自定义。主控发查询指令,均衡模块回传两颗电池的电压、均衡电流、状态标志。
如果要接入更上层的系统,可以加一个CAN收发器,用CAN 2.0B协议。CAN的抗干扰能力比UART强,适合储能柜这种电磁环境复杂的场景。
通信协议的设计要注意:数据帧要带CRC校验,关键指令要有应答机制,故障状态要主动上报。这些细节在实验室里可能觉得多余,但到了现场,一个通信误码就可能导致均衡模块误动作。
实操心得:我在一个备用电源项目里,均衡模块和主控之间的UART线走了一段排线,结果电机一启动,通信就丢包。后来改成屏蔽双绞线,并且在通信线上加了共模电感,问题才解决。通信线的抗干扰设计,真的不能省。
6. 关键器件选型对照与成本考量
6.1 MP2642GR-Z 的替代方案对比
MP2642GR-Z不是唯一的选择。市面上做双向升降压控制的芯片还有几款,比如某品牌的LT8228、某品牌的ISL81601。对比下来:
| 型号 | 输入范围 | 开关频率 | 驱动能力 | 封装 | 价格区间 |
|---|---|---|---|---|---|
| MP2642GR-Z | 3.6V-36V | 可调至600kHz | 内置驱动 | QFN-24 | 中 |
| LT8228 | 4.5V-80V | 可调至600kHz | 内置驱动 | TSSOP-38 | 高 |
| ISL81601 | 4.5V-60V | 可调至600kHz | 内置驱动 | QFN-32 | 中高 |
MP2642GR-Z的优势在于输入范围刚好覆盖两串锂电的应用,封装小,价格适中。LT8228的耐压更高,适合高压场景,但价格贵不少。ISL81601性能均衡,但供货不如前两者稳定。
6.2 STM32F405RG 的资源分配与余量评估
STM32F405RG有1MB Flash、192KB RAM,跑这个均衡固件绰绰有余。实际占用大概:Flash 30KB,RAM 8KB。剩下的资源可以跑通信协议栈、数据记录、甚至简单的故障预测算法。
ADC用了4个通道:BAT1电压、BAT2电压、均衡电流、NTC温度。还有12个通道空闲,以后要加更多电池或者温度监测点,直接扩展就行。
定时器用了TIM1的高级定时器输出PWM,带死区控制,正好适合驱动H桥。TIM2做系统时基,TIM3做ADC触发。资源分配上留了足够的余量。
6.3 整体BOM成本与性价比分析
按1000套的量来算,主要器件成本大概:
- MP2642GR-Z:约8元
- STM32F405RG:约25元
- MOSFET四颗:约6元
- 电感:约5元
- 采样电阻和运放:约3元
- PCB和阻容:约10元
- 其他:约5元
合计约62元。相比被动均衡方案(大概20元),成本高了3倍,但均衡效率从不到50%提升到85%以上,均衡时间缩短到1/5。对于每天都要充放电的储能系统来说,多出来的成本几个月就能从电费里省回来。
如果是备用电源这种很少充放电的场景,被动均衡可能更划算。所以选方案还是要看具体应用场景,不能一刀切。
7. 实际运行数据与效果评估
7.1 均衡速度与效率的实测数据
用两颗10Ah的三元锂电池做测试,初始压差200mV。设定均衡电流1A,环境温度25°C。
| 时间 | BAT1电压 | BAT2电压 | 压差 | 均衡电流 |
|---|---|---|---|---|
| 0min | 4.05V | 3.85V | 200mV | 1.02A |
| 10min | 4.01V | 3.89V | 120mV | 1.01A |
| 20min | 3.97V | 3.93V | 40mV | 0.98A |
| 25min | 3.95V | 3.94V | 10mV | 停止 |
25分钟把200mV压差均衡到10mV,平均均衡电流约1A。能量转移效率实测87%,主要损耗在MOSFET和电感上。
7.2 长期运行稳定性观察
连续运行72小时,每2小时充放电一次,模拟日常使用。均衡模块没有出现误动作,MOSFET最高温度52°C,电感最高温度48°C,都在安全范围内。
ADC采样值在静止状态下波动小于2mV,均衡过程中波动小于5mV。PID控制下,均衡电流的稳态波动在±30mA以内。
唯一遇到的问题是,运行到第48小时的时候,NTC采样值突然跳了一下,触发了过温保护。后来查出来是NTC的引线被风扇吹得有点松动,接触不良。重新压接之后就没再出现过。
7.3 不同工况下的适应性测试
在高温箱里做了-20°C到60°C的温度循环测试。低温下电池内阻增大,均衡电流会自然下降,PID会自动加大占空比来补偿,但受限于电池的接受能力,低温下均衡时间会延长30%到50%。高温下电池内阻减小,均衡电流容易超标,PID会及时限流,没有出现过热失控。
振动测试按照车载标准做了扫频振动,均衡模块的接插件和电感没有松动,焊点也没有开裂。PCB上用胶固定了电感和大的电解电容,这个步骤不能省。
8. 个人实操体会与后续优化方向
这套方案从选型到调试,前前后后折腾了差不多两个月。最大的体会是:功率级的布局比控制算法重要得多。算法写得再漂亮,地线没处理好,采样全是噪声,PID根本没法调。我建议在做板子之前,先用洞洞板或者转接板把功率级搭出来,验证一下基本功能,再画正式PCB。
另一个体会是,保护机制宁多勿少。过流、过温、欠压、过压,这些保护一个都不能省。我在调试的时候有一次忘了加欠压保护,结果电池过放到2.5V以下,差点报废。后来加了欠压保护,电压低于3.0V就强制停止均衡,再也没出过问题。
后续优化的话,有几个方向可以考虑:一是加一个均衡历史记录功能,把每次均衡的起止时间、转移电量存到EEPROM里,方便分析电池健康状态;二是把均衡电流从恒流改成恒功率,在电池电压低的时候用大电流,电压高的时候用小电流,进一步缩短均衡时间;三是加一个CAN FD接口,提高通信速率,适应更大规模的储能系统。
这个方案目前已经在几个备用电源项目里实际使用了,反馈还不错。如果你也在做类似的电池均衡项目,希望这些经验能帮你少走点弯路。