ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

2S电池主动均衡方案:开关电容芯片与MCU协同实现电压一致性

2S电池主动均衡方案:开关电容芯片与MCU协同实现电压一致性

做备用电源和储能系统维护的人,应该都遇过这种头疼事:明明装的是同一批次的新电池,用了一段时间后,两节串联电池的电压就开始“分道扬镳”。尤其在一些只有两节电池串联的小型后备电源、储能采集终端、应急照明系统里,电池不一致导致的容量衰减、充不满电、甚至保护板提前锁死,几乎是最常见的故障来源。

这篇文章要聊的,就是一套我实际调试过、目前已经在某个模拟项目X里稳定跑起来的方案:用MP2642GR-Z这颗开关电容均衡芯片作为能量搬运核心,配合MK20DX128VFM5这颗Cortex-M4内核的MCU做智能控制,实现两个串联电池单元的电压均衡。我会把这套方案从为什么需要均衡、芯片选型逻辑、硬件设计参数、软件状态机、实测数据到调试踩坑完整拆开,直接给你一份可以抄作业的工程参考。

1. 这类系统为什么需要均衡:从串联不一致说起

1.1 两个电池单元的不一致从哪来

很多人以为,均衡只是“把两节电池电压调成一样”,其实事情没那么简单。两个串联电池单元在出厂时就算标称容量一致,实际工作一段时间后也会慢慢拉开差距。造成这种差异的原因主要有三个维度:

制造误差与初始差异。即使是同一批次电芯,内部活性物质的涂布厚度、电解液浸润程度、隔膜阻抗也会有微小差别。这些差别在出厂时可能被筛选工序压得很低,但随着充放循环累积,容量衰减速率不一样,差异就会逐渐放大。

工作温度场的差异。这是最容易忽略的一点。两个串联电池在模组里的位置不同,散热条件就不同。靠近发热器件的那节电池长期工作在更高温度下,老化速度会明显更快。温度每升高10度,锂离子电池的副反应速率会成倍增加,这直接导致相邻两节电池的老化速度不一样。

自放电率与内阻漂移。每节电池的自放电率不可能完全一致,长期静置时电压下降速度也不同。至于内阻,它会随着老化和温度变化,两节内阻不一致时,充放电瞬间在电池内阻上产生的压降也不一样,表现出来就是动态压差。

用生活化的类比来说,双胞胎出生体重差不多,但一个爱吃辣一个爱喝醋,几十年后身体状况肯定不一样。电池也是这样,表面上初始一致性很好,但工况不同、环境不同,最终一定走向“不一致”。

1.2 不均衡在储能和备用电源场景下的后果

如果只是相差几十毫伏,系统可能还能忍,但如果不加干预,后果会一步步严重。

可用容量由“短板”决定。两节电池串联,充电时电压高的那节先到截止电压,充电结束;放电时电压低的那节先到截止电压,放电结束。整个电池组的可用容量永远被状态更差的那节电池绑架,另一节电池的一部分容量永远用不上。

备用电源浮充场景更麻烦。备用电源大部分时间处于浮充或满电待机状态。落后的那节电池因为电压偏低,在浮充过程中始终没有得到充足的充电,长期处于“欠充”状态。对铅酸电池来说会加速硫酸盐化,对锂电池来说会加剧容量衰减和析锂风险。这就形成了一个负循环:越不均衡,越充不满;越充不满,越加速劣化。

安全隐患不可忽视。当两节电池压差过大时,串联充电时高电压那节电池可能被过度充电,导致内压升高、热失控风险增加。放电时低电压那节可能被过度放电,导致正负极结构不可逆损伤。在无人值守的备用电源场景里,这些隐患往往要等到设备故障才会暴露,维修成本极高。

所以,均衡不是可有可无的“加分项”,而是串联电池组可靠性和寿命的关键保障。尤其是2S这种最基础的串联结构,因为只有两节电池、均衡拓扑相对简单,做主动均衡的性价比非常高。

2. 方案选型拆解:为什么是“专用均衡芯片 + 通用MCU”

2.1 MP2642GR-Z的硬件均衡思路

MP2642GR-Z这颗芯片,我理解它的定位是一颗面向2节串联电池的开关电容均衡器。所谓开关电容,你不需要去研究它内部半导体级的细节,它的工作原理可以这样理解:芯片内部有一个受时钟控制的开关网络,外配一到两颗飞跨电容。开关轮流导通,先把高电压电池的一部分电荷装进电容,再把电容切到低电压电池那一侧,把电荷倒进去。

