很多做储能和备用电源的朋友一开始都觉得“两串电池而已直接串联用就行”结果设备运行两三个月后就开始出问题整组容量下降、单体过充保护频发、放电容量的短板越来越明显。根子就在两个串联电池单元的不均衡。我在调试一套备用电源样板时用的方案是以 MP2642GR-Z 做功率级、TM4C1294KCPDT 做主控的两串电池主动均衡系统效果稳定可复制性也强。这篇就把方案怎么来、硬件怎么搭、均衡逻辑怎么写、现场怎么调试一次讲清楚。1. 方案设计与芯片分工1.1 两节串联电池为什么越用越不均衡串联电池组的逻辑很简单同一根电流回路里充电时流过两节电池的电流相同放电时流过的电流也相同理论上两节电池每时每刻的荷电状态都应该一样。但实际根本做不到原因有四类。第一是容量差异。同一批出厂的电芯标称容量可能都是 20Ah但实际分容之后会有 1% 到 3% 的偏差。容量小的那一节在同样的电流下SOC 变化率天然就比容量大的快。第二是内阻差异。电芯内阻随温度、循环次数变化内阻大的那一节在充放电时端电压波动更明显直接导致基于电压判断的充放电终点不一致。第三是温度梯度。电池包内部靠近发热元件的那节电芯温度高自放电和化学反应速率都会更快长期下来容量衰退也更快。第四是自放电率不一致。静置时间越长两节电池的 SOC 差距越大。这四类原因叠加以后系统表现就是充电时某一节先到达截止电压充电必须停止放电时某一节先到达欠压点整组负载被迫断开。先出问题的那节电芯决定了整组电池的可用容量这就是“短板效应”。对于两串系统虽然只有两节电芯但只要其中一节容量衰减 10%整组容量损失往往接近 20%甚至更多。我在现场看过太多把电池“用到坏”的案例其实问题从第一次充放循环就开始积累了。1.2 均衡方案对比为什么要选能量转移式两串电池均衡大体分两类耗散式均衡和能量转移式均衡。耗散式均衡是目前大多数低端保护板用的方式原理简单粗暴检测到某一节电压偏高时通过并联的开关管和电阻把那节电池多余的能量以热量形式放掉直到和最低节电压对齐。优点是成本低、逻辑简单缺点是均衡电流很难做大通常只有几十毫安到一两百毫安而且要忍受发热对电池包热管理压力很大。最致命的是它只能“削峰”不能“填谷”充电末期能把高压节拉下来但放电末期没办法给低压节补电。能量转移式均衡则是通过功率变换电路把高电压单元的电荷“搬”到低电压单元去。理想情况下只是电荷重新分配没有多少能量浪费均衡电流也可以做得更大收敛速度更快。对备用电源这种需要长期维护电池一致性的场景能量转移式明显更合适。我用的这套方案功率级就是围绕 MP2642GR-Z 这颗电源芯片搭的。它承担了核心的 DC-DC 能量变换功能配合外围开关网络可以控制能量从哪节电池抽出、注入到哪节电池。主控 TM4C1294KCPDT 不直接参与大电流通路只负责采样、判断、下发控制指令。这样的分工让调试时可以把“功率问题”和“逻辑问题”分开排查麻烦少很多。1.3 MP2642GR-Z 与 TM4C1294KCPDT 的分工边界先说主控这边。TM4C1294KCPDT 是 Cortex-M4F 内核的 MCU主频 120MHz资源在这里属于“很够用但没浪费”的状态。它自带的 12 位 ADC 有好几个采样通道正好用来接两节电池的电压采样点硬件定时器PWM 输出可以驱动外部开关网络串口/UART 用来和上位机或者 BMS 主机通信。整个均衡控制固件不会很复杂用状态机实现足够不需要上 RTOS。功率级那边MP2642GR-Z 的工作是完成电压变换和电流控制。简单理解它就是一个“可控的能量搬运工”当系统判断 Cell0 电压高于 Cell1 时就控制它把 Cell0 的能量抽出来降压/升压后灌入 Cell1反过来也一样。芯片内部有同步整流结构和电流检测外围只需要配好电感、输入输出电容、反馈电阻就能形成一个完整的功率闭环。有一个容易被忽略的点这颗电源芯片自身的工作电压和电池电压并不一定完全匹配。我在设计时把芯片的供电、内部逻辑电源和采样基准都单独做了 LDO 稳压避免电池电压在充放电过程中大幅波动影响芯片工作点。这也是很多新手用 DC-DC 芯片做均衡踩坑最多的地方——芯片不是不能工作是供电和基准没做好导致控制不稳定。2. 硬件电路功率级与采样链路2.1 功率级外围电路设计与器件选型先看功率级拓扑。两节串联电池中间有一个中点Cell0 的高端是 BATCell1 的低端是 GND两个单元的中点电压是 Vmid。均衡过程需要做到两节电池之间双向搬移能量所以我在电池端接了两个半桥开关组一个开关组控制 Cell0 接入功率变换器的输入端口另一个控制 Cell1 接入。 MP2642GR-Z 的输出端则接到另一节电池的端口。通过切换开关组合就能把“源电池”和“目标电池”配对。功率级核心的参数有四个开关频率、电感值、均衡电流设定、输出电压限幅。开关频率选型主要看 MP2642GR-Z 的工作频率范围和功率电感的选择。我实际测试时把开关频率设在 300kHz 附近这是一个比较好兼顾效率和体积的档位。频率太高电感可以小但开关损耗和芯片发热会明显变大频率太低电感体积大输出电压纹波也难压。电感值按下式估算L (Vin - Vout) × D / (fsw × ΔIL)假设电池端电压 3.3V目标输出 3.6V占空比 D ≈ 0.52开关频率 300kHz允许电感纹波电流 ΔIL 取均衡电流的 30%均衡电流设定 1A则 ΔIL 0.3A算出来电感大概是L (3.6 - 3.3) × 0.52 / (300000 × 0.3) ≈ 1.7μH实际我选了 2.2μH 的功率电感这样纹波电流会小一些对电池侧的电流冲击更友好。注意电感的饱和电流至少要大于最大均衡电流的 1.5 倍否则大电流时电感值掉下来整个环路就乱套了。输入输出电容主要用来吸收开关动作产生的高频纹波同时给电池侧的瞬态电流提供一个低阻抗通路。我在输入端用了 22μF 陶瓷电容并联一个 47μF 电解电容输出侧同样处理。陶瓷电容负责高频电解电容负责中低频缓冲这样组合下来实测纹波可以控制在几十毫伏级别。电流采样和限流设置也很关键。功率芯片通过外接采样电阻或者内部检流来限制峰值电流。我把限流点设置为 1.2A 左右留了 20% 的余量避免电感饱和或电池内阻差异导致电流失控。这个限流点不能设得太高否则均衡电流过大可能引发电芯过流保护也不能太低否则均衡收敛太慢失去主动均衡的意义。2.2 两节电池电压采样链路设计均衡逻辑的基础是准确采集每节电池电压。听起来很简单两节电池三根线用 ADC 直接采不就行了吗实际远没那么简单。第一是共模电压问题Cell0 的高端是 BAT低端是 VmidCell1 的高端是 Vmid低端是 GND。如果直接用单片机 ADC 采集Cell0 的电压参考点 Vmid 相对于 MCU 的地是悬浮的共模电压最高会接近整组电压需要差分采样或者隔离运放。我用的方法是每个电芯电压都通过一个差分放大器变换成以 MCU GND 为参考的单端信号之后再进 ADC。差分放大电路用仪表放大器或者高精度运放搭建都可以关键是确保输入阻抗足够高不能把电池的平衡状态破坏掉。第二是滤波问题。电池电压并不是纯直流充放电纹波、均衡电流切换产生的瞬态扰动都会叠加在上面。如果直接送 ADC采出来的数据会跳得厉害均衡判断就会抖动。我在运放输出后又加了一级 RC 低通滤波器截止频率大概 100Hz然后在固件里再做一个滑动平均滤波双重处理之后电压数据就非常稳了。采样精度上单片机的 12 位 ADC 理论上足够分辨 0.5mV 级别但实际受参考电压精度、PCB 布线、基准噪声影响不可能达到理论值。我做了一个简单的校准流程用高精度万用表测实际电池电压再和 ADC 读数做多点对比生成一个补偿表。这样实测电压误差能控制在 5mV 以内。对于均衡控制来说10mV 以内的精度就够用了。温度采样同样不能省。均衡过程中能量转移可能让电池发热温度过高时均衡策略必须降低电流甚至暂停。我在每节电池表面贴了 NTC 热敏电阻通过电阻分压接 ADC 通道。固件里用查表法把 ADC 值换算成温度超过 45℃ 时限制均衡电流超过 55℃ 时直接停均衡。这套保护逻辑在长时间满电均衡场景下非常重要。2.3 开关网络与驱动电路功率级需要切换电池连接方向我用的是 MOSFET 开关组。注意这两个半桥不是普通意义上用来产生正弦波的半桥而是“方向选通开关”所以控制逻辑相对简单每次只导通一组开关把目标电池接入功率变换器。MOSFET 选型要看几个参数耐压要高于整组电池电压并留足余量我选了耐压 30V 的 N-MOS导通阻抗要低否则均衡电流在开关上产生不必要的压降和热量栅极电荷要小方便用单片机 IO 通过驱动器直接驱动。实际驱动上我没有让 MCU 引脚直接驱动 MOSFET而是加了一级栅极驱动芯片因为单片机引脚驱动能力不足以快速开关大栅极电容的管子慢开慢关会让管子长时间工作在放大区发热很危险。栅极驱动芯片还有一个好处可以方便地做逻辑电平转换和死区控制。虽然方向切换不涉及两个半桥同时导通但为了保险我仍然在固件里加了一段切换延时确保先关闭当前导通的开关组再打开目标开关组。延时设定为 5ms。这个延时太短可能炸管子太长则会让均衡处理有可见的“停顿感”5ms 在实际测试中没有任何问题。需要特别留心的一点是在能量转移过程中电池本身既是输入源也是输出目标所以开关动作瞬间会产生一定的电压尖峰。在每个 MOSFET 旁边都并联了 RC 吸收电路和 TVS 管实测尖峰从接近 15V 压到 8V 以下。这一步不能省尤其是电池端接插线比较长、寄生电感比较明显的时候。2.4 PCB 布局关键细节这块板子的 PCB 布局直接影响均衡性能。我总结了几个最容易出问题的地方。第一功率地和信号地必须分开。MP2642GR-Z 的功率地回路上有较大的 di/dt如果和 ADC 采样电路共地采样值会被严重干扰。我在 PCB 上把功率地做成一块独立铺铜区只在一点通过 0Ω 电阻或磁珠和信号地相连。这个连接点放在功率芯片附近而不是 MCU 附近。第二采样线要用差分走线而且要远离功率电感。功率电感辐射出来的磁场会耦合到采样线上即使有差分放大器也会引入高频共模噪声。我在布局时绕开了电感正下方区域并且采样线都加了地线护栏。第三去耦电容要靠近芯片引脚。无论 MCU 还是电源芯片电源引脚旁边的 0.1μF 电容都必须尽可能靠近引脚放置而不是“意思一下”放在板子边缘。电感回路面积要尽量小否则开关节点会产生很大的振铃。我在第一版打样时因为采样线从功率电感旁边路过导致均衡启动时 ADC 读数跳动了差不多 20mV整个均衡逻辑直接失灵。后来把线绕到板子另一面、重新铺地隔离后问题才解决。这类问题用示波器看波形完全看不出明显异常最容易让人排查到怀疑人生。3. 固件均衡逻辑与保护策略3.1 电压采样滤波与电池状态自检固件部分我用裸机状态机实现主循环 5ms 一次核心任务有三个采集、判断、执行。采集任务在每次主循环里依次完成电压和温度采样。原始 ADC 数据不能直接用。我做了两级处理第一级硬件 RC 滤波已经在模拟端把高频噪声压掉了第二级固件用“去极值滑动平均”算法。做法很简单连续采 5 个点去掉最大值和最小值剩下 3 个点取平均。这个算法能很好地抑制瞬间尖峰计算量也小非常适合单片机裸机环境。电压数据算出来之后系统先做自检。自检包括三类开路检测如果某节电池电压采样值接近 0V 而整组电压不低说明采样线脱落或者电池连接异常欠压检测如果电池电压远低于正常范围比如两串磷酸铁锂低于 2.0V不能启动均衡过压检测充电状态下单体电压超过 3.65V磷酸铁锂则立即提示充电保护同时禁止均衡继续向该节注电。自检通过后系统进入正常状态机。状态机划分成静置态、充电态、放电态、均衡态、故障态。不同状态下的均衡策略不一样不能在静置时乱搬能量更不能在放电状态下让均衡和负载抢能量。3.2 均衡策略基于电压差的电荷搬移均衡判据我用的不是简单“谁高就均衡谁”而是加上了回差和定时判断防止系统在临界点反复横跳。基本逻辑如下计算 Cell0 和 Cell1 的电压差 ΔV。当 |ΔV| 25mV且持续时间超过 10 秒进入预均衡态。进入均衡态后如果 Cell0 电压高于 Cell1则启动 1 号开关组让能量从 Cell0 流向 Cell1反之启动 2 号开关组能量从 Cell1 流向 Cell0。当 |ΔV| 10mV均衡停止系统回到静置态。这里 25mV 不是拍脑袋定的。两节电池在 SOC 接近时电压差十几 mV 是正常的。如果阈值设得太低比如 5mV系统会一直处于“启动—停止—再启动”的振荡中每次切换还会在电池上产生一个短暂的电流冲击。设 25mV 启动、10mV 停止也就意味着有 15mV 的回差区间这个回差帮系统过滤掉了噪声。持续时间判断也很重要。瞬时电压差可能来自负载波动或者采样噪声如果一出现大压差就均衡系统会很忙。我让压差条件持续 10 秒才确认进入均衡态基本上电池的真实不一致性都会在这个时间窗口里暴露出来而瞬态干扰早就消失了。均衡停止的时候要注意软关断流程。有些方案直接一刀切断开开关组电流从 1A 突然变成 0电感上会产生一个很大的反电动势容易把 MOSFET 击穿。我会在固件里让 PWM 占空比按步进递减到 0再关闭开关组持续时间大概 200ms。实测这样处理后开关节点几乎没有明显尖峰。3.3 充放电状态下的差异化控制备用电源系统的电池不会永远静置。实际工况下电池会经历充电、放电、浮充等状态。不同状态下均衡策略要做调整。充电状态下均衡的目标是防止某节电池提前充满导致无法继续充电。简单说充电过压前把高压节的能量转移给低压节让整组电池都能被充到接近满电。我采取的规则是充电时一旦检测到某节电压超过 3.45V且和另一节电压差大于 20mV就启动均衡并且均衡电流优先选择电流从高压节抽向低压节。通过这种方式高压节在充电末期的电压被压住低压节能继续充电。放电状态下均衡目标反过来是要防止某节电池提前欠压。这时候如果检测到某节电压偏低且压差大就把它邻居的能量补给它延缓低压节电压下降。注意放电状态下均衡电流不能过大否则会在系统已经带载的情况下额外增加电池负担。我在放电状态下把均衡电流限制在 0.5A 以内。静置状态下均衡可以做得相对激进1A 均衡电流没问题只要温度保护不触发就行。另外还有浮充状态此时充电机维持一个恒定电压均衡电流要很小避免在浮充电压基础上又叠加出额外电压导致过压。浮充时我通常把均衡阈值提高一些让系统只在压差很大时才介入。3.4 保护逻辑与故障上报均衡系统首先是电池保护系统其次才是均衡系统。保护逻辑优先级最高固件里我用一个独立的状态位来做判断任何保护条件满足时无论当前处于哪个状态立刻停止 PWM 输出并关闭所有开关组。保护条件包括单体过压保护电压超过 3.65V磷酸铁锂持续 2 秒。单体欠压保护电压低于 2.5V持续 2 秒。过温保护温度超过 55℃。均衡电流异常实际电流和设定电流偏差超 50% 且持续 1 秒。通信超时如果上位机连续 5 秒没有心跳进入安全模式。保护触发后不是简单拉低一个标志位我会锁定故障状态只有在上位机下发复位指令或者系统重新上电后才恢复。这是为了避免电池在持续故障的情况下反复“触保-复位-触保”那只会让电池加速损坏。故障信息通过串口以固定协议上报内容包括故障码、单体电压、温度、均衡状态、当前电流。我在调试时就是靠这串数据定位问题比拿示波器到处点方便得多。量产版本还可以把同样的数据通过 CAN 发出去TM4C1294 自带 CAN 控制器接个收发器就能用。4. 实操过程与调试验证4.1 测试平台搭建硬件和固件都完成后进入调试验证阶段。我搭的测试平台分三部分模拟电池组、控制系统板卡、电子负载和可编程电源。模拟电池组我直接用了两节磷酸铁锂电芯标称 3.2V容量 20Ah。为什么不用两节锂电池因为磷酸铁锂电压平台很平SOC 变化对应的电压变化小对均衡策略的判断逻辑是更严苛的考验。能在磷酸铁锂上跑稳的均衡策略放到锂电池上基本会很稳定。可编程电源模拟充电工况电子负载模拟放电工况。示波器用来观察开关节点波形和均衡电流瞬态过程万用表校准 ADC 采样值。整体连线我尽量短尤其是电池侧连接线用的是 16AWG 硅胶线减小线阻对测量结果的影响。测试流程我按照“静置均衡 - 充电均衡 - 放电均衡 - 保护触发验证”四个步骤来走。每步都记录电压差收敛曲线观察均衡电流波形是否平滑切换瞬间有没有异常振铃。4.2 均衡效率与收敛性数据静置均衡测试时我先人为把两节电池充到不同的 SOCCell0 充到 3.45VCell1 放到 3.2V压差 250mV。然后启动均衡系统设定均衡电流 1A。从数据上看最开始 10 秒Cell0 电压快速下降Cell1 电压快速上升这是均衡电流刚刚建立时的动态响应阶段。这个阶段不需要担心真正要关注的是后面缓慢的收敛段。经过约 20 分钟两节电池电压差收敛到 15mV 以内35 分钟后收敛到 8mV 左右然后均衡停止系统进入静置态。收敛速度符合预期转移的电荷量大概是 1A × 0.58h ≈ 0.58Ah对于 250mV 压差来说属于合理水平。均衡效率我用直流功率计分别测输入侧功率和输出侧功率测得整体效率在 85% 左右。这个效率对主动均衡系统来说已经可以接受毕竟能量只是从一节电池搬到另一节即使有一点损耗相比于耗散均衡把所有多余能量变成热量仍然是量级的优势。充电均衡测试时发现一个现象充电机在给整组充电的时候均衡电路也在工作两股电流会在电池节点上叠加。如果均衡电流方向设计得不好可能出现“均衡电流把低压节充满、高压节却没充满”的过均衡问题。我在充电状态下把均衡目标改为“限制高压节电压斜率”而不是单纯追求电压差为零效果才稳定。这套逻辑说白了就是充电均衡的主要目的是让高压节别充电太快而不是强行让两节电压一致。4.3 干扰与稳定性测试均衡系统在开关动作时会产生比较强的电磁干扰如果抗干扰设计不到位MCU 可能跑飞、ADC 读数可能跳动。我做了一个比较极端的测试反复快速切换均衡方向每 100ms 切换一次持续 5 分钟观察系统是否出现复位或采样异常。测试结果暴露了问题前几版板子在切换瞬间MCU 的 3.3V 电源有约 200mV 的跌落一度导致 ADC 基准波动让电压采样值跳了十几 mV。后来我在 MCU 电源入口加了更大的储能电容并把功率级的开关节点远离 MCU 电源走线最终把跌落控制到 100mV 以内采样也稳定了。另一个稳定性测试是长时间静置均衡让系统自动均衡一整夜早上来查看数据。因为均衡策略有回差理论上一旦压差进入 10mV 死区系统就会完全停止动作。实际发现系统在凌晨某个时段出现了几次反复启停查日志发现是温度变化导致电池电压发生了缓慢漂移压差在死区边缘来回蹭。解决办法是把均衡停止后的再启动条件改为必须差 20mV 以上并且静置 30 秒这样系统才彻底安静下来。4.4 常见问题排查速查表调试过程中遇到的技术问题五花八门但归纳下来也就这么几类我整理了一张速查表。现象可能原因排查步骤解决方案均衡电流上不去电感饱和、限流点过低用电流探头抓电流波形换饱和电流更大的电感提高限流点电压采样跳变采样线靠近电感、共地不良示波器同时看采样后端点和功率节点重新布局走线功率地信号地单点连接均衡反复启停回差太小、判断时间太短查看压差波形和状态机切换记录增大回差到 15mV持续时间延长到 10 秒切换瞬间 MOS 发热缺少死区延时、栅极驱动不足测栅极电压上升时间和开关尖峰加栅极驱动芯片切换间隔 5ms均衡效率低于 70%开关频率过高、电感过大分别测输入输出功率降开关频率或改电感值过压保护误触发充电状态下均衡方向错误查看充电时的均衡状态记录限制高压节电压斜率不过分追求压差为零这个表是调试现场最常用的工具。遇到问题先对着现象查原因比盲目换器件靠谱得多。好几次我以为芯片坏了最后查下来是电感选型不对或者地没接好。5. 写在最后个人体会与扩展思路这套“MP2642GR-Z 功率级 TM4C1294KCPDT 主控”的两串电池主动均衡方案我实际调试过、也实测过数据整体表现符合预期。它最大的优势是功率级和控制逻辑可分离固件出问题不用动硬件硬件有问题也不必改逻辑调试效率高很多。而且能量转移式均衡本身对电池寿命友好长时间运行的稳定性比耗散方案强不少。扩展方向上这个系统可以很容易地升级成三串、四串甚至更多串联单元的均衡。思路就是把单级能量转移改成交替选择不同电池对主控资源完全够用TM4C1294KCPDT 的定时器、ADC 通道、GPIO 数量处理个三五串的均衡绰绰有余。如果你做的是更大容量储能还可以把均衡电流做上到 2A 以上只要功率级器件的散热跟得上。最后给两个小提醒。一个是关于测试安全锂电池调试务必在防火防爆的环境中进行最好加装电池隔离板均衡电流路径上的任何短路都可能把电芯直接报废。另一个是关于采样校准不要迷信单片机的 ADC 标称精度量产前一定要做多点校准并且把校准表存在 Flash 里每次开机加载否则电池电压判断长期会有偏差均衡效果会打折扣。主动均衡不是什么高不可攀的方案核心难点往往不在算法而在功率回路和采样回路的细节处理。把地线、电感、开关管、滤波这几处照顾到位这套系统就能很可靠地跑起来。