手里同时拿着两节串联的磷酸铁锂电芯,想在一套备用电源系统里把它们的电压差从80mV压到5mV以内,又要不浪费太多能量,这就是我在做的项目:“通过 MP2642GR-Z 与 TM4C123GH6PZL,在储能和备用电源系统中对两个串联电池单元进行均衡”。简单说,就是用一颗主动均衡芯片负责搬移电荷,再用一颗MCU负责“看数据、下命令”,让两节电芯始终保持接近一致的荷电状态。
这篇文章适合两类人看:一类是做储能BMS、备电系统或者便携电源的硬件工程师,想找一个能落地的两串主动均衡方案;另一类是刚接触电池均衡、对MCU控制功率电路感兴趣的同学,准备从最小系统起步做实验。我会把方案选型、硬件设计、算法实现、调试过程以及踩过的坑全部按我能回忆起的细节写出来,其中补充的很多步骤是我基于常见实践整理的,不是照抄哪个厂家的参考设计。
1. 两节电芯串联为什么会“跑偏”,均衡系统要解决什么问题
1.1 串联电芯不一致性的成因与危害
任何两节电芯,哪怕出厂时电压、内阻、容量测试报告完全一致,串联组在一个系统里跑一段时间也会慢慢出现电压差异。原因有几个方面:温度分布不均——靠近发热元件的那节电芯自放电快,容量衰减也快;内阻不一致——串联回路电流相同,但内阻大的电芯压降大,端电压变化更剧烈;还有电解液、隔膜等制造工艺上的微小离散。
不要小看这种“微小差异”。在我们这套备电场景里,负载是间歇性工作的,充电和放电交替。高的那节电芯每次都被充得更满、放得更空,长期下来SEI膜增厚、析锂风险上升,低的电芯则越来越“懒”,整个电池组的可用容量被短板电芯锁死。实际项目里,一组两串磷酸铁锂电芯用不到半年,压差从初始的5mV慢慢拉到50mV以上是很常见的事。
如果只做被动均衡(电阻放电),高压电芯的能量会被白白烧成热,均衡电流一上去板子就烫手,而且低电芯永远等不到能量补充。对于储能和备用电源这种讲究能量效率的场景,主动均衡明显更合适:把高电芯的电荷搬到低电芯,能量不浪费,热损耗小,均衡速度也可以做高。
1.2 均衡拓扑怎么选:电感式双向搬移是最务实的起点
主动均衡电路常见的有三种思路:
- 开关电容式:电荷在电芯之间通过电容来回倒,控制简单,但均衡电流受电容容量限制,效率一般,适合小电流场景。
- 变压器式:用多绕组变压器把能量从单体搬到母线或邻近单体,隔离性好,适用于很多串的电池包,但变压器设计复杂、成本高、漏感需要仔细处理。
- 电感式双向升降压:相邻两节电芯之间放一个电感,通过开关管交替导通,实现能量从高压侧流到低压侧,像一台小型的buck-boost变换器。控制灵活,均衡电流可以设计得比较大,效率也能做到九成以上。
我们只有两串电芯,用变压器是杀鸡用牛刀,开关电容的效率又不够理想。电感式双向搬移是最合适的:一颗电感、一对MOSFET、一个控制芯片就能构成完整的功率路径,主控只需要给出PWM或使能信号,系统简单也容易调。
1.3 为什么选定MP2642GR-Z做功率级,TM4C123GH6PZL做控制大脑
先说MP2642GR-Z。这是一颗专门用于电池均衡的芯片,内部集成了所需要的开关管和同步整流逻辑。我接触过的这类均衡IC通常只需要在外围接一颗功率电感和少量的电阻电容,就能搭出一个双向升降压的功率级。有些版本的芯片还支持直接通过PWM引脚控制平均电流,这意味着MCU可以根据当前压差灵活调节均衡速率,而不是只能“开”或“关”。当初选它,主要是看重三点:外围元器件少,功率部分不用自己画MOSFET驱动和死区逻辑;均衡电流可以做够大,数据手册给的典型值足够把几十毫伏压差在合理时间内抹平;芯片本身的静态功耗控制得比较好,挂在电池组上长年待机也不会把电芯拖垮。
TM4C123GH6PZL是Cortex-M4F内核的MCU,带浮点运算,主频80MHz,外设丰富。我们真正用到的是它的12位ADC、PWM模块、UART和一个定时器。这颗芯片的ADC可以做多次采样并取平均,用来读取两节电芯的电压;PWM模块可以用软件配置频率和占空比,用来调节均衡电流;UART用来对外上报状态,方便我在调试时实时观察数据。100脚LQFP封装也够用,后面就算扩展温度采集、风扇控制、通信接口,资源也不紧张。
两串电池当中有三个电压节点:正极、中点、负极。MCU要采集的其实是每节电芯单独的端电压,中间的公共节点是共地参考点。整片板子用TM4C123GH6PZL做控制,等于用一颗成熟的通用MCU替换掉那些封闭的专用均衡方案里的黑盒逻辑。调试时改策略、调阈值、看波形都方便,这是我在方案选型时最看重的。
2. 硬件电路设计要点:从功率级到采样链路
2.1 MP2642GR-Z外围配置与功率电感选型
在布局时,MP2642GR-Z两端跨接在Cell1和Cell2之间:芯片的一侧连接第一串电芯的正负极,另一侧连接第二串电芯的正负极,中间通过一颗电感连接。工作的时候,如果Cell1电压高于Cell2,芯片内部开关管按某种占空比交替动作,先把能量存入电感,再把电感里的能量搬到Cell2那边,等效于一个降压-升压变换器。
电感选型是这个环节的重点。我用的是一颗10uH的功率电感,额定饱和电流至少要大于均衡电流峰值的1.3倍。假如目标均衡电流是500mA,峰值电流可能要跑到1A左右,那么电感的饱和电流至少选1.5A。再留一点裕量,最后选了饱和电流2A左右的型号。DCR也不能太大,否则大电流均衡时电感自己发热,效率掉得很快。当时实测,一颗DCR 80mΩ的电感在500mA平均电流下大概会有20mW的铜损,虽然不算大,但散热不好的话板子温度还是会慢慢升。
还要注意电感旁边的电容摆放。MP2642GR-Z的输入端和输出端都需要高频去耦电容,这两个电容要尽量靠近芯片的电源引脚,否则开关节点的高di/dt会在环路电感上产生压振,轻则EMI超标,重则芯片误动作。我在第一版布局时把去耦电容放得远了3mm,结果空载时芯片附近能测到明显的振铃,后来挪到紧贴封装才解决。
芯片的使能引脚控制均衡是否工作,这个引脚一定要接MCU的GPIO,并且加上下拉电阻默认拉低。不然上电瞬间如果芯片默认使能,均衡电路还没等MCU初始化就开始搬能量,板子上电瞬间的电流冲击很难看。调试阶段我踩过这个坑,后面会专门讲。
2.2 TM4C123GH6PZL的电压采样链路设计
TM4C123GH6PZL的ADC是12位的,参考电压我们使用3.3V。单节磷酸铁锂电芯的电压范围大概在2.5V到3.65V,如果直接采样,最高3.65V已经超过ADC满量程3.3V,肯定不行。所以要用电阻分压,把电芯电压按比例缩小到ADC可以接受的范围内。
我用的分压比是:上电阻180kΩ,下电阻100kΩ,分压系数约为100/(180+100)=0.357。3.65V的电压经过分压后大约是1.30V,在ADC量程范围内;2.5V时大约是0.89V。12位ADC的分辨率是3.3V/4096≈0.806mV,折算到电芯侧要除以分压系数,大约为2.26mV。这个分辨率对电池均衡控制来说够用了,配合软件滤波还能进一步提高有效分辨率。
分压电阻的精度不能忽略。普通5%贴片电阻的温漂和初始误差会导致两路采样通道的系统误差不一样,本来电芯没差异,采样电路却能“测”出十几毫伏的差异,那均衡策略就乱套了。我换成了0.1%精度的低温漂电阻,并且在实际软件里加了校准环节。
采样链路还要加一级RC低通滤波。开关节点带来的纹波如果不滤掉,ADC采出来的是带毛刺的电压,均衡判断就会频繁抖动。我在每个ADC输入引脚前放了一个100Ω电阻和100nF电容组成的一阶低通,截止频率约16kHz,位置尽量靠近MCU引脚。加完之后,ADC读数的峰峰值抖动从七八个码降到两三个码。
2.3 均衡电流检测、上电时序与安全保护
为了知道均衡过程到底搬了多少电荷,需要在功率路径里放一个采样电阻。我选的是10mΩ的合金电阻,配合运算放大器放大50倍,MCU的ADC就能读到对应电流。500mA均衡电流在10mΩ电阻上产生5mV压降,放大50倍后是250mV,ADC分辨率足够。
运放电路要选低失调电压的型号。我刚开始用了一颗普通运放,失调电压就有几个毫伏,折算到采样电阻上相当于几百毫安误差,电流闭环根本稳不住。换了一颗低失调运放之后,零输入时输出基本在1mV以内,换算成电流误差大约是2mA,可以忽略。
上电时序也要想清楚。系统给电瞬间,TM4C123GH6PZL的GPIO还处于复位状态,这时如果MP2642GR-Z被意外使能,可能会在MCU初始化完成之前就开始均衡。我的做法是:使能引脚通过MCU GPIO控制,GPIO默认配置为输入下拉;另外整个均衡电路供电受一个MOSFET开关控制,这个开关的导通信号必须等MCU初始化完成后才拉高,等于给功率级加了一把锁。
保护方面,我加了断线检测逻辑。如果采样点发现某节电芯电压异常低,比如低于2.0V,大概率是采样线松动或者电芯保护板断开,这时绝对不能启动均衡,否则从另一节电芯往这边硬搬能量,可能造成危险。软件里做了三秒连续异常判定,满足条件后关断均衡并置故障标志。
3. 均衡算法与软件实现:判据、状态机与采样工程
3.1 电压均衡还是SOC均衡:两串系统里怎么选
业内讨论均衡策略时经常说两个流派:电压均衡和SOC(荷电状态)均衡。
电压均衡的出发点很简单:让两节电芯的端电压一致。优点是实现容易,数据链路上只需要电压采样;缺点是在磷酸铁锂这种平台电压很平的电芯上,电压差不能准确反映SOC差。放电到中段的时候,3.30V和3.32V对应的SOC可能只差一点,也可能差不少。均衡方向还可能做反。
SOC均衡需要估算每节电芯的荷电状态,常见的方法包括开路电压查表法、安时积分法、卡尔曼滤波法。在两串系统里做SOC均衡,硬件要多加电流检测,软件要维护一个SOC状态变量并定期校准,复杂度上了一个台阶。
最终我选的是“电压为主、SOC为辅”的混合策略:正常情况下用开路电压或轻载电压差做均衡判据;只有在充电末端和放电末端这种电压平台陡峭的区间,才切换到SOC判据,防止在磷酸铁锂平台区做错方向。因为我主打的场景是备用电源,电芯大部分时间处于浮充或静置状态,这时候端电压差和SOC差的相关性比动态工况下好很多,电压均衡的效果是够用的。
后续如果想扩展,可以在同样的硬件上继续迭代SOC算法,TM4C123GH6PZL的浮点运算能力足够跑一个简单的卡尔曼滤波器。
3.2 软件状态机与均衡控制流程
整个控制程序我用一个状态机来组织,总共五个状态:
- IDLE:系统空闲,定时测量电压,判断是否需要均衡。
- PRE_CHARGE:开始均衡前的预充电阶段,先使能功率级,以小电流建立工作点。
- BALANCING:正式均衡,根据压差动态调节均衡电流和方向。
- COMPLETE:压差进入死区并且维持一段时间,停止均衡,回到IDLE。
- FAULT:故障锁定,需要外部复位或上位机指令才能解除。
状态迁移的触发条件都加了滞回逻辑。比如启动均衡的电压差阈值是20mV,停止阈值是5mV。这样系统不会因为电压微小的波动在IDLE和BALANCING之间反复跳,否则继电器和功率管会磨坏,电芯的平衡点也无法稳定。
均衡方向判断也做了保护。程序每100ms读一次两节电芯的电压,做三次滑窗平均之后比较大小。为了防止负载波动把方向颠来倒去,进入均衡状态后,方向一旦确定,至少要维持五秒不变,除非检测到电压反转超过30mV。
均衡电流的控制采用简单的PI闭环。目标电流根据压差查表获得:压差小于10mV时目标电流100mA,压差10到30mV时300mA,压差大于30mV时500mA,并且限制最大不超过600mA。PI参数在实测时调的kp=0.8,ki=0.05,输出限幅在20%到80%之间。TM4C123GH6PZL的PWM输出频率我设在100kHz,通过改变占空比控制芯片的电流指令。
3.3 ADC采样、滤波与校准工程
采样质量直接决定均衡逻辑是否靠谱。TM4C123GH6PZL的ADC有多个通道,我在FIFO模式下连续采集16次,去掉最高和最低各两个数,对剩余12个取平均,等效抑制开关噪声和工频干扰。这样处理之后,电压读数短期稳定度可以做到±1mV以内(折算到电芯侧)。
校准环节花了比较多心思。分压电阻和ADC参考电压都有初始误差,不校准的话,两节电芯明明一样,系统却会以为差了20mV。我在生产测试流程里加入两点校准:用高精度可调电源分别输出一个低电压(比如2.8V)和一个高电压(比如3.5V),读取ADC原始值,计算每路采样链路的斜率和偏移,存入MCU的Flash。这样实际运行时软件对每个采样值做一次线性修正。
温度补偿也要考虑。备用电源的工作环境温度可能从-20℃到55℃。分压电阻的温漂即使标称0.1%,在极端温度下也会引入一些误差。我的方案是在电芯附近放一个温敏电阻,MCU根据温度查表修正采样系数。实测效果不错,温度变化10℃,电压读数漂移控制在3mV以内,对于均衡控制来说足够了。
4. 从原理图到实物:调试过程与实测记录
4.1 上电前的检查清单与各模块独立调试
我习惯先把板子分成几个独立模块调通,再联调。首先是MCU最小系统:烧一个最简单的点灯程序,确认晶振起振、仿真器连接正常、GPIO输出正常。然后是采样电路:接上两节电芯的模拟电压(用可调电源代替),读ADC数值,对比万用表读数,检查分压比是否正确、滤波是否有效。
接着调PMIC部分。先不给MP2642GR-Z使能,确认芯片供电电压正常、使能引脚为低电平、电感和电容焊接无误。用示波器看开关节点ST,应该没有任何动作波形。然后在使能引脚上手动加一个3.3V电压,观察均衡电流是否出现、方向是否正确。这里强烈建议第一次上电时用限流电源给整板供电,并且在均衡电流路径串联一个电流表。
我第一次上电时就发现了问题:手动使能之后,均衡电流只有几十毫安,跟目标500mA差得远。查下来发现是电感的DCR偏大,加上PCB走线过长,环路阻抗高,功率级根本跑不到设计电流。后来换了更粗的走线、更短的电感布局,电流才上来。
4.2 实测一:静置工况下的电压均衡过程
下面是我记录的一组实测数据。两节标称20Ah的磷酸铁锂电芯,初始端电压分别是3.312V和3.392V,压差80mV。MCU上报的SOC估算结果大约差了4%。启动均衡后,目标电流设定为500mA,整个过程持续了约35分钟。
| 时间(分钟) | Cell1电压 | Cell2电压 | 压差 |
|---|---|---|---|
| 0 | 3.312V | 3.392V | 80mV |
| 10 | 3.318V | 3.386V | 68mV |
| 20 | 3.326V | 3.377V | 51mV |
| 30 | 3.337V | 3.365V | 28mV |
| 35 | 3.345V | 3.357V | 12mV |
可以看到电压差是逐步收敛的,而且越接近终点收敛速度越慢,这是因为电芯极化效应越来越明显。我把电压差降到5mV以下的关断阈值,然后系统进入COMPLETE状态。整个过程中均衡电流一直在500mA以下,功率级表面温度用手摸只是温温的,不烫。
关于均衡时间,可以做一个粗略估算:20Ah电芯压差80mV,按磷酸铁锂平台区近似相当于SOC差4%,也就是需要搬移0.8Ah电量。用500mA电流搬移这些电荷,理想情况下需要约96分钟。我实测35分钟内压差从80mV降到12mV,看起来比估算快很多,原因是电压差并不完全等于SOC差,随着电压接近,SOC差也在变小。但从能量守恒来看,后面半段的小压差对SOC的影响已经很小了。
4.3 实测二:充放电工况下的策略切换
备电系统比较特殊的工况是充电末端。充电器给两串电池组充电时,由于电芯内阻不同,可能出现一节电芯已经到3.6V、另一节还在3.5V的情况。如果不做干预,高压电芯会过充。
我在充电工况下做过一次完整测试。充电电流10A,两节电芯电压开始同步上升,到高压区后差值逐渐拉大。当压差超过50mV且高压电芯电压超过3.55V时,程序自动把均衡目标改为“限制高压电芯电压”,以点动方式小电流放电把高压电芯的能量搬到低压电芯,同时降低高压电芯的净充电电流。这样做的好处是充电器端的充电电流可以继续维持,低压电芯也能充得更满。
放电工况正好相反,程序要防止低压电芯被过度放电。当低压电芯电压落到2.8V以下时,不再做均衡,因为此时即使把高压电芯的能量搬过去,也改变不了短板效应,反而增加系统功耗。我把这个场景定义为“均衡退出区”,状态机里专门做了处理。
还有一个细节值得说:放电冲击负载时,电芯电压会有瞬时跌落。如果此时只看到电压差就启动均衡,等于在往一个正在放电的低压电芯里硬灌电流,会造成额外的压降波动。我的处理是在大电流放电期间暂停均衡,等负载恢复稳定后再重新判断。
5. 常见问题与排查技巧实录
5.1 实测中碰到的几个典型问题速查
我把调试过程中遇到的问题整理成一张表,后面再做类似项目可以直接对号入座。
| 现象 | 可能原因 | 排查和解决思路 |
|---|---|---|
| 均衡电流达不到设定值 | 电感饱和电流不够或DCR过大;PCB走线长导致环路阻抗高;芯片使能后工作频率不对 | 换低DCR、高饱和电流电感;加粗功率走线;用示波器测芯片开关节点ST波形,确认开关频率是否正常 |
| 上电瞬间均衡自动启动 | 使能引脚悬空或默认电平不对;MCU复位期间GPIO输出状态不受控 | 使能引脚强制下拉,功率级供电加MOSFET开关,等MCU初始化完成后再接通 |
| 电压采样读数跳动超过5mV | 采样电阻分压后的RC滤波不够;ADC采样时机没避开开关噪声;参考电压不稳 | 加大RC低通滤波;ADC采样与PWM同步,在开关周期尾部采样;检查3.3V参考源的纹波 |
| 均衡方向反复翻转 | 电压滞回阈值设置太小;采样噪声导致误判 | 增加滞回窗口;均衡方向锁定时间加长到5秒以上 |
| 电芯电压已经相等但均衡仍不停 | 停止阈值设置过低,系统在死区边缘抖动 | 把停止阈值提高并加时间条件,比如压差小于5mV持续30秒才停 |
| 均衡电路发热严重 | 电感铜损大;开关频率不合适;芯片驱动死区设置不当 | 测功率级在目标电流下的效率,调整PWM频率和占空比;检查功率路径所有焊点 |
5.2 折腾完这套方案后总结的几条经验
第一条是关于“均衡电流不是越大越好”。很多人看到主动均衡就觉得电流越大越爽,实际上均衡电流大了,电芯极化也会增加,可能导致电压测量的有效值偏离真实开路电压。再说了,均衡过程本质是把电荷从一边搬到另一边,搬太快意味着功率级应力大、发热大,对电芯寿命未必有利。我最后把最大均衡电流限制在600mA,这个值对于20Ah电芯来说是一个非常保守的0.03C,但对备用电源这种不追求秒级均衡速度的场景最合适。
第二条是“采样参考地的处理一定要干净”。两串电池的中点是整个系统的参考地,但也是功率电流回到电芯的路径。如果采样分压电阻的下端直接接功率地,开关电流会在参考地上产生压降,导致ADC读到的电压带上毛刺。我最后把模拟地单独走了一小段,从电芯中点用一条细线直接连到MCU的模拟参考地引脚,功率地则走另外一条粗线回电池,两边只在电芯中点一点相连,问题就消失了。
第三点是“软件校准远比换更贵的电阻划算”。高精度电阻当然不错,但一整条采样链路里还有ADC参考电压的误差、运放的偏置,这些都不是换电阻能解决的。与其把所有器件都换上一档,不如老老实实写一个校准例程,在产线上花十秒钟采集两个点,把斜率和偏移存下来。实测校准之后,整条链路的绝对误差从原来的30mV降到3mV,效果立竿见影。
还有一个建议给准备复刻这个方案的朋友,在刚开始搭实验板的时候,尽量把电压采样点、使能控制信号、电流采样信号都引到测试排针上,别急着做得很小很集成。调试高频功率电路的时候,示波器探头和万用表表笔需要一个方便下手的地方。两边都封闭的板子,出了问题只能拿放大镜找,效率太低。
5.3 后续可以怎么扩展
这套两串均衡的方案做完之后,模块化扩展的思路已经很清楚了。多个两串模块可以级联,做成四串、六串、八串系统。每两串共用一个MP2642GR-Z做功率级,TM4C123GH6PZL可以管理多路均衡器,或者每个模块放一颗MCU,模块之间用UART/CAN通信。我目前已经在预留这样的扩展接口。
再往后还可以加蓝牙或Wi-Fi模块,把每节电芯的电压、温度、均衡电流实时上传到手机或上位机查看。我在调试阶段就是靠串口把数据打出来,边跑边看,后来觉得还是要有个可视化界面才能及时发现异常。等整个系统跑稳了,我考虑做一个简单的网页端监测界面。
还有一点值得思考的是把均衡和充电器的管理统一起来。现在充电器是独立设备,均衡器只做被动干预。如果后续做一体化设计,让MCU同时控制充电电流和均衡电流,就能做到真正的“充放均衡一体化”,充电末端的高压电芯限压过程会更加平滑,整个电池组的寿命也会更长。这个方向目前已经有一些方案在做,但可玩性还很高。