首页 / 资讯中心 / 文章详情

两节串联电池主动均衡方案:从硬件设计到固件调试实践

两节串联电池主动均衡方案:从硬件设计到固件调试实践 ★ FEATURED ARTICLE
两节串联电池我愿称它为储能系统里最容易被低估的部分。你想着反正就两节容量一致性总不至于太差吧真拿 0.5C 循环跑 100 次你就能看到电压差从 20mV 慢慢爬到 200mV 以上。等到 UPS 备电或者小型储能柜里出现“总容量减半”的时候通常不是电池坏了而是两节电池中有一节先到了保护点另一节还藏着电放不出来。这次想聊的就是用MP2642GR-Z做功率级、用MKV44F256VLH16做控制核心的主动均衡方案。它解决的就是储能和备用电源系统里最常见的 2S 串联电池组失配问题在充放电过程中实时把高能量的一节电池往低能量的一节搬运让两节电池的电压和容量尽量保持一致。这篇文章会把硬件设计思路、参数计算、固件状态机、实测踩坑一次讲清楚适合正在做 BMS、储能 PACK、便携备电产品的硬件工程师和嵌入式工程师参考。1. 为什么两节电池也要做主动均衡1.1 串联电池不一致是躲不掉的很多朋友一听到“均衡”两个字第一反应是“那不是十几串动力电池才需要做的事吗”两节电池并联或者串联容量差一点点应该无所谓。真去细究问题远比想象中多。同一批出厂的电芯标称容量 100Ah实际出厂可能在 98Ah 到 102Ah 之间。这种来自制造工艺的离散度只是起点真正的拉开差距在后续使用里靠发热端的一节老化更快自放电大的一节放得更快内阻偏大的一节在放电时压降更明显。串联回路电流相同容量小的那一节会最先被放空容量大的那一节还有余量但整个电池包已经被迫停机。在储能和备用电源场景里这个现象被放得更大。备电系统平时处在浮充状态电池很少做完整充放电循环长时间后各节自放电差异直接变成电压差异。你去看那些用了两三年的小型通信备电模块很多不是电池不行了而是其中一节被过度充电、另一节被过度搁置整体容量被一节的短板锁死。1.2 不均衡带来的三个后果不均衡的后果最直接的是可用容量下降。两节串联电池就像一个木桶容量由最低的那块板决定。第二是充电安全风险容量小的一节在恒流充电阶段会提前到达截止电压如果系统没有精细的充电管理高压侧持续过充会加速正极材料结构破坏极端情况下还会带来热失控隐患。第三是放电侧的欠压误保护容量小的一节放电时电压掉得快实际还有电但保护板已经判定欠压。这些后果在单节电池上完全不存在所以很多人做 2S 小系统时往往只做电压采样和过压欠压保护不做均衡。等批量产品在客户现场跑几个月开始反馈“充电充满但放电时间越来越短”再回头补均衡方案开发成本和售后压力都会大很多。1.3 为什么不用被动均衡方案最简单的均衡方案是给每一节电池并联一个开关和电阻。电压高的那节通过电阻把多余能量发热耗散掉。这种被动均衡成本低、电路简单很多保护板都在用但放到两节串联的备电系统里我有几个顾虑。首先是热问题。一颗 100Ω 的均衡电阻均衡电流只有 30mA 左右几乎看不到收敛效果想提高到 300mA电阻功耗直接到 3W板子上得专门考虑散热和温升。其次是能量浪费本来电池里的能量是稀缺资源在备电系统里每一 Wh 都对应客户电费用电阻发热消耗掉太可惜。第三是均衡速度慢被动均衡只适合充电末端的小压差修正遇到 100mV 以上压差可能要连续均衡几十个小时才有效果。主动均衡不一样。它不是把能量烧掉而是通过开关电源变换电路把高压侧电池的能量“搬”到低压侧电池相当于能量在电池之间流动。两节电池的压差越大搬运效率的收益越明显均衡电流也能设计到 0.5A 甚至更高几分钟到几十分钟就能把明显失配压差修正回来。2. 硬件方案MP2642GR-Z 和 MKV44F256VLH16 怎么分工2.1 MKV44F256VLH16主控不只是一颗 CPU很多初做均衡的人习惯用一颗几块钱的通用 MCU 加一颗专用均衡芯片逻辑简单但灵活性差。这次方案里我用 MKV44F256VLH16 做主控看中的不是简单的“能点灯”而是它能把采样、控制、通信和异常处理都放在一颗芯片里完成。MKV44F256VLH16 是 Cortex-M4F 内核带浮点运算单元256KB Flash足够跑完整套均衡状态机加上通信协议栈。真正关键的是它的 PWM 定时器。做主动均衡这种双向 Buck-Boost 变换需要高频互补 PWM还要带死区控制。用普通 MCU 的定时器当然也能输出 PWM但占空比更新、死区插入、故障刹车这些功能分散在不同外设里代码稍有不慎就会在切换瞬间产生桥臂直通这是非常危险的。另外它的 ADC 通道数量和采样精度也够用。两节串联电池至少需要采集总电压、单体电压、均衡电流、温度这几个信号加上一些辅助通道普通 MCU 往往需要外挂 ADC 或者做通道复用通道切换时序一乱采样值就容易跳。MKV44F256VLH16 的 ADC 可以配置为定时器触发采样采样的节奏和 PWM 周期同步能避开开关噪声最容易出现的时刻这个特性在后面的调试里帮助很大。2.2 MP2642GR-Z承担功率转换的核心动作MP2642GR-Z 在这套方案里的角色是功率级控制。简单说它负责把 PWM 控制信号变成实际驱动 MOS 管的开关动作并完成同步整流逻辑。你可能要问为什么不直接用 MCU 引脚驱动 MOS原因在于电平匹配和驱动能力。MCU 的 I/O 通常只能输出 3.3V 电平驱动能力也就几 mA直驱 LMOS 开关速度慢开关损耗大而且一旦出现米勒平台波形拖尾轻则效率下降重则炸管。MP2642GR-Z 内部集成了驱动级和控制逻辑能把 MCU 输出的占空比指令转换成合适的驱动信号同时提供同步整流控制避免两个 MOS 管在换流期间同时导通。在我搭建的测试板上MP2642GR-Z 被配置为一个双向 Buck-Boost 功率单元中间接一个功率电感两端分别接高压侧电池和低压侧电池。对于两节串联电池高压侧就是 BAT 到中点的电池 1低压侧就是中点到 BAT- 的电池 2。当电池 1 电压高系统让功率单元工作在降压模式把电池 1 的能量灌到电池 2反过来当电池 2 电压高让功率单元工作在升压模式把能量从电池 2 抽回电池 1。MCU 只负责告诉它“目标电流方向和大小”具体怎么稳电流、怎么换向由功率级配合采样反馈完成。这样做最大的优势是主控和功率级的解耦。MCU 出了问题功率级至少能停在安全状态不会出现失控直通均衡电流闭环由模拟环路先压住第一道MCU 再做第二道策略保护比纯软件闭环稳妥一个量级。2.3 采样与保护回路是均衡的眼睛没有精确采样均衡就是瞎平衡。我在板上预留了这样一组信号通道和两张表对应方便后来做的朋友直接查缺补漏。信号名称采样对象作用与备注VBUS总电压判断系统处于充电、放电还是静置状态VCELL1电池 1 正极到中点差分采样精度要求优于 5mVVCELL2中点到电池 2 负极同上注意地参考与 VCELL1 不同IBAL均衡电感电流用于闭环控制和过流保护T1/T2电池表面或 MOS 温度防止均衡过程中局部过热FAULT功率级故障信号硬件级故障锁存MCU 必须优先响应采样布局上有两个细节容易踩坑。一是 VCELL1 和 VCELL2 的地参考不同做差分采样时运放或 ADC 的共模输入范围要留足否则电压一高采样结果非线性得离谱。二是均衡电流采样电阻要放在功率地环路里不是随便串联在电池回路里否则会把负载电流和均衡电流混在一起导致闭环控制逻辑混乱。3. 均衡策略和关键参数计算3.1 双向 Buck-Boost 的基本能量关系主动均衡的本质就是控制功率电感上的电流方向和大小。电感的平均电流等于均衡电流而均衡电流的建立靠 PWM 占空比调节电压差在电感两端产生的作用。以电池 1 往电池 2 搬能量为例对应的功率单元工作在一个等效降压/升压的状态。如果忽略管压降和线路损耗理想情况下电感的伏秒乘积在一个开关周期内平衡[ (V_{BAT1} - V_{SW}) \times D V_{BAT2} \times (1 - D) ]这里 (D) 是高频开关管在一个周期内的导通占空比。这个公式看着抽象理解成“开关管开通时电感充电关断后电感放电两个阶段的伏秒必须相等”就可以了。控制器会根据输入输出电压关系自动调节占空比并不需要我们手动计算每个状态的 D 值但理解这个关系有助于你推算电感电流纹波和选择电感饱和电流。实际工作时MP2642GR-Z 会以电流环方式工作MCU 给定一个目标均衡电流值功率级动态调整占空比让电感电流稳定在目标附近。这种“电压外行、电流内环”的结构抗电池电压波动能力很强不会因为电压采样的一点抖动就导致均衡电流剧烈波动。3.2 电感、开关频率、均衡电流怎么选我在这套 2S 方案里开关频率设计在 200kHz 左右。这个频率选了之后电感和驱动损耗相对均衡听感上开关噪声也基本离开人耳敏感区。再往上提高频率电感体积能更小但 MOS 开关损耗和功率级发热会变大对散热要求更高。电感量的选择可以直接用纹波电流公式估算[ \Delta I_L \frac{V_{BAT2} \times (1 - D)}{L \times f_{SW}} ]举个实际例子假设电池压差 100mV目标均衡电流 1A开关频率 200kHz占空比接近 0.5那在一个开关周期里电感上的电压约 100mV。如果选 10μH 电感算出纹波电流约 0.25A约为平均电流的 25%这个纹波比例在工程上是可接受的。如果把电感减小到 4.7μH纹波会超过 0.5A均衡电流的连续性变差峰值电流会接近 1.5A对电感和 MOS 的峰值应力要求都更高。电感选型时饱和电流一定要按“最大峰值电流 20%~30% 裕量”来选而不是按平均电流。因为电池电压变化、负载切换瞬间会带来电流尖峰电感一旦饱和感值骤降电流瞬间失控非常容易损坏 MOS。另外 DCR 也不能忽略一颗 DCR 50mΩ 的电感在 1A 均衡电流下就有 50mW 损耗虽然单看不大但加上 MOS 导通损耗、驱动损耗功率级本来的效率优势会被一点一点吃掉。均衡电流的选取更讲究。设得太小比如 200mA遇到 100mV 以上的压差几个小时都补不平现场客户根本没耐心等设得过大比如 3A在空间紧凑的小型备用电源模块里电感、MOS、PCB 走线都要重新加粗热设计也要跟着升级。我在常规备电产品上一般取 0.5A 到 1.5A 作为折中既能在半小时内看到明显的压差收敛又不至于让功率级变成板上的第二个热源。3.3 阈值、回差和状态机是关键逻辑均衡策略这块最容易犯的错误是“电压差超过阈值就一直均衡”结果导致系统频繁来回切换甚至越均衡越糟糕。我在做状态机时引入了启动阈值、停止回差和超时保护三个概念。状态进入条件动作IDLE压差小于停止回差关闭 PWM功率级待机BAL_1_TO_2VCELL1 - VCELL2 启动阈值目标电流正向电池 1 向电池 2 搬运BAL_2_TO_1VCELL2 - VCELL1 启动阈值目标电流反向电池 2 向电池 1 搬运PAUSE充电/放电状态变化或温度过高暂停均衡保持状态信息FAULT过流、过压、通信丢失关闭 PWM锁存故障直到人工清除启动阈值我常用 20mV停止回差用 5mV。为什么必须有回差因为电池在均衡过程中电压会有小幅度波动如果没有回差系统会在临界点反复进入和退出均衡继电器和 MOS 频繁开关不仅损耗增大还可能出现环流尖峰。20mV 启动、5mV 停止的意思是只有当压差超过 20mV 才认为需要干预把它补到 5mV 以内就收手留一个天然缓冲带。超时保护也很有必要。均衡不是越久越好如果连续均衡超过设定时间压差仍没有明显收敛大概率是采样异常、接触电阻过大或电芯内部微短路这时候继续均衡只会加重问题。我在程序里加了一个最长均衡时间比如 2 小时超时后上报告警并退出均衡保护现场也方便售后排查问题。4. 固件实现要点电压测量不能直接比较4.1 ADC 采样与滤波先解决噪声很多朋友在均衡调试时遇到“电压差来回乱跳状态机跟着乱切”的问题十有八九是 ADC 采样没做好。电池电压不是干净的直流源PWM 开关动作、充电机纹波、负载突变都会在采样线上耦合出噪声。我在固件里用定时器触发 ADC 采样让采样点固定落在 PWM 开关周期中电感电流续流阶段的中点。这个时间点正对应电流变化最平缓的时刻采样到的电压最接近真实开路电压。光靠这个还不够软件上又加了一层滑动窗口滤波。实际用的是一组 16 点样本去掉最大和最小值后取平均效果比单纯均值滤波更能抑制尖峰干扰。核心代码逻辑不复杂但有一个细节必须提醒如果 MCU 要跑通信和均衡状态机ADC 滤波不能阻塞主流程。我习惯把滤波计算放在定时器中断里做每 10ms 更新一次结果主循环只读取滤波后的值。这样即使通信暂时卡住采样和均衡保护也还在继续。4.2 充放电状态下的均衡窗口均衡不能在所有时刻都无脑开启。充电过程中大电流会造成明显的欧姆压降和极化电压此时采集到的单体电压其实高于真实开路电压放电过程则相反。如果不区分状态均衡逻辑很容易被这些动态分量欺骗做出反向判断。我的处理方式是先判定系统工作阶段静置状态负载断开、无充电电流此时电压最接近真实开路电压最适合做均衡判断。充电状态只在恒压段或充电电流较小的时候启动均衡大电流充电时暂停。因为充电时高压侧电池本来就会被充电机补充能量均衡只是辅助不应该和充电机“抢电流”。放电状态一般只在电压较高时允许均衡。如果在放电末端电池电压已经很低均衡电流会加速低压侧电池放电可能导致系统提前触底保护。这个判定不复杂但需要 MCU 实时读取总电流。我在方案里用一个电流检测放大器采集电池组总电流并设定一个滞回区间比如电流绝对值小于 200mA 时认为处于静置大于 500mA 时明确认为处于充放电。滞回区间能防止系统在阈值附近抖动。4.3 与上位机或 BMS 主控的通信均衡功能不是孤立的它需要和充电管理、电量计、上位机监控协同工作。我这套方案里 MKV44F256VLH16 用了一组隔离 UART 接口按通用 Modbus 协议上报电压、电流、温度和均衡状态也接收远程命令来开启或关闭均衡。通信格式里我会重点上报“均衡状态字”里面包含当前状态、最近一次均衡动作的方向和累计时间。这样在客户现场如果出现“明明有压差但你没有均衡”的投诉能很快查到是状态机判定不满足、超时保护触发还是通信命令被禁用。另外所有校准参数都通过可写寄存器访问产线校准不需要重新编译固件这个设计在批量生产时非常省时间。5. 现场踩坑与排查心得5.1 电感啸叫源头未必是频率实测中遇到过电感发出吱吱声第一反应是开关频率太低。可把频率从 100kHz 提到 200kHz声音依然存在。后来测试才发现问题出在占空比切换瞬间存在短暂的电流断续区域电感电流进入不连续模式后产生了音频段振荡和开关频率本身关系不大。这种问题可以从两个方向解决。一是确保均衡电流始终高于最小连续电流值避免电感电流过零进入断续模式二是在电流环上增加斜率补偿让占空比变化更平滑。MP2642GR-Z 配套的反馈补偿网络需要认真调不能照搬参考设计的阻容参数因为电池电压范围、电感量、寄生参数不一样补偿特性也会差很多。调试时可以先把均衡电流设大一点如果啸叫消失基本可以锁定是断续问题。5.2 电压突变导致误均衡有一次在测试中系统静置时一切正常开启负载瞬间采样到的 VCELL1 突然比 VCELL2 高 60mV均衡状态机立刻启动了电池 1 向电池 2 搬运的动作。实际原因不是电池真失配而是电池 1 的连接点靠近负载功率走线负载电流在铜箔上产生了一个瞬态压降被 ADC 当成单体电压差异采进去了。解决办法是双管齐下。硬件上采样线的取点要回到电池端的采样点不是 MCU 板内任意一个等电位点软件上在状态机里加了一个“进入均衡前必须连续 N 个采样周期都满足条件”的确认逻辑。类似负载动态造成的瞬态压差持续时间通常只有几十毫秒连续确认 3 到 5 个周期就能过滤掉大半。5.3 均衡结束后电压反弹白干了均衡停止一个小时后打开上位机一看压差又回去了 30mV第一反应是均衡完全没效果。后来仔细分析发现这和电池的极化电压有关。大电流均衡会在电池内部建立浓度差极化均衡刚停止时电压会有一个松弛过程这会抵消一部分均衡效果让人误以为白干了。这种问题要在均衡策略里加“静置判定”来应对。均衡完成后不要立刻关闭并结束而是进入一个短时静置阶段等极化电压松弛再根据真实开路电压决定是否继续均衡。实际操作中两节磷酸铁锂电池从 180mV 压差开始均衡大概两小时后能把稳态开路压差收敛到 15mV 以内这个结果单靠被动均衡是不可能的。5.4 功率级保护复位时序MP2642GR-Z 的 FAULT 引脚在过流、过温等异常时会被硬件拉低。我在初版固件里直接在中断里清除故障标志结果芯片刚复位电流还没稳定又立刻再次触发保护陷入重启循环。正确做法是故障后进入锁存状态MCU 只上报故障不自动复位等待外部命令或者在断电后重新上电时将故障状态清零。如果希望自动恢复至少要加一个退避等待时间让功率级充分冷却电流采样归零后再尝试启动而且第一拍要限制最高占空比。这个时序看起来小但对现场可靠性的影响比均衡算法本身还大。6. 实测效果和后续扩展方向6.1 一组实测结果参考我把这套方案装在一个 2S 磷酸铁锂备用电源模块里做了完整的循环测试。初始状态下两节电池压差 120mV静置状态下启动均衡目标电流 1A。前 20 分钟压差快速下降到 40mV之后下降速度变慢最终在 45 分钟左右进入 5mV 以内停止均衡后静置 30 分钟压差回升到 12mV第二次均衡 15 分钟后稳定在 8mV 以内。这个结果说明两个问题主动均衡对大压差修正速度快但最终收敛精度受限于采样精度、极化效应和电池本身开路电压的滞回特性。追求压差无限接近 0 没有工程意义把稳定压差控制在一二十毫伏以内已经完全能避免串联电池容量被短板锁死的问题。6.2 从两串扩展到更多串的考虑这套方案天然支持多串扩展。对于 4 串、6 串电池组可以在每两个相邻电池之间放置一个 MP2642GR-Z 功率单元每个功率单元都挂在同一条 MCU 通信总线上MCU 继续做总调度。需要注意的是多串系统中的地平面噪声和功率回路会复杂很多每个功率单元之间要做好驱动隔离避免环流路径跨越多级电池造成错误的电流方向。扩展时通信负载也会增加。如果每 100ms 要上报多个功率单元的状态普通 UART 会开始显得吃力这时候可以把 MKV44F256VLH16 的通信外设升级到 CAN 或者 RS485 总线。CAN 的仲裁机制在多点通信里更可靠也更容易做故障节点的定位。6.3 和专用均衡芯片方案的取舍市面上有专门的电池均衡管理芯片封装小、外围简单拿来就能用很多产品为了缩短开发周期会选择这类方案。我为什么还是自己搭 MCU 加功率控制器的方案主要是为了策略灵活性。专用芯片的均衡策略通常是固定的启动阈值、均衡电流、回差时间都受到寄存器限制遇到特殊工况很难改。而用 MKV44F256VLH16 做主控均衡策略在本质上就是一段可以随时优化的代码今天想要更激进的均衡电流明天想要根据电池温度调整阈值改几行代码就能完成不需要换硬件。当然如果产品完全不需要差异化策略、开发周期又极短专用芯片方案更合适。这两种方案没有绝对好坏关键看你是想快速出货还是想长期维护一套可控的 BMS 逻辑。最后再分享一个小经验主动均衡这东西硬件做出来只算完成 40%剩下 60% 都在调试均衡策略和异常保护。不要一上来就追求极致的均衡精度先把 ADC 基准校准做好再把状态机的每个跳变条件都验证一遍最后再做整机充放电循环测试。踩过几次坑之后你会发现真正决定产品能不能在现场长期稳定运行的往往不是那颗功率芯片而是你给 MCU 写的每一行保护逻辑。
阅读完成 · 觉得有帮助?
咨询建站