1. 为什么2串电池组的均衡不能等“快见分晓”时再处理
1.1 标题里的真实需求:备用电源系统最怕哪类失衡
先说一个可能扎心的结论:我见过不少储能项目把精力全放在几十串的大电池包上,却忽略了2串这种小系统的均衡。而实际在微型储能、应急照明备电、家庭网关备用电源、小型UPS里,两节18650或两节磷酸铁锂串联是最常见的组合,也是失衡事故的高发区。
原因不复杂。两节电池串联工作时,容量稍低的那一颗会先充满、也先放空。备用电源系统平时大多数时间处于浮充或待机状态,单节电压本就容易被充电器顶着走,只要两节电池的内阻、自放电率、容量有一点差异,几周下来压差就能滚到一两百毫伏。等到市电掉电那一刻,系统要立刻切到电池供电,结果呢?电压低的那节电池瞬间被拉低,触发欠压保护,整组备用电源直接失效。
这就是标题里“储能和备用电源系统中对两个串联电池单元进行均衡”的核心诉求:不是做多高的电池包均衡精度,而是要在平时静默运行中悄悄把压差压住,让备用系统在真正需要出力的时候不掉链子。
1.2 为什么选MP2642GR-Z搭档STM32F215ZG:分工逻辑
这套方案里,均衡执行的硬件核心是MP2642GR-Z,策略和控制的大脑是STM32F215ZG。两者分工非常明确:MP2642GR-Z这块芯片负责电池端的均衡主回路和基础保护判定,STM32F215ZG负责电压采样、均衡策略判断、占空比控制、状态上报和系统联动。
先说芯片选型的理由。MP2642GR-Z属于面向小规模串联电池组的均衡管理芯片,关键优势在于它把两串电池的均衡通道做在了前面,MCU只需要通过简单的GPIO或PWM信号控制均衡深度,不需要自己搭一堆运放和MOS驱动电路。这种方案比直接用MCU的ADC采样电池电压、再拿IO口硬推MOS的做法可靠得多,也避免了“采样共模电压拉偏”这种最头疼的问题。
STM32F215ZG则是一个很成熟的Cortex-M3内核控制器,主频120MHz,3个12位ADC,两个高级定时器TIM1和TIM8,还带CAN接口。对于均衡这种工作,很多人觉得STM32F103都绰绰有余,为什么非要上F215?我当时的考虑是三点:
- 2串均衡的采样实时性要求并不高,但整理数据和做决策的周期要短,F215的120MHz主频让滤波算法和均衡状态机跑起来非常轻松,还能留出大量余量做系统通信。
- F215的双ADC配合DMA能力比F103更舒服,可以同时采集电池电压、温度、均衡电流等多个物理量,不用来回切换扫描。
- 备用电源系统通常要接入上一级控制器或触控屏,F215自带CAN接口,这让均衡板变成系统里的一个通信节点,而不是一个孤立的模拟小板。
说到底,这个组合的思路是:让专用芯片去干模拟域的脏活累活,让微控制器去干算法策略的精细活。均衡本身不是高频操作,但控制得准、判断得稳,才是这套系统的价值所在。
2. 硬件链路:从电芯采样到均衡动作的完整信号路径
2.1 采样电路的共模问题,这是2串方案最容易翻车的地方
两串电池组最容易翻车的点,不是均衡功率不够,而是采样不准。很多人习惯把一个电阻分压网络直接接到MCU的ADC引脚上,这种接法在1串电池时没有问题,但在2串电池时马上暴露问题。
假设电池组总电压是8.4V,GND接在第二串电池的负极,第二串电池电压6.0V。MCU的ADC输入范围通常只有0到3.3V,直接采第二串电池正极的电压,得到的是6.0V,超过ADC量程,读数直接饱和损坏。如果只采第二串本身,分压后计算倒是能算,但第一串电池的负端不处于MCU的参考地电位,共模电压会随着第二串电压浮动,导致线性度极差,温度一漂偏差更大。
所以我在硬件上做了三件事:
第一,两节电池的电压都经过精密电阻差分放大后,再进入MCU的ADC。用差分结构的好处是共模电压被大幅抑制,高侧电池的电压信号可以被安全搬到低电位侧。
第二,在MCU的ADC输入之前加RC低通滤波。均衡MOS开关瞬间会产生一些电压尖峰,RC时间常数选在几百微秒到几毫秒量级,既能滤掉开关噪声,又不影响几百毫秒周期的采样节拍。
第三,预留了校准接口。PCB上放两个精密基准源或校准点,软件初始化时采样已知电压再计算增益误差和零点误差。这个校准步骤特别重要,因为2串系统的分压电阻阻值只要偏差0.5%,对应到电压误差就有20mV以上,足够干扰均衡判断了。
2.2 双通道均衡主回路:外部MOS管与功率耗散的设计选择
MP2642GR-Z的均衡通道工作时,相当于把均衡电阻接到电池单元两端,通过外部功率MOS管控制导通时间。实际上它支持的是外部MOS拓扑还是内置导通,我的设计里让它直接驱动外部MOS——好处是均衡电流完全由外部电阻决定,不依赖芯片内部的导通压降。
我选的均衡电流设计值是0.3A左右。这个值在2串小电池组里比较实用,不会让电池发热,配套的均衡电阻也不用太大体积。以0.3A均衡电流计算,均衡电阻两端压降大约是电池电压的5%到8%,均衡电阻阻值取5Ω左右,算下来功率在0.5W上下,用两颗1206封装或一颗2512封装的电阻就能可靠压住。
均衡通道的MOS导通控制用了PWM,而不是单纯的开关。满打满算直接导通虽然压差降得快,但温度冲击大,而且容易把相邻电池的电压拽出波动。我把单周期设为100ms,均衡占空比从10%到95%可调,由MCU根据压差实时调节。这样既平滑又安全,MOS管结温也不会剧烈跳动。
2.3 保护链路的闭环:OV/OT/OC三层防线
均衡板不是只干均衡,还要负责把系统从异常状态里拉回来。我在这块板上部署了三层防线:
- 过压保护:单节电池电压超过设定上限,MCU立即切断均衡通道、关闭充电通路、通过CAN上报故障。MP2642GR-Z内部也有硬件比较判断,相当于双保险。
- 过温保护:在均衡电阻附近和电池表面各放一颗NTC,采集到的温度超过60℃时,先降均衡占空比,超过65℃彻底关断均衡并报故障。均衡电阻计算散热面积时,也要确保0.3A连续工作时表面温度不超过70℃。
- 过流保护:系统供电端串联采样电阻,MCU实时监测电流。如果均衡通道发生直通或MOS击穿,硬件比较器会先把PWM输出拉低,随后MCU软件强制关断,避免电池短路放电。
这些保护的优先级排序很关键,我习惯把硬件级保护放最前面、芯片级放中间、软件级放最后。软件保护速度再快也有延迟,但胜在灵活可配置;硬件比较器只要电路设计对了,几微秒就能响应,这才是真正的最后防线。
3. 软件控制:让均衡从“能动作”变成“动作得准”
3.1 状态机设计:只做均衡还是做完整BMS?
软件层面第一个要决定的问题是:这块板子只做均衡功能,还是顺便承担完整的电池管理系统职责?我的回答是:均衡板不能只管均衡,必须把电压采集、温度采集、充放电保护和通信上报都纳入进来,因为备用电源系统的控制器往往只知道“有电没电”,它不会每个毫秒去关心两节电池的压差。如果均衡板不做,这个功能就没人做了。
我把系统状态分成5个:初始化、待机监测、均衡执行、故障保护、恢复确认。
- 初始化:完成ADC校准、读取配置参数、检查上次故障记录。
- 待机监测:每个周期采样电压、温度、电流,判断是否需要均衡。
- 均衡执行:按策略输出PWM驱动均衡通道,同时持续监测是否触发保护。
- 故障保护:进入后锁定故障类型并上报,需要故障恢复条件满足才能退出。
- 恢复确认:故障消失后延后一段时间,没有复发才能返回待机,防止振荡。
状态机的核心原则就是先保护后均衡。哪怕压差再大,只要出现过压、过温、过流,一律先停均衡。备电系统里电池不均衡最多是寿命缩短,但一旦保护失效,轻则电池鼓包,重则热失控,这个优先级绝对不能颠倒。
3.2 ADC采样与滤波:实测中的毛刺、参考漂移和校准
采样环节我用的是STM32F215ZG的ADC1和ADC2,配合定时器触发和DMA传输。每个电压通道每次采样16次,做一个简单的中值滤波后,再叠加滑动平均。这样做的目的是把MOS开关噪声和电池自恢复跳变都压下去,同时又不会把真实的电压变化“平滑”掉。
这里有一个特别容易忽略的点:ADC参考电压漂移。STM32F215ZG内部参考电压虽然够用,但环境温度变化几十度后,采样结果会出现系统性偏移。我在校正阶段把内部参考电压通道和输出一个已知基准电压通道都采进去,在计算电池电压时做比率换算,而不是直接用ADC原始值除以满量程乘以3.3V。
校准流程写成初始化函数,每次上电自动执行:
void adc_calibrate(adc_channel_ref_t ref_ch, uint16_t known_mv) { uint16_t raw_ref = read_adc_channel(ref_ch); float scale = (float)known_mv / (float)raw_ref; calibration_scale = scale; }之后所有电压计算都用这个scale修正。实测下来,校准前后最大偏差能从20mV以上压缩到3mV以内,这对于2串系统来说已经完全够用了。
3.3 三段式占空比策略,以及为什么不要盲目全速拉平
均衡策略我最初直接做成全速拉平,压差只要超过30mV就把均衡通道开到95%占空比,直到压差降到10mV以下。实测发现两个问题:
- 大占空比均衡让高电压电池电压被快速拉低,但开路静置后电池电压会反弹,结果陷入“猛拉—反弹—再猛拉”的循环,占空比高频振荡。
- 均衡电阻持续满负荷发热,MOS管温度上升非常明显。
后来我改成三段式策略,占空比和压差挂钩:
- 压差大于50mV时,占空比设为80%,先用重载把压差快速压下来。
- 压差在20mV到50mV之间时,占空比降到40%,以温和速度继续均衡。
- 压差小于20mV但大于10mV时,占空比降到15%,做最后的精细修正。
同时每个均衡周期之间加入冷却静置时间。比如均衡50ms,静置50ms,让均衡电阻和MOS有足够时间散热。均衡完一拍后重新采样,再做下一拍决策。
这样做的直观效果是:压差曲线下降平滑得多,不会出现过冲反弹,整个均衡过程持续20到40分钟,对备用电源系统的运行完全没有干扰。我特别不建议把均衡做成“越快越好”——被动均衡的本质是能量耗散,耗散越快,发热越猛,对PCB和电芯寿命都不友好。
4. 均衡参数标定与实测:我的调测顺序和避坑记录
4.1 用虚拟电池组验证标定的正确姿势
第一次焊接完样机后,我没有直接上真电池,而是用两个可调直流电源串联模拟两节电池。这个方法非常推荐:你能精确控制每节电池的电压、任意制造压差,而且完全不受电池自恢复效应干扰,能帮你先把采样链路和均衡逻辑的bug全部揪干净。
虚拟电池组的接法是:电源1的正极接电池1正,电源1的负极接电池2正,电源2负极接GND。通过给电源1设定6.2V、电源2设定5.8V,就得到一个400mV压差的2串电池组。此时用万用表逐个测量MCU看到的电压值,和上位机报文对比,校准就完成了一半。
我实测的标定记录:
| 电源1电压 | 电源2电压 | MCU上报电池1电压 | MCU上报电池2电压 | 压差误差 |
|---|---|---|---|---|
| 6.320V | 5.870V | 6.318V | 5.872V | 2mV |
| 7.010V | 6.995V | 7.008V | 6.993V | 2mV |
| 8.000V | 7.980V | 7.995V | 7.983V | 3mV |
| 4.120V | 3.960V | 4.122V | 3.962V | 2mV |
这种标定精度下,均衡策略的阈值设置就可以放心用了。
4.2 实测曲线与效率评估:0.3A均衡电流下能压回多少压差
虚拟电池组测试通过后,我用一组容量2000mAh的18650电池实测。初始压差380mV,高电压电池4.12V,低电压电池3.74V,系统进入均衡状态。
均衡过程中每30秒记录一次数据。按照三段式策略运行,前10分钟用了80%占空比,压差从380mV降到210mV;中间15分钟用到40%占空比,压差从210mV降到90mV;后面20分钟小占空比慢慢磨,最终压差稳定在12mV附近,之后均衡自动停止。
这个过程中,均衡电阻表面温度从常温升到最高61℃,但没超过70℃的设计限值,MOS管温度在45℃左右。系统总供电电流多了几十毫安,对于备用电源来说可以忽略不计。均衡效率方面,被动均衡本来就不存在“效率”的漂亮说法,能量都是耗散掉的,但关键是它把电池引入了安全均衡状态,未造成电池过热或过度放电。
4.3 调试时遇到的三类问题与排查路径
我把调试过程中踩过的最典型的三类问题详细列一下,供大家直接抄排查思路。
第一类是采样读数跳变,均衡通道一打开,电池电压读数就乱跳。排查后发现问题出在均衡电流路径与采样回路共用了地线走线,MOS开关瞬间的压降被采样回路拾取。解决办法是:把均衡功率地和采样信号地在PCB上单点汇合,并加大采样输入端的RC滤波电容。这个改动把跳变幅度从40mV降到了2mV以内。
第二类是PWM开启瞬间MOS管发热异常。用示波器看栅极波形,发现驱动波形上升沿严重变缓,原因是MCU的IO口推挽驱动能力不够,换用MP2642GR-Z的驱动输出并调节栅极串联电阻后,边沿变陡,MOS管开关损耗明显下降。
第三类是均衡停止后压差反弹,而且反弹幅度高达50mV以上。我一开始以为是均衡策略问题,后来测电池开路电压才发现,均衡过程中高电压电池表面温度升高,开路电压升高,均衡停止后温度回落,电池化学状态重新平衡,这其实是电芯的正常物理规律。应对方式是不要追求压差绝对为零,压差小于20mV且保持两个判断周期不变即可退出均衡,避免陷入“追零”的振荡。
4.4 预留通信与后续扩展方向
最后说说通信和扩展。STM32F215ZG的CAN接口我接了一路到系统控制器,CAN报文按周期发送,每条报文包含电池1电压、电池2电压、温度、压差、均衡状态、故障标志等字段。系统控制器拿到这些数据后,可以在人机界面上实时显示电池健康状态,也可以在故障时强制把系统切到离线维护模式。
如果后续要把这套方案扩展到4串、6串系统,思路是一样的:每一组2串单元保留一块均衡子板,子板之间通过CAN串联,由主控制器统一协调。均衡策略不需要改核心代码,只需要将阈值和单元编号参数化。
有个小技巧是,为了让调试更直观,我预留了一个UART调试口,用9600波特率输出简化的状态行。均衡启动、占空比变化、退出均衡、保护触发都会有对应日志。这在样机阶段排查奇怪的时序问题特别管用,比每次都接CAN分析仪方便得多。
5. 最后再分享一点我的实际体会
这套MP2642GR-Z + STM32F215ZG的均衡方案从硬件设计到稳定运行,我前前后后改了三个版本。回头再看,最大的教训不在均衡策略,而在采样链路的干净度。被动均衡的技术门槛本来就不高,很多做砸的项目都是栽在“以为ADC读到的就是真实电压”这个假象上。
如果你也要做类似的项目,我的建议是按这个顺序来:先不惜成本把差分采样做扎实,再考虑上均衡石和策略;先用虚拟电池组把所有逻辑bug磨平,再碰真电池。另外,备用电源应用场景里温度变化特别大,校准系数一定要在整机测试阶段做过高低温验证,否则冬天和夏天的均衡判断会漂移得你怀疑人生。
均衡这事的衡量标准不是“压差有没有清零”,而是“系统在待机多少天后仍然保持健康、危险出现时能不能保护到位”。把这层想明白了,这套方案就能从一块会工作的板子,变成一套真正省心的备用电源管理方案。