这个过程就像用一个小水桶在两节电池之间反复舀水、倒水。每一次开关动作搬运的电荷量等于电容容值乘以两节电池的电压差:

[ Q = C_{fly} \times \Delta V ]

所以开关频率越高、飞跨电容越大、压差越大,单位时间搬运的电荷就越多,均衡电流就越大。这个特性有几个很实用的好处:均衡电流随压差自动衰减,压差大时快速拉平,压差小时平稳收尾,不容易出现过冲和振荡。能量搬运效率高,不像电阻耗散均衡那样把高出的能量白白烧成热,适合储能和备用电源这类对效率和温升有要求的场景。

在这套方案里,我把它当作一个“功率级执行器”,它负责干脏活累活:开关电容网络、电荷搬运、电流整形、内部保护。而它什么时候干活、干多久、是否中止,全部由外部MCU说了算。

2.2 MK20DX128VFM5到底负责什么

MK20DX128VFM5是一颗Cortex-M4内核的MCU,主频可以跑到120MHz。在电池均衡项目里,它不需要干太复杂的计算任务,但它有几个优势非常适合这个场景:

片内ADC精度够用。它内部集成高精度ADC,可以配置成单端或差分模式。这意味着我不需要额外加一颗专用的电池监测AFE芯片,直接用片内ADC配合分压网络,就能满足单节电池电压采样需求。这么做的好处是BOM成本低、布局简单。

外设丰富且低功耗模式完善。备用电源系统长期处于待机状态,MCU大部分时间应该休眠。MK20系列带有多种低功耗模式,可以定时唤醒,采样一次、均衡一次,再睡回去。这套工作节奏对备用电源的静态功耗指标非常友好。

运行效率足够。均衡策略本身就一个状态机加上几个比较阈值,128KB Flash里可以轻松放下均衡控制、故障记录、通信协议栈,甚至还能预留一部分空间做上位机调试接口。

在这套组合里,MK20DX128VFM5就是“大脑”,MP2642GR-Z是“手脚”。大脑负责判断该不该均衡、均衡多久、有没有异常;手脚负责实际搬运能量。

2.3 对比耗散式与电感式均衡的取舍

均衡方案无非三大类:电阻耗散均衡、电容电荷泵均衡、电感转换均衡。

电阻耗散最简单也最便宜,就是给每节电池并联一个功率电阻和开关,把高电压电池多余的能量直接发热消耗掉。这套方案的控制极其简单,但有两个致命缺点:效率为零、发热严重。在储能系统里,能量本身的损失是钱,而热量还要额外花成本去散掉。备用电源设备常常被塞在密闭的机箱里,散热条件很差,电阻耗散会把机箱温度抬高,进一步恶化电池环境。

电感式均衡效率最高、均衡电流可以做得很大,但电路复杂、器件成本高,还要考虑电感选型、续流二极管、控制环路稳定性。对于2S这种小规模结构,用电感方案属于“杀鸡用牛刀”,成本和复杂度都不划算。

MP2642GR-Z这类开关电容方案正好卡在中间。效率远高于电阻耗散,电路复杂度远低于电感方案,而且因为是电荷搬运而不是能量转换,没有磁性元件,EMI也好控制一些。在小規模串联、低电流均衡场景下,我认为它是综合性价比最高的选择。

3. 硬件设计要点与关键参数计算

3.1 采样链路设计:分压、滤波与ADC配置

均衡控得准不准,第一步是测电压测得到底准不准。这里我遇到过一个典型的坑:直接用两个分压电阻把电池电压分到ADC输入范围,然后ADC读出来的数值跳得厉害。问题通常出在三个地方:分压电阻的精度不够、采样瞬间的RC充电时间不够、ADC参考电压不稳。

分压电阻我建议用精度不低于1%的低温漂电阻。两节串联的电池总线电压最高能到8.4V左右,单节满电4.2V。如果分压比是2:1,那么单节电压映射到ADC输入端大约是0到4.2V,有些MCU的ADC参考电压只有3.3V,还需要再分压一次。实际项目里我会在分压电阻后面加一个RC低通滤波,同时和芯片内部ADC的采样电容构成一个充放电过程。RC时间常数不能太大,否则采样保持时间不够,读出来的电压会偏低;也不能太小,否则高频干扰会进来。经验取值一般是R取100k级别,C取0.1uF级别,采样之前先给足够时间让电容稳定。

采样通道别直接复用。如果你只有一个ADC模块,需要分时采集两节电池电压,要注意两次采样之间的通道切换和建立时间。我在项目里做了这样一个处理:每路采样通道对应一个独立的RC滤波网络,ADC配置成16位、单次转换模式,每次采集后先丢弃第一次结果,再连续采样8次取平均。这样做之后,静态压差读数稳定度从正负8mV改善到正负2mV以内。

