资讯动态

双串锂电池主动均衡模块设计:基于MP2642与PIC的电压均衡方案

发布时间:2026/10/16 3:10:58 来源:尧图企业网站定制
调试一套两串锂电池备用电源时拆开外壳看到两节电池电压一个3.94V、一个4.12V差了将近0.2V。当时的第一反应是挂个被动均衡电阻把电压拉齐但看到放电曲线和发热后决定不再这么糊弄下去。两节串联电池在储能和备用电源里太常见了正因为它只有两串很多人觉得“随便并个电阻就用”可恰恰是这种心态最容易出问题。我手头正好有两颗芯片一颗MP2642GR-Z同步降压转换器一颗PIC18F47K40单片机。于是基于这两颗器件搭了一个针对两节串联电池的主动均衡模块。整体思路不是复杂的单体间能量直接搬移而是从整个电池组取电通过降压恒流源给偏低的单体补充充电同时让偏高单体自然放电最后把压差一步步压到毫伏级。这个方案不追求教科书式的100%能量回收但胜在简单、稳定、器件少、容易调尤其适合两串这种“低成本优先”的场景。这篇把整个方案的拓扑逻辑、关键参数计算、单片机控制策略、实测数据以及我踩过的几个坑完整写出来给正在做双串均衡的朋友做个参考。1. 两节电池的均衡到底难在哪1.1 一致性差异是串联绕不开的问题只要是电池串联就逃不开一致性问题。两节电池出厂时电压、容量、内阻可能差别很小但使用一段时间后温度梯度、充电习惯、老化速度都会让差异被放大。备用电源尤其明显——长期处于浅充浅放甚至浮充状态电池长期在同一区间工作容量衰减快的单体电压会掉得快衰减慢的单体电压相对高压差越拉越大。压差一旦超过一定范围问题就变成恶性循环。充电时电压高的单体先到充电截止电压系统为了保护它只能降压或停充电压低的单体永远吃不饱放电时电压低的单体先跌破截止电压系统为了保护它只能提前切负载电压高的单体剩下的电量就白白浪费。更麻烦的是长期处于这种“一个被撑死、一个被饿死”的状态先天体质的差异会被进一步放大最后整组提前报废。两串系统因为电池少压差更容易被直接观察到这也是为什么我建议这类系统哪怕再简单也要把均衡考虑进去。1.2 被动均衡为什么治标不治本被动均衡的思路是用电阻把高压单体的多余电量放掉直到两节电压接近。看起来简单直接但问题不少。首先是热。假设均衡电流取0.5A一节4.2V的单体对地放电功率就是2.1W这个热量在密闭的备用电源机箱里是个不小的负担。要控制温升就得减小均衡电流电流小意味着均衡时间长长时间发热又反过来加剧器件附近电池的温升形成一个很别扭的循环。其次是被动均衡只放电、不补电。高压单体确实降下来了低压单体依然是那个低压单体两者只是“看起来接近了”实际可用容量并没有被补齐。后备场景下系统掉电切到电池组时低压单体仍然是短板只不过失效时间被推迟了一点。当然被动均衡成本极低很多简单产品都在用我也不是说它完全不行。但如果想真正解决一致性漂移就得让低压单体也参与进来即所谓主动均衡。1.3 主动均衡的正确目标很多人对主动均衡有个误解以为必须做成双向Buck-Boost、单体间点对点搬移能量效率拉到95%以上才算合格。对四串、六串以上的动力电池组这么要求合理因为单体多了均衡功率大损耗和发热都会被放大。但对两串这种小系统我更看重的是三点可靠、简单、成本可控。基于这个思路我最终选择了一个折中方案不从高压单体直接向低压单体搬能量而是由MP2642GR-Z从整组电压降压做了一个带限流的充电源通过PIC控制的开关矩阵选择给哪一节单体充电。高压单体虽然没有被单独接出来放电但整个均衡过程里它一直在对外供电、又得不到外部补充所以它的电压自然会下降低压单体获得充电电压自然上升。净效果就是能量从高压单体转移到了低压单体。这种拓扑不需要隔离、不需要双向功率级、也不需要复杂的四开关控制用一颗同步降压芯片和一个单片机就能完成代价是转换效率不是最高的。但对备用电源来说均衡通常发生在系统空闲或充电阶段损耗换来的是长久的安全和寿命这笔账是划算的。2. 从整组取电给低压单体补电这套均衡拓扑这样搭2.1 为什么不直接做单体间能量搬移我一开始也犹豫过是不是干脆用三极管或者同步整流管搭一个双向Buck-Boost直接把高压单体的能量灌到低压单体。仔细推演之后放弃了核心原因出在“地”上。两节电池串联公共负极是系统地中间节点是第一节的正极/第二节的负极。如果想把B2能量搬给B1功率级输入要接B2两端即中间节点和整组正极功率级输出要接B1两端即系统地和中间节点输入地和输出地之间存在一个B1电压的直流偏移。普通非隔离降压芯片的地只有一个无法同时接受两个电位不同的地。除非用隔离反激或者专门设计悬浮地的功率级否则这条路走不通。所以我选择“整组取电”这个思路MP2642GR-Z的输入直接接整组正负极输出经过电子开关接到某一个单体的两端。无论给哪节单体充电输入地都是系统地输出地也是系统地完全规避了地电平不对齐的问题。付出的代价是系统整体有一点额外能量消耗但换来了极其简单的功率级结构。2.2 系统框图与能量流动逻辑整个模块可以拆成几个核心部分电池组、开关矩阵、恒流降压级、主控采样和驱动。电池组就是两节串联的锂电池一个下电池B1电压3.0V~4.2V区域一个上电池B2中间节点叫MID整组正极叫TOP系统地为GND。MP2642的VIN接TOPGND接系统地输出端串一个采样电阻后接入开关矩阵。开关矩阵由四个低导通电阻的MOS管组成PIC通过GPIO驱动它们实现将恒流输出送到B1或B2两端。比如需要给B1充电时打开输出连接到MID的管子、导通到GND的管子需要给B2充电时打开输出连接到TOP的管子、导通到MID的管子。切换逻辑非常简单但必须先关闭所有对应MOS管再开启另一组严禁出现任何时刻输出端同时短接某个单体两端的情况。能量流动的原因也值得说透。当恒流源给B1充电时输出电流是从整组正极TOP一路经过MP2642、采样电阻、开关注入到MID再流过B1回到GND。与此同时整组因为要维持MP2642的输入功率TOP对GND的电流是存在的拓扑上B2也承担了这一份电流。也就是说B2在净放电B1在净充电。整体的效果就是高压单体能量逐渐向低压单体转移两节电压慢慢靠拢。2.3 开关矩阵的详细状态表给B1充电和给B2充电时开关矩阵的状态完全不同。为了避免理解混乱我把导通逻辑列成表。工作状态输出接TOP输出接MID输出接GND实际充电对象给B1充电断开闭合闭合MID对GND之间即B1给B2充电闭合闭合断开TOP对MID之间即B2待机/关闭断开断开断开无这里有一个容易踩的坑如果要给B1充电输出端必须同时接通MID和GND但有经验的工程师会发现输出对系统地之间就是B2的电压这是否等于把B2短路了不会因为MP2642的功率级是一个受控电压源/电流源它的内部有开关管输出节点并不等同于输入节点输出端和系统地之间的电位差由反馈网络决定而非由电池直接短接。换句话说MP2642把“整组高压”隔离成了一个可控制的低压源再从低压源往外送电流。只要输出目标电压设置合理就不会出现直接短路。在实际PCB设计上我特意把这四个MOS管放在尽量靠近电池连接器的地方打样时走线宽度也按均衡电流的2倍余量来布。开关切换产生的瞬态电流会比较大如果走线细电压跌落会干扰采样。3. MP2642GR-Z 恒流降压级的工程化设计3.1 输出参数的设定逻辑MP2642GR-Z在架构上是一颗内置功率管的同步降压转换器外围器件不多适合这种小功率均衡场景。整组电压在7.4V到8.4V之间波动输出端目标电压要低于单体最高充电电压。我按4.2V满充电池设计的均衡上限为4.15V再叠加一点保护余量实际设定为4.1V恒压。均衡电流也需要权衡。太小了电压靠拢太慢太大了MOS管和电感发热明显对备用电源的小外壳不友好。经过测试我采用300mA作为默认均衡电流最大可以调到600mA。300mA对应一节4.0V单体充电功率大概1.2W工作十几分钟就能把几十毫伏压差拉到很小同时发热完全能接受。这里有个设计细节恒压上限和均衡电流不是独立设置的。如果目标单体电压已经非常接近4.1V恒流源会自动进入恒压模式电流降下来防止过充。这正好就是锂电池充电需要的CC-CV特性MP2642的反馈环路天然支持。3.2 关键外围元件计算输出滤波电感的选取可以直接套用降压变换器的经典公式。假设开关频率fsw大约500kHz输入电压VIN取8.4V整组满电输出电压VOUT取4.1V期望纹波电流ΔIL控制在300mA左右电感值L的计算如下L VOUT × (VIN - VOUT) / (VIN × fsw × ΔIL)代入数值4.1 × (8.4 - 4.1) / (8.4 × 500 × 10³ × 0.3)约等于14µH我选用15µH的功率电感饱和电流取1.5A以上留足余量。输出电容主要用来平滑电压我用两颗22µF的X7R陶瓷电容并联ESR足够低。输入侧同样需要一个小容量陶瓷电容靠近VIN引脚容量10µF左右用于吸收开关动作产生的高频纹波这个位置离芯片越近越好。反馈网络用两只精密电阻分压上电阻从输出到FB下电阻从FB到地。如果FB参考电压按0.6V考虑要得到4.1V输出上下电阻比值大概就是(4.1-0.6)/0.6即35/6这样的比例。实际选型时用标准阻值凑近即可不需要追求极端精度因为后续单片机采样和闭环调整会兜底。3.3 反馈闭环的两种实现方式MP2642的反馈环路可以做成固定恒压源但均衡场景需要灵活调整目标电压和限流值所以我在反馈上做了点文章。一种做法是用PIC的PWM经过二阶RC滤波产生一个0到1.5V的直流电压接到反馈分压网络的上端通过软件调节这个直流电压来改变输出目标。优点是控制带宽随意缺点是增加了几个阻容元件而且如果PWM滤波不干净会引入输出纹波。另一种做法是更纯粹的软件电流环。输出端串联一个50mΩ采样电阻采样电阻两端电压经过差分ADC读取或者放大后读取PIC实时计算均衡电流。如果电流超过设定值就降低PWM注入电压从而拉低输出目标、限制电流如果电流低于设定值就逐步提高输出目标。实际调节周期可以放到5ms到20ms远小于电池热时间常数完全够用。我最终采用的是第二种思路因为调试时不用反复换电阻所有电流参数都能在代码里改。只需要注意ADC采样时序要避开MOS管刚切换的瞬间否则采样值会被开关毛刺污染。3.4 保护措施不能省均衡模块不是独立玩具它会直接接触电池两极保护逻辑必须做扎实。第一层保护是MP2642自身。它有内部过流和过温保护虽然不是专门针对电池设计的但作为功率级的第一道防线仍然有效。第二层保护在PIC侧。PIC实时采样两节单体的电压如果发现目标单体电压超过4.25V立即关闭MP2642的EN并使开关矩阵全部断开。第三层是看门狗如果单片机异常死机PIC的看门狗定时器会在几百毫秒内复位程序复位后所有IO默认状态设置为关闭开关保证不出现不可控的持续充电状态。温度保护我用了一颗10k NTC贴在电感附近ADC采温超过60℃就降额超过75℃直接停均衡。小机箱里均衡热量会被放大这条保护在做长时段均衡时很有用。4. PIC18F47K40 的电压采样与均衡状态机4.1 电压采样精度和采样方法均衡做得好不好很大程度取决于电压采得准不准。PIC18F47K40内置12位ADC对两串系统来说分辨率足够但外部电路设计仍要讲究。两节单体的电压都高于单片机供电电压必须分压。我在每节单体两端各接一组精密分压电阻分压比大约2:1这样4.2V电压进入ADC时大约2.1V。ADC参考电压选内部固定参考FVR的2.048V档这样量程正好覆盖常见单体电压区间分辨率大约0.5mV/LSB对毫伏级的均衡阈值判断来说很合适。分压电阻值不能选太小否则会持续给电池放电。我选了两个100kΩ串成200kΩ分压节点再并联一个0.1µF电容做低通滤波。ADC采样时需要根据源阻抗把采样保持时间适当加长我在配置里把TAD参数调整到软件允许的最大值确保采样电容充到准确电压。为了消除分压电阻自身误差所有关键电阻选0.1%精度或者1%精度并经过软件校准。我习惯在程序里保存两个校准系数一个针对B1通道一个针对B2通道校准方法是用高精度万用表实测电池电压把ADC原始值和实际值做线性拟合。这个方法简单有效能轻松把采样结果校正到10mV以内。4.2 均衡状态机与阈值设定均衡控制不能搞成简单的“一直开着”必须设计清晰的状态机。我把它拆成四个状态待机、开启、监测和结束。待机状态下PIC持续采电压同时保持所有开关断开。每200ms刷新一次滤波电压然后计算压差ΔV |V1 - V2|。当ΔV超过启动阈值时进入开启状态。启动阈值我设在30mV太小会导致均衡频繁启停太大又会让一致性妥协。开启状态下PIC先判定哪一节电压偏低然后将开关矩阵切到对应通道打开MP2642使能。此后每隔一段时间重新采样如果压差缩小到停止阈值10mV以下进入结束状态如果目标单体电压接近4.2V也强制结束防止过充。结束状态只是简单地等待下一次压差拉大。为了避免开关振荡我加了滞回控制启动30mV、停止10mV也就是说压差要降到10mV以下才会停止再次升到30mV以上才会重新启动。这样不会在一个临界值附近来回跳。用简单的C语言风格伪代码描述就是init_adc(); init_pwm(); init_gpio(); balance_target NONE; while (1) { v1 read_filtered(V1_CH); v2 read_filtered(V2_CH); dv abs(v1 - v2); if (balance_target NONE) { if (dv HYST_START) { balance_target (v1 v2) ? CELL1 : CELL2; switch_matrix_to(balance_target); buck_enable(); } } else { if (dv HYST_STOP || cell_voltage 4.25f) { buck_disable(); switch_matrix_open(); balance_target NONE; } } feed_watchdog(); delay_ms(200); }4.3 干扰抑制与失效保护实际产品上电池连接线会有一定阻抗开关切换瞬间电流突变会造成电压毛刺。如果ADC刚好在毛刺期间采样测出来的电压可能比真实值高出几百毫伏导致均衡误判。我的处理方法是多重滤波硬件上分压节点加RC低通软件上连续采样4次取中值再对中值结果做一阶低通滤波。这样即使有干扰影响也会被压制到可接受范围。失效保护方面我特意让PIC的所有均衡控制IO默认输出为关闭状态。因为PIC18F47K40的IO上电默认为输入输入状态正好让MOS管驱动下拉到关断这给了系统一个安全的初始状态。就算程序跑飞看门狗也能把芯片拉回正轨。5. 实测效果与几个高发问题5.1 实测数据复盘完成联调后我做了一组实测两节18650电池串联B1初始电压3.62VB2初始电压4.05V压差430mV均衡电流设定为300mA。通电后前10分钟B1电压快速上升B2电压同步下降压差从430mV缩到约120mV。这个阶段是均衡最“凶猛”的时期因为压差大软件一直保持全恒流输出能量转移速度最快。之后压差变小系统在恒流阈值附近波动压差从120mV缩到30mV左右用了大约20分钟。再往后就是收尾阶段电流已经很小压差继续向10mV收敛整个过程大概40分钟最终停在8mV附近。这组数据说明一个规律均衡前期快、后期慢是正常现象越接近目标越需要耐心。不要因为压差缩小变慢了就去强行加大均衡电流过大的电流不仅发热还可能在末期导致过冲。5.2 高发问题排查表调试过程中踩了几个比较典型的坑整理成表后续做类似项目可以直接对照。问题现象根因解决方法ADC读数跳动超过30mV采样时刻恰好落在MOS切换毛刺上调整采样时序避开切换后2ms软件取中值低通滤波均衡后期电压过冲停止阈值设置过高或未做滞回阈值降低到10mV增加滞回控制防止临界振荡开关管发热明显MOS管栅极驱动电阻太大开关损耗高加大驱动电流选用低Qg的MOS管驱动电阻降到10Ω级别MP2642上电不工作EN上电时序不对输入电容不足EN引脚串RC延时VIN附近补10µF陶瓷电容均衡到一半突然停止看门狗没喂程序卡在某个阻塞循环所有循环里加喂狗避免长延时阻塞5.3 我个人的几点体会做过这次双串均衡项目之后我最大的感受是对两颗芯片不要过度设计能用简单拓扑解决的就别硬上复杂拓扑。MP2642GR-Z负责功率级PIC18F47K40负责逻辑和采样两个器件各司其职整个系统调试起来非常顺。尤其是PIC这颗单片机12位ADC和足够多的IO让电路异常干净外围几乎没有多余的逻辑芯片。如果再让我做一次我会把均衡电流的控制环改成更贴合电池特性的策略启动阶段用较大电流快速拉低压差后期自动降低限流值防止过冲相当于给均衡过程做一个软着陆。还有一点是量产时一定要把分压电阻换成高精度低温漂的型号否则温度漂移会让软件里辛苦做的校准系数失去意义。均衡这件事说到底比拼的并不是硬件有多花哨而是你对电压数据的判断有多稳。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