
前一阵子做一套小型后备电源系统最难搞的不是 DC-DC 变换效率而是两串电池的均衡问题。电芯出厂时电压差不过几个毫伏用几十个循环之后差距能拉到 50mV 甚至上百毫伏。后备电源的容量本来就按“最弱一串”算一颗电芯拖后腿整组电池能放出来的电量直接缩水一块。这个项目里均衡执行部分用了 MP2642GR-Z控制部分用 PIC18LF46K80 负责策略判断和状态上报整套方案调通之后我把设计与踩坑过程整理了一遍希望能给同样在做储能、UPS 备电这类 2S 电池管理的朋友一点参考。1. 方案选型背景与总体思路1.1 两串电池为什么要做主动均衡锂电芯在做串联成组的时候最经典的问题是容量短板效应。两串电池里面充电时谁先到截止电压整个充电过程就要停下来放电时谁先到欠压保护点整个放电过程也要停。哪怕两节电芯出厂分容很一致长期使用后自放电率、内阻、温度分布不一样电压差和容量差还是会出现。靠电芯自己“爬”是爬不回来的必须靠外部均衡电路把高的那节拉下来或者把多的容量转移到低的那节上去。均衡分两类。被动均衡最简单把高电压电池的能量通过电阻放掉变成热。成本低、结构简单但问题也很明显能量被白白烧掉、发热点在电池附近不好处理、均衡电流一大就烫得离谱。主动均衡则是把能量从高电压电芯搬到低电压电芯整体能量没有被浪费发热量小均衡电流还能做得比较大。对储能和备用电源这种经常以“小时”为单位充放电的场合来说主动均衡的效率优势很实在。两串电池的均衡还有一个特点只有中间节点一个分界点拓扑比多串简单。也就是说用一个双向升降压开关电路就能很好地解决电荷转移这也是 MP2642GR-Z 这一类专用均衡芯片能发挥价值的地方。1.2 主控加专用均衡芯片的分工逻辑有些人会问能不能直接拿单片机加几个 MOS 管和电感自己写均衡控制可以但没必要。PIC18LF46K80 这类 8 位 MCU 适合做的是策略控制、电压监测、故障上报不适合高频电源环路。自己做 MOS 驱动和高频开关不但 PWM 时机要求很苛刻而且环路动态、死区控制、保护逻辑都要反复调开发周期至少拉长一个月。专业均衡芯片把这些开关细节封装好外部只接磁芯和电容内部的功率管、驱动、电流检测都集成好了这才符合工程化的思路。反过来MP2642GR-Z 这类均衡芯片也不能完全脱离主控独立工作。芯片知道怎么转移电荷但不知道什么时候该均衡、往哪个方向均衡、均衡电流调多大。它更像是一条“执行通路”真正的大脑还是 PIC18LF46K80。这款 MCU 内部有 12 位 ADC 和固定参考电压可以直接采样两节电池的电压做比较也有 ECAN 外设方便把电池状态上传到上级 BMS 或者后台监控器。对备用电源系统来说这种“主控判断专用执行”的组合非常顺手。2. 硬件电路设计与关键参数计算2.1 升降压电荷转移均衡原理两串电池均衡的硬件核心是一个升降压变换器。以 MP2642GR-Z 为例芯片内部集成了两个功率开关管外部配一颗储能电感和若干滤波电容就可以搭起完整的电荷转移通路。假如发现上面那节电池电压偏高芯片就让开关网络把上面电池接到电感上电感里电流逐渐上升相当于把上面电池的一部分能量临时存进电感然后切换开关把电感接到下面电池上电感里的电流继续向下面电池流动这样一来电荷就完成了从高电芯到低电芯的搬运。反过来也一样只不过路径方向互换。这里有个容易混淆的点均衡并不像充电器那样一直以恒定电流工作。能量转移过程是断续的每个开关周期内电感电流都是先升后降平均电流取决于开关频率、电感和占空比。实际工作中芯片会根据电池电压和电流采样自动调整占空比不需要主控去逐周期干预。设计角度上主控只需要告诉均衡芯片两件事第一现在是否允许均衡第二电荷应该从上面搬到下面还是从下面搬到上面。剩下的电流纹波、峰值限流、续流换向芯片和外围电感一起处理。2.2 均衡电感与均衡电流的估算电感是均衡通道的核心。选小了峰值电流大芯片容易触发过流保护而且电池侧纹波明显选大了均衡电流变小达到目标电压差的时间变长失去主动均衡的意义。怎么估算先列一个简单的电量关系式。如果开关周期为 T占空比为 D电感量为 L电芯电压约为 Vcell那么电感峰值电流大约是Ipeak Vcell × D × T / L每个周期储存在电感里的能量约等于E 0.5 × L × Ipeak²每秒传递的能量就是功率P E × f其中 f 1/T也就是开关频率。假设电池电压是 3.6V电感取 6.8μH开关频率 250kHz占空比 40%。那么 T 是 4μs导通时间是 1.6μs。计算峰值电流Ipeak 3.6 × 1.6μs / 6.8μH ≈ 847mA每个周期能量E 0.5 × 6.8μH × 0.847² ≈ 2.44μJ功率P 2.44μJ × 250kHz ≈ 0.61W折算到 3.6V 电池电压平均均衡电流大约是 0.17A。这个数值对几十安时以上的储能电池偏慢所以实际项目中想加快均衡速度要么提高开关频率要么把电感峰值电流调上去。提高峰值电流要选饱和电流更大的电感同时注意芯片内部过流点。我给一个比较保守的选择如果均衡目标电流做到 0.5A 左右电感饱和电流至少留 1.5 倍裕量选额定电流 1.5A 以上、饱和电流 2A 以上的功率电感。2.3 电压采样、供电与保护电路细节PIC18LF46K80 的 ADC 是 12 位的采样精度和速度对均衡控制来说完全够用。但要注意模拟量采集通道的抗混叠处理尤其是后端电源系统里还有 DC-DC 变换器在工作采样线上很容易串进开关噪声。每个采样通道前级都放了 RC 低通滤波电阻选 10kΩ 左右电容选 0.1μF截止频率远低于 PWM 噪声频率同时不影响正常的电压响应速度。电池电压直接进 MCU 引脚肯定不行得先做分压。两串电池总电压最高 8.4VMCU 工作电平和 ADC 参考电压一般在 3.3V 以下所以用精密分压电阻把最高电压映射到 2.4V 左右具体分压比要根据所选参考电压反推。这里有个小经验分压电阻要用低温漂的最好是 0.1% 精度温度变化大的储能柜环境里电阻漂移会导致电压读数漂移几十毫伏均衡判断就会出错。供电方面MCU 电源可以直接从系统 3.3V 稳压输出取但在电池端和稳压器之间要加防反接。保险丝放在电池正极回路前端出现过流时优先于保护板动作这一点不要省。另外两串电池的中间节点引出采样线时尽量用短线加粗走线并且和功率均衡路径分开走减少地弹噪声对采样的影响。3. PIC18LF46K80 固件逻辑与均衡控制3.1 ADC 电压采集与滤波算法均衡控制的前提是电压测准。PIC18LF46K80 的 ADC 连续采样时我习惯做两层处理第一层是硬件上的去抖采样使能前留出几十微秒稳定时间第二层是软件上的递推平均滤波。简单写一个采样函数uint16_t adc_read(voltage_channel_t ch) { // 切换通道预留稳定时间 ADCON0bits.CHS ch; __delay_us(30); ADCON0bits.GO 1; while (ADCON0bits.GO); return ((uint16_t)ADRESH 8) | ADRESL; }实际使用中不能拿单次采样结果直接判断一次 ADC 结果里可能混入噪声尖峰。我维护了一个长度为 8 的环形队列把最近 8 次采样做平均。这样既保留了响应速度又能把随机噪声压下来。需要注意的是采样时序要和均衡通道错开。均衡电流正在导通时电池瞬态电压会有小幅变化如果 MCU 此时去采样读到的是叠加了纹波的值。我的做法是先用 GPIO 把均衡使能关掉等几百微秒后采一轮电压采完再恢复均衡。代价是采样期间均衡短暂停顿但对几百毫安的均衡电流来说这些微停顿完全可以接受。3.2 均衡控制状态机与迟滞逻辑均衡不能做成简单的“电压差大于阈值就开启”。如果阈值设得太灵敏均衡开启后电压差减小到阈值附近系统会来回开关电流反复冲击均衡通道发热明显。必须引入迟滞。我用的逻辑分三个状态均衡关闭、顶部转底部均衡、底部转顶部均衡。两节电池电压分别为 V1 和 V2电压差 ΔV V1 - V2。当 ΔV 30mV 时认为 V1 偏高开启向 V2 转移电荷的均衡当 ΔV 回落到 10mV 以下时关闭均衡当 ΔV -30mV 时执行反向均衡当 ΔV 回升到 -10mV 以上时关闭均衡。40mV 的量测区间其实对应电芯间本来就存在的正常电压差。要是设成 5mV 就开启均衡那系统可能一整天都在频繁切换。均衡的目的是纠正“明显不一致”不是追求每毫秒都完全相等。还要注意温度很低的条件下电芯内阻变大电压波动也变大此时应该适当放宽均衡启动阈值比如把 30mV 改成 50mV防止低温下误均衡。状态切换时还要加一个条件主控只有在系统处于充电、或者在静置状态且压差超过一定幅度时才做均衡。放电状态下大电流拉动电池电压变化很快容易误判一般只做电压监测不做均衡动作。3.3 CAN 通信与系统状态上报后备电源和储能系统通常不会单独运行上位机或者 EMS 需要知道每串电池的电压、均衡状态和自检结果。PIC18LF46K80 内部带着 ECAN 控制器正好用上。我做的事情不复杂每 1 秒发一帧电池状态报文里面包含两节电池电压、均衡方向、均衡使能状态、芯片温度告警标志。另发一帧设备状态报文包含硬件版本和固件版本。初期调试时用 CAN 转 USB 工具在电脑上看波形联调时把报文接到后端 BMS 网关。CAN 波特率我设成 250kbps这个速率在几百米的储能柜内部线缆场景下稳当抗干扰也够。要注意 CAN 总线两端各放一个 120Ω 终端电阻不能省否则通信会出现随机丢帧。软件层面建议给发送加一个队列缓冲避免主循环里某个流程耗时太久导致报文延迟超时。4. 调试实录与常见问题排查4.1 均衡反复抖动的排查第一次带电池联调时系统出现了一个很有意思的现象均衡开启后压差下降但没过多久又开始均衡周而复始均衡指示灯像呼吸灯一样闪。用示波器看电池电压曲线采集到的波形上叠加了不少毛刺导致单片机判断的电压差一会儿高于阈值一会儿低于阈值。排查下来发现两个问题。第一是采样通道的 RC 滤波电容取值太小高频噪声没滤干净第二是固件里没有做迟滞阈值设在 10mV稍一抖动就越界。解决方法是把滤波电容从 0.01μF 加大到 0.1μF并且把迟滞区间拉大到 20mV。改完以后切换次数明显下降均衡进入稳定工作状态。4.2 均衡电流小于预期另一轮测试里理论计算均衡电流应该有 0.4A 左右实际测出来只有 0.25A。原因在电感的 DC 电阻偏大选了一颗额定电流小的大电感线径太细铜阻把不少能量变成热量损耗掉了。后来换成饱和电流更高、直流电阻更低的功率电感均衡电流恢复到预期范围。这里提醒一下选电感不能只看感值DCR 和饱和电流同样关键。特别是均衡这种“小体积、多周期、持续工作”的场景电感发热带来的影响会被放大DCR 尽量挑低。另外电感摆放要和采样走线拉开距离避免磁场耦合到 ADC 输入线上。4.3 负载切换导致电压采样跳变后备电源系统经常有负载切入切出电池电压会突然下跌。如果在电压突变的瞬间开启均衡或者关闭均衡判断逻辑容易误动作。我在状态机里加了一个“电压稳定判定”连续 5 次滤波后的电压值变化不超过 5mV才认为当前是稳定工况允许执行均衡启动判断。负载切换后再等几百毫秒电压曲线稳定了进入均衡流程误动作基本消失。调试工具方面我全程用了直流电源模拟电池电压源做半实物测试先把两节电池的电压差模拟到 100mV然后观察均衡电流和电压收敛过程。这种方式比直接拿电芯做测试快得多也安全得多。模拟测试结束后才接真实电芯上电前还需要复核分压电阻、采样通道和均衡通路的绝缘间距。4.4 均衡器使能不成功的检查清单调试中如果发现 PIK 设置了均衡使能但均衡通道没有电流输出按照这几个方向逐步查查 EN 引脚和主控 GPIO 之间是否被其他外设复用了查均衡芯片电源引脚上的电压是否在正常范围很多偏置异常会导致内部电路不启动查电感是否焊好虚焊会造成通路不连续查电池电压是否真的高于均衡启动阈值如果两节电池电压本来就一致均衡自然不会启动。有条件的话最好在均衡通道上串一个采样电阻用示波器同时看电感节点波形和电流波形。正常工作时电感节点应该有完整的开关翻转波形电流应该是规律的三角波。如果看到波形混乱或电流无法建立问题大概率在驱动使能或者外部电感参数上。4.5 实测经验与后续改进方向这套方案调完以后我在实际储能柜环境里跑了 7 天连续测试两节电池的电压差峰值从之前的 80mV 降到 10mV 以内均衡电流和发热都在可接受范围。个人感受是主动均衡对储能和备电系统很有价值尤其电池容量大、充放电倍率不高、均衡时间充足的工况下效果远比被动均衡明显。后续想继续优化的方向有两个。一个是在 MCU 侧增加电芯健康状态估算不只看瞬时电压差还要结合充放电曲线判断哪节电芯的实际容量偏低再决定均衡策略另一个是把均衡控制和充电策略联动起来充电末期动态调整均衡强度避免浮充阶段长时间强均衡。两块都有不少能折腾的空间但这些都是在当前这套主控加均衡芯片的架构之上做的增量改进基础底座不用动。