3.2 均衡电流、电容选型与PWM控制参数

MP2642GR-Z的均衡电流大小,主要由开关频率、飞跨电容和两节电池压差三个因素决定。我项目里用的飞跨电容是两颗2.2uF的X7R陶瓷电容,并联后等效约4.4uF,开关频率跑在几百kHz级别。在这个参数下,压差在100mV时实测均衡电流大约在350到380mA,随着压差减小,电流逐渐降低。

这个自动衰减的特性其实很好用。假设压差降到20mV,均衡电流也降到几十毫安,系统在接近目标的时候自然变得温和,不需要额外做一个高精度的PWM闭环去防止过冲。

如果你希望更精确地控制均衡电流,可以把使能引脚接MCU的GPIO,用PWM信号控制使能开关,通过调整占空比来调整平均均衡电流。我在调试初期就这么干过,主要是为了观察不同电流下的压差变化曲线,后面定型版本为了简单就直接全开使能,靠芯片自身的压差衰减特性收尾。

以下参数是我这个项目里实际使用的设计目标,具体到你自己用的芯片批次,还是要以数据手册的实测推荐为准:

设计项参数选择备注
飞跨电容两颗2.2uF X7R并联选择低ESR型号,布局时尽量靠近芯片引脚
开关频率几百kHz级由芯片内部时钟决定,外部电容调整
均衡使能控制GPIO PWM或固定高电平固定高时均衡电流更大
均衡目标压差停止阈值10~15mV回滞设计,防止频繁启停
MCU采样周期500ms一次每次采样取8次平均

3.3 保护电路与安全留量

均衡电路作为电池系统的一部分,保护措施不能省。我在设计里做了四层保护:

过压/欠压保护。单节电池电压高于4.2V或低于2.5V时,MCU直接禁止均衡动作。原因很直接,过压状态下继续均衡可能触发电池保护板,欠压状态下继续搬运电荷可能让落后电池进一步过放。

均衡超时保护。软件里设定一个最大均衡时间(比如6小时),到达时间后无论压差是否收敛都强制停止。防止因为电压采样异常或者芯片故障导致长时间持续均衡,把整个电池组的电搬空。

温度保护。在电池模组表面贴一个NTC,温度高于45度时降低PWM占空比,高于55度时停止均衡,等温度降下来再恢复。

芯片状态引脚的读取。如果MP2642GR-Z有故障输出引脚,接在MCU的GPIO上,一旦检测到芯片内部过温或异常,立刻切断使能。

PCB布局上有一个血泪教训:飞跨电容到芯片引脚的走线要尽量短而宽,走线电感会影响开关电容的实际搬运效率。我第一次打板时图省事,把飞跨电容放得有点远,结果实际均衡电流比理论少了三成。后来把电容挪到紧贴芯片的位置,电流才提上来。

4. 软件实现:状态机、控制策略与代码骨架

4.1 三段式均衡策略

均衡不能不分场景无脑开。同样的压差,在静置状态和充电状态需要的处理方式完全不同。

静置均衡。电池组没有充放电电流,电压读数最能反映电池真实状态。这是最合适的均衡窗口。备用电源系统大部分时间其实是静置待机,所以静置均衡是主力模式。

充电均衡。充电过程中,电池极化现象会让电压读数偏高,尤其是临近满电的时候。充电均衡不能等压差已经拉大再去处理,而是在充电中段就开始做“动态干预”,防止充满时出现某一节先顶到截止电压。

放电均衡。放电时如果压差过大,落后电池很容易被提前拉低到欠压保护值。放电均衡的意义不是把电压拉平,而是尽量延长落后电池的放电时间,让整个电池组放出更多容量。但要注意电流方向,高速放电时均衡电流相对微弱,不要指望均衡能解决所有问题。

我实际用的策略是:系统上电后先静置采样30秒,待电压稳定后再判断是否启动均衡。启动条件有两个:压差超过25mV、平均电压落在3.0V到4.1V安全窗口内。停止条件也有两个:压差低于10mV或者均衡超时。

4.2 核心控制流程与代码骨架

均衡主循环其实非常简单。我直接贴一段在项目里用的骨架代码,去掉了具体寄存器操作,只保留逻辑主干:

