
前几天做一套家用储能备用电源的控制板客户给的关键指标挺明确两串锂电主控不能太贵均衡不能靠简单电阻放电糊弄转换效率要能看。我手里正好有MP2642GR-Z这颗降压控制器主控选了Microchip的PIC18F56K42。做完之后回头总结这套组合用于双节电池主动均衡静态功耗、均衡速度和电路复杂度都还在合理范围。这篇就把整个设计链路摊开讲从芯片选型逻辑到实际调试遇到的坑一次说清楚。1. 为什么双串电池必须做主动均衡锂电池串联之后不一致性会一直存在而且会随着循环次数放大。两串电芯看起来只多了串联节点但失效模型完全不是线性的。比如你组一个7.4V的电池包放电时候哪节先到低压截止整个系统就停在哪节充电时候哪节先到高压保护充电就终止。所以双串系统里最弱的那个电芯几乎决定了整套系统的寿命和可用容量。被动均衡的做法是每节电池并联一个放电电阻电压高的就放掉一点把电压“拉平”。简单是简单问题也很明显第一只在充电末期起作用第二能量被电阻转成热量扔掉了第三均衡电流做大了发热严重做小了根本跟不上电芯自放电的差异。主动均衡的思路则是把高能量单元的能量搬一部分给低能量单元能量不浪费均衡窗口也不局限于充电末端。这次设计用的MP2642GR-Z就是用来做这个能量搬移的核心功率级。另一个容易被忽略的问题备用电源系统里电池大多数时间是浮充或待机状态自放电差异和温度差异一直在缓慢积累电压差。等到真正需要带载的时候如果电芯压差过大容量优势根本发挥不出来可能某一节直接触发欠压系统掉电时间比预期早很多。所以在待机状态下也做周期性的均衡维护比只在充电时拉一次靠谱得多。所谓“均衡”本质上是让两节电芯的荷电状态趋近而不是单纯把电压拉到相等。电压是外特性两节不同内阻不同容量的电芯静置电压相同不代表SOC相同。MP2642GR-Z在这里负责能量搬移PIC18F56K42负责感知电压差和决定搬多少两者各有分工后面逐个拆开说。2. 主控选型PIC18F56K42到底好在哪2.1 内核和外设的匹配度选PIC18F56K42而不是其他更常见的8位机或直接上32位机不是因为它便宜。核心考量是这颗芯片自带的可配置逻辑单元CLC和带滤波的ADC模块ADCC这两点恰好顶住了均衡控制里两个最麻烦的外围需求。均衡控制是个典型的低速反馈环但其中有一个环节必须实时性够好PWM切换方向保护。MP2642GR-Z工作在Buck还是Boost模式取决于能量从哪节搬到哪节。模式切换瞬间如果功率管控制信号出现毛刺轻则效率损失重则炸管。用CLC把模式切换信号和PWM输出做一个硬件级联比在中断里改寄存器靠谱得多。PIC18F56K42的CLC可以组合两个输入信号输出一个逻辑结果这就能把“方向信号”和“PWM脉冲”合成一个干净的驱动序列不占用内核时间。ADCC模块也是同样道理。均衡系统需要采集两节电芯电压、电池总压、电感电流和温度普通ADC在输入阻抗和采样速率之间要做权衡。ADCC内置了可编程的自动采样触发和累加平均模式能直接对采样电容充放电过程做控制输入阻抗可以配得比较高采电压数据比较稳。做模拟采集的同行都懂电压采样不稳后面所有均衡判断都是瞎算。2.2 存储器与运行余量PIC18F56K42有64KB程序Flash、4KB数据RAM在8位机里算是中高配。均衡状态机加上通信协议栈再加上掉电存储、故障记录这些Flash占用大概在40%~50%留出来的余量以后加诊断功能也够。数据RAM里有额外一部分可以映射为EEDATA做参数掉电保存很方便。均衡阈值、目标压差、滞环宽度这些都是需要离线可调的参数直接放EEDATA区生产校准的时候通过Modbus或I2C改就行省掉了外挂EEPROM。2.3 开发环境的实际体验我平时用另一家的IDE多一些这次用MPLAB X XC8说实话编译速度中规中矩但调试功能扎实。特别是带硬件断点的调试器在调状态机边界条件的时候帮了大忙。均衡控制最讨厌的就是“看起来什么条件都对但状态机就是卡在中间”这时看实时变量和断点组合比靠串口打印高效得多。还有一点值得提PIC18F56K42支持在线编程和调试共用一根引脚生产测试的时候不需要额外预留烧录接口板子小一点也能布局。3. 功率级核心MP2642GR-Z的Buck-Boost均衡拓扑3.1 芯片定位和外围拓扑MP2642GR-Z本质上是一颗高效率电流模式同步Buck控制器但它在均衡应用里并不是简单地接成标准Buck。双电芯均衡电路的核心是电感式双向变换器拓扑如下两节电芯串联中间节点通过电感分别连接到MP2642GR-Z的功率输出端。芯片工作在同步整流模式通过控制占空比和方向能量可以从上节电芯搬到下节也可以反过来。选择MP2642GR-Z而不是普通Buck关键在于它支持同步整流和较宽的输入电压范围。普通Buck控制器在轻载下会进入非连续模式均衡电流小时效率断崖式下跌。这颗芯片在连续和非连续之间过渡平滑即使均衡电流只有几十毫安也还能维持一个看得过去的效率。这个特性在备用电源待机均衡场景里极其重要——均衡本来就是个低功率长时程过程如果轻载掉链子那效率优势就荡然无存了。3.2 功率级的双向控制逻辑拿“上节搬到下节”来举例上节电芯电压视为输入下节视为负载MP2642GR-Z工作在Buck降压模式。方向切换时芯片的输入输出对调相当于输入变成下节输出接上节此时芯片逻辑上跑Boost。怎么实现这种反转通过外部模拟开关或继电器交换芯片的输入输出引脚。听起来简单做起来有几个点必须注意。第一交换的是功率路径不是直接的电源正负极。在PCB上要保证功率走线完全对称寄生电感尽量一致否则在几百kHz的开关频率下会出现严重的振铃。第二切换瞬间必须先关断PWM再交换路径等功率路径稳定后再重新开启PWM。这个时序逻辑用PIC18F56K42的CLC做硬件互锁能避免软件跑飞时出现的危险状态。方向切换的问题我在调试时踩过坑。开始偷懒用引脚直接控制继电器线圈没有加RC延时结果切换瞬间触点上拉弧波形惨不忍睹。后来改成“先关PWM延时2ms再切方向再延时5ms再开PWM”的硬时序配合CLC互锁才把尖峰压下去。3.3 电感选型与电流纹波电感是均衡电路的灵魂。MP2642GR-Z的开关频率可以由外部电阻在100kHz至1MHz范围设置。我在这个设计中选了400kHz折中效率、电感和噪声。电感量按电流纹波率30%设计。假设最大均衡电流1.2A输入电压8.4V输出电压7.2V占空比约0.86开关频率400kHz电感量大概是L (Vin - Vout) * D / (fsw * ΔIL) (8.4 - 7.2) * 0.86 / (400000 * 0.36) ≈ 7.2uH取标称品6.8uH。这里注意电感饱和电流一定要大于峰值电流的1.5倍否则在均衡启动瞬间或方向切换瞬间可能直接饱和然后MOS管电流失控。我选了10uH/3.6A饱和电流的功率电感余量充足发热也很低。3.4 输入输出电容的位置同步Buck工作在CCM时输入电流是阶跃的所以输入必须用小容量高频电容和大容量储能电容组合。我用了一颗22uF陶瓷电容并联两颗100uF固态电容贴近功率级放置高频去耦死角很小。陶瓷电容放在芯片VIN脚边上固态电容放在功率输入端汇流处顺序不能反经验之谈。输出侧同理但因为输出直接连接电池电池本身的等效电容很大所以输出侧电容主要做高频滤波22uF陶瓷加4.7uF瓷片并联就够了不需要堆大容量。实际测试在1.2A均衡电流下输出电压纹波大概20mV左右电池端完全无感。4. 采样与均衡控制策略的工程化实现4.1 高边和低边电压采样两节电芯串联低边电池的地和系统共地采样容易高边电池的两端都不在系统地上必须用差分或悬浮采样。我用了高精度电阻分压加运放差分放大再送PIC18F56K42的ADC。电压采样精度直接影响均衡阈值判断误差超过10mV就可能在两节电池之间反复振荡均衡永不收敛。所以我用了1%精度的电阻运放选偏置电流小的型号实际标定后系统误差控制在5mV以内。注意分压电阻要选温度系数低的否则温度变了均衡阈值跟着漂散热不好的备用电源机箱里尤其明显。还有一个细节ADCC的采样窗口要设得足够长。均衡工作时电感电流纹波会在地线上产生微小压降如果采样窗口正好卡在MOS管开关边沿采到的电压会叠加上开关噪声。我把采样窗口设到8us同时在固件里做16次累加平均实测电压数据的抖动小于3mV后续状态机判断就很稳了。4.2 滞环控制的状态机均衡控制状态机不复杂但有一个核心原则避免临界振荡。如果只设一个固定压差阈值达到就均衡、达不到就停止那么压差在阈值附近抖动时状态机会在“均衡中”和“空闲”之间反复切换继电器和MOS管被频繁开关浆糊一样的波形不说寿命也缩得厉害。我做了一个滞环结构压差大于35mV启动均衡工作目标是把压差搬到20mV以下压差降到20mV以下停止均衡进入待机观察待机期间压差回升且超过40mV再次启动均衡上下阈值的差距保持在15mV以上远大于采样噪声状态切换就不抖了。这套滞环逻辑在PIC18上就一个比较加一个状态位成本几乎为零但效果立竿见影。4.3 定时均衡与放电维护策略备用电源系统里电池主要处于浮充状态负载很小或没有。此时压差增长主要来自自放电率差异和环境温度梯度的累积增长速度很慢可能一天只拉开几毫伏。如果一直盯着阈值均衡可能一整天都不会启动一次但压差其实在悄悄积累。我的应对是增加一个定时均衡机制每6小时不管压差是否超限都强制做一次5分钟的小电流均衡把积累的轻微压差抹平。实测效果很好电池长期浮充下压差能稳定在15mV以内。此外备用电源系统还有个特有的挑战长时间不用电池会钝化。我加了一个放电维护模式每个月让电池组带一个小功率假负载放电到60%SOC再充回浮充电压激活电芯活性。这套操作需要放电开关和负载电阻占的面积不大但对延长电池组寿命效果很明显。4.4 方向判定与保护逻辑方向判定的依据是两节电芯的实时电压。但严格来说电压接近时不代表能量平衡尤其是突然带载时内阻大的一节压降大容易被误判为“低能量”然后反向均衡卸载后内阻恢复又开始向另一方向均衡形成低频振荡。所以我在方向判定里加了滤波用3次电压采样的平均值做方向判断每次采样间隔200ms方向判定至少需要600ms的数据。同时在方向之前先确认系统不在重载状态避免均衡电流和负载电流叠加到同一节电芯上造成过流。这些逻辑在PIC18F56K42上跑起来很轻松状态机的响应周期50ms剩余的CPU时间做通信和故障诊断都有富余。5. 软件结构和关键代码片段5.1 状态机模块设计整个均衡软件的骨架是一个状态机每个状态的处理函数短小而集中IDLE采样计算压差判断是否进入均衡EQ_FWD能量从高边搬到低边EQ_REV能量从低边搬到高边FAULT检测到异常停止均衡上报错误每个状态的进入和退出都有严格的中间转换态比如方向切换要先经过DIR_SWITCHING状态禁能PWM转换方向再等功率级稳定后重新使能PWM。状态机的实现没有用复杂架构就一个switch-case加函数指针表阅读和维护都很方便。5.2 用CLC做硬件互锁软件状态机再严密也防不住故障条件下寄存器被改写或程序跑飞。我在方向切换和PWM输出之间加了一道硬件互锁用的是PIC18F56K42的CLC外设。简单说CLC把“PWM_EN”和“DIR_SEL”组合成最终的驱动输出。DIR_SEL在切换过程中不允许直接拉高或拉低必须通过一个专用寄存器位翻转配合定时器延时。CLC在这里的作用是即使软件意外把DIR_SEL改错了只要PWM_EN还是低电平最终输出端也不会有脉冲。逻辑上相当于一个“先断后切”的硬件保证不依赖软件执行的时序。具体配置代码大致是// CLC4: PWM_EN (input) AND DIR_SEL (input) GATE_OUT CLC4CON 0x00; CLC4SEL0 0x02; // PWM_EN from PWM module output CLC4SEL1 0x04; // DIR_SEL from GPIO CLC4GLS0 0xFF; CLC4GLS1 0x0C; // 2-input AND CLC4CON 0x80; // Enable这段配置的关键是CLC4GLS1的取值要看数据手册的逻辑门真值表确认我一开始就是在这搞反了结果输出恒等于某个输入方向切换功能压根没生效。5.3 均衡电流环路的PID参数均衡的核心是控制搬移电流。MP2642GR-Z内部有峰值电流环路但外部还要加一个电压误差或电流误差的慢环来设置目标电流。我在PIC里做了一个PI控制器输出作为MP2642GR-Z的反馈补偿端基准。调PI参数时走了点弯路。开始P给得比较大均衡启动瞬间电流冲到了2A多电感啸叫得厉害。后来把P降到0.3I设到0.05均衡电流从启动到稳定大约300ms过冲控制在10%以内电感安静了效率也回升了。数字PI在8位机上的实现不要用浮点全用整数定点运算P值放大256倍存成整数避免长期积分漂移。这块代码不到100行但均衡的动态行为基本都由它决定。5.4 故障标志与CAN上报备用电源系统如果只有一个均衡板故障可能无人知晓。我在板上用PIC18F56K42的CAN模块做了一套简单的状态上报数据帧周期1秒内容包括电芯电压、压差、均衡方向、占空比、温度、故障码。CAN波特率配了500kbps报文ID按功能和板号做区分后期接入上位机后可以直接看所有电池的均衡状态方便得很。CAN模块初始化和收发缓冲区的配置参考了Microchip官方库但引脚映射是自己按PCB布局分配的毕竟板子布线时引脚分配往往是由走线决定的。5.5 断线保护和过温降额均衡系统里最危险的情况不是压差大而是采样线断开。采样线一断ADC读到的是分压电阻网络的偏置电压可能偏到完全不合理的值比如20V或0V。如果控制逻辑没做合理性判断此时误判断方向可能会把均衡电流全部送进保护电阻或失控。我在固件里做了三重保护电压范围检查任何一节电压不在2.5V~4.5V合理区间时直接进入FAULT状态并闭锁压变率检查200ms内电压变化超过1V判定为异常锁存等待人工复位采样值互相校验两节电压之和与总压采样值的偏差超过一定量说明有某路采样异常过温降额保护同样重要。均衡电路工作时功率管和电感的温度会升高。我在靠近MOS管处放了一颗NTC温度超过65℃时将均衡电流从1.2A降到0.6A超过75℃时直接停止均衡恢复浮充。这能避免设备在夏季封闭机柜中因高温累积损坏。6. 调试过程中的典型问题和排查记录6.1 电压采样跳动导致均衡误动作板子刚上电时均衡功能未开启两节电芯无压差。但系统莫名其妙每隔十几分钟就均衡一次有时甚至反向均衡。查了日志才发现ADC采样值时不时出现一个明显的跳动尖峰电压值跳变量十几毫伏到几十毫伏不等。排查到最后是采样使能信号距离高频开关节点太近PCB上走线寄生耦合进去的开关噪声。把采样滤波电容从1nF加大到100nF再把ADC触发改成定时器同步触发逐帧滤波后采样跳动完全消失。6.2 方向切换瞬间的电流尖峰均衡方向从“上搬到下”切换到“下搬到上”时总线上出现了一个2A以上的尖峰电流持续时间约10us波形上看像是一个振铃脉冲串。原因就是我在初版软件里切换方向时没有先关PWM。虽然设计上已经预留了关断语句但调试阶段为了省时间临时删掉了结果时序完全靠外部继电器机械动作来保证继电器触点的抖动当然会带来一堆毛刺。后来严格按照“关PWM、延时、切方向、延时、开PWM”的执行流并在固件里加入不可跳过的延时标志位问题才彻底解决。其实这个逻辑用28335的时候也是同样的坑任何负载切换都一样。6.3 轻载效率过低改完方向和采样问题后测量效率10%负载下效率只有71%比预期低了大概8%。拿示波器看开关节点波形发现是芯片在轻载时进入断续模式频率跳变导致控制环路有点混乱。提高轻载效率的办法有两个方向一是加深PWM最小脉宽让芯片尽可能在连续模式运行二是提高轻载时均衡电流的最小值压缩断续模式的工作区间。我选了后者把电流环最小值从0.15A抬到0.3A轻载效率回到80%以上代价是每次均衡动作至少搬运0.3A的能量但备用系统里的能量预算完全扛得住。6.4 电感饱和导致均衡电流失控一款电感样品的饱和电流标称值偏低在1.5A电流下效率下降明显均衡电流纹波变大并伴随明显的“吱吱”啸叫。后来换用饱和电流3.6A的电感工作电流到1.8A依旧无噪音无异常正常工况下也稳住了。这里说一个挑选方案不要只看电感的额定直流电流要看峰值电流和纹波叠加后的实际峰值留出40%以上余量。均衡电路是最容易在启动瞬间和方向切换瞬间出现电流尖峰的场景余量小了早晚出事。6.5 故障误报与恢复机制前期固件设置的故障锁存方式太激进只要有一次电压采样不合理就锁死需要人工断电复位。实际使用中电池接入瞬间接触电阻和浪涌电流可能导致短暂异常此时锁存会造成误报。改进方案是把FAULT状态分为“临时故障”和“永久故障”。临时故障例如电压短时超范围累计3次且在1分钟内无复发则自动恢复永久故障例如温度超过上限或电压持续超范围超过5秒才锁死等待人工处理。这样既保证安全性又避免误锁带来的运维负担。7. 在储能与备用电源场景中的实际表现整套板子在常温环境下连续跑了72小时两节电芯起始压差130mV一个3.9V一个3.77V开启均衡后约40分钟压差收敛到15mV以内之后定时均衡维持稳定。均衡期间静态电流约为4mA不含均衡增益待机模式下整板功耗低于1mA对电池组的影响可以忽略。备用电源最常用的场景是浮充放电备电。在这类场景里电容器容量和电池容量共同决定备电时间电池一致性越好可利用容量越高。我拿一套8Ah电池组做模拟备电测试均衡优化后比不做均衡的系统多释放了约12%的容量这个数字对备用电源来说已经相当可观——意味着同样的电池可靠性提升一档。不过也想提醒一点这套电路适合两串电池如果电池串数扩大比如四串、六串甚至更多单纯靠“两两均衡”的方式会越来越难收敛。多串系统的拓扑会变成“相邻组均衡”或“中心母线均衡”控制器的选型和算法难度都会上一个台阶。PIC18F56K42做四串也还能应付但主控的资源分配和PCB布局都要重新规划。8. 常见问题速查表现象可能原因排查方向压差长时间不收敛采样精度不足阈值附近振荡检查分压电阻精度和运放偏置加大滞环均衡启动瞬间有啸叫电感饱和电流不足换饱和电流余量更大的电感方向切换有尖峰切向时序未遵守“先断后切”检查固件是否强制延时CLC互锁是否生效待机功耗高前端采样分压电路常通加采样使能MOS管只在采样窗口导通故障误锁锁存条件太敏感区分临时故障和永久故障增加恢复机制均衡电流低于设定值输入输出压差太小占空比受限检查最小占空比设置必要时提高开关频率采样值周期性跳动采样窗口与PWM开关边沿重叠用定时器同步采样加大滤波电容还有一个容易忽略的坑均衡板和生产设备通信时如果CAN总线另一端没接终端电阻报文会不稳定。调试时务必在总线两端分别加120Ω匹配电阻不然偶发的持续故障会让你在软件层排查很久。9. 个人经验总结做均衡设计这么多年最大的体会是均衡的关键不在芯片多高级、算法多花哨而在于采样准不准、时序稳不稳、保护全不全。MP2642GR-Z这种老牌控制器PIC18F56K42这个中端8位机组合起来完全可以做出一个可靠、低成本、效率高的双串主动均衡器。实际调测下来效率保守估计能达到85%左右如果进一步优化电感参数和PCB走线可以到90%以上。开关频率、电感量和采样滤波电容这3个参数相互耦合换任何一个都必须重新测纹波和效率不能只改一个参数就完事。如果你现在也在做储能或备用电源的双串均衡建议按这个顺序走下去先定功率拓扑和芯片再设计采样和保护再写状态机和环路最后调PCB布局。省去哪个环节后面返工的代价都是几何级增长。