☰
双串锂电池主动均衡模块设计:基于MP2642与PIC的电压均衡方案
2026/10/15 1:44:03 网站建设 项目流程

调试一套两串锂电池备用电源时,拆开外壳看到两节电池电压一个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接TOP,GND接系统地,输出端串一个采样电阻后接入开关矩阵。

开关矩阵由四个低导通电阻的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.62V,B2初始电压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让电路异常干净,外围几乎没有多余的逻辑芯片。

如果再让我做一次,我会把均衡电流的控制环改成更贴合电池特性的策略:启动阶段用较大电流快速拉低压差,后期自动降低限流值防止过冲,相当于给均衡过程做一个软着陆。还有一点是,量产时一定要把分压电阻换成高精度低温漂的型号,否则温度漂移会让软件里辛苦做的校准系数失去意义。均衡这件事,说到底比拼的并不是硬件有多花哨,而是你对电压数据的判断有多稳。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询