#define EQ_START_THRESHOLD_MV 25 #define EQ_STOP_THRESHOLD_MV 10 #define EQ_TIMEOUT_SEC 21600 typedef enum { ST_IDLE = 0, ST_SAMPLING, ST_EQUALIZING, ST_FAULT } sys_state_t; static sys_state_t state = ST_IDLE; static float cell_v[2]; static bool eq_enabled = false; static uint32_t eq_start_timestamp = 0; void equalizer_task(void) { float diff; switch (state) { case ST_IDLE: /* 定期采样,判断是否启动均衡 */ if (read_cell_voltages(cell_v, 8) == 0) { diff = fabsf(cell_v[0] - cell_v[1]); if (diff > EQ_START_THRESHOLD_MV && average_cell_voltage() < 4.1f && average_cell_voltage() > 3.0f) { eq_enable(); /* 拉高使能引脚 */ eq_start_timestamp = get_tick_sec(); state = ST_EQUALIZING; } } break; case ST_EQUALIZING: diff = fabsf(cell_v[0] - cell_v[1]); if (diff < EQ_STOP_THRESHOLD_MV || get_tick_sec() - eq_start_timestamp > EQ_TIMEOUT_SEC) { eq_disable(); state = ST_IDLE; } break; default: eq_disable(); state = ST_IDLE; break; } }

代码里最需要注意的地方是read_cell_voltages这个函数。它不能在一次读取后就立刻返回平均值,中间必须有滤波处理。我推荐的做法是:先读一次丢弃,再连续读8次,去掉最大值和最小值,剩余6次求平均。这样能同时抑制高频噪声和偶尔的毛刺。

4.3 低功耗设计与看门狗策略

备用电源系统对静态功耗非常敏感,均衡板不能一直全速跑着。我设计的功耗方案是:系统大部分时间进入MCU的低功耗停止模式,只开一个1秒周期的定时唤醒,醒来后花50毫秒完成电压采样和均衡判断,然后继续睡。

这种情况下,均衡并不是“一直开着”,而是“按需打开”。一旦满足启动条件,MCU从低功耗模式切换到正常运行模式,持续均衡,直到压差收敛再睡回去。实测下来,整个均衡板在不做均衡时静态电流可以控制在十微安级别,对电池组几乎没有额外负担。

看门狗也很有讲究。带均衡功能的后备电源板子,如果没有看门狗,一旦MCU跑飞,均衡可能一直开着不关,后果不堪设想。我的做法是:看门狗周期1秒,主循环里只在状态机完整运行一圈后喂狗。特别注意不要在低功耗休眠期间长时间不喂狗导致误复位,所以唤醒中断服务程序里要先清一次看门狗再进主循环。

5. 实测数据与效果复盘

5.1 测试平台与初始条件

我的测试平台用的是两节某品牌的磷酸铁锂电芯,单体容量50Ah,标称电压3.2V,满电电压3.65V。因为磷酸铁锂的放电平台很平,电压差对容量差极其敏感,也更能检验均衡策略的效果。

上电后我先记录了下初始状态:两节电池的开路电压分别是3.312V和3.200V,压差112mV。这个压差已经超过普通保护板上常见的均衡启动阈值,属于比较严重的不均衡状态。电池温度25度,均衡板供电正常。

5.2 实测均衡过程中的压差变化

测试过程中,均衡使能一直保持开启。我每半小时记录一次两节电池的压差和均衡电流:

测试时间压差(mV)均衡电流(mA)备注
0h112350初始状态
0.5h88310快速拉平阶段
1h67230压差减小,电流自动下降
2h39120均衡进入平稳期
3h2470电流进一步减小
4h1545接近停止阈值
4.5h1235主动停止均衡

4.5小时后压差收敛到12mV,我按策略停止了均衡。这个过程中温度从25度上升到31度,芯片温升可以接受。整体均衡时间虽然不算特别快,但考虑到这是一个50Ah的大容量电池组,压差从112mV收到12mV只用了4个多小时,效率还是不错的。

5.3 数据复盘:理论计算与实测差异原因

按照理论估算,如果平均均衡电流一直是350mA,把112mV压差拉到10mV需要搬运的电量大约1.7Ah,时间约5小时。实测用了4.5小时,比简单估算快一些,原因是初期的压差大、均衡电流高,搬运效率更好。

里面有个非常值得说的现象:均衡停止后,我静置了2小时再测,压差从小幅回弹到了19mV。这并不意味着均衡失败,而是说明这两节电池存在一定的内阻差异。静置后欧姆极化的部分消失,真实电势差暴露出来。后续如果想进一步压低这个回弹值,需要结合电池内阻修正来做容量均衡,不止是拉平当前电压。

