1. 项目背景:两串电芯为什么也要做均衡
储能和备用电源系统里,两节电池串联是最常见的基础构型——后端用个升降压或充放电管理,就能组成一组关键电源单元。可别小看这两节电池,真正跑起来之后,电芯电压和容量的离散程度,会直接影响整个系统的可用容量和使用寿命。我这次做的项目,就是基于MP2642GR-Z均衡芯片和STM32F373RC主控,为储能与备用电源场景搭一套面向两节串联电池单元的主动均衡控制器。
很多人觉得两串电芯不值得专门做均衡,并联电池才麻烦,串联只要电压一致就行。这个想法在实际系统里站不住脚。电芯出厂哪怕同一批次,容量、内阻、自放电率也不会完全相同;使用一段时间后差距更是肉眼可见。一串两节电芯,只要其中一节老化得快一点,整组电池的可用容量就被它拖死,还会带来过充过放风险。
1.1 失配是怎么产生的
电芯失配的来源主要有四个。第一是制造误差,同一批次的电芯,容量离散度通常在正负2%到3%左右,内阻差异也客观存在。第二是自放电率差异,同样静置一个月,有的电芯自放电1%,有的可能已经掉了3%,这会让电压在静置状态下慢慢拉开。第三是温度梯度,备用电源内部布局导致靠发热源近的电芯温度高,温度高内阻低但自放电也快,长时间下来SOC自然不一致。第四是循环老化差异,充放电回路中电流路径、接触电阻不同,会让不同电芯承受的应力有细微差别。
这四个因素叠加,两串电芯之间的电压差很容易从刚装机时的几个毫伏,扩大到几十毫伏甚至上百毫伏。一旦超过100mV,系统的可用容量就会明显缩水。
1.2 储能和备用电源的特殊压力
储能和备用电源还有两个特殊工况。备用电源大部分时间处于浮充保持状态,浮充电压长时间顶在上面,容量高的电芯可能已经到达接近满充的电位,容量低的电芯却被浮充电压压得持续过充,气体析出和电解液消耗都会加速。储能系统则相反,每天深度充放循环,失配电芯在放电时先触底,充电时先触顶,保护板频繁动作,整组电池的循环寿命会被明显拉低。
所以均衡不是可选项,而是这两类系统能不能长期稳定运行的关键环节。两串虽然量少,但该解决的问题一个不少。这也是我选择主动均衡而不是电阻被动均衡的根本原因。
2. 方案选型:从电阻均衡到开关电容主动均衡
均衡方案早期主流是电阻均衡,也叫被动均衡。原理很简单:电压高的电芯并联一个放电电阻,通过开关让多余的电量以热量形式耗散掉,直到电压和高体差的电芯接近。这种方案成本低、电路简单、控制逻辑也不复杂,很多消费电子和入门级BMS都在用。
但在储能和备用电源场景里,被动均衡的几个短板会被放得很大。均衡电流受限于散热,通常只有几十毫安到一百多毫安,遇到电压差大的情况,需要几十小时甚至几天才能拉平。均衡期间放电电阻产生的热量可能在电池仓里聚集,尤其在浮充状态长时间工作,电芯温度升高后自放电进一步加剧,反而可能让失配更严重。最关键的是,被动均衡把能量全部烧掉了,这对储能系统来说是一种浪费。
2.1 被动均衡够用吗
如果项目是玩具级别的2串电池包,被动均衡确实够用,几块钱的电路就能满足要求。但放到储能和备用电源里,电芯容量动辄几十安时甚至上百安时,电压差对应的能量差就是瓦时级别的。用毫安级的均衡电流去搬瓦时级的能量,时间成本完全无法接受。
举个例子,一节100Ah的磷酸铁锂电芯,如果两节之间差了3%的SOC,对应电量就是3Ah。被动均衡用100mA电流放电,要整整30小时才能补回这个差值。而且这30小时里均衡电阻一直在发热。换成主动均衡,均衡电流可以到安培级或者接近安培级,哪怕500mA,6小时也能搞定,而且能量是转移到低电压电芯里,没有变成热量散掉。
2.2 电荷泵主动均衡的胜负手
主动均衡大致分三类:变压器式、电感DC-DC式、开关电容式。变压器式均衡效率高、均衡电流大,但需要设计磁路,变压器体积不小,成本也偏高,适合8串以上的电池组。电感式需要功率电感和同步整流控制,EMI处理和环路补偿都比较繁琐。开关电容式最特别,它完全不需要电感变压器这类磁性元件,核心就是一个飞跨电容在两个电芯之间交替接入。
开关电容均衡的原理,打个比方就像两个人手里的水杯,谁的杯子水多了,拿一个空杯子从多的那边舀水,再倒到少的那边。飞跨电容就是那个空杯子,交替在两个电芯之间来回切换,每次转移一点电荷。这个方案在2串场景下优势特别明显:元件少、控制不复杂、没有磁路设计,EMI可控,成本适中。
2.3 为什么是MP2642GR-Z加STM32F373RC这个组合
选型的时候我对比过几套方案。纯分立元件搭开关电容网络,用两个NMOS和PMOS组合可以模拟切换,但驱动逻辑复杂,死区控制不好还可能出现直通短路,可靠性在量产项目里不太敢赌。选集成式均衡芯片是最合理的选择,MP2642GR-Z正好把开关管、驱动和切换逻辑集成在一起,外部只需要一只飞跨电容和两只去耦电容,使能控制也简单,用GPIO就能控制均衡启停。
主控选STM32F373RC,核心原因是它内置了高精度的SDADC。电池均衡最关键的数据就是单体电压,电压采不准,均衡策略全是空谈。普通MCU的12位SAR ADC在2.8V到4.2V区间,分辨率大约在0.7mV到1mV,看似够用,实际受噪声和参考电压影响,有效分辨率往往只到5到10mV。而F373RC的16位SDADC在低速采样模式下能做到很高的有效位数,配合软件校准,电压读数稳定在正负1mV以内没有太大压力。
另外一个关键点是F373RC本身是带FPU的Cortex-M4,跑浮点算法做滤波和SOC估算不费力,算力余量很足。再加上它内置的DAC和比较器可以用来做快速过压保护,这个搭配在成本和性能之间是比较均衡的。
3. 核心器件拆解与系统分工
3.1 MP2642GR-Z 均衡引擎
MP2642GR-Z是一颗面向两节串联电芯的开关电容均衡控制器。芯片内部集成了两组功率开关管,以及对应的驱动和时钟逻辑。外部只需要连接一只飞跨电容CFLY,和两个输入端口的去耦电容,芯片会在两个非重叠时钟相位之间自动切换,把飞跨电容先并到电压较高的电芯两端充电,再并到电压较低的电芯两端放电,从而实现电荷从高电芯向低电芯的转移。
芯片的使能引脚可以直接用GPIO控制,高电平时均衡启动,低电平时停止。这个引脚同时也可以接受PWM信号,如果系统需要动态限制均衡电流,可以通过调整PWM占空比来实现,不过我实际测试下来,用纯数字使能控制配合滞回阈值就已经足够了。
需要注意,MP2642GR-Z本身的均衡策略是自动进行的,它比较两节电芯电压,如果电压差超过芯片内部设定的门限,就自行开始转移电荷。这意味着即使主控没有介入,它也能完成基础均衡。但我的项目里没有让它这样独立工作,而是由STM32统一控制使能,所有均衡动作都经过主控决策,这样能把均衡窗口、故障保护、系统状态机整个串起来,避免芯片和系统其他部分各管各的。
3.2 STM32F373RC 采样与控制核心
STM32F373RC是这个项目的大脑,它的数据采集能力是为电池管理量身定做的。内置的多个16位SDADC单元,每个都带多路外部输入通道,可以同时处理两节电芯的电压采样,还有余量接NTC温度传感器。SDADC和普通逐次逼近型ADC最大区别在于前端有Sigma-Delta调制器,配合数字抽取滤波器,把量化噪声推挤到高频段再滤除,获得很高的有效分辨率。
在MCU内部,SDADC可以直接和DMA联动,采样数据搬运到内存,CPU只需在数据就绪后做算法处理,几乎不占主循环时间。这对均衡策略的实施很有利,每秒钟就可以完成多轮电压采样和判断,不需要停等待。
F373RC内置的DAC也比较实用,可以用来产生一个基准电压和电池电压做硬件比较,一旦发生过压可以触发紧急中断,不必依赖软件循环轮询。这在储能系统里是加分项,安全保护尽量走在硬件层面。
3.3 系统架构和工作流程
整套系统的工作流程是这样的:STM32F373RC定时通过SDADC采集两节电芯电压,对数据进行滤波和标定后,计算电压差。如果电压差超过启动阈值,主控拉高MP2642GR-Z的使能引脚,均衡器开始自动切换飞跨电容转移电荷。均衡过程中主控会周期性暂停使能十几毫秒,在这段时间里再采一次电压,判断均衡效果。直到电压差回落到停止阈值以下,或者超过了单次均衡的最大时间,主控才会关闭均衡。
系统的信息流很简洁,但每一环都有讲究。电压采样环节要杜绝电荷泵开关噪声进入,均衡策略要避免频繁启停和过均衡,故障保护要覆盖过压、欠压、过温、均衡失效等典型情况。接下来从硬件设计开始,逐个展开。
4. 硬件设计关键点
4.1 均衡主回路的设计
MP2642GR-Z的外围设计围绕三只电容展开:一只飞跨电容CFLY,两只电池输入端的去耦电容。飞跨电容的选取直接影响均衡电流和效率,我建议优先选C0G或X7R材质的陶瓷电容,耐压至少选择两节电芯串联电压的两倍以上,一般取10V规格。X5R和Y5V这类电容在直流偏压下容值会大幅衰减,实测可能连标称值的30%都不到,会让理论计算的均衡电流严重缩水。
飞跨电容的位置要尽量靠近芯片引脚,中间不要打过孔,以缩短大电流回路。电池输入端的去耦电容选100nF到1uF的陶瓷电容,放在芯片电源引脚附近,用来吸收开关切换瞬间的电流尖峰。如果电池组到MP2642GR-Z的布线较长,我建议再并联一只10uF的电解或钽电容,避免均衡电流拉低电芯电压采样点。
使能引脚的外围要注意上拉或下拉状态。如果系统在MCU未初始化阶段不希望均衡启动,使能信号应该经过一个下拉电阻,默认低电平,等主控初始化完成后拉高。我踩过一个相关的坑:MCU启动期间GPIO默认是浮空输入,如果使能线悬空,芯片可能在上电瞬间误触发均衡,造成系统刚刚启动就开始搬电,后续调试电压全部乱套。
4.2 高精度采样链路
电压采样是整个系统的眼睛,采样链路设计得不够细,后面软件做得再好也是白搭。我的原则是采样走线必须独立,不能从均衡大电流路径上分叉取电压,否则均衡电流流过线路阻抗产生的压降,会被ADC当成电芯电压变化。
每个电芯电压从电池端单独引出采样线,到达STM32F373RC的SDADC引脚之前,串一个100欧到1k欧的电阻,再并一个100nF到1uF的电容到地,组成一阶低通滤波器。截止频率按100Hz到1kHz设计,能有效衰减电荷泵开关噪声和共模干扰。
SDADC的参考电压选择上,我建议优先用内部带隙基准配合校准功能。F373RC的SDADC有内部校准寄存器,采用前做一次校准,能消除绝大多数基准偏差。如果系统对精度要求极高,可以外部加一个精密基准芯片,不过带来的成本增加和走线复杂度也要权衡。
采样点位的选择也要注意均衡电流方向。当均衡器工作的时候,飞跨电容在电芯间来回充放电,电流路径上的任意一点电压都包含均衡电流的压降分量。所以我采取的方案是,均衡器停止切换后延时10到20ms,再进行电压采样。这20ms里电芯处于静置状态,采样到的电压才是真正的开路电压,用来判断均衡效果更准确。
4.3 电源、保护与布局
STM32F373RC的供电从系统3.3V取,用LDO稳压,前端要加TVS管防止电池端浪涌。MP2642GR-Z的工作电源可以直接从电池组取,也可以从系统电源取,我实际用的是电池组直接取电,这样在均衡时不需要额外电源转换效率损耗。
保护电路方面,每个电芯两端并一个独立的过压保护器件,触发电压高于充电截止电压,防止均衡电路失效时电芯过压。温度采样用NTC热敏电阻贴装在电芯表面,连接到F373RC的另一路SDADC通道,软件里用查表法换算温度值。温度超过45摄氏度时降额或停止均衡,超过60摄氏度直接关闭系统充电回路。
PCB布局上最需要记住一条核心原则:功率环路小、采样环路净。均衡电流经过的路径尽量短粗,所有去耦电容紧靠芯片;采样线和控制线走细线,远离开关节点,中间用地线隔离。功率地和控制地单点连接,避免地弹电压进入采样回路。我在初版布局时图省事,让采样线从均衡电流路径下方穿过,结果均衡一启动,电压读数就抖得没法看。后来调整走线后,问题彻底消失。
5. 软件实现与均衡策略
5.1 SDADC采样与软件滤波
SDADC的软件配置并不复杂,但有几个容易忽略的细节。要使能内部通道校准,这个步骤不做,采样结果可能偏几十毫伏。要配置合适的采样时间和抽取率,抽取率越高,噪声越低,但转换时间越长。我的配置是每个通道转换速率大约1kSPS,两节电芯每路各采16个点,中间去除最大最小值,然后求平均。这样在100Hz的工频干扰环境下,读数也相当稳定。
采样时序上,两节电芯的采样时间间隔要尽量小,最好在几毫秒内完成两路转换。如果间隔太远,系统负载变化导致电芯电压波动,采集到的两节电压就不是同一个时刻的值,算出来的电压差会有误差。这里用DMA的模式非常合适,配好ADC序列后,DMA连续搬运两路转换结果,保证数据的同时性。
软件滤波我也做过超采样和滑动平均的对比。滑动平均窗口取8到16次,效果已经足够。如果追求更平滑,可以再加一层一阶低通滤波,系数按时间常数1秒左右设置。但滤波也不能太狠,否则电压变化响应太慢,均衡启动和停止的判断都会滞后。
5.2 均衡阈值与滞回控制
均衡策略最核心的就是阈值和滞回窗口。我的经验值是:当两节电芯电压差大于25mV时,启动均衡;当电压差回落至10mV以下时,停止均衡。中间这个15mV的滞回带,可以避免临界状态下均衡器频繁启停。
为什么不用更小的启动阈值,比如5mV?这要从采样精度和电芯特性两个角度看。电压采样加滤波后能做到正负1mV的稳定度,但电芯本身在充放电状态下的极化电压会波动,静置状态下电压恢复过程也会引起几毫伏的缓慢变化。如果阈值设得太小,均衡器会反复开启关闭,不仅对均衡电容和开关管有冲击,也会让电池组始终处于一种被持续扰动的不稳定状态。
还有一点,均衡阈值在充电和备用状态下可以不同。充电时电芯极化效应明显,电压差中包含一部分极化电压,阈值可以放宽到30到40mV;浮充或静置状态下,电压差更接近真实SOC差距,阈值对应收紧。我在代码里配置了三个档位,根据系统运行状态动态切换判定参数。
5.3 状态机设计
系统的控制逻辑可以拆成一个五状态的状态机:空闲态、采样态、判断态、均衡态、恢复态。
空闲态下,主控每隔1秒启动一轮采样,然后进入判断态。判断态根据滤波后的电压差、系统运行状态和温度条件决定是否进入均衡态。进入均衡态后,使能引脚拉高,MP2642GR-Z开始工作。此时主控并不闲着,每30秒暂停均衡20ms,采集一次电压数据,记录均衡趋势。均衡态最长持续30分钟,如果时间到了电压差还没有拉到停止阈值,代码会记录一次均衡超时事件,然后进入恢复态。
恢复态的作用是让电芯充分弛豫,恢复极化电压,再回到空闲态重新循环。如果电芯刚经过大电流充放电,极化电压还在恢复过程中,立刻做均衡判断很容易被误导。恢复态持续时间也是30秒,然后重新开始下一轮。这个状态机逻辑清晰,而且很容易扩展,后续要加SOC均衡、容量均衡,只要在判断态之前加一个估算模块就行。
5.4 故障保护逻辑
故障保护分为三级。第一级是软件层面的常规保护,过压、欠压、过温,在100ms内完成检测和告警。第二级是硬件快速保护,F373RC内置的DAC和比较器可以最快在一两个微秒内触发中断,直接锁死均衡输出。第三级是均衡异常诊断,比如均衡持续运行30分钟电压差没有缩小,或者均衡器停止后电压差突然跳变超过设定值,都判定为均衡回路故障。
均衡回路故障这个诊断容易被忽略,但实际很有用。曾经遇到MP2642GR-Z的飞跨电容虚焊,表现为均衡电流异常小,电芯电压差怎么均衡都降不下来。如果没有故障诊断,这个系统会一直不停均衡,最终可能因为过均衡导致电压高的电芯被反向充电,引发安全隐患。现在我把均衡效率低于理论值50%作为异常条件,连续三轮触发后直接锁定均衡功能,并上报主系统。
6. 关键参数计算与设计实例
6.1 均衡电流估算
开关电容均衡器的平均均衡电流可以用一个很简洁的公式估算:
I_eq = f × C_fly × ΔV
其中f是飞跨电容的切换频率,C_fly是飞跨电容容值,ΔV是两节电芯当前的电压差。这个公式的物理含义是:每个切换周期里,飞跨电容从高电压电芯吸收的电荷量近似等于C_fly×(V1-V2),每秒重复f次,所以平均电流就是三者乘积。
实际电路中还要考虑开关导通电阻、电容ESR和PCB走线电阻带来损耗,所以工程上要乘一个效率系数η,通常取0.8到0.9:
I_eq = η × f × C_fly × ΔV
举个例子,取C_fly为4.7uF,切换频率200kHz,两节电芯电压差200mV,效率按0.85估算,I_eq就是0.85乘以200k乘以4.7uF乘以0.2V,算出来大概是160mA。如果电压差只有50mV,均衡电流就只有40mA。这说明均衡电流是动态变化的,越接近拉平电流越小,最后阶段的均衡速度会明显放缓。
6.2 均衡时间与系统需求匹配
均衡时间的估算不复杂,关键是确定需要转移多少电量。如果两节电芯由于自放电差异积累了大约150mAh的容量差,在160mA的均衡电流下,理论上需要接近1小时。如果均衡电流只有40mA,这个时间会拉到接近4小时。所以一个完整的均衡过程很可能不是一次开机完成的,而是要在浮充或备用状态下持续多轮。
设计系统时,一定要想清楚自己需要的均衡能力。储能系统的目标通常是每天都能把电压差控制在10mV以内,每天需要的均衡时间可能也就半小时到一小时。但如果电芯失配严重,均衡电流又小,那就需要提前让系统在合适时机开始预防性均衡。我的建议是在系统设计阶段就做一次最恶劣失配条件的估算,用容量差除以最小可用均衡电流,算出最大均衡时间,再对比系统的可用空闲窗口。
6.3 电容与频率的选配
飞跨电容和切换频率是均衡器设计的两个自由参数。电容大,单次转移电荷多,均衡电流大,但电容体积和成本也上升。频率高,均衡电流大,但开关损耗和电容损耗跟着增加,芯片发热会更明显。频率低,损耗小,但均衡速度慢。
我实际测试中,4.7uF配200kHz是一个不错的起点。如果想提升均衡电流,优先加频率而不是加电容。因为陶瓷电容在直流偏压下容值会衰减,加容量容易踩进X5R的坑,而频率调整则只需要改配置。等频率高到300kHz以上开始明显发热时,再考虑加大电容。
还有一点容易被忽略:两节电芯间存在固有等效串联电阻和分布电容,飞跨电容直接并联在电芯两端时,开关切换瞬间会有电流冲击。为了限制冲击,PCB走线的寄生电感和电阻反而是有利的,稍微加一点串联电阻(比如0.5欧到1欧)可以平稳电流波形。这个电阻会损失一点效率,但能显著减轻EMI和电压尖峰,值得保留。
7. 调试实录:常见问题与排查思路
7.1 均衡电流低于理论值的排查
第一版样机测试时,实测均衡电流只有理论计算的四成,和预期差得比较多。排查过程比较典型,可作为参考。
先怀疑飞跨电容的问题,把电容从X5R换成C0G后,均衡电流提升了一些,但还是不够。再检查PCB布局,发现飞跨电容离芯片引脚有点远,中间还过了一个过孔,走线阻抗偏大。把电容挪到芯片同面、紧靠引脚之后,电流又上来了一截。最后用示波器测切换节点波形,发现开关频率实际只有标称的一半,原因是最初配置的频率电阻选错了规格。把频率校准到200kHz以后,均衡电流基本和理论值吻合。
这个案例说明,均衡电流不足一般沿着三个方向排查:电容实际容值、走线阻抗、实际切换频率。先做量测再动手改,不要盲目改参数。
7.2 电压采样跳变的处理
均衡器启动后,ADC读数出现周期性跳变,幅度大约正负8mV。这个现象很典型,多半是均衡器切换噪声耦合到了采样链路。
处理手段有两步。第一步在硬件上增强滤波,采样引脚前的RC滤波器从100欧加100nF调整为1k欧加220nF,截止频率压到1kHz以下。第二步在软件上调整采样时机,增加均衡暂停采样机制。两次措施叠加后,读数稳定度恢复到正负1mV以内。
要特别说明的是,把RC滤波时间常数调大,会让电压采样响应变慢,如果电芯电压本身快速变化,采样值会滞后。但在电池均衡这个场景里,电压本身就是慢变量,滞后几十毫秒完全不影响决策,换来的是干净的数据,这笔交易很划算。
7.3 均衡启停振荡问题
滞回范围设得太小遇到过振荡问题。最初启动阈值和停止阈值分别设为8mV和3mV,本来是想把均衡控制得更精细,结果电压差在阈值附近来回波动,均衡器每隔几秒就启停一次。MP2642GR-Z的使能引脚频繁切换,电芯电压也会被反复扰动。
修改方法就是扩大滞回窗口,启动阈值25mV,停止阈值10mV,并加了最短均衡时间和最短空闲时间两个限制条件。最短均衡时间设定为3分钟,保证均衡启动后至少运行3分钟,避免启动后刚运行几秒就因电压抖动被关断。这两个机制补上后,波形干净很多。
7.4 其他容易忽略的坑
还有一个我遇到过值得分享的问题:均衡器使能引脚在MCU复位期间悬空。系统上电或复位瞬间,MCU引脚默认浮空,如果MP2642GR-Z的使能引脚外部没有下拉电阻,均衡器会短暂启动。解决办法是在使能引脚上并联一个100k下拉电阻,保证MCU复位的几十毫秒内均衡保持关闭。
另一个是SDADC通道间串扰问题。如果两节电芯的采样引脚在PCB上平行走线距离过长,高电压通道靠近低电压通道的采样电容,可能有少量电荷注入导致微弱串扰。解决方法是把两路采样线分开走,中间铺地隔离,F373RC的SDADC引脚之间的分布电容很小,正常布局都不会有问题,但走线贴太近时确实会引入几个毫伏的串扰。
8. 从两串到更多串:这套方案怎么扩展
两串均衡器是基础单元,但这个项目并不停留在两串。储能系统里常见的电池模组还有4串、6串、8串,MP2642GR-Z本身管一节两串,扩展思路并不复杂:多组均衡器并联,每两串电芯配置一个MP2642GR-Z,所有均衡器的使能信号都由同一个STM32F373RC控制,采样通道则分别接入各组电芯的电压输出。
软件层面基本不用改动太多,只需要把状态机的单组逻辑改成循环处理多组。每组独立判断、独立使能、独立故障管理。主控的SDADC通道数量足够覆盖到8串,如果串数更多,可以在前面加多路模拟开关,或者换更高通道数的MCU。温度通道也同样处理,一个NTC对应一组电芯区域即可。
整套系统的关键价值在于把均衡从盲目的电压拉平提升到策略化、可观测、可诊断的层面。主控能够实时知道每组电芯的电压差、均衡电流趋势、均衡效率是否异常,并且能够根据系统状态决定什么时候均衡、均衡多久、什么时候应该停手。这就是储能和备用电源系统和消费电子BMS最大的区别。
我在这个项目里最深的体会是,电池均衡从来不是一个纯粹的硬件题,也不是一个纯粹的软件题,而是一个需要把硬件能力和控制策略拧在一起的系统工程。芯片再聪明,采样再精准,策略不对照样白忙;而策略再完善,采样链路不干净,所有判断都是建立在沙子上。两串电芯虽小,但把这个闭环走通了,往更多串扩展时就只需做加法,不用推翻重来。