1. 从两个串联电芯说起:为什么被动均衡在储能BMS里依然是主流选择
储能系统和备用电源系统里,电池组的安全性和循环寿命是两条硬指标。而串联电芯之间的一致性,直接决定了整组电池能用多久、能放多少电。我接触过不少做储能BMS的团队,大家在方案选型阶段最常纠结的一个问题就是:均衡到底用被动还是主动?尤其是当系统规模不大、成本敏感、又要求高可靠性的场景下,这个选择会直接影响整个BMS的架构设计。
这篇内容围绕一个非常具体的场景展开:在储能和备用电源系统中,用MP2642GR-Z这颗模拟前端芯片配合STM32F427ZI主控,对两个串联电池单元做均衡管理。两串电芯听起来简单,但实际做起来,从芯片选型、均衡策略、采样精度到PCB布局,每一步都有讲究。适合正在做小型储能BMS、备用电源管理板、或者想从零搭建一套两串锂电管理系统的硬件和嵌入式工程师参考。不管你是刚接触BMS的新手,还是做过几版板子的老手,这里面的细节应该都能对上你的实际场景。
先说一个基本判断:两串电芯的均衡,被动均衡方案在绝大多数情况下是更务实的选择。原因不复杂——两串系统的总能量本来就有限,主动均衡那套电感或电容储能转移的电路,光是外围器件成本和布板面积就上去了,而它能挽回的能量在小型储能场景里往往只有几个百分点的差别。被动均衡用电阻把高电压电芯的多余能量以热量形式消耗掉,电路简单、可靠性高、控制逻辑清晰,对于两串这种小规模串联结构,性价比明显更高。
MP2642GR-Z这颗芯片的定位就是针对多串电池管理的模拟前端,它内部集成了电压采集、均衡开关驱动和通信接口。配合STM32F427ZI这颗高性能MCU,可以做到比较精细的均衡控制和状态监控。STM32F427ZI是Cortex-M4内核,主频能到180MHz,带FPU和DSP指令集,处理BMS的采样滤波、SOC估算、通信协议栈绰绰有余。选它不是因为算力不够用,而是因为BMS系统里往往还要跑CAN通信、故障录波、上位机交互这些任务,留出余量比刚好够用更稳妥。
注意:两串电芯的均衡看起来简单,但电芯一致性差的时候,均衡电流和均衡时机的选择会直接影响电芯寿命。不要因为串数少就随便设个固定值了事。
2. MP2642GR-Z的均衡引脚驱动逻辑与外围电路设计
2.1 芯片均衡通道的工作机制
MP2642GR-Z对两串电芯的均衡控制,本质上是通过内部集成的N沟道MOSFET驱动来实现的。每个电芯对应一个均衡通道,芯片内部会根据寄存器配置决定是否把该通道的均衡开关打开。打开之后,电芯正负极之间会通过一个外部均衡电阻形成放电回路,电流大小由电芯电压和外部电阻决定。
这里有一个容易被忽略的细节:MP2642GR-Z的均衡开关并不是直接短接电芯两端,而是通过内部MOSFET的导通电阻和外部均衡电阻串联来限流。内部MOSFET的导通电阻通常在几欧姆量级,外部均衡电阻需要根据目标均衡电流来选。假设单节电芯电压在3.7V左右,目标均衡电流设为50mA,那么总电阻大约是3.7V除以50mA等于74欧姆。减去内部导通电阻,外部电阻取68欧姆左右比较合适。这个计算看起来简单,但实际选型时还要考虑电阻的功率余量。
2.2 均衡电阻的功率计算与封装选择
均衡电阻的功率计算是硬件设计里最容易出问题的地方。还是用上面的例子,50mA电流流过68欧姆电阻,功率是0.05乘以0.05再乘以68,等于0.17W。听起来不大,但如果你选了0402封装的电阻,它的额定功率通常只有0.0625W,直接超了三倍。实际项目中我见过因为均衡电阻封装选小导致电阻烧糊的案例,板子拆下来一看,电阻旁边的PCB都变色了。
稳妥的做法是:均衡电阻的额定功率至少留两倍余量。0.17W的实际功耗,选0.5W的电阻比较合适,封装用1206或者2010。如果均衡电流设得更大,比如100mA,那功率就是0.68W,得选1W以上的电阻,封装至少2512。电阻的温漂也要考虑,普通厚膜电阻的温漂在100ppm每摄氏度左右,均衡时电阻自身发热会导致阻值变化,进而影响均衡电流的稳定性。如果对均衡电流精度要求高,可以选合金电阻或者低温漂的薄膜电阻。
| 均衡电流 | 电芯电压 | 总电阻 | 外部电阻参考值 | 实际功耗 | 推荐额定功率 | 推荐封装 |
|---|---|---|---|---|---|---|
| 30mA | 3.7V | 123Ω | 120Ω | 0.11W | 0.25W | 0805 |
| 50mA | 3.7V | 74Ω | 68Ω | 0.17W | 0.5W | 1206 |
| 80mA | 3.7V | 46Ω | 43Ω | 0.28W | 0.5W | 1206 |
| 100mA | 3.7V | 37Ω | 36Ω | 0.36W | 1W | 2010/2512 |
2.3 均衡开关的时序与防直通设计
两串电芯的均衡通道虽然是独立的,但在PCB布局时要注意均衡回路的走线不要和采样线共用。均衡电流流过走线会产生压降,如果采样线和均衡线共用一段走线,采样到的电压就会包含均衡电流引起的误差。这个误差在均衡电流50mA、走线电阻0.1欧姆的时候是5mV,对于电压采样精度要求1mV级别的BMS来说,这个误差已经很大了。
正确的做法是采样线从电芯正负极单独走,用开尔文连接方式接到MP2642GR-Z的采样引脚上。均衡回路的走线单独走,尽量短而粗,减少寄生电阻。如果PCB空间允许,均衡电阻靠近芯片放置,减少均衡开关到电阻之间的走线长度。
还有一个细节:MP2642GR-Z的均衡通道在切换的时候,要确保不会出现两个通道同时导通导致电芯短路的情况。虽然芯片内部有逻辑保护,但在软件配置时还是要避免同时使能两个通道。STM32F427ZI在初始化MP2642GR-Z的寄存器时,要严格按照芯片手册的时序要求来,先配置均衡通道的使能位,再配置均衡定时器,最后才启动均衡。
3. STM32F427ZI与MP2642GR-Z的通信协议与数据采集实现
3.1 通信接口的选型与配置
MP2642GR-Z和STM32F427ZI之间的通信,通常走SPI或者I2C。具体用哪个,取决于芯片的型号后缀和你的板级设计。SPI的速度更快,适合需要高频采样数据的场景;I2C占用的引脚少,适合引脚资源紧张的设计。STM32F427ZI的SPI接口支持最高几十MHz的时钟,I2C支持标准模式和快速模式,配置起来都比较灵活。
以SPI为例,STM32F427ZI作为主机,MP2642GR-Z作为从机。SPI的时钟极性CPOL和时钟相位CPHA要根据MP2642GR-Z的手册来设。很多人在调试SPI通信时遇到读不到数据的问题,十有八九是CPOL和CPHA设错了。我的经验是:先用手册推荐的模式,如果读不到数据,把CPOL和CPHA的四种组合都试一遍,同时用逻辑分析仪抓波形看时序。逻辑分析仪是调SPI通信的必备工具,没有它光靠猜会浪费很多时间。
STM32F427ZI的SPI配置代码大致如下:
// SPI初始化结构体配置 hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; HAL_SPI_Init(&hspi1);波特率预分频先设大一点,比如64分频,确保通信稳定后再逐步提高。调试阶段不要一上来就追求高速,稳定通信比速度重要得多。
3.2 电压采集数据的滤波与校准
MP2642GR-Z采集到的电芯电压数据,通过通信接口读到STM32F427ZI之后,不能直接拿来用。原始数据里会包含噪声,尤其是均衡开启的时候,均衡电流会在采样回路上产生干扰。我通常会在STM32F427ZI里做两级滤波:第一级是硬件RC滤波,在MP2642GR-Z的采样引脚旁边加一个100欧姆电阻和100nF电容组成的低通滤波器,截止频率大概在16kHz左右,能滤掉大部分高频噪声;第二级是软件滤波,用滑动平均或者中值滤波。
滑动平均滤波的窗口大小要根据采样率来定。如果采样率是100Hz,窗口取10,那滤波后的数据更新率就是10Hz,对于均衡控制来说足够了。中值滤波对脉冲噪声的抑制效果更好,但计算量稍大。STM32F427ZI有FPU,做这些计算毫无压力。
校准是另一个关键步骤。MP2642GR-Z的电压采集精度受内部基准源和外部电阻分压网络的影响。批量生产时,每块板子的分压电阻都有公差,导致采集到的电压和实际电压有偏差。校准的方法有两种:一种是单点校准,用一个已知的精确电压源接在电芯输入端,记录采集值和实际值的偏差,在软件里做偏移补偿;另一种是两点校准,分别在低电压和高电压点测偏差,做线性拟合。两点校准的精度更高,但产线工序更复杂。对于两串储能系统,单点校准通常够用,如果对SOC估算精度要求高,建议做两点校准。
3.3 均衡策略的状态机设计
均衡策略的核心逻辑不复杂:检测到哪节电芯电压偏高,就打开对应的均衡通道,等电压降下来再关掉。但实际写代码的时候,如果不用状态机,很容易写成一大堆if-else嵌套,后期维护很痛苦。我习惯用状态机来组织均衡逻辑,状态包括:空闲、检测、均衡中、冷却、故障。
空闲状态:均衡功能关闭,定期检测电芯电压。检测状态:读取两节电芯电压,计算压差。如果压差超过阈值,比如50mV,进入均衡中状态;否则回到空闲。均衡中状态:打开高电压电芯对应的均衡通道,同时启动一个定时器,均衡时间到了之后进入冷却状态。冷却状态:关闭均衡通道,等待一段时间让电芯电压恢复稳定,然后回到检测状态。故障状态:如果检测到电芯电压异常,比如低于欠压保护阈值或者高于过压保护阈值,立即关闭均衡并进入故障状态。
这个状态机的关键是均衡阈值和冷却时间的设置。均衡阈值设得太小,均衡会频繁启停,反而加速电芯老化;设得太大,电芯一致性会越来越差。根据我的经验,两串锂电的均衡阈值设在30mV到50mV之间比较合适。冷却时间一般取均衡时间的十分之一到五分之一,让电芯有足够的时间恢复。
4. 均衡过程中的热管理与PCB布局实战经验
4.1 均衡电阻的散热路径设计
均衡电阻消耗的能量全部变成热量,这些热量如果散不出去,电阻温度会持续升高,轻则阻值漂移,重则烧毁。两串系统的均衡电阻虽然功率不大,但如果PCB布局不合理,热量积聚在电阻周围散不出去,问题照样会出现。
散热路径的设计有几个要点:第一,均衡电阻的焊盘要足够大,焊盘面积越大,热量传导到PCB铜箔的效率越高。第二,电阻下方和周围的铜箔要尽量铺开,如果可能的话,在电阻下方打过孔连接到背面的大面积铜箔,利用整个PCB作为散热器。第三,均衡电阻不要集中放在一起,分散布局有利于热量分散。第四,如果系统有金属外壳,可以考虑用导热垫把PCB的热量传导到外壳上。
我做过一个对比测试:同样的均衡电阻和功耗,一块板子电阻周围铺铜面积小,另一块铺铜面积大。连续均衡30分钟后,铺铜面积小的板子电阻表面温度到了95度,铺铜面积大的只有62度。这个差距在高温环境下就是可靠和不可靠的区别。
4.2 采样精度与均衡干扰的隔离
前面提到过采样线和均衡线要分开走,这里再展开说一下具体怎么做。MP2642GR-Z的每个电芯采样引脚,应该从电芯连接器的引脚处直接引线,用差分走线的方式接到芯片。差分走线的好处是对共模干扰有抑制作用。均衡回路的走线从均衡电阻到芯片的均衡引脚,尽量短,线宽根据均衡电流来定。50mA的电流用10mil线宽足够了,100mA建议用15mil以上。
如果PCB空间实在紧张,采样线和均衡线不得不交叉,那就在交叉处垂直走线,减少耦合面积。千万不要让采样线和均衡线平行走很长一段距离,平行走线会产生容性和感性耦合,均衡开关动作时会在采样线上感应出尖峰噪声。
还有一个实战技巧:在MP2642GR-Z的采样引脚旁边加一个小电容,比如10nF,到地。这个电容和采样线的寄生电感组成低通滤波器,能进一步抑制高频干扰。但电容不能太大,太大会影响采样响应速度,一般10nF到100nF之间比较合适。
4.3 均衡开启时的电压跌落与恢复
均衡通道打开后,电芯电压会因为放电电流而产生瞬时跌落。这个跌落包括两部分:一部分是电芯内阻引起的压降,另一部分是均衡回路寄生电阻引起的压降。电芯内阻引起的压降是电芯本身的特性,无法消除;回路寄生电阻引起的压降可以通过优化布局来减小。
这个电压跌落会影响均衡控制的判断逻辑。如果均衡开启后立刻读电压,读到的值会比实际开路电压低,可能导致误判为均衡完成而提前关闭通道。正确的做法是:均衡开启后等待一段时间,比如100ms到500ms,让电压稳定后再读取。或者在软件里做补偿,根据均衡电流和已知的回路电阻估算压降,把读到的电压加上补偿值再判断。
均衡关闭后,电芯电压也不会立刻恢复到开路电压,而是有一个弛豫过程。这个过程的时间常数和电芯的极化特性有关,通常几秒到几十秒不等。冷却时间的设计要考虑到这个弛豫过程,确保电压恢复稳定后再进行下一次判断。
5. 系统级保护逻辑与故障处理机制
5.1 过压欠压保护与均衡的联动
均衡功能不能独立于保护逻辑存在。如果电芯已经过压了,均衡还在傻傻地开着,只会让情况更糟。正确的联动逻辑是:过压保护优先于均衡。当任何一节电芯电压超过过压保护阈值时,立即关闭所有均衡通道,并触发过压告警。欠压保护同理,当电芯电压低于欠压阈值时,关闭均衡,防止过度放电。
STM32F427ZI在处理这些保护逻辑时,要用中断而不是轮询。MP2642GR-Z如果有告警引脚,接到STM32F427ZI的外部中断引脚上,告警触发时立即进中断处理,响应速度比轮询快得多。如果没有硬件告警引脚,那就用定时器中断定期检测,检测周期不要超过100ms。
保护阈值的设计要留回差。比如过压保护阈值设4.25V,恢复阈值设4.15V,这样电压在阈值附近波动时不会频繁触发保护。回差太小会导致保护反复动作,太大则保护响应迟钝。根据电芯特性和系统要求,回差一般取50mV到100mV。
5.2 通信中断与数据异常的处理
STM32F427ZI和MP2642GR-Z之间的通信如果中断,系统要知道怎么处理。通信中断可能是暂时的干扰,也可能是芯片故障。处理策略要分情况:如果是偶发的通信错误,比如CRC校验失败,可以重试几次;如果连续多次通信失败,就要判定为通信故障,关闭均衡,进入安全状态。
数据异常的处理也很重要。如果读到的电压值是0或者超出合理范围,比如单节电芯读到5V以上,那肯定是数据异常,不能拿来用。这时候要用上一次的有效数据,或者用相邻电芯的数据做合理性判断。两串系统里,如果一节电芯读到3.7V,另一节读到0V,那0V那节肯定是异常数据。
我在实际项目中遇到过因为通信线接触不良导致电压数据跳变的情况。均衡逻辑如果直接用了跳变的数据,会频繁开关均衡通道,均衡电阻反复承受浪涌电流,寿命会大幅缩短。后来在软件里加了数据合理性检查,连续三次读到异常数据才判定为故障,避免了误动作。
5.3 温度监控与均衡降额
均衡电阻的温度和电芯的温度都要监控。均衡电阻温度过高时,要降低均衡电流或者暂停均衡。电芯温度过高或过低时,也要调整均衡策略。锂电池在低温下内阻增大,均衡时的电压跌落更明显,均衡阈值要相应调整。高温下电芯活性增强,均衡时更容易出现热失控风险,均衡电流要降额使用。
温度监控可以用NTC热敏电阻,贴在均衡电阻附近和电芯表面。STM32F427ZI的ADC读取NTC分压电压,换算成温度。NTC的选型要注意B值和阻值,常用的10kΩ B=3950的NTC在-40度到125度范围内线性度比较好。ADC的参考电压要稳定,最好用外部基准源,不要用MCU的VDDA直接做参考,VDDA的噪声会影响温度测量精度。
6. 实测数据与均衡效果评估
6.1 均衡电流与温升的实测对比
我在一块两串实验板上做了几组均衡测试,电芯用两节标称3.7V的锂离子电芯,初始压差设在80mV左右。均衡电阻用68Ω 1206封装,理论均衡电流约50mA。实测下来,均衡开启后电流在48mA到52mA之间波动,波动主要来自电芯电压的变化和电阻的温漂。
温升方面,连续均衡30分钟后,均衡电阻表面温度从室温25度升到了58度,温升33度。这个温升在可接受范围内,但夏天高温环境下,环境温度40度时电阻温度会到73度,接近电阻的额定工作温度上限。所以如果系统工作在高温环境,均衡电阻的功率余量要留得更大,或者降低均衡电流。
电芯电压的恢复情况也值得关注。均衡关闭后,电芯电压在5秒内恢复了大约80%,30秒后基本稳定。这个恢复时间比我想象的要长,所以冷却时间设了60秒,确保电压完全稳定后再做下一次判断。
6.2 不同均衡阈值下的电芯一致性变化
我对比了30mV、50mV和80mV三个均衡阈值下的电芯一致性变化。初始压差都是80mV,经过10个充放电循环后,30mV阈值的电芯压差降到了15mV左右,50mV阈值的降到了25mV,80mV阈值的还在45mV左右。均衡阈值越小,电芯一致性改善越明显,但均衡动作也更频繁。
从均衡次数来看,30mV阈值下每个循环平均触发均衡12次,50mV阈值下触发7次,80mV阈值下触发3次。均衡次数多意味着均衡电阻的累计工作时间长,寿命消耗快。所以均衡阈值的选择要在一致性和均衡电阻寿命之间找平衡。对于两串储能系统,我倾向于50mV阈值,兼顾效果和寿命。
6.3 长期运行中的注意事项
长期运行中最容易出现的问题是均衡电阻的阻值漂移。厚膜电阻在持续高温下,阻值会慢慢变大,导致均衡电流逐渐减小。我测过一块连续运行了三个月的板子,均衡电阻的阻值从68Ω变成了71Ω,均衡电流从50mA降到了47mA。这个变化幅度不大,但如果系统设计寿命是五年十年,累积的漂移就不能忽视了。
另一个问题是电芯连接器的接触电阻。两串系统的电芯连接器如果接触不良,接触电阻会随着时间增大,导致采样电压和实际电压的偏差越来越大。定期检查连接器的接触电阻,或者用四线制采样方式消除接触电阻的影响,都是有效的应对措施。
PCB的焊点也要关注。均衡电阻的焊点在热循环下可能出现裂纹,尤其是无铅焊料,热膨胀系数和PCB的FR4材料不匹配,长期热循环会导致焊点疲劳。如果系统工作在温度变化剧烈的环境,建议用有铅焊料或者增加焊点的热设计余量。
7. 从两串到多串:这套方案的扩展思路
两串均衡做通了之后,往多串扩展是自然的思路。MP2642GR-Z本身支持多串应用,通过级联或者菊花链的方式可以管理更多电芯。STM32F427ZI的SPI接口可以挂多个从机,或者用多个SPI接口分别管理不同的芯片。扩展的时候要注意几个问题:通信协议要支持多芯片寻址,均衡策略要从两串的简单比较扩展到多串的排序和优先级管理,保护逻辑也要相应复杂化。
多串系统的均衡策略通常采用最高电压优先均衡,或者压差超过阈值的电芯同时均衡。同时均衡多个通道时,总均衡电流会叠加,对电源和散热的要求更高。STM32F427ZI的GPIO资源丰富,可以控制多个均衡通道的使能,但要注意总功耗不要超过系统的散热能力。
从软件架构上,两串的代码可以抽象成通用的均衡管理模块,电芯数量作为参数传入。这样从两串扩展到四串、八串的时候,核心逻辑不用重写,只需要调整配置参数和硬件驱动层。我在实际项目中就是这么做的,两串的代码框架直接复用到四串系统上,只改了几个配置项,省了很多调试时间。
提示:扩展多串时,均衡电阻的布局要重新规划,避免多个电阻的热量叠加导致局部温升过高。多串系统的采样线更多,走线密度更大,采样线和均衡线的隔离要更加注意。
8. 写在最后的一些实操体会
这套两串均衡方案我前后调了大概两个月,从选型、画板、打样到调试,踩过的坑主要集中在通信稳定性和热设计上。通信方面,SPI的CPOL和CPHA配置错了导致读不到数据,浪费了两天时间;热设计方面,第一版均衡电阻选了0805封装,连续均衡20分钟就烫得不敢碰,第二版换成1206并加大铺铜面积后才稳定下来。
如果你也在做类似的两串储能BMS,我的建议是:均衡电流不要贪大,50mA对于两串系统足够用了,大电流带来的热问题比均衡效果更值得关注。均衡阈值设在50mV左右,兼顾一致性和均衡电阻寿命。采样线和均衡线一定要分开走,开尔文连接是底线。通信调试先用低速,稳定后再提速。保护逻辑要用中断,不要用轮询。
最后说一个容易被忽略的点:均衡电阻的选型不要只看阻值和功率,温漂和长期稳定性同样重要。我后来换用了低温漂的合金电阻,虽然单价贵了几毛钱,但均衡电流的稳定性好了很多,长期运行也不用担心阻值漂移。对于储能系统这种要求长寿命的应用,这几毛钱的成本增加是值得的。