另外一个经验是,磷酸铁锂电池静置后的电压回弹比三元锂电池更明显,因为它的电压平台更平缓。所以如果做磷酸铁锂系统的均衡,停止阈值建议放到15mV以下,并且要等静置电压稳定后再判断是否重新启动。我最初把停止阈值设为20mV,导致均衡后刚停不久又重新启动,反复折腾了好几轮。

6. 调试中遇到的坑与排查手册

6.1 电压采样跳变问题

这个坑几乎每个人都会踩。现象是明明电池静置着,MCU读出来的压差忽大忽小,有时候甚至超过50mV,导致均衡频繁启停。

排查顺序是这样的:先排除接触问题,检查采样线插头和电池端子是否牢固;再用示波器看分压电阻后端的电压波形,确认是否有高频毛刺。如果是PCB布局导致的干扰,优化方式是在ADC引脚附近加一个1nF到10nF的高频滤波电容。软件层面也要配合,我最终采用的中值滤波加平均算法,直接消除了大部分误触发。

关键点是RC滤波的截止频率不要设计得太低。有一次我把滤波电容加大到4.7uF,读数倒是非常稳定,但每次采样要等很久才能稳定,拖慢了整个控制周期。后来换回0.1uF,再配合软件平均,效果刚好。

6.2 均衡电流上不去的三个原因

发现压差很大但均衡电流却很小时,按优先级排查三个地方:飞跨电容是否虚焊或容值衰减、芯片到电池的路径上接触电阻是否过大、使能PWM占空比是否被代码限制。

我在调试早期曾经遇到均衡电流只有标称一半的情况,百思不得其解。后来拿放大镜一看,飞跨电容引脚连焊盘上多了一坨锡渣,导致有效容值下降。重新焊接后电流立刻恢复。不要小看这种低级问题,储能设备里的振动环境对焊点和连接器都是一种考验。

另外一个容易被忽略的是电池本身的内阻。如果电池已经严重老化,内阻升高到几十毫欧级别,均衡电流在电池内阻上产生的压降会抵消一部分搬运电压,实际均衡电流会比设计值低不少。这种情况我会先对电池做一次内阻检测,如果恶化严重,均衡的意义已经不大,建议直接更换电池单元。

6.3 备用电源场景下的长期可靠性问题

备用电源设备常年通电、无人值守,均衡板长期挂在电池两端。就算不均衡,均衡芯片自身的静态电流也是电池的额外负担。虽然MP2642GR-Z的静态电流本身很小,但整个板子如果每节电池都并联了分压采样电阻和滤波网络,这部分电流是持续消耗的。

我在设计里专门加了一个“采样网络供电开关”:平时MCU休眠时,分压电阻网络到地的回路通过一颗MOS管关断,只有唤醒采样时才短暂打开。这个细节让整板静态功耗从毫安级别降到了微安级别,可以说对备用电源场景至关重要。

还有一个长期可靠性的坑是均衡记录存储。如果计划做均衡周期统计、电池健康度预估,需要在Flash里保存历史数据。注意不要频繁写Flash,否则会磨损存储介质。我采用的是“均衡事件计数只在停止均衡时写一次,上电启动时读取”,而不是每次采样都写。

6.4 故障排查速查表

故障现象可能原因排查步骤
压差读数跳动超过10mV采样线接触不良、滤波电容失效、ADC参考电压不稳检查接头、更换电容、用万用表对比
均衡启动后电流小于预期飞跨电容虚焊、路径电阻过大、电池内阻偏高重新焊接电容、测量回路电阻、检测电池状态
均衡停止后压差快速回弹电池内阻差异大、停止阈值过高延长均衡时间、使用内阻修正策略
均衡频繁启停停止阈值过低或回滞不足、采样滤波不够加大停止阈值、增加滤波深度
静态功耗偏高采样网络没有断电、低功耗模式未生效检查分压电阻供电回路、确认MCU唤醒条件
均衡超时但压差不收敛某一节电池已严重劣化停止均衡并上报电池维护告警

最后分享一个小经验

均衡这件事,做到最后你会意识到:它本质上不是在和电压较劲,而是在和容量、内阻、温度这三个维度的不一致性较劲。MP2642GR-Z把能量搬过去的动作很简单,但如果MCU背后的策略不够细致,搬了半天也只是治标不治本。我目前这套方案已经解决了大部分备用电源场景里的串联不均衡问题,但后续如果要做更完善的电池健康管理,我建议把均衡事件和电池内阻数据一起记录下来,用几个月的数据去修正均衡策略。那样的话,这个2S均衡系统才能从一个单纯的“电压拉平工具”进化成真正的“电池管理伙伴”。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进