基于MP2642GR-Z与PIC18F55K42的两串锂电被动均衡方案设计与实战
1. 从两个串联电芯的电压差说起为什么被动均衡在储能场景里依然能打储能和备用电源系统里两串电芯的电压不均衡是个绕不开的问题。你只要用过两节锂电串联给设备供电就会遇到一个很典型的现象充放电循环几十次之后两节电芯的开路电压开始出现肉眼可见的差距可能一节3.9V另一节3.7V。这个差距看起来不大但它会随着循环次数累积最终导致容量小的那节先到过充或过放保护点整组电池的可用容量被拖垮。很多人一提到均衡就想到主动均衡觉得能量转移效率高、发热小、看起来更高级。但实际在中小功率的储能和备用电源产品里被动均衡的出货量远远大于主动均衡。原因很直接成本、可靠性和静态功耗。主动均衡需要电感、电容、隔离驱动和复杂的控制逻辑BOM成本和PCB面积都上去了而且静态时如果控制不当还会持续耗电。被动均衡就是给每节电芯并联一个耗能电阻通过开关控制把电压高的那节电芯的多余能量以热的形式放掉电路简单到几乎不会坏。这次要聊的方案是用一颗MP2642GR-Z配合PIC18F55K42单片机对两个串联电芯做被动均衡。MP2642GR-Z是一颗带均衡功能的电池管理前端内部集成了均衡开关和驱动PIC18F55K42负责采集电压、判断均衡条件、控制均衡时序同时兼顾系统其他任务。这个组合的特点是前端芯片把模拟侧的脏活累活干了单片机只做逻辑判断和状态机分工清晰固件写起来不绕。适合谁看这篇内容如果你正在做两串锂电的BMS方案或者手头有个备用电源项目需要加均衡功能又或者你之前用分立MOS加电阻搭过均衡电路但被一致性和温升问题折腾过这篇内容应该能给你一些可以直接落地的参考。我会把选型逻辑、硬件连接、固件状态机、参数计算和实测中踩过的坑都摊开讲尽量让你看完就能动手。2. MP2642GR-Z在均衡回路里到底扮演什么角色2.1 前端芯片与单片机的分工边界先把这个方案的分工说清楚不然后面看电路和代码会乱。MP2642GR-Z的核心职责是模拟前端它负责电芯电压的采集通道切换、均衡开关的导通与关断、以及过压欠压的硬件级保护。PIC18F55K42是数字控制器它通过通信接口读取前端采集到的电压数据运行均衡判断算法然后把均衡开关的控制命令写回前端芯片。这个分工的好处在于均衡开关的驱动电流和导通电阻由前端芯片保证单片机不需要直接驱动功率管也不用担心IO口驱动能力不够导致MOS管工作在放大区发热。同时前端芯片内部通常有均衡定时器和过温保护即使单片机固件跑飞硬件层面也能在超时后自动关断均衡避免电阻持续耗电把电芯放空。注意不要把均衡开关直接挂在单片机的GPIO上驱动。我见过有人用PIC的IO口直接推一个NPN三极管去控制均衡电阻结果三极管基极电流不够工作在放大区均衡电流只有设计值的三分之一而且三极管烫得厉害。前端芯片集成的均衡驱动是经过设计的饱和压降和开关速度都有保证。2.2 均衡通道的电气连接方式两串电芯的均衡通道连接方式需要特别注意参考地的问题。两节电芯串联后底部电芯的负极是系统地顶部电芯的负极是两节之间的中点。MP2642GR-Z的均衡输出通道通常是开漏或者内部MOS对地导通的结构每个通道对应一节电芯的正负极。具体连接上底部电芯的均衡电阻一端接底部电芯正极另一端接前端芯片的均衡通道引脚芯片内部开关导通时把电阻拉到地形成放电回路。顶部电芯的均衡电阻一端接顶部电芯正极另一端接另一个均衡通道引脚芯片内部开关导通时把电阻拉到顶部电芯的负极也就是中点。这里的关键是前端芯片的均衡通道耐压必须覆盖顶部电芯的电压加上可能的瞬态尖峰。MP2642GR-Z的均衡通道耐压规格需要查数据手册确认但通常这类前端芯片的均衡引脚耐压会做到电芯满充电压以上再加一定裕量。如果你选的芯片耐压不够顶部电芯均衡时引脚会被拉到高于绝对最大额定值的电压芯片会损坏。这一点在选型阶段就要确认不要等板子回来才发现。2.3 均衡电阻的取值与功耗计算均衡电阻的取值直接决定了均衡电流和发热量。假设我们希望在顶部电芯电压4.2V时产生大约50mA的均衡电流那么电阻值大约是4.2V除以50mA等于84欧姆取标准值82欧姆。实际电流会略大一点约51mA。这个电流下电阻的功耗是电压平方除以电阻4.2乘4.2除以82约0.215W。所以电阻封装至少要选0805以上稳妥一点用1206或者两个0805并联。但这里有个容易被忽略的点均衡电流并不是恒定的。随着均衡进行电芯电压会下降均衡电流也会减小。如果电芯从4.2V降到4.0V82欧姆电阻上的电流从51mA降到49mA变化不大因为电压变化范围有限。但如果你的均衡终止条件设得比较低比如降到3.9V就停那平均电流会明显低于初始值。计算平均功耗时要用平均电压来算不能直接用满充电压。还有一个实际约束是前端芯片内部均衡开关的导通电阻。如果开关导通电阻有几十欧姆那它和外部均衡电阻串联后总阻值变大实际均衡电流会比计算值小。MP2642GR-Z的内部开关导通电阻需要查手册如果偏大外部电阻就要相应减小来补偿。我一般会在设计时留20%的电流裕量避免因为导通电阻和电阻精度导致均衡太慢。3. PIC18F55K42的固件状态机均衡不是一直开着就行3.1 电压采集与滤波为什么不能直接用单次采样值PIC18F55K42通过通信接口从前端芯片读取电压数据但读回来的原始值不能直接拿来做均衡判断。原因有两个一是ADC采样本身有噪声单次采样可能偏高或偏低几十毫伏二是均衡开关导通和关断的瞬间电芯电压会因为负载跳变产生瞬态波动如果在这个时刻采样读到的值不能反映真实开路电压。我的做法是在固件里做一个滑动平均滤波对每节电芯的电压连续采样8次去掉最大值和最小值剩下6个取平均。这样处理之后电压数据的抖动可以控制在正负5mV以内。采样时机上均衡开关关断后至少等待100ms再采样让电芯电压从负载状态恢复到接近开路状态。这个等待时间取决于电芯的极化特性和均衡电流大小50mA的均衡电流下100ms通常够了如果均衡电流更大等待时间要相应加长。提示滑动平均的窗口大小需要权衡。窗口太小滤波效果不够窗口太大响应变慢均衡判断会滞后。8次采样在大多数应用里是个比较平衡的选择采样间隔10ms的话一个滤波周期80ms加上100ms恢复等待均衡判断周期大约200ms对储能系统来说完全够用。3.2 均衡启动与停止的阈值设计均衡启动和停止的阈值设计是固件里最需要仔细考虑的部分。最朴素的做法是设定一个固定压差阈值比如两节电芯电压差超过30mV就启动均衡低于10mV就停止。但实际用下来固定阈值在充放电不同阶段表现差异很大。充电阶段电芯电压整体上升压差容易被充电电流和电芯内阻差异放大这时候如果阈值设得太低均衡会频繁启停。放电阶段压差又会被负载电流影响。所以更稳妥的做法是引入状态相关的阈值充电时压差阈值设高一些比如50mV启动、20mV停止静置和放电时阈值设低一些比如30mV启动、10mV停止。另外均衡的对象是电压高的那节电芯但判断哪节高哪节低需要在滤波后的数据上做比较。如果两节电芯电压差在阈值附近来回跳均衡通道会反复切换这会导致前端芯片的均衡开关频繁动作既增加功耗又影响寿命。解决办法是加一个滞回区间启动阈值和停止阈值之间留出足够的间隔同时均衡一旦启动至少持续一个最小均衡周期比如30秒期间即使压差暂时缩小也不停止。3.3 均衡时序与温度监控的联动均衡电阻发热是绕不开的问题。两节电芯同时均衡时两颗82欧姆电阻的功耗加起来约0.43W如果板子空间小、散热不好电阻周围温度会明显上升。PIC18F55K42需要定期读取板载温度传感器或者前端芯片内部的温度数据当温度超过设定上限时暂停均衡等温度降下来再恢复。温度监控的采样周期可以和电压采样错开比如每1秒读一次温度每200ms做一次电压判断。温度上限我一般设在60摄氏度超过就暂停降到50摄氏度以下再恢复。这个滞回区间防止温度在阈值附近波动导致均衡反复启停。均衡时序上还有一个细节是两节电芯不要同时长时间均衡。如果两节电芯压差都很大同时开启均衡会让总发热量翻倍。更好的策略是交替均衡先均衡电压最高的那节持续一段时间后重新评估如果另一节变成最高再切换。这样任意时刻只有一颗电阻在发热热管理压力小很多。当然如果压差方向明确只有一节电芯持续偏高那就一直均衡它不需要交替。4. 硬件布局与热设计那些数据手册不会告诉你的细节4.1 均衡电阻的摆放位置与铜箔面积均衡电阻的摆放位置对温升影响很大。我试过把两颗82欧姆电阻并排放在一起间距只有1mm结果均衡时两颗电阻互相加热表面温度比单独放置时高了将近20摄氏度。后来改成间距至少5mm并且在电阻下方铺了铜箔帮助散热温升明显改善。铜箔面积方面1206封装的电阻下方铺10mm乘10mm的铜箔温升可以降低10到15摄氏度。如果板子空间允许铺更大面积的铜箔效果更好。但要注意铜箔不能和敏感信号线靠太近均衡电阻下方的铜箔是接地的如果旁边有高阻抗的电压采样线铜箔上的噪声可能耦合过去。我的做法是在均衡电阻和采样线之间留至少3mm的间距中间用地线隔开。还有一个细节是均衡电阻的走线宽度。50mA的电流不需要很宽的走线1mm宽的铜箔在1盎司铜厚下载流能力远超50mA。但走线电阻会分压如果走线太长太细实际加在均衡电阻上的电压会降低均衡电流减小。我一般用0.5mm以上的走线宽度长度尽量短把走线电阻控制在0.1欧姆以内相对于82欧姆的均衡电阻可以忽略。4.2 前端芯片的电源去耦与参考电压稳定性MP2642GR-Z的电源去耦直接影响电压采集精度。前端芯片通常从电芯取电顶部电芯的正极是芯片的供电正极底部电芯的负极是芯片的地。这个供电方式下芯片的电源引脚上会有电芯电压的纹波和噪声必须加去耦电容。去耦电容的选型上我一般用1微法陶瓷电容加100纳法陶瓷电容并联1微法的放在芯片电源引脚附近100纳法的放在更靠近引脚的位置。如果芯片有单独的参考电压引脚参考电压的去耦同样重要参考电压不稳会直接导致电压采集值跳动。参考电压引脚通常接一个100纳法电容到地电容要尽量靠近引脚走线尽量短。注意前端芯片的供电来自电芯如果电芯电压在均衡时被拉低芯片供电也会跟着波动。虽然MP2642GR-Z的工作电压范围通常比较宽但如果电芯电压接近芯片的最低工作电压均衡时供电跌落可能导致芯片复位。这种情况下要么降低均衡电流要么在芯片电源引脚加大电容储能保证均衡瞬间供电不跌落。4.3 通信接口的抗干扰处理PIC18F55K42和MP2642GR-Z之间的通信接口通常是I2C或者SPI具体取决于前端芯片的支持。不管哪种接口在储能和备用电源这种有功率电感的场景里通信线都容易受到干扰。我遇到过I2C通信在均衡开启时偶尔出错的情况后来在SCL和SDA线上各串了一个33欧姆电阻并且在靠近单片机端加了100皮法电容到地通信稳定性明显提升。串阻的作用是抑制反射和限流电容的作用是滤除高频噪声。33欧姆和100皮法的组合对I2C的上升沿影响很小在400kHz速率下完全可用。如果通信速率更高电容值要相应减小否则上升沿会被拖慢导致通信失败。SPI接口的话时钟线更容易受干扰串阻和电容的处理方式类似但电容值要更小一般22皮法到47皮法。另外通信线的走线要尽量远离均衡电阻和功率电感如果实在避不开中间用地线隔离。通信线也不要和电压采样线平行走太长距离避免串扰。这些布局细节在原理图阶段就要考虑等PCB回来再改就麻烦了。5. 实测中遇到的三个典型问题与排查过程5.1 均衡电流只有设计值的一半从导通电阻查到电阻精度第一批板子回来之后我测了均衡电流发现只有25mA左右设计值是50mA差了一半。排查过程是这样的先确认电芯电压正常4.1V左右然后测量均衡电阻两端的电压发现只有2.0V左右而不是预期的4.1V。这说明均衡回路上有额外的压降。顺着回路查均衡电阻一端接电芯正极另一端接前端芯片的均衡引脚。测量均衡引脚对地的电压发现均衡开启时引脚电压是2.1V而不是接近0V。这说明前端芯片内部均衡开关的导通电阻比较大分掉了将近2.1V的电压。查数据手册内部开关导通电阻在典型条件下是40欧姆左右而我用的外部电阻是82欧姆总阻值122欧姆电流约33mA再加上电阻精度和电压差异实测25mA就说得通了。解决办法是把外部均衡电阻从82欧姆改成43欧姆这样总阻值约83欧姆均衡电流回到50mA左右。但要注意外部电阻减小后电阻自身的功耗增加了43欧姆电阻在4.1V下的功耗约0.39W需要换用更大封装的电阻我最后用了两个0805电阻并联每个承担约0.2W温升可以接受。5.2 均衡开启后电压采集跳变采样时机不对第二个问题是均衡开启后电压采集值会跳变几十毫伏导致均衡判断逻辑误判。一开始以为是ADC噪声加了滤波电容也没改善。后来用示波器看电芯电压波形发现均衡开关导通的瞬间电芯电压会有一个向下的台阶幅度约30mV然后慢慢恢复。这个台阶是电芯内阻和均衡电流共同作用的结果50mA电流乘以电芯内阻约0.6欧姆产生30mV的压降。问题根源是采样时机。原来的固件在均衡开启状态下也进行电压采样采到的值包含了内阻压降不能反映真实开路电压。修改后的逻辑是均衡开启后先关断均衡等待100ms让电压恢复再采样采样完成后重新开启均衡。这样虽然均衡占空比略有降低但电压数据准确了均衡判断不会误判。这个等待时间需要根据电芯特性调整。内阻大的电芯恢复慢等待时间要加长。我试过用200ms等待均衡效率下降约10%但电压数据更稳。实际产品里我用了150ms作为折中效果可以接受。5.3 高温环境下均衡频繁暂停温度阈值和散热要一起调第三个问题出现在高温老化测试中。环境温度升到45摄氏度后均衡电阻表面温度很快超过60摄氏度固件触发过温保护暂停均衡温度降下来又恢复如此反复均衡效率很低。排查发现两个问题一是温度阈值设得偏低60摄氏度对于电阻来说其实还有余量二是电阻的散热设计不够铜箔面积偏小。调整方案分两步先把过温暂停阈值从60摄氏度提高到75摄氏度恢复阈值从50摄氏度提高到65摄氏度。电阻的额定工作温度通常到125摄氏度以上75摄氏度暂停是安全的。然后加大均衡电阻下方的铜箔面积从10mm乘10mm增加到15mm乘15mm并且在电阻周围多打过孔到背面铜层帮助散热。调整后45摄氏度环境下均衡电阻表面温度稳定在70摄氏度左右不再频繁触发暂停。提示温度阈值不能只看电阻的额定温度还要考虑PCB板材的玻璃化转变温度。普通FR-4的玻璃化转变温度在130到140摄氏度长期工作在75摄氏度对板材寿命没有影响。但如果你的产品有更严格的高温要求比如环境温度60摄氏度以上那均衡电阻的散热设计要更激进甚至考虑用金属箔电阻或者把电阻移到板边借助外壳散热。6. 均衡策略的进阶优化从固定阈值到自适应6.1 根据电芯老化程度动态调整均衡阈值固定阈值在电芯新鲜的时候工作得很好但随着电芯老化两节电芯的容量差异和内阻差异都会变大固定阈值可能变得过于敏感或者过于迟钝。我后来加了一个简单的自适应逻辑记录每次充电过程中两节电芯到达满充截止电压的时间差如果时间差持续增大说明电芯不一致性在加剧适当放宽均衡停止阈值避免均衡频繁启停。具体实现上PIC18F55K42的EEPROM里存一个老化系数每次完整充放电循环后更新。老化系数初始为1.0如果两节电芯满充时间差超过10分钟老化系数增加0.05上限1.5。均衡停止阈值乘以老化系数这样电芯越老停止阈值越宽均衡不会因为压差始终降不到很低而一直开着。这个逻辑不是必须的但对于需要长期运行的备用电源系统来说能减少后期维护时的均衡异常告警。实现成本很低就是几个字节的EEPROM读写和简单的乘法运算PIC18F55K42完全能胜任。6.2 均衡与充电阶段的配合什么时候均衡最有效均衡最有效的时机是充电末期和静置阶段。充电末期电芯电压接近满充压差最能反映容量差异这时候均衡可以把高电压电芯的多余容量放掉让两节电芯同时到达满充。静置阶段没有充放电电流干扰电压采集最准确均衡判断也最可靠。放电阶段均衡的效果相对有限因为放电时压差主要来自内阻差异而不是容量差异均衡放掉的那点能量对放电过程影响很小。所以我的策略是充电阶段均衡阈值设得积极一些静置阶段正常放电阶段如果压差不大就暂停均衡把均衡机会留给充电和静置阶段。这个策略在固件里通过状态机实现PIC18F55K42检测到充电器接入就进入充电均衡模式充电器拔掉后进入静置均衡模式检测到负载电流就进入放电模式。模式切换时均衡参数跟着切换逻辑清晰调试起来也方便。6.3 低功耗待机下的均衡处理备用电源系统很多时候处于待机状态系统功耗要求很严。均衡电阻即使不开启前端芯片的静态电流和单片机的待机电流也要控制。MP2642GR-Z在待机模式下的静态电流通常在几十微安级别PIC18F55K42可以进入休眠模式定时唤醒做一次电压采集和均衡判断判断完继续休眠。唤醒周期我设的是10秒一次每次唤醒工作约200ms平均电流增加很少。如果判断需要均衡就开启均衡并保持一段时间均衡期间单片机可以继续休眠由前端芯片的均衡定时器控制均衡时长超时后自动关断。这样即使单片机在休眠中出了什么问题均衡也不会无限持续。待机均衡的阈值要设得比正常工作模式更宽松比如压差超过100mV才启动因为待机时均衡电流小均衡速度慢频繁启动没有意义。而且待机时系统散热条件可能更差均衡电阻的温升要留更多余量。7. 关键参数速查与选型对照7.1 均衡电阻选型对照表目标均衡电流电芯电压外部电阻计算值标准电阻取值电阻功耗推荐封装30mA4.2V140欧姆130欧姆0.136W080550mA4.2V84欧姆82欧姆0.215W1206或两个0805并联80mA4.2V52.5欧姆51欧姆0.346W两个1206并联或2512100mA4.2V42欧姆43欧姆0.410W2512或两个1206并联这个表里的外部电阻计算值没有扣除前端芯片内部开关的导通电阻。实际选型时如果内部导通电阻不可忽略外部电阻要相应减小。比如内部导通电阻40欧姆目标总阻值84欧姆外部电阻就选43欧姆左右。7.2 均衡参数配置速查参数推荐值说明电压采样滤波窗口8次去掉最大最小值后取平均均衡关断后采样等待100到150ms让电芯电压从负载状态恢复充电均衡启动阈值50mV充电阶段压差容易被放大充电均衡停止阈值20mV留出滞回区间静置均衡启动阈值30mV静置时电压采集最准静置均衡停止阈值10mV滞回区间20mV最小均衡持续时间30秒防止压差在阈值附近反复启停过温暂停阈值75摄氏度根据电阻和板材额定温度调整过温恢复阈值65摄氏度滞回区间10摄氏度待机唤醒周期10秒平衡功耗和响应速度这些参数不是一成不变的需要根据具体电芯特性、散热条件和产品要求调整。比如电芯内阻大的采样等待时间要加长散热条件差的过温阈值要降低待机功耗要求严的唤醒周期可以加长到30秒甚至更长。8. 写在最后几个让我少走弯路的习惯做这类均衡方案我最大的体会是不要等到板子回来才验证均衡回路。在原理图阶段就可以用仿真工具算一下均衡电流和功耗确认电阻封装和散热方案。我现在的习惯是在画PCB之前先用Excel把均衡电流、电阻功耗、温升估算都算一遍把参数定死再画板比板子回来再飞线改电阻省事得多。另一个习惯是固件里一定要留调试接口。PIC18F55K42的UART或者I2C从机模式都可以把电压数据、均衡状态、温度数据实时输出出来调试的时候用串口工具一看就知道均衡在干什么。没有这个接口你只能靠万用表猜效率差很多。最后一个习惯是均衡电阻不要用太小的封装。0805是底线能用1206就用1206空间允许的话两个0805并联比一个1206更灵活功耗分摊后温升更低。我早期用过0603的均衡电阻50mA下表面温度直接冲到90摄氏度虽然没坏但心里不踏实后来全部换成1206再也没为均衡电阻的温度操过心。