两节串联电池主动均衡方案:MP2642GR-Z与PIC18F47Q10实战解析 做两节串联电池的储能或者备用电源系统比很多人想象中麻烦不少。难点不在于“把两个电池接起来”而在于两个电芯的电压很难保持一致。电芯内阻不同、温度不同、出厂容量有偏差用几轮之后总电压看起来正常拆开看却是一节快满了、另一节还饿着。这就是所谓的“电池不均衡”。我在做这类方案时常用到 MP2642GR-Z 和 PIC18F47Q10 这一套组合前者解决最核心的电荷转移问题后者负责采样、判定和系统管理。这篇文章就围绕这个方案把原理、选型、电路、固件、调试和排障整个流程讲透希望能给你省下一些摸索时间。1. 为什么两节串联电池必须做专门均衡1.1 “短板效应”比想象中更伤电池先看一个很典型的场景两节电芯串联总电压 8.4V看起来状态不错。但实际测量会发现靠近正极的那节已经到 4.35V靠近负极的那节只有 4.05V。如果这时候继续充电充电器看的是总电压到 8.4V 就停止结果正极电芯已经过充了负极电芯还没充满。放电的时候反过来负极电芯先到保护电压整机断电正极电芯还剩下不少容量。这套逻辑听着简单可真发生在实际项目里问题会被放大。UPS 备用电源要求长期浮充、随时待命储能系统则更在意循环寿命和可用容量。长期不均衡的直接后果是某个电芯提前老化继续恶化之后保护板会判定整组电池异常系统停机。对用户来说就是“明明还有电为什么突然不能用了”。对做产品的人来说这就是售后和口碑。另一种容易被忽略的隐患是不一致造成的电流分配问题。电芯并联均衡大家耳熟能详但串联电芯的“不均衡”更隐蔽它不体现在负载电流大小上而是体现在电芯工作点不同。高电压电芯承担了更多充电压力低电压电芯在放电时又被迫输出更多能量两边同时加速损耗。所以串联电池的均衡表面是在“拉平电压”本质是在“延长系统的使用寿命避免短板电芯拖垮整组”。1.2 被动均衡的局限以及主动均衡为什么更合适行业内早期用得最多的是被动均衡也就是在每节电芯上并联一个几百欧姆的电阻谁电压高就通过电阻放掉多余的电。成本低、逻辑简单但问题很明显多余的能量全部变成热量均衡电流一般也就几十毫安到一百多毫安速度慢而且发热位置通常在电池仓内部很难散。在小容量两串电池里勉强能用一旦放在容量稍大的储能或备电系统中就显得力不从心。主动均衡的思路完全不同它是把高电压电芯里的电荷通过储能元件搬到低电压电芯里而不是烧掉。这里面又分电感式和电容式两种。电感式靠电感储能效率高但电感体积大、电流纹波不好处理EMI 问题容易让人头疼。电容式、也就是开关电容方案用一颗电容通过开关网络来回切换把电荷从一节电芯搬到另一节电芯。没有电感体积小几乎不产生额外的磁场干扰效率和易用性平衡得很好。我之所以在中小功率储能、备电场景里偏爱开关电容方案还有一个原因它天然适用于低压差环境。两节电芯之间的压差通常只有十几毫伏到几十毫伏电感式方案在这么小的压差下很容易进入不连续模式控制复杂而开关电容在这种工况下非常自然切换一次就搬运一份电荷压差小就搬得少压差大就搬得多自动适配。1.3 MP2642GR-Z 和 PIC18F47Q10 各自负责什么看到这个标题你可能会问一颗均衡芯片自己就能完成均衡为什么还要 MCU实际产品中均衡芯片负责的是“执行”而 MCU 负责的是“判断”和“管理”。MP2642GR-Z 这一类的开关电容均衡器可以把电荷从高电压电芯搬向低电压电芯但它本身不负责判断“是否需要均衡”“什么时候该停”。直接让它一直开着电芯之间压差很小的时候均衡电流虽然不大但空载状态下持续工作本身就是损耗也会让电池在静置时无谓地循环充放电。这时候就需要 MCU 来采样两节电芯的电压计算压差决定在什么时机打开或者关断均衡器的使能引脚。PIC18F47Q10 这颗 8 位 MCU 在其中的角色不只是给出一个使能信号。它自带 12 位 ADC可以分别采集两节电芯的电压带内部运算放大器可以用来做电流检测或者差分采样还带 CLC可配置逻辑单元这类内核独立外设可以做一些硬件级的触发保护。再加上 UART、I2C 这类通信接口你可以让它和上位机或者电池管理主控通信上报电芯状态记录历史数据甚至做远程诊断。简单说MP2642GR-Z 是把“能量搬运”这件事做扎实PIC18F47Q10 是给这个系统装上眼睛和大脑。两者配合才能做到既动得快又停得准不误伤电池。2. 核心器件与均衡原理拆解2.1 开关电容均衡的工作原理要理解这套方案必须先理解开关电容是怎么“搬电”的。你可以把它想象成两只水杯一个水杯水多一个水杯水少现在用一个小杯子当“搬运工”先从水多的杯子里舀一勺再倒进较少的那只杯子里反复操作直到两杯水一样高。在电路里小杯子就是那颗“飞渡电容”也叫飞跨电容。两个电池之间有由 MOS 开关组成的网络一组开关把电容接到高电压电芯两端电容快速充电到接近该电芯的电压随后开关切换电容改接到低电压电芯两端因为电容电压比低电芯电压高电荷就释放进去。每切换一次就完成一次电荷搬运。开关频率越高单位时间搬运次数越多飞渡电容容量越大每次搬运的电荷量就越大。关键点是这种拓扑不需要电感来做能量转换所以整体方案可以做到非常小巧。对两节串联电池来说它只需要在电芯之间反复切换并不改变整个电池组的对外电压。这也是为什么它能实现在系统不停止工作的前提下一边供电一边均衡非常适合储能和备用电源这类不能随意断电的设备。2.2 MP2642GR-Z 的典型工作逻辑我把 MP2642GR-Z 理解为一种高度集成化的开关电容均衡器。它的内部已经集成了开关管和相应的驱动、逻辑控制外部只需要极少数的元件就能工作。从典型应用的角度看它一般会接出电池组正极、中间串联点、电池组负极这几个关键节点以及一个专门的飞渡电容引脚还有使能控制和状态输出。使用的时候MCU 通过 GPIO 控制使能引脚。使能有效时均衡器内部的开关网络开始交替动作飞渡电容在两节电芯之间搬运电荷使能关闭时内部开关全部断开均衡器进入高阻态相当于从电路里摘掉。这个特性非常关键因为系统待机时我们通常希望电池回路里没有任何额外负载否则会一点点漏电长期下来电池可能被放空。值得强调的是这类芯片并不是充电管理芯片它不需要也不应该替代充电器。它的职责是让两节电芯的电压趋于一致换句话说它管理的不是“电池组整体的能量进入”而是“内部能量的重新分配”。很多第一次用的人会把均衡和充电混为一谈这是一个容易走入误区的点。2.3 PIC18F47Q10 在系统里承担的任务PIC18F47Q10 是一颗功能非常全面的 8 位 MCU。它最吸引我的地方不是算力而是丰富的模拟外设和内核独立外设。作为一个电池管理中的“监督角色”核心需求就是精准采样、快速判断、可靠输出这些它都能覆盖。具体到这套系统它会做以下几件事第一周期性地采集两节电芯的电压。每节电芯的电压通过分压电阻或者运放调理送进 MCU 的 ADC。采样之后在软件里做滤波、偏差校准、换算成实际电压值。第二根据电压差决定均衡器的开关。MCU 判断压差是否超过启动阈值如果超过就打开使能如果压差回落到停止阈值以下就关闭使能。这个操作要带迟滞避免系统在临界点反复切换。第三做异常检测。例如某节电芯电压低于欠压门限需要禁止均衡并进入保护或者报警状态。因为均衡动作本质上是电荷从一节流向另一节如果某一节已经达到严重过放继续均衡反而是有害的。第四与外部通信。MCU 可以通过 UART 把电芯状态发送给上位机或者通过 I2C 与某块主控 BMS 芯片配合。在储能系统里数据上送几乎是必须的运维人员需要看到每一节电芯的趋势曲线。2.4 均衡电流和均衡时间的估算方式在做方案设计时有一个问题绕不开这套均衡器到底能用多大电流工作均衡需要多长时间才能把压差拉回来这里有一个非常实用的估算模型。以开关电容的等效思路来看从高电芯向低电芯搬运电荷的过程可以等效为一个电阻连接在两节电芯之间。这个等效电阻的大小约等于 1 除以开关频率与飞渡电容容值的乘积公式记为 R_eq ≈ 1 / (f_sw * C_fly)。如果芯片开关频率是 1MHz飞渡电容取 0.1 微法那么等效电阻就是 1 / (1×10^6 × 0.1×10^-6) 10 欧姆。当两节电芯压差是 50mV 时均衡电流约为 5mA压差 100mV 时电流约为 10mA。这里就能看出开关电容均衡的一个特点均衡电流是随压差自动变化的。压差大电流大拉平速度快压差小电流小避免过度均衡。这是非常理想的特性。实际芯片还会受到内部开关导通电阻、飞渡电容 ESR 的影响等效电阻会比理想值略大一些但量级的判断是没问题的。如果要加快均衡速度可以增大飞渡电容容值但也要注意芯片对飞渡电容有规格要求电容太大开关瞬间的浪涌电流会变大可能触发芯片内部限流反而没有收益。具体选多大要参考芯片手册的限制范围最好留一点余量不要直接顶到上限。3. 硬件设计实操原理图、器件选型与布局3.1 主回路拓扑与接线硬件设计的第一步是把主回路理清楚。两节电芯串联中间有一个节点我把它称为“中间点”。电池组正极接系统正极负载电池组负极接系统负极。均衡芯片要做的就是在这两个电芯之间来回搬运电荷。按照常见的开关电容均衡器接法芯片会有一个端口连接电池组正极一个端口连接电池组负极还有一个端口连接中间点。飞渡电容两端分别接在芯片的两个飞渡电容引脚上。使能引脚由 MCU 控制。状态输出引脚可以用来指示均衡器工作状态也可以悬空不接。接线时有一个我非常在意的细节电池正负极到均衡芯片之间的走线要尽量短、尽量粗。虽然均衡电流不大但开关电容工作时飞渡电容的充放电电流波形是脉冲状的走线阻抗会让电压产生尖刺影响电池电压采样甚至干扰 MCU。采样电路需要单独从电池的两个端口引出“采样线”不能和均衡器的大电流回路共用同一条线。均衡器的脉冲电流会在铜箔上产生压降如果采样电路和它共用路径ADC 读到的是带噪声的电压。所以我在绘制原理图时会把采样网络单独画成一个小分支星型接到电池端点上。3.2 飞渡电容的选型要看着四点飞渡电容是均衡器唯一的储能元件它的质量直接影响均衡效果和系统可靠性。第一是容值。要落在芯片手册允许的范围内常见选择在 0.1 微法到 4.7 微法之间。容值太小每次搬运的电荷少均衡速度慢容值太大开关瞬间冲击电流大会导致效率变差。 第二是耐压。飞渡电容充电时最高会承受一节电芯的电压但在异常情况下可能会承受电池组总电压的压差所以耐压按电池组总电压的 1.5 倍留余量比较稳妥。对两串锂电池来说选 16V 或 25V 耐压的电容都足够。第三是介质类型。陶瓷电容是首选因为 ESR 极低能承受高频开关电流而且体积小、价格低。X7R 或者 C0G 介质比较合适尽量避免使用 Y5V 介质它的容值会随着电压和温度大幅漂移均衡效果不可控。第四是封装位置。飞渡电容在原理图上看起来只是一颗电容实际布局时却要尽量靠近均衡芯片的引脚。因为引脚之间的寄生电感会和电容形成谐振轻则产生过冲严重时可能让开关节点电压超过芯片耐受能力。3.3 电芯电压采样电路怎么设计才准采样电路是整个闭环控制的眼睛如果采到的电压不准后面的均衡判断全部失真。我在这个项目里的做法是把两节电芯的电压分别通过分压电阻降低到 MCU ADC 输入范围内再经过 RC 滤波进入 ADC 引脚。PIC18F47Q10 的 ADC 是 12 位参考电压如果选 2.4V理论上分辨率大约是 0.6mV这个精度完全够用。问题是分压电阻的精度和温度漂移会直接变成测量误差。所以我选用 0.1% 精度、低温漂的电阻并且分压比要精确计算。以单节电芯最高 4.4V 为例如果希望 ADC 输入在 2.2V 以内分压比大约是 1:1也就是用两颗 100k 电阻分压。100k 的选择还带来一个好处采样回路对电池的静态损耗非常小约 22 微安长期待机不会明显拉低电池电压。RC 滤波的截止频率不要取得太低否则 ADC 采样时会因为信号建立时间不够造成误差。我用的是 10k 电阻加 100nF 电容截止频率约 159Hz。这个值不算低但它要滤除的本来就是低频噪声真正的高频脉冲干扰在均衡器布局合理的情况下影响有限。如果你所在场景电磁环境复杂可以把 RC 放在靠近 ADC 引脚的位置增强抗干扰性。还有一个常见误区单独测每一节电芯电压时不要直接用电芯正极对地量顶端电芯的电压再减去底端电芯电压这样会引入很大的误差和噪声。理想的方案是直接用差分方式测量每一节电芯两端的电压。PIC18F47Q10 内部带有运算放大器可以把顶端电芯的电压通过差分放大电路处理后送到 ADC这样能获得更好的共模抑制。3.4 PCB 布局布线的原则布局这一块我总结了四个字分区、短距。电池组正极、中间点、负极这些高电压高电流路径走线要宽尽量按电池电流去设计不要只看均衡器的毫安级电流。采样信号线和飞渡电容开关线要尽量远离最好用 GND 将它们隔开。均衡器芯片放在靠近电池连接器的那一侧MCU 放在另一侧中间留出一条完整的 GND 平面这样采样电路就不会受到开关脉冲的直接影响。如果你把 MCU 和均衡器放在双面板上特别注意不要在关键信号下方布其他高频走线。两节串联电池的电压采样线虽然都是低频信号但 ADC 是精密模拟电路它对地弹和电源噪声很敏感。给 MCU 的供电脚附近放一颗 100nF 陶瓷电容再并一颗 10 微法电解电容是很成熟的做法。3.5 保护与异常处理任何涉及电池的系统都不能只考虑“正常工作时怎么办”还要想“异常时能不能安全停下来”。我在这个项目里加入了三级保护思路。第一级均衡器的使能引脚通过一个下拉电阻置为默认关闭。这样即使 MCU 在上电初始化之前输出高阻态均衡器也不会意外启动。第二级用 MCU 实现对电芯电压的上下限判断。如果底端电芯低于 2.5V顶端电芯高于 4.3V软件立即禁止均衡并把状态置为告警。第三级在电源输入端或者系统总线上加一颗自恢复保险丝防止电池端子意外短路时电流无限扩大。这里还要强调一点均衡芯片的使能引脚通常耐受电压有限不要直接接一个拉到电池正极的电阻给它灌入高压。如果 MCU 的 I/O 是 3.3V 供电而电池组总电压高达 8.4V中间必须加电平转换或者使用开漏输出加合适的上拉电压避免引脚过压损坏。4. 固件部分控制逻辑与调试流程4.1 PIC18F47Q10 的资源分配在整个程序里我把 PIC18F47Q10 的资源分配得尽可能简单ADC两个通道分别采样底端电芯和顶端电芯。GPIO一个输出引脚接均衡器 EN一个 LED 指示工作状态。定时器用来产生周期性的采样节拍比如每 100ms 采一轮。UART应对上位机调试输出电压、压差、均衡状态等数据。这种连法可能有人觉得浪费了芯片的很多资源。但实际做产品最重要的是“够用、稳定、可排查”。如果把所有功能都塞进去程序一旦跑飞排查起来成本很高。我没必要让一颗 MCU 做监控之外的事。要注意的是 ADC 参考电压的选择。如果用内部固定参考电压读数可能受温度和电源电压影响所以要定期做校准。如果参考电压来自一个精密的外部基准源成本会上升但长期稳定性更好。我倾向于在早期原型上用外部基准因为调试数据越干净后面写算法越容易。4.2 均衡启动和停止的迟滞判断均衡控制逻辑的核心不是一个简单的阈值比较而是一个带迟滞的状态机。它必须回答三个问题何时启动、何时继续、何时停止。启动条件两节电芯压差绝对值大于启动阈值比如 20mV。同时两节电芯的电压都要在正常工作范围内底端不低于欠压保护值顶端不高于过压保护值。因为如果某节已经接近保护边缘均衡可能把小问题搞成大问题。停止条件压差小于停止阈值比如 10mV。这里启动和停止之间留了 10mV 的迟滞窗口防止在临界点反复开关。实际做设备时如果没有任何迟滞你会看到均衡器在 1 秒内开关几十次不仅耗电还会让芯片发热。另外还需要一个“超时保护”。即使压差一直拉不平均衡器也不能永远开着。我会设置一个最大运行时间例如连续均衡 30 分钟后自动暂停一分钟然后重新采样判断。这样既避免了均衡系统在电芯存在内短路之类的异常时无意义地空转也有助于散热。4.3 主循环和核心代码逻辑固件的主循环非常简单我用简洁的逻辑来概括。首先周期性读取两节电芯电压做滤波处理。然后计算压差套用状态机判断输出。最后通过 UART 打印状态方便调试验证。核心逻辑用伪码描述出来大概是while(1) { adc_value0 read_adc(CH0); // 底端电芯 adc_value1 read_adc(CH1); // 顶端电芯 voltage0 convert_to_voltage(adc_value0); voltage1 convert_to_voltage(adc_value1); volt_diff voltage0 - voltage1; if(voltage0 UV_THRESHOLD || voltage1 OV_THRESHOLD) { balancer_disable(); state STATE_FAULT; } else if(|volt_diff| BALANCE_START_THRESHOLD) { balancer_enable(); state STATE_BALANCING; } else if(|volt_diff| BALANCE_STOP_THRESHOLD) { balancer_disable(); state STATE_IDLE; } uart_send_status(voltage0, voltage1, volt_diff, state); delay_ms(100); }这个循环看起来很小儿科但它本身就是够用的。最关键的在哪里在 delay 的 100ms 之内MCU 不要做任何可能阻塞的事情。我在实际调试时会把这个循环优化成定时器中断驱动的状态机但原理一模一样只是把“主循环等待”换成了“中断标记 周期执行”。4.4 标定和通信上报两节电芯的电压通过分压网络到 ADC并不是直接等于电池电压。所以必须有标定步骤。常规做法是拿一台校准过的万用表或电源去模拟电池电压然后记录 ADC 读数反推分压比。在软件里保存一个偏移量和增益系数之后每次采样都做一次修正。通信上报方面我用的 UART 输出格式是简单的文本加逗号分隔例如V0:3.812, V1:3.795, diff:17mV, state:BAL这样在开发期可以直接用串口助手观察变化。量产版本要改成 CRC 校验的二进制帧避免干扰导致误触发保护。但我把采集和通信耦合得很松方便以后裁剪。4.5 上电调试的具体步骤第一次上电不要直接带电池我强烈建议先用电源模拟器代替电池。把电源一设为 3.8V电源二设为 4.0V模拟“有一节电芯偏高”的状态。然后打开系统观察 MCU 读出的电压是否正确均衡器是否按预期启动。第二步把两个电源电压慢慢调到接近比如都设为 3.95V观察均衡器是否能在压差进入停止阈值后自动关闭。如果关闭不及时或者来回抖动检查迟滞窗口是否设置得太小。第三步切换成真实电池组复用第一步和第二步的方法看一遍。真实电池的电压变化比电源慢得多均衡器会在较长时间内保持开启状态这是正常的。我在调试时还会观察几个特殊边界如果底端电芯电压接近欠压保护值系统应该先关均衡再报警不能让均衡器把最后一节电芯的电搬走导致它彻底过放。5. 实测结果与调优记录5.1 静态压差均衡测试我在一块两串锂电池组上做了连续测试。初始状态底端电芯 3.78V顶端电芯 3.95V压差 170mV。启动阈值设置在 20mV停止阈值 10mV飞渡电容用了 1 微法陶瓷电容。系统上电之后均衡器持续工作。每 5 分钟记录一次电压变化大约 40 分钟后压差降到 35mV 左右一个小时后降到 12mV随后均衡器自动停止进入待机。从数据来看前面压差大的阶段均衡电流折算下来相当可观后面压差缩小电流自然下降。这个行为和估算模型高度一致。最终压差停留在 7mV 附近对于两节串联电池来说已经算是非常平衡的状态。5.2 模拟备用电源切换的场景备用电源最典型的工况是一段时间待机充电然后突然断电由电池组接管负载。这种情况下均衡器不能影响系统从待机到放电的切换更不能在放电瞬间产生过大的压降。我模拟了一个 1A 的负载切换测试。断开外部电源电池组瞬间承担负载。通过示波器观察电池组输出电压切换瞬间大概有几十毫伏的下冲这是电池内阻和线路阻抗造成的均衡器没有参与这个过程也没有引入额外波动。均衡器持续工作时开关脉冲会对采样造成影响所以在布局时已经把采样线和功率线分流。实测数据里采样电压最大噪声峰峰值大概是 3mV 左右远低于启动阈值不会造成误判。5.3 调优中发现的两个关键点第一点是飞渡电容容值不能盲目加大。我试过把 1 微法换成 4.7 微法均衡速度提升并不明显但均衡器表面升温明显。原因就是开关瞬间的电流冲击变大内部损耗增加。后来把容值降回 1 到 2.2 微法之间温升才回到正常范围。第二点是采样时刻要避开均衡器开关边沿。芯片使能后飞渡电容切换瞬间电池端电压会被拉出一个短暂的毛刺。如果 MCU 正好在毛刺期间采样得到的电压误差会达到几十毫伏。解决办法是两次采样之间加一定延时或者让采样时刻和均衡器时钟错开。如果均衡器频率不高最简单的办法是在滤波算法里去掉一次最大值和一次最小值再做平均。6. 常见问题与排查速查表我把这类项目里常遇到的故障归纳成了一张表方便你直接对照处理现象可能原因排查方向均衡器始终不启动EN 引脚未正确拉高或 MCU 判定压差未超阈值用万用表量 EN 电平查看串口上报电压值是否正常均衡器启动后电压没有变化飞渡电容虚焊或容值过小检查电容焊接替换不同容值再试均衡器反复开关迟滞阈值太小或采样噪声大加大迟滞窗口增强采样滤波采样电压跳动严重采样线受均衡器开关脉冲干扰布线分开加大 RC 滤波检查分压点是否远离功率回路均衡器温度偏高飞渡电容容值过大或散热不良降低容值改善 PCB 散热底端电芯电压越来越低欠压状态下仍允许均衡增加欠压保护判断低于保护值立即关闭均衡UART 上报数据乱码波特率不匹配或共地不良检查调试串口波特率电池地线要与调试器地共地这套表看起来简单但解决了我不少实际问题。举个例子有一次均衡器一直不工作我查了半天 MCU 逻辑最后发现是 EN 引脚被初始化成了模拟输入模式。PIC18F47Q10 的引脚复用功能很多初始化时必须显式把数字输出和模拟功能区分开。这个问题在仿真器上很难看出来因为引脚功能寄存器一旦被模拟外设占用GPIO 写高低电平根本不生效。还有一次采样电压跳得厉害我换了更大的滤波电容结果发现均衡器工作节奏都受影响。后来把采样线加长换成屏蔽线问题立刻减轻。所以遇到噪声问题先检查物理布局和地平面再考虑软件滤波。7. 一些写在后面的个人体会这套方案我做了不止一轮最大的感触是电池均衡看起来只是一个“追电压”的动作但真正做好需要把电路、逻辑、布局、通信全都拧成一股绳。MP2642GR-Z 解决了能量搬运的效率问题PIC18F47Q10 解决了判断和管理的智能问题但两者之间任何一个环节配合不好系统都会出岔子。最后分享一个小技巧一定要在样机阶段把“可测性”做进去。给每一节电芯引出独立的测试点给均衡器使能信号留一个跳线或测试钩给 MCU 留 UART 调试串口。调试时你会感谢自己的这个决定。没有这些测试点每次改动都要重新焊接飞线不仅费时间还会因为操作失误引入新问题。电池系统最怕的就是“不知道哪里出了问题”而这些测试点就是帮你快速定位问题的最好工具。