1. 从两个串联电芯说起:为什么被动均衡在储能BMS里依然是主流选择
储能系统和备用电源系统里,电池组从来不是单节电芯打天下。以最常见的48V备用电源为例,通常是15串或16串磷酸铁锂电芯串联,而即便是小型的12V/24V储能模组,也至少是4串或8串结构。串联带来的核心问题就一个:同一串电芯,容量、内阻、自放电率不可能完全一致。充放电循环跑上几十上百次之后,这种不一致会被放大,最终表现为某节电芯先到上限电压、某节先到下限电压,整组可用容量被最弱的那节电芯卡死。
均衡电路要解决的就是这件事。行业里把均衡分成两大类:被动均衡和主动均衡。主动均衡用变压器、电感或电容做能量搬运,效率高、发热小,但电路复杂、成本高、EMI难搞;被动均衡则是给电压偏高的电芯并联一个耗散电阻,把多余的能量以热的形式放掉。听起来很"笨",但在储能和备用电源这类成本敏感、充放电倍率不高、对均衡速度要求不苛刻的场景里,被动均衡的性价比反而最高。
我这次做的项目,目标很明确:用MP2642GR-Z这颗模拟前端(AFE)芯片,配合STM32F207ZG主控,对两个串联电池单元做均衡控制。两颗电芯的规模听起来小,但麻雀虽小五脏俱全——电压采集、均衡开关、过压保护、状态上报、与主控的通信,一个都不能少。把这套两串的方案吃透,扩展到15串、16串只是级联和地址分配的问题。
先说说为什么选这两颗芯片。MP2642GR-Z 是一颗面向多串电池管理的AFE,内部集成了高精度ADC、均衡驱动MOS、过压/欠压比较器,以及一个可以级联的通信接口。它的均衡驱动是外置电阻+内部MOS的架构,也就是说均衡电流由你选的电阻决定,芯片只负责开关。STM32F207ZG 是ST的经典高性能MCU,Cortex-M4内核,带FPU,主频120MHz,外设资源丰富,尤其是多路UART、SPI、CAN,做BMS主控绰绰有余。两者搭配,一个管模拟侧的采集与均衡执行,一个管逻辑侧的策略、保护和通信,分工清晰。
提示:被动均衡的均衡电流一般取容量安时数的1%~5%。比如两节5Ah的电芯,均衡电流取50mA~250mA比较合理。电流太小均衡慢,太大则电阻发热严重、PCB铜箔要加宽。
2. MP2642GR-Z 的均衡驱动逻辑:内部MOS到底怎么开关
很多人第一次看MP2642GR-Z的数据手册,会误以为均衡电流是芯片内部设定的。实际上不是。这颗芯片的均衡引脚(通常标为CBx或BALx)内部是一个低边MOS开关,外部需要接一个均衡电阻到电芯正极。当内部MOS导通时,电芯正极→均衡电阻→内部MOS→电芯负极形成回路,电流流过电阻发热,电芯被放电。
这里有个关键细节:均衡电阻的接法决定了你能否对相邻电芯独立均衡。两串系统里,电芯是叠在一起的,Cell1的负极就是Cell2的正极(也就是系统的中间电位点)。如果你把Cell1的均衡电阻接到Cell1正极和Cell1负极之间,那没问题;但如果你布线时不小心让Cell1的均衡回路和Cell2的采样回路共用了一段走线,均衡电流就会在采样线上产生压降,导致电压采集出现偏差。
我在第一版PCB上就踩过这个坑。当时为了省事,把两颗电芯的采样滤波RC和均衡电阻的地端共用了一段铜皮。结果一开启均衡,被均衡那节电芯的采集电压立刻掉了几十毫伏,主控误判为欠压,直接把均衡关掉了。后来把均衡回路的地单独走线,星型汇聚到电芯负极采样点,问题才消失。
MP2642GR-Z 的均衡控制是通过内部寄存器位来做的。主控通过通信接口写一个均衡控制寄存器,每一位对应一节电芯的均衡开关。对于两串系统,你只需要操作低两位。但要注意,芯片上电默认均衡是关闭的,而且很多AFE在检测到过压或欠压时会自动禁止均衡,这是硬件保护逻辑,不受软件控制。所以你在软件里写均衡命令之前,必须先读状态寄存器,确认没有故障标志。
均衡的开启条件,我一般设三条同时满足:
- 电芯电压高于均衡启动阈值(比如3.45V,针对磷酸铁锂);
- 最高电芯电压与最低电芯电压之差大于均衡门限(比如30mV);
- 电池组处于充电状态或静置状态,且没有过温、过流告警。
为什么不在放电时均衡?因为放电时电压本来就在往下掉,均衡会让被均衡的电芯掉得更快,可能提前触发欠压保护,反而缩短放电时间。充电时均衡最合理,因为充电电流会不断把能量补进来,均衡只是把"跑得快"的那节电芯按住,等"跑得慢"的追上来。
2.1 均衡电阻的选型计算
假设电芯满电电压4.2V(三元锂)或3.65V(磷酸铁锂),均衡电流目标100mA。以磷酸铁锂3.65V为例,均衡电阻R = V / I = 3.65V / 0.1A = 36.5Ω。取标准值36Ω,实际电流约101mA。电阻的功率P = I²R = 0.1² × 36 = 0.36W。这时候你不能只选一个0.25W的电阻,必须留余量,选0.5W或1W的封装。我一般用0805封装两颗36Ω并联,等效18Ω,电流翻倍到200mA,但每颗电阻只承担0.18W,温升可控。
注意:均衡电阻的温升会影响周边采样电阻的阻值,进而影响电压采集精度。布局时均衡电阻要远离采样分压电阻和NTC热敏电阻,至少保持5mm以上间距。
2.2 内部MOS的导通电阻与压降
MP2642GR-Z 内部均衡MOS的导通电阻典型值在几欧姆量级(具体看手册)。这个导通电阻和外部均衡电阻串联,会分掉一部分电压。比如内部MOS导通电阻2Ω,外部36Ω,总回路38Ω,实际电流 = 3.65 / 38 ≈ 96mA,比理论值小4%。这个偏差在工程上可以接受,但如果你把均衡电阻选得很小(比如5Ω),内部MOS的2Ω就会占很大比例,实际电流严重偏离设计值,而且内部MOS的功耗会急剧上升,可能触发过温保护。所以均衡电阻不建议小于10Ω。
3. STM32F207ZG 侧的软件架构:状态机与均衡策略怎么落地
主控这边的活儿,核心是三件事:采集电压、判断均衡条件、下发均衡命令。听起来简单,但要做稳,得有一套清晰的状态机。
我用的是定时器触发的周期任务,每100ms跑一次BMS主循环。主循环里先通过通信接口读MP2642GR-Z的电压寄存器和状态寄存器,拿到两节电芯的实时电压和故障标志。然后进入均衡决策逻辑。
均衡决策我写成了一个独立的状态机,状态定义如下:
| 状态 | 含义 | 进入条件 | 退出条件 |
|---|---|---|---|
| IDLE | 空闲,不均衡 | 压差小于门限或存在故障 | 压差大于门限且无故障 |
| BALANCING | 正在均衡 | 满足均衡启动条件 | 压差小于门限或出现故障 |
| COOLDOWN | 均衡后冷却 | 均衡结束 | 冷却计时到(比如30秒) |
| FAULT | 故障锁定 | 过压/欠压/过温 | 故障清除且手动复位 |
为什么要加COOLDOWN?因为均衡电阻刚工作完温度很高,如果立刻又开启,热量累积可能烧电阻。冷却30秒让电阻散热,同时给电芯一个电压恢复的时间——均衡刚结束时,被均衡电芯的电压会因为内阻和极化效应暂时偏低,等几十秒后电压回升到真实开路电压,再判断压差才准确。
3.1 电压采集的滤波与校准
MP2642GR-Z 的ADC精度不错,但原始数据还是有噪声。我在软件里做了两级滤波:第一级是中值滤波,连续采5次去掉最大最小值取平均;第二级是一阶低通滤波,系数取0.2,让电压变化平滑但不至于滞后太多。
校准方面,每块板子出厂前都要做一次两点校准:用高精度电源给一个已知电压(比如3.000V和4.000V),记录ADC读数,算出增益和偏移,存到STM32的Flash里。运行时用这组系数去修正ADC原始值。不做校准的话,AFE的初始精度可能在±10mV左右,校准后能压到±2mV以内。
3.2 通信接口的选型与实现
MP2642GR-Z 支持多种通信方式,具体看型号后缀。我用的这颗是SPI兼容的,STM32F207ZG的SPI外设直接对接。SPI的好处是速度快,100ms周期内读几个寄存器毫无压力。但SPI有个坑:AFE的SPI时序和标准SPI不完全一样,片选拉低后需要等几个微秒才能发时钟,否则AFE还没准备好。我在驱动里加了2us的延时,问题解决。
如果你用的是隔离通信(储能系统里高压侧和低压侧必须隔离),那SPI就不合适了,得用隔离的UART或CAN。STM32F207ZG自带CAN控制器,配合隔离收发器,可以直接和AFE的UART转CAN模块对接。这时候通信速率和实时性要重新评估,100ms周期可能不够,得根据隔离器件的延迟调整。
4. 两串均衡的实测波形与踩坑记录
理论说再多,不如看波形。我在实验室用两节5Ah磷酸铁锂电芯做了完整测试。初始状态:Cell1电压3.32V,Cell2电压3.38V,压差60mV。启动均衡后,Cell2的均衡开关以PWM方式工作,占空比50%,均衡电流平均约100mA。
实测下来,压差从60mV降到10mV用了大约40分钟。这个速度不算快,但对于备用电源系统来说完全够用——备用电源大部分时间处于浮充状态,有的是时间慢慢均衡。
踩过的坑有几个值得说:
第一个坑:均衡时的电压采集跳变。前面提过,均衡回路和采样回路共用走线导致采集偏差。后来改成独立走线,并且在软件里做了处理:均衡开启后的前3个采集周期,电压数据标记为"不可信",不参与压差计算,等稳定后再用。
第二个坑:AFE的过压保护误触发。有一次测试时,Cell2电压刚到3.65V,均衡刚开启,AFE就报过压故障,把均衡关了。查了半天发现是均衡电阻的走线太细,均衡电流在走线上产生压降,AFE的采样点正好落在走线末端,采到的电压比电芯真实电压高了20mV。把走线加宽到2mm,问题消失。
第三个坑:STM32的SPI片选时序。前面提过,加延时解决。但这个延时不能太长,太长会拖慢通信周期。我试过5us、2us、1us,最后2us最稳。
第四个坑:均衡电阻的温升导致NTC误报。均衡电阻紧挨着NTC布置,均衡10分钟后NTC读数比实际温度高了8℃,触发了过温保护。后来把NTC移到电芯表面,远离均衡电阻,问题解决。
提示:均衡电阻的布局要遵循"热隔离"原则——远离温度敏感器件,下方铺铜散热,必要时开窗加锡。
5. 从两串扩展到多串:级联与地址分配的注意事项
两串方案跑通之后,扩展到15串、16串是自然的下一步。MP2642GR-Z 支持级联,多颗AFE通过通信总线串起来,每颗负责一段电芯。这时候有几个新问题:
地址分配:每颗AFE需要唯一地址,否则主控不知道在跟谁说话。地址可以通过硬件引脚配置,也可以通过软件写寄存器。硬件配置更可靠,但需要额外的GPIO;软件配置省引脚,但上电时要先做一轮地址枚举。我倾向于硬件配置,因为BMS上电就要工作,软件枚举万一失败,整个系统就瘫了。
通信隔离:多串系统电压高,AFE和主控之间必须隔离。每一级AFE的通信接口都要加数字隔离器,电源也要用隔离DC-DC。这部分成本不低,但安全不能省。
均衡策略的全局优化:两串时压差判断很简单,多串时就要考虑"均衡哪几节"。我的策略是:找出最高电压电芯和最低电压电芯,只均衡最高的那节,等它降到和次高一样,再一起均衡。这样避免同时均衡多节导致总均衡电流过大、发热集中。
采样同步:多颗AFE的采样不是同一时刻完成的,如果主控依次读取,先读的和后读的之间可能差了几百微秒。对于静态均衡判断影响不大,但如果要做动态内阻计算,就必须让所有AFE同步采样。MP2642GR-Z 支持同步触发引脚,把所有AFE的触发脚连在一起,主控发一个脉冲,所有AFE同时采样,然后依次读取。
6. 保护逻辑的优先级:为什么均衡永远排在保护后面
最后说一个容易被忽视但极其重要的点:保护逻辑的优先级必须高于均衡逻辑。我见过一些设计,均衡状态机和保护状态机是并列的,结果出现过压时均衡还在跑,把电芯往死里放,差点出事。
正确的做法是:保护逻辑放在最高优先级,任何过压、欠压、过温、过流故障一旦触发,立刻无条件关闭所有均衡开关,并且锁定故障状态,直到故障清除且人工复位。均衡状态机在每次决策前,先查询保护状态,有故障就直接进FAULT态,什么都不做。
在STM32里,我把保护判断放在定时器中断里,优先级最高;均衡决策放在主循环里,优先级低。中断里检测到故障,直接写GPIO关断AFE的均衡使能引脚(硬件关断),同时置位软件标志。这样即使主循环卡死,硬件关断也能保证安全。
另外,AFE本身也有过压保护,但那是最后一道防线,不能依赖它。软件保护要在AFE保护之前动作,比如AFE过压阈值是3.75V,软件就要在3.65V时停止均衡并告警。留出100mV的余量,避免两者同时触发导致状态混乱。
这套两串均衡方案,我从画板子到跑通测试花了大约三周,其中一半时间在调通信和排查采集偏差。现在回头看,最值钱的经验就是那几条:均衡回路独立走线、保护优先于均衡、电阻选型留余量、通信时序留延时。把这几点做到位,两串也好,十六串也好,底层逻辑是通的。