两串电池的均衡问题,在储能和备用电源系统里看着不起眼,但真正做下来会发现坑不少。我最近刚好完成了一个均衡模块的开发,主控用的是STM32F373VC,均衡功率级交给MP2642GR-Z,目标很简单:让两节串联锂电池在长期浮充和循环充放之后,仍然保持电压一致。这篇文章会把方案从选型、硬件、固件到调试过程完整梳理一遍,适合正在做电池管理、储能BMS或者备用电源监控的工程师,也适合刚接触串联电池均衡的初学者参考。
1. 两串电池为什么需要均衡,均衡方案怎么选
1.1 压差从哪来:容量、内阻和温度的不一致
很多刚接触电池管理的人会有一个疑问:两节电池串联,买来的时候电压明明是一样的,为什么用着用着就差了?这个问题的根源不在使用阶段,而在电芯出厂时的固有差异。
同批次电芯的容量不可能完全一致,出厂允许的容量偏差通常在正负2%到5%之间。两节标称20Ah的电芯,实际可能一节是20.3Ah,另一节是19.4Ah。串联回路中流过的是同一个电流,容量小的那节在放电时会先到达截止电压,充电时会先到达满充电压。这样一来,每次循环都会让容量小的电芯经历更多的过充和过放,进一步加速衰减,压差就像滚雪球一样越来越大。
内阻不一致是另一个隐藏因素。串联回路中电流相同,但内阻大的电芯在充放电瞬间会产生更大的极化电压,表现为动态压差。静置一段时间后极化会恢复,但对实时采样和均衡判断来说,这种动态波动干扰很大。
温度梯度常常被忽略。储能柜或备用电源内部,风道设计不好的话,两节电芯之间的温差可能达到几度。温度高的电芯化学反应速率快,电压变化规律和温度低的电芯完全不同。综合下来,长期运行的串联电池组如果没有均衡措施,容量利用率可能下降到70%以下,整组寿命大打折扣。所以均衡不是可选功能,而是串联电池系统的基本保障。
1.2 被动均衡和主动均衡,到底怎么选
均衡主流方案就两大类:被动均衡和主动均衡。我做这个模块之前,把两种方案横向对比了一遍,各有适用场景。
被动均衡是通过电阻把电压偏高的电芯多余电量以热量形式消耗掉,控制简单、成本低,但效率为零,均衡电流一大就发热,且只适合压差不大、容量差异小的场合。主动均衡则是通过电感、电容或变压器,把高电压电芯的能量搬移到低电压电芯,能量在电芯之间转移,而不是白白烧掉,效率高,发热低,适合储能和备用电源这类对可用容量和散热都有要求的场景。
| 对比项 | 被动均衡(电阻耗散) | 主动均衡(能量转移) |
|---|---|---|
| 能量去向 | 电阻发热耗散 | 转移到低压电芯 |
| 均衡效率 | 0%(能量浪费) | 70%~90% |
| 电路复杂度 | 低 | 中高 |
| 器件成本 | 极低 | 高 |
| 发热量 | 大 | 小 |
| 适合场景 | 小容量、低成本消费电子 | 储能、备用电源、动力电池 |
对于两串电池这种小规模应用,被动均衡从成本角度不是不行,但在储能和备用电源场景里,系统往往长期浮充或频繁备电投切,压差一旦拉开,被动均衡那点功耗根本跟不上。主动均衡虽然前期成本高一些,但换来的容量利用率提升是实打实的,电芯寿命也会更长。
1.3 为什么把两串作为切入对象
两串虽然串数少,却是很好的技术验证平台。市面上大量实际产品都是两串电池架构:小型UPS的直流母线、应急照明电源、便携储能箱的电池包,以及大型储能系统里每个均衡单元的基础粒度。我对两串的定位是:先把2串的硬件拓扑、控制算法、故障逻辑跑通,后续扩展到4串、6串时,只需要把采样通道和均衡通路做级联扩展,核心算法框架完全复用。所以这篇文章讲的虽然是两串均衡,但思路和价值不仅限于两串。
2. 核心器件分工与选型逻辑
2.1 MP2642GR-Z 在系统里扮演什么角色
MP2642GR-Z 在系统里的职责,可以理解为均衡功率前端。芯片内部集成了均衡通路的开关管和驱动逻辑,外部只需要配合电感和采样电阻,就能完成电池间能量转移的物理执行。
我最初考虑过用分立MOSFET搭均衡桥臂,但实际布板后发现问题不少:驱动电路要额外用半桥驱动器,开关死区要靠软件精细控制,过流保护得自己搭比较器,一整套下来占掉很大面积。换用MP2642GR-Z之后,功率级的开关管集成在芯片内部,MCU只需要给出PWM控制信号,芯片内部完成驱动和基础保护,电路设计瞬间简化了很多。
另一个好处是芯片内部开关管的导通阻抗低,这意味着同样电流下导通损耗小,均衡效率更高。数据手册里对引脚和时序描述得很详细,布线时尤其要注意功率地和控制地单点连接,避免大电流回路干扰控制信号。因为我手上这颗是带封装后缀的版本,散热焊盘和引脚排列布局比较紧凑,具体管脚顺序大家以自己拿到的数据手册为准。
2.2 STM32F373VC 为什么适合做均衡主控
均衡控制的关键在于两点:电压采得准、电流控制得稳。STM32F373VC恰好在这两件事上有独特优势。
首先是片上集成的16位Σ-Δ型ADC,也就是SDADC。它专门针对高精度直流测量优化,分辨率在参考电压2.5V条件下,最小分辨电压约38微伏。单体电压测量完全不需要外挂高精度ADC芯片,省了成本和通信接口。其次是片内集成了运算放大器和比较器,电流采样信号可以直接接入片内运放放大,再送ADC采样,也不需要额外布放仪表放大器电路。
处理能力方面,Cortex-M4F内核主频最高80MHz,带浮点运算单元,跑均衡算法绰绰有余。芯片上有CAN、I2C、UART等多种通信接口,和上位机、BMS主控通信都很方便。对比方案来讲,如果拿普通MCU来做,通常需要额外挂16位ADC和外部运放,不仅板子面积变大,采样系统的校准难度也上了一个台阶,因为外部器件多了,误差来源就多。F373把采样链路集成到片内,整个信号链的噪声和一致性表现要好得多。
2.3 两颗芯片如何分工配合
整套均衡系统可以概括为感知、决策和执行三层:STM32F373VC负责电压采样、状态判断、算法运算;MP2642GR-Z负责功率级开关动作、电流执行和硬件级保护;中间的连接就是PWM控制信号和电流反馈信号。
实际工作流程中,SDADC先采集两节电芯的端电压和中间节点电压,经过滤波和校准得到精确单体电压;MCU判断压差是否超过阈值,如果进入均衡状态,就输出特定频率和占空比的PWM给MP2642GR-Z;功率级按照PWM驱动内部开关管,把高压侧电芯的能量搬移到低压侧,采样电阻上的电流反馈回到MCU,闭环调节占空比。整套闭环的更新周期在100ms左右,因为电池电压变化本身是慢变量,不需要微秒级实时控制。
3. 硬件电路设计与关键参数计算
3.1 单体电压采样电路:精度是第一道关卡
均衡判断依赖电压差,如果采样不准,后面一切控制策略都是空中楼阁。我实际设计时用SDADC的双通道分别测两节电芯电压,一节测总电压和中间节点电压,再做差值得到单体电压,这个方案对分压电阻精度要求很高。
分压电阻的选择直接影响测量精度。我选了低温漂精密电阻,精度1%,温度系数25ppm/摄氏度。串联分压比设计成1/2,把满电电压4.2V降到2.1V,落在SDADC的线性测量范围内。分压网络热噪声和SDADC内部数字滤波结合起来,长期波动可以控制在正负1mV以内。
值得提醒的是,SDADC的输入带宽比较窄,本质上适合直流和低频信号,这正是单体电压测量的需求。但这也意味着如果均衡过程中的纹波串入采样回路,电压读数会整体漂移。我的解决方案是RC滤波靠采样端放置,时间常数取1ms左右,同时在PCB布局上让采样走线远离均衡功率回路。
电压校准方面,调试时用精密可编程电源分别输出2.000V、3.000V、4.000V三个标准电压,对照MCU转换结果做两点或多点标定,把增益误差和失调误差分别扣除。实际标定后,测量误差在正负0.8mV以内,满足均衡控制对压差判断的需求。
3.2 均衡主功率拓扑与电流计算
均衡通路的拓扑我采用的是电感储能式双向均衡结构,这是小串数主动均衡的经典方案。芯片内部开关管和外部电感组成Buck-Boost变换器,配合续流二极管实现能量从高压电芯向低压电芯的定向转移,MP2642GR-Z内部已经集成开关管和相关驱动逻辑,外部只需要放置电感和反向恢复特性好的二极管。
均衡电流是设计核心参数,需综合考虑电芯容量和均衡时间。如果电流太小,压差拉平要耗费很长时间;电流太大,器件发热、EMI噪声和电芯寿命都会受影响。对于容量相近的电芯,单次均衡的安时数通常不大,但必须保证在数个循环内能完成校正。我定的目标电流是0.5A,理由是按一对20Ah电芯计算,若压差对应的电量差约1Ah,0.5A电流理论上两个多小时就能搬移完成,系统完全有时间在充电间歇期收敛压差。
限流电阻的计算,需要把MP2642GR-Z内部开关导通阻抗、外部电感的直流电阻都算进去。假定电芯压差典型值为0.2V,开关管导通阻抗约30毫欧,电感直流电阻约50毫欧,整体通路阻抗约0.4欧到0.5欧。峰值电流约等于压差除以通路总阻抗,约0.4到0.5A,电流虽不大但稳定可靠。实际调试时,我通过调节PWM占空比精确控制平均电流,而峰值电流由电感限制,不必刻意追求大电流。
均衡效率上,主动均衡的优势非常明显。0.5A电流通过被动均衡耗散时,发热功率接近1W,PCB上需要铜皮散热。而主动均衡只在电感和开关管上产生约0.2W的损耗,元器件表面微温,长期工作安全性好很多。
3.3 保护与安全设计:防反接、防过流、防误动作
均衡模块是直接并联在电芯上的,硬件保护设计必须想到位,电池安全事故往往就是从小地方开始的。
防反接是第一道保险。我自己吃过这个亏,调试时第一次接反线,虽然因为串了个限流电阻没有烧东西,但保护二极管直接击穿了。后来改了思路,输入端串联保险丝,电路内部加反向电压检测电路,MCU上电先检测电池极性正确再开启后续功能。
过流保护利用采样电阻上的电压降实现,MCU每50ms检查一次电流反馈信号,一旦超过设定上限,立即封锁PWM输出。均衡模块还有一个容易忽略的点是上电瞬间的误动作。硬件默认状态下,PWM引脚必须拉到确定的电平,确保MCU完成初始化前均衡通路绝不开启,防止单节电压异常时均衡瞬间拉出大电流。
温度保护也不能省。我在均衡MOSFET附近和电芯表面各放了一个NTC测温点,MCU检测到温度超过60摄氏度就暂停均衡,过温恢复窗口设在45摄氏度,留足回差,避免频繁切换。这些保护逻辑看着简单,真到系统长期运行的时候,每一条都能减少一次不必要的故障。
4. 控制策略与固件实现
4.1 均衡状态机:每个切换条件都加上滤波
固件的主干是状态机,我定义了四个状态:空闲、检测、均衡、故障。空闲状态下只做周期性电压采集,检测状态下判断压差是否触发均衡条件,均衡状态下执行能量转移,故障状态下闭锁所有输出并上报错误码。
状态切换的阈值设置需要结合电芯材料特性来决定。磷酸铁锂的放电平台平缓,自放电率差异造成的压差通常比三元锂更明显。以磷酸铁锂为例,均衡开启阈值设为20mV,关闭阈值设为10mV;如果压差落在10到20mV之间,就进入保持区,不动作也不退出。滞回区间不够的话,电芯电压细微波动就会让系统反复启停,每次均衡启动瞬间的电流冲击对电芯和功率器件都是不利的。阈值判断再加上2到5秒的持续滤波时间,基本就能防止抖动。
状态机里还有一个超时保护:均衡持续超过设定时间上限,比如4小时,压差仍没降到关闭阈值,就上报异常并退出均衡。这种情况通常意味着电芯已经严重不一致,继续均衡只会让容量小的电芯承受更大的压力。
4.2 采样滤波与电压校准:数据干净了再谈算法
SDADC转换结果会附带一些高频噪声,虽然芯片内部已经有数字滤波器,我在软件层面还是加了双重处理。第一步是中值滤波,连续采5个点取中间值,剔除偶发的毛刺。第二步是滑动平均,取最近10次的中值滤波结果做算术平均,等效把噪声再压低一个量级。实测下来,电压数据的峰峰抖动从5mV降到0.5mV以内。采样频率不用拉太高,每50ms完成一次完整测量就够了,电池电压本身是慢变量,过采样反而增加功耗和中断负荷。
电压校准采用两点标定,标定参数保存到片内Flash。校准流程是把标准电压源接到采样端,让MCU进入校准模式,采集已知电压,计算增益修正系数和失调修正值。
校准方式可以参考下面这段固件结构示意:
typedef struct { float gain; // 增益修正系数 float offset; // 失调修正电压,单位V } CellCalib; // 校准值应用 float get_cell_voltage(uint8_t cell, uint16_t adc_raw) { float voltage = (float)adc_raw * VREF / 65536.0f; voltage = voltage * calib[cell].gain + calib[cell].offset; return voltage; }这段代码看着简单,但校准数据的一致性很关键。我把两节电芯的校准系数都在产线测试时写入,防止不同的主控板之间存在个体差异。
4.3 均衡闭环控制:慢速PI加电流限幅
均衡控制的对象是电芯压差,执行机构是PWM占空比。直接根据压差映射占空比,在小信号范围内容易振荡。我采用的是外环压差控制、内环电流限幅的分层结构:外层用比例积分调节器把压差作为误差量,输出目标电流值;内环把目标电流限制在0.2A到0.6A的安全区间,再映射到PWM占空比。
PI参数的整定思路完全不同于普通电机控制。电池电压变化很慢,控制周期100ms已经足够,比例系数不能大,否则压差稍微波动就会让电流来回跳变,反而加剧局部发热。我最终选用比例系数100、积分系数5,控制量限幅到0.6A,这样均衡电流变化平滑,对电芯几乎没有冲击。
滞回逻辑在固件里的表达如下:
#define BALANCE_ON_THRESHOLD 0.020f // 开启阈值20mV #define BALANCE_OFF_THRESHOLD 0.010f // 关闭阈值10mV if (voltage_diff > BALANCE_ON_THRESHOLD) { balance_enable = true; } else if (voltage_diff < BALANCE_OFF_THRESHOLD) { balance_enable = false; }占空比的最终生成用定时器完成。PWM频率选在100kHz左右,这个频率区间电感体积小、开关噪声可控。频率太高开关损耗会明显上升,太低了则电流纹波增大,电感和采样电阻的发热都会上来。100kHz是一个均衡效率和器件应力的平衡点。
4.4 通信与监控:让系统状态看得见
没有通信的均衡模块等于闭着眼睛干活。我在设计里预留了CAN和UART两路通信。CAN用于接入上层的BMS监控网络,报文周期1秒,上报单体电压、压差、均衡状态、均衡电流、温度五个核心参数。UART调试口作为本地调试窗口,通过串口助手就能实时观察状态机跳转和波形数据。
报文格式按照标准CAN 2.0B扩展帧设计,ID按项目需求分配,数据场8字节刚好放完整包。这里特别注意了CAN的唤醒机制:只有均衡模块上报异常故障时才主动发送报文,正常运行时采取事件上报加心跳报文的方式,避免长时间占用总线带宽。
5. 调试实录与实测数据
5.1 先校准采样,再谈均衡
调试顺序很关键,我每次都是先验证采样链路,确认两节电芯的电压读数准确之后,才打开均衡功能。用一块六位半万用表同时监测电芯端电压和MCU上报电压,在3.2V到4.2V范围内抽5个点比对,记录误差。
| 万用表读数(V) | MCU上报(V) | 误差(mV) |
|---|---|---|
| 3.200 | 3.2001 | +0.1 |
| 3.501 | 3.5006 | -0.4 |
| 3.802 | 3.8023 | +0.3 |
| 4.001 | 4.0012 | +0.2 |
| 4.199 | 4.1984 | -0.6 |
误差全部落在正负1mV内,这个精度对均衡控制已经足够。如果误差超过3mV,我会先检查分压电阻精度和焊接质量,再考虑重新标定。
5.2 均衡过程的实测表现
验证均衡效果的方法是人为制造压差。用电池测试仪先把一节电芯放到3.49V,另一节保持3.70V左右,压差约0.2V,然后启动均衡,每隔一段时间记录电压数据。
| 时间(分钟) | 高压电芯(V) | 低压电芯(V) | 压差(mV) | 均衡电流(A) |
|---|---|---|---|---|
| 0 | 3.704 | 3.496 | 208 | 0.52 |
| 10 | 3.691 | 3.510 | 181 | 0.50 |
| 35 | 3.662 | 3.539 | 123 | 0.48 |
| 70 | 3.638 | 3.567 | 71 | 0.51 |
| 120 | 3.605 | 3.591 | 14 | 0.00 |
126分钟后压差降到14mV,低于关闭阈值,均衡自动退出。整个过程中均衡电流稳定,没有出现振荡或跳变,电感和开关管温升约15摄氏度,完全可控。
这个结果说明,0.2V的压差配合0.5A均衡电流,在约2小时内完成收敛。如果压差更大的话,所需时间按电量差除以平均电流来估算,但注意放电后期压差逐渐缩小时效率会下降,不能简单地线性外推。
5.3 采样时序的抗干扰处理
调试中发现一个非常值得注意的现象:均衡开启期间,SDADC读到的电压会周期性跳变,跳变幅度约3到5mV,恰好和PWM频率同步。排查后发现是均衡纹波通过地线耦合到采样回路。
解决思路不是增加低通滤波那么简单,更重要的是时序规避。我在固件里把采样触发点对齐到PWM的平均电平区间,也就是避开开关管开关瞬间和续流瞬间,在均衡电流相对平稳的时间窗内启动SDADC转换。这个办法非常有效,压差波动从3mV降到0.8mV以内。建议各位做均衡控制时,如果采样值和均衡动作存在同步波动,优先检查采样窗口是否落在PWM高噪声区间。
6. 常见问题与排查技巧实录
| 现象 | 可能的根因 | 排查方法与解决措施 |
|---|---|---|
| 均衡开启瞬间压差先变大 | PWM纹波进入电压采样回路 | 采样窗口对齐PWM低噪声区间,增加RC滤波,检查采样走线是否平行于功率走线 |
| SDADC读数跳变几十个字 | 参考电压受开关噪声干扰 | 参考电压引脚加0.1uF和10uF电容,功率地和控制地单点连接,降低PWM频率到80到100kHz |
| 均衡电流始终偏小 | 限流电阻偏大或开关频率过高 | 实测通路阻抗,重新计算限流电阻,检查占空比映射是否偏离设定范围 |
| 均衡电流上不去但MOSFET很烫 | 开关器件损耗集中在开关切换点 | 降低PWM频率,优化驱动电阻走线,检查是否有直通风险 |
| 均衡在阈值附近反复启停 | 滞回区间太小或滤波时间不足 | 扩大滞回区间到10mV以上,增加2到5秒持续滤波时间 |
| 电芯电压读数整体偏低 | 分压电阻存在偏差 | 用精密万用表实测分压比,更新校准系数 |
调试过程中我还有一个体会:均衡模块的很多问题不在板子本身,而在参考地和功率回路的布局。最初版PCB为了节省面积,把采样回路和均衡功率回路挤在一起,结果无论怎么滤波都有干扰。后来重新布局,功率回路走线形成一个最小闭环,采样线单独拉出并做包地处理,问题大幅缓解。对于模块级的均衡产品,布局走线的好坏往往比算法更决定最终性能。
下线测试时还有一个容易踩的坑:用手去触碰电芯连接点,人体静电会瞬间冲击SDADC输入端,直接损坏内部电路。我在样品测试阶段就烧过一颗主控。后来在产线流程里加入了防静电手环和输入端TVS保护管,这个问题再没出现过。批量生产时,静电防护措施一定不能省。
7. 一些经验总结与扩展思路
整个项目做完,我最大的体会是:两串均衡表面看电路不复杂,但要做到长期稳定运行,采样精度、功率拓扑、控制策略和工艺布局一个都不能少。芯片选型上,STM32F373VC的集成度让采样链路简单可靠,MP2642GR-Z把功率级化繁为简,两颗芯片互补性很强。
最后分享一个生产环境的小技巧:每块均衡板在出厂前,用固定阻值的校准电阻网络模拟一对已知压差的电池,自动完成采样校准和均衡功能测试。这样既不需要真实电池组测试,又能确保每块产品的压差检测精度一致性,效率也大幅提升。后续如果项目扩展到4串或6串,采样通道和均衡单元按相同思路级联即可,通信协议稍微扩展一下,不需要重写框架。均衡这条路,关键是把基础模块做扎实。