做储能和备用电源的朋友,迟早会碰到同一个问题:两节串联的电芯,出厂数据一模一样,用上半年电压差能拉到两三百毫伏。容量小的那节成了整组电池的短板,充电时它先满,放电时它先枯,过充过放都先找它麻烦。我最近把一个2S电池均衡器完整跑通了,核心器件是MP2642GR-Z和STM32F767ZI,前者负责在两节电池之间搬能量,后者负责盯电压和温度、决定什么时候搬、搬多久、怎么搬才安全。这篇记录涵盖方案选型、硬件连接、参数计算、软件策略、实测数据,以及调试中踩过的各种坑,适合正在做BMS、电池主动均衡或者储能备用电源项目的朋友参考。
1. 项目背景:串联电池为什么会越用越“散”
1.1 串联电芯不一致的根源
很多人以为电池出厂电压一致就万事大吉,实际远没有这么简单。两节电芯串联以后,影响电压差异的因素至少有四个:容量偏差、内阻偏差、自放电率偏差和温度梯度。
容量偏差是先天决定的。同一批次电芯虽然标称容量相同,但正极材料涂布厚度、电解液浸润程度、化成条件总有细微差别,实际容量可能差百分之几。内阻偏差则会在放电负载下制造额外压降,让端电压表现更不均匀。更麻烦的是自放电率,静置状态下不同电芯每年自放电可以差几个百分点。备用电源系统经常长时间处于待机状态,这种静置差异会被持续放大。
温度也起着推波助澜的作用。电池组内部散热条件不一致,靠近发热元件的电芯温度高,化学反应速率快,老化和容量衰减速度也更快。时间一长,两个电芯的可用容量和电压平台差距就会越来越大。
串联电池又和并联电池不同,并联电芯各自输出电流,容量互补;串联电芯流过的电流完全一样,整个电池组的可用容量等于容量最小的那节电芯的容量。这就是典型的短板效应,一节的劣势拖垮整整一组。
1.2 被动均衡和主动均衡怎么选
提到均衡,很多人第一反应是电阻耗能均衡。这种方案在放电电阻上把电压高的电芯多余能量直接烧掉,简单可靠、成本极低,许多电池保护芯片都集成这种功能。但用在储能和备用电源系统里,有几个不好接受的问题。
首先是能量浪费。1A均衡电流、0.3V压差,被动均衡电阻上功率就是0.3W,如果均衡持续几个小时,白白浪费的能量相当可观。散热也是个问题,大量热量集中在PCB局部,夏天温升更明显,对密闭的电池仓极不友好。最重要的一点是,被动均衡本质上是“削峰”,只能把高电压电芯的能量消耗掉,能量不能转移到低电压电芯,均衡结束之后系统总能量反而少了。
主动均衡的思路正好相反,它不是把能量烧掉,而是把能量从电压高、电量多的电芯转移到电压低、电量少的电芯,相当于大池子里的水往小池子里舀。虽然电路复杂度上去了,但系统总能量基本不损失,热量也主要集中在开关管和电感上。对动辄几百瓦时甚至有持续备电要求的储能系统来说,主动均衡长期下来省下的能量和延长的那部分电池寿命,完全值得多花这些硬件成本。
MP2642GR-Z在这套方案里解决的就是主动均衡的功率问题,它内部集成了开关管和驱动电路,外部只需要电感配合,就能实现两节电芯之间的能量搬移。
1.3 器件分工:功率级与策略级
这个项目里最核心的协作关系就是MP2642GR-Z和STM32F767ZI各管一段。
MP2642GR-Z扮演的是功率执行角色。从系统层面看,可以把它理解为一个集成功率管、支持双向能量流动的变换单元,外部再接一颗电感和少量阻容就能工作。芯片本身负责开关逻辑、电感电流换向、过流保护这些高速动作,这些动作靠单片机中断去做是来不及的。它对外提供的控制接口一般就是使能信号和电流限值设置,有的还会带同步时钟和状态反馈引脚。
STM32F767ZI负责的是大脑部分。它通过ADC通道采集两节电芯的电压、电池温度、均衡电流等信号,根据预设的均衡算法判断当前是否需要进行均衡、以多大电流均衡、均衡到什么程度停止。均衡状态、保护事件、电压历史曲线都记录在MCU内部,方便后期通过串口或以太网读取分析。
这种分工的好处很直接:高频功率控制交给专用芯片,保证响应速度和可靠性;低频策略判断交给MCU,保证灵活性和可维护性。后续即便要调整均衡算法,也只需要改MCU里的软件,功率级硬件可以完全不动。
2. 硬件方案:电路拓扑与关键参数计算
2.1 均衡主电路怎么接
整套系统的电气结构并不复杂。两节电芯串联,负极接地,中间连接点记为VBAT_MID,正极输出记为VBAT_PACK。MP2642GR-Z配合一颗储能电感跨接在两节电芯之间,通过内部的开关网络把高电压电芯的能量先转换成电感中的磁场能量,再转换到低电压电芯那边。
实际连接时,电感一端接电芯中点VBAT_MID,另一端接MP2642的开关节点。芯片的输入和输出端分别连接两节电芯的正负端,同时还需要接采样电阻来设置均衡电流的限幅。具体引脚号因封装和批次不同会略有差异,设计前务必对照你所用手头芯片的数据手册逐一核对,但系统级的接口概念都是通用的:功率连接、电感连接、电流设定、使能控制、状态反馈、地。
这里有一个很容易忽略的细节:MP2642的使能引脚不能直接用一个简单IO去拉高就算完事。上电瞬间电池组电压还没稳定,如果贸然全速使能,电感电流容易出现冲击。我习惯在使能线上加一个RC缓启动,或者先让MCU输出低电平保持一定时间,等电压采样稳定后再正式启动均衡。
另外芯片底部的散热焊盘绝对不能悬空,要在大面积铺铜后通过过孔阵列连接到内层和底层铜皮,这是均衡电流超过1A时芯片能否稳定工作的重要前提。散热没做好,芯片先热保护,均衡电流上不去,整套系统等于白做。
2.2 电感选型与均衡电流估算
电感是主动均衡电路里最关键的元件。它决定了均衡电流的上限和纹波大小,也直接影响系统效率。
先估算均衡电流。两节3.7V的电芯,压差一般不会超过300mV,我们希望以0.5A到1A的电流把高电压电芯的能量搬到低电压电芯。均衡电流太小,电压差恢复慢;太大,电感体积和散热压力都会上来。对2S小系统来说,1A左右是一个很务实的区间。
电感纹波的计算可以借鉴降压通道的模型,大致用这个公式估算:
ΔI_L = (Vin × D) / (f_sw × L)
其中Vin是输入侧电芯电压,D是功率级占空比,f_sw是开关频率,L是电感量。举个实际例子,假设均衡方向是BAT1向BAT2转移,BAT1电压4.0V,BAT2电压3.8V,工作频率400kHz,电感选用10µH。在降压模式下占空比大约等于输出电压除以输入电压,D ≈ 0.95,算下来纹波电流只有0.05A左右,这个值很小,主要能量是直流分量。真正要在意的是电感峰值电流,它等于平均均衡电流加上纹波的一半,同时还要额外留出20%以上的裕量,防止电感饱和后电流失控。
如果调试中发现均衡电流不够大,不要急着加大电感,先检查电流设定电阻和芯片的限流配置。很多情况下是限流点没调上去,而不是电感选小了。
磁饱和是另一个高频翻车点。电感的饱和电流一定要大于最大设定限流值,否则电感会在电流峰值时突然失去感量,开关管上会出现尖峰电流,轻则均衡电流波形畸形,重则直接炸管。选电感时不要只看标称额定电流,要看饱和电流那一栏。
2.3 电压采样电路与MCU引脚分配
两节串联电池的电压采样比想象中坑多。以系统地为参考,VBAT_MID点的电压等于BAT1的端电压,范围约0到4.2V;VBAT_PACK点的电压等于两节电芯电压之和,范围约0到8.4V。如果直接把VBAT_PACK接进STM32F767ZI的ADC引脚,几乎必烧,因为F767ZI的ADC输入范围最多到3.3V,加上少量裕量通常不超过3.0V。
正确的做法是把两个采样点都经过电阻分压后再送进ADC。VBAT_MID可以直接分压到ADC量程内,VBAT_PACK分压后再由软件减去VBAT_MID分压后的值,得到BAT2的电压。也可以使用差分放大器直接采集BAT2两端电压。差分方案的优点是不需要软件做减法,共模抑制也更好,缺点是增加运放和外围电阻。对要求不太高的2S系统,双ADC通道加分压采样就足够,关键是软件里要做减法前先对两个通道做严格校准。
MCU引脚分配上,我建议给每个模拟通道单独一个ADC实例,比如ADC1采集VBAT_MID,ADC2采集VBAT_PACK,ADC3采集温度,这样并行采集可以减少时序误差。使能均衡的GPIO要选择具有高驱动能力的端口引脚,同时配上合适的限流电阻。如果后续要接上位机,利用F767ZI自带的串口或以太网接口都很方便,不必外扩芯片。
采样电路里还有两个容易被忽略的坑。第一个是分压电阻的精度,两个通道分压电阻比例不一致会导致电压差计算出现偏移,建议用0.1%精度的电阻,或者出厂时做软件校准。第二个是采样线的滤波电容,不要选得太大,否则ADC读数会变迟钝,均衡启动和停止的电压判断会滞后。20nF到100nF的容值在多数场景下比较合适。
3. 软件实现:从采集到均衡策略的落地
3.1 电压采集、滤波与数据预处理
均衡策略的好坏,很大程度取决于电压采集数据的质量。STM32F767ZI的ADC自身是12位的,理论上3.3V基准下分辨率约0.8mV,看起来非常漂亮。但实际板子上开关电源工作带来的噪声、地弹、分压电阻热噪声都会让ADC读数跳动,实际有效分辨率往往只有10位左右。
我用的第一个办法是时间上避让。均衡功率级的开关动作会在地平面上制造毛刺,如果在开关节点翻转的瞬间做采样,ADC结果必然被污染。软件里可以在采样前关闭均衡动作,或者说在ADC触发采样的同时,确保功率级处于一个相对安静的死区。实测下来,仅仅把采样时序避开开关翻转点,电压数据跳动就能降低四五倍。
第二个办法是软件滤波。我采用滑动平均和中值滤波的组合策略:先连续采8次,去掉最大值和最小值,剩下6次取平均,再对相邻周期的平均值做一次一阶低通。这样既有抗脉冲噪声的能力,又能平滑掉周期性干扰。滤波会把响应速度拖慢一些,对低频的均衡策略完全够用,不必追求过快的采样响应。
滤波之后要做电压差计算和去抖。启动均衡前,软件会连续确认多次压差都超过阈值才真正启动,避免瞬态干扰误触发。停止均衡的条件同样需要持续满足一定时间,这个滞环设计在后面实测中证明了它非常有用。
3.2 均衡状态机:何时开启、何时关停
均衡策略我最终采用了一个四状态状态机:空闲态、启动判定态、均衡态、暂停保护态。每个状态之间都有明确的转移条件,代码写起来清晰,排查问题也方便。
空闲态下,MCU以较低的频率周期性采集电压和温度。每次采集完后计算VBAT1和VBAT2的电压差,如果压差的绝对值大于启动阈值,并且温度在允许范围内,就进入启动判定态。这里的启动阈值我设置为30mV,大约对应电芯3%到5%的荷电状态差异。
进入均衡态后,首先根据电压高低确定均衡方向。VBAT1高于VBAT2,就把BAT1的能量往BAT2搬;反过来则反方向搬。随后使能功率级,让均衡电流按设定值工作。均衡期间MCU不会闲着,会持续监测电压变化和芯片温度。如果发现电压差已经缩小到10mV,或者出现了过压、欠压、过温等保护事件,立即停止均衡,回到空闲态或者进入暂停保护态。
这里需要注意的是停止阈值的设置。停止阈值不能设得太小,因为滤波再干净,采样电路和电芯极化效应也会带来几十毫伏的落差不确定。如果停止阈值是5mV,系统可能永远达不到停止条件,或者频繁在启停阈值之间来回切换。10mV配合滞环是一个经过实测比较均衡的数值。
均衡超时保护也是一个容易忽视的配置项。我设置单次连续均衡时间上限为6小时,超过这个时间无论如何都要暂停并上报异常。正常情况下几十分钟到两小时就足以完成均衡,如果6小时还没完成,大概率是电芯已经严重老化或者系统存在故障,继续维持均衡没有意义。
3.3 保护逻辑与故障记录
均衡方案的核心原则是保护优先于均衡。任何均衡动作都必须在所有电芯都处于安全电压范围内才允许进行。我设置了单体过压保护点4.25V,欠压保护点2.8V。任何一节电芯越过保护阈值,立即切断均衡路径并置位故障标志。温度方面,0到45摄氏度是均衡允许区间,超出就暂停。锂电池低温下可充电能力差,强行均衡容易引发析锂风险,这个界限不能放松。
故障记录是被人低估的一块功能。我用MCU内部Flash存储最近20条事件记录,包括事件类型、发生时刻、当时的电压和温度。有了这些数据,即便系统已经复位,事后也能通过串口导出日志分析。调试阶段这个功能帮了大忙,好几次都是靠故障记录才定位到是保护误触发还是采样线松脱。
还有一个细节值得分享:均衡功率级的启动要尽量平缓。如果直接全速切入,电感电流会发生一个较大的阶跃冲击,不仅产生噪声,还可能导致输入侧电压瞬间跌落。我的做法是分三步抬升电流设定:先以30%电流运行几秒钟,确认电压稳定后再升到60%,最后才升到目标电流。实测这种做法让整个均衡过程平稳很多,也没有出现电感啸叫。
4. 调试验证:实测数据和波形分析
4.1 测试平台搭建与安全注意事项
调试这套系统之前,我先搭了一个相对安全的测试平台。使用两个独立的18650电芯,分别充电到不同电压制造压差,然后串接成2S电池组。电源侧用一个可调直流电源做充电模拟,负载侧用电子负载模拟备用电源的应急带载场景。所有测试回路里都串联了保险丝,以防万一均衡控制失灵导致大电流持续流过。
这里必须强调一句,锂电测试尤其是大电流均衡测试,绝对不能在没有保护措施的情况下裸奔操作。我习惯在电芯引出端并联一个保护板做最后防线,同时把测试台放在防火防爆区域。调试过程旁边备一个灭火器,这不是小题大做,锂电失控起来留给反应的时间非常短。
实测工具方面,我用了一台数字示波器观察开关节点波形和电感电流波形,用多路温度记录仪记录电芯表面、芯片表面和电感的温度,再用高精度万用表校准MCU读取的电压值。注意MCU读取的电压是分压后的,校准时要按实际分压比反推回电池端电压,不要直接拿ADC码值去比较。
4.2 实测均衡过程记录
测试条件:BAT1初始电压3.94V,BAT2初始电压3.78V,压差160mV。环境温度25摄氏度,均衡目标电流设定为0.8A。记录间隔1分钟。
启动均衡的前10分钟,电压差下降速度很快,从160mV直接落到约80mV,这段时间能量转移主要集中在电池极化恢复和表面荷电调整阶段。接下来20分钟速度明显放缓,压差从80mV缓慢下降到35mV。到第60分钟时压差降到约20mV,之后继续变化的空间已经不大了。我让均衡一直运行到90分钟,压差稳定在15mV左右并触发停止条件。
整个过程里,BAT1的电压从3.94V降到3.80V,BAT2从3.78V上升到3.88V,两节电压最终交汇在3.84V附近,符合电荷转移的预期。电芯表面温度没有明显变化,电感温度比环境温度高出约8摄氏度,芯片外壳温度高出约15摄氏度,在可接受范围内。
这个实测数据还有一点值得说明:均衡末期的压差降得越来越慢,并不是均衡失效,而是电芯的电压-荷电状态曲线在平台区非常平缓,同样电量变化对应的电压变化很小。所以看到后半段曲线拉平不要着急,那是正常表现。
4.3 数据分析与效率评估
为了估算均衡效率,我记录了均衡前后两节电芯的电压变化,然后结合电芯容量进行粗略计算。BAT1电压下降0.14V,按测试电芯约3000mAh容量估算,相当于释放了约420mAh电量;BAT2电压上升0.10V,相当于接收了约300mAh电量。两者之比约为0.71,看起来效率不高,但这里没有计算电芯充放电效率、极化损耗和均衡电路损耗的综合影响。实际电路损耗通常只有百分之十几,剩下的差值主要来自电芯本身的充放电可逆性损耗,这属于化学本质,均衡器改变不了。
真正需要确认的电路层效率,更可靠的方法是直接用功率分析仪测RM2642输入端的直流功率和输出端的直流功率。实测在0.8A均衡电流下,整机转换效率约88%,属于主动均衡电路的正常水平。如果发现效率明显偏低,优先检查电感选型是否合适,以及开关频率是否落在芯片效率较高的区间。
均衡电流的波形观察也很重要。示波器上电感电流应该是连续稳定、没有塌陷和尖刺的三角波或锯齿波。如果发现电流波形在某个峰值附近突然塌陷,大概率是电感饱和了,要立即停止测试检查电感规格。
5. 踩过的坑和排查心得
5.1 采样电压乱跳,均衡误触发
第一次上电测试时,MCU读取的电压差在没有连接负载的情况下就上下跳动30mV以上,导致均衡器频繁误启动。排查过程花了大半天,最终锁定在采样时序上。均衡功率级工作时,开关节点的高频翻转通过寄生电容和地平面耦合进了采样通道,ADC在开关动作瞬间采集到了污染信号。
解决方法是软件和硬件双重处理。硬件上把ADC采样线的走线远离电感,同时加了RC滤波;软件上把采样命令和均衡开关动作做时序互斥,采样前先短暂停均衡动作。处理后电压跳动降到5mV以内,误触发问题彻底消失。
这个坑提醒我,主动均衡电路里的采样策略不能只考虑采集精度,还得考虑功率级对采样过程的干扰。时序避让比单纯堆滤波电容更有效,而且不影响采样实时性。
5.2 均衡电流达不到设计值
另一轮调试中发现,设定0.8A的均衡电流,实际测出来只有0.35A左右。第一反应是电感问题,换了更粗铜线、更大饱和电流的电感,依然没有明显改善。后来对照芯片手册逐项核查,才发现问题出在电流设定电阻上,我用的电阻封装过大导致引脚寄生电阻改变了限流点,换用低寄生参数的精密电阻后电流立即恢复正常。
这个经历让我意识到,限流设定电阻不能随手拿个常规电阻就往上焊,要关注它的精度和温漂,最好用低阻值合金电阻,并且布局尽量靠近芯片的电流检测引脚,走线不要过长过细。均衡电流的实际值直接影响均衡时间,偏差30%以上会让整个策略失效。
5.3 反复启停、发热和通信干扰
压差在启停阈值附近时,系统会出现一种让人头疼的反复启停现象:均衡启动后压差下降,降到停止阈值就关断;关断后电池极化恢复,压差又回升到启动阈值,又启动。如此循环,功率级不断开关机,系统发热和噪声都很大。
解决方式就是前面提到的滞环设计。启动阈值30mV,停止阈值10mV,中间的20mV区间是死区。这样系统一旦进入均衡态,要等压差明显缩小才会停止,不会因为微小波动来回翻转。这个改动虽然简单,却是整个项目中最有价值的优化之一。
通信干扰问题出在后期的上位机调试阶段。F767ZI通过串口把均衡状态实时上报,发现数据帧偶尔出错。定位后发现干扰源是功率级的开关边沿噪声通过电源线传导进串口驱动芯片。处理办法是在串口供电端增加磁珠和电容滤波,同时把串口波特率从115200降到57600,加强抗干扰裕量。两个措施一起上,通信错误率降为零。
为了便于日后快速排障,我把这些典型问题整理成了一个速查表,供现场调试时对照。
| 故障现象 | 可能原因 | 排查方法 | 处理措施 |
|---|---|---|---|
| 电压采样跳动大 | 开关噪声耦合进采样通道 | 示波器观察ADC输入引脚波形 | 采样时序避开开关翻转,加RC滤波 |
| 均衡电流偏小 | 限流设定电阻寄生电阻大 | 万用表测电流采样电阻两端压降 | 换低阻值合金电阻,缩短检测走线 |
| 反复启停 | 启停阈值无滞环 | 查看日志中启停时间戳 | 设置启动30mV、停止10mV滞环 |
| 均衡效率低 | 电感选型不当 | 测电感电流波形是否饱和塌陷 | 使用高饱和电流电感 |
| 通信丢帧 | 功率级噪声传导 | 观察串口波形毛刺 | 串口供电加磁珠,降低波特率 |
| 芯片过热 | 散热焊盘处理不足 | 测温仪测芯片底部温度 | 增加过孔阵列,加大铺铜面积 |
6. 后续可扩展的方向
6.1 从两串拓展到多串
这套用MP2642GR-Z做两串均衡的方案,玩法不止停留在2S上。多串电池组可以通过多颗芯片级联实现逐级均衡。比如4串电池组使用3颗均衡芯片,分别覆盖第1节与第2节之间、第2节与第3节之间、第3节与第4节之间。能量可以在相邻电芯间逐级搬移,效率会打一些折扣,但胜在结构规整、控制逻辑统一。
如果追求更高的跨串均衡效率,也可以考虑多绕组变压器方案,用一组磁芯配合多路绕组直接把任意电芯的能量搬到整组电池。不过这种方案的变压器设计和驱动时序都比较复杂,开发周期明显拉长。对多数中低串数的储能和备用电源应用,多片级联的性价比更高。
MCU的资源在这个扩展方向上完全够用。F767ZI有足够的ADC通道和GPIO来控制多颗均衡芯片,不必换主控,只需要在软件里增加一个均衡调度层,管理各芯片的启停顺序和电流分配策略。
6.2 与充电、放电场景联动
均衡不应该孤立工作,而是要和电池组的充放电状态联动。充电末段是均衡的黄金窗口期。此时高电压电芯会先达到截止电压,如果均衡器能及时把它的电量转移给低电压电芯,整组电池就能再充进更多能量,充分利用所有电芯容量。
放电状态正好相反,低压电芯会先到截止点,均衡器应当在高电压电芯还有余量时向低压电芯补充能量,延长整组放电时间。这说明均衡策略需要感知充电状态、放电状态和静置状态,并针对不同状态选择不同的均衡目标和电流强度。充电时以容量充满为目标,放电时以延长续航为目标,静置时以缩小电压差为目标。三者之间通过MCU的GPIO电平或通信报文来切换模式。
我实测下来,同一个均衡电路在这三种模式下表现差异很大,尤其在放电模式,均衡电流的加入会明显改变电芯的瞬时电压曲线,策略参数需要单独标定,不能直接沿用静置均衡那套阈值。
6.3 数据上云与远程监控
STM32F767ZI自带以太网MAC,配上PHY之后就能把均衡状态上报到局域网乃至云端。我做了一套简化版的上位机协议,把两节电芯电压、压差、均衡电流、芯片温度、开关机状态和最近事件记录封装成数据帧,周期上报。管理后台可以实时查看每一组电池的均衡进度,也能在均衡异常时远程下发指令强制停止。
这对于分布式备用电源场景特别有价值。几十个站点分布在不同的机房或柜体里,靠人工巡检测量每节电芯电压完全不现实。有了远程监控,运维人员随时能看到哪组电池压差偏大、哪组均衡器电流异常,甚至能自动生成月报。配合告警规则,压差超过预警值自动推送消息,把被动巡检变成主动运维。
从两串到多串、从单一均衡到与充放电联动、从本地控制到数据上云,这套方案后续的路子并不窄。核心架构不变,功率级和策略级分工不变,扩展就只是软件代码和外围通信的增量工作。
这个项目做下来,我个人最深的体会就是均衡策略不必刻意追求花哨,稳定和可靠永远是第一位的。简单的电压差阈值配合滞环和超时保护,只要参数调得细心,表现比复杂算法还要让人省心。真要上更高级的策略,也应该是在这套稳定基础上做增量,而不是推翻重来。另外还是那句话,锂电测试安全第一,任何均衡电路都要在保护机制齐全的前提下才允许长时间工作。希望这篇记录能给正在折腾2S电池均衡的朋友省下几个晚上的调试时间。