ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

2S电池主动均衡实战:基于MP2642GR-Z与PIC18F4620的软硬件设计

2S电池主动均衡实战:基于MP2642GR-Z与PIC18F4620的软硬件设计

1. 项目概述与核心需求解析

1.1 为什么2S电池组要做均衡

锂电池的批量生产一致性从来不是绝对的。同一个厂家出来的同一批次电芯,内阻、容量、自放电率都有细微差异,这还不算使用一段时间后的分化:温度场不均导致的老化速度差异、充放电循环次数不同带来的容量衰减差异,都会让两个串联电芯的实际荷电状态越走越远。

在2S串联架构里,这个矛盾会被强制放大。因为充电回路是串联的,流过两个电芯的电流完全相同,但接受电荷的能力不一样,结果就是容量小的那颗先充满,容量大的那颗还没满。如果这时候继续充,先满的那颗就会过压。反过来放电也是一样,弱的先放空,强的还有余量,继续放电就让弱的过放。锂电池对过压和过放都非常敏感,过压轻则加速衰减、鼓包,重的直接热失控,过放则会造成内部析锂、容量永久损失。

均衡电路解决的就是这个问题:让两个串联电芯在充放电过程中尽量保持在同一荷电状态附近,不患寡而患不均。

1.2 标题项目的完整技术画像

这个项目的核心组合是MP2642GR-Z加PIC18F4620。前者是一颗内置MOS的同步升降压DC-DC芯片,用来做能量转移的功率级;后者是一颗Microchip的8位单片机,做采样、判定和控制逻辑。

均衡拓扑大体分两类。被动均衡是给电压高的电芯并联一个泄放电阻,把多余能量以热量形式放掉,简单便宜,但效率低,电流一般只有几十到一百毫安级别,只能"削峰"不能"填谷"。主动均衡则是通过电感、电容或者变压器,把高电量电芯的能量搬到低电量电芯里去。标题项目的方案就是典型的电感式主动均衡,MP2642GR-Z在这里扮演的角色非常微妙——它既不是传统意义上的充电器,也不是普通的升降压电源,而是被配置成了一个可以由MCU控制方向和大小的能量搬运装置。

这套方案适合的典型场景很明确:12V/24V级别的储能系统、UPS备用电源、电动工具电池包、便携式仪器设备的后备电池。这类设备对体积和成本敏感,2S电池组是最常见的基础单元,把均衡做好,整包寿命能明显拉开差距。

2. 方案选型:为什么是MP2642GR-Z和PIC18F4620

2.1 MP2642GR-Z在均衡系统中的角色定位

MP2642GR-Z是一颗同步整流升压型芯片,数据手册上标注的功能是DC-DC升压转换。但把它用在电池均衡上,关键不在于升压功能本身,而在于它的双向能力和内部控制接口。

均衡电路的本质需求是:当1号电芯电压高于2号时,把1号的多余能量抽出来,通过电感暂时存储,再释放给2号;电压反过来了,则方向互换。这就需要一个可控方向的能量通路。

MP2642GR-Z的典型应用电路里,输入输出两颗电芯通过一个电感连接。当芯片工作于升压模式,能量从低电压端流向高电压端,可以给高电压电芯继续补充;当MCU通过控制信号让芯片改变工作状态,能量又可以反方向流动。配合PIC18F4620的PWM信号控制,可以实现对均衡电流的实时调节。

选这颗芯片还有一个现实考虑:外围元件少。电感加几个电容电阻就构成主功率回路,对PCB面积紧张的双电池管理板来说非常友好。而且它内置同步整流,死区时间由芯片自己处理,省掉了外部MOS驱动电路的麻烦。

2.2 PIC18F4620在系统里的分工逻辑

PIC18F4620在这个系统里负责三件事:电压采样、均衡判定、执行控制。

先说采样。两个电芯的电压是串联结构下的关键状态量,必须实时、准确、稳定地测出来。PIC18F4620内置10位ADC,分辨率约5mV(以4.2V满量程计算),勉强够用——均衡的启动阈值通常在20-30mV级别,10位ADC配合合理的分压网络和软件滤波,能够达到工程上可接受的分辨率。当然,如果追求更高的精度,外挂一颗16位ADC如ADS1115会更好,但成本和复杂度都会上升。

再说判定逻辑。均衡不是无脑对充,需要一系列状态机判断:电芯电压是否在合理区间、温差是否过大、是否处于充电末期、压差是否达到启动门槛。PIC18F4620的Flash有32KB,跑一个完善的状态机加上模糊控制或者PID调节算法,绰绰有余。

最后是执行控制。通过PWM输出调节MP2642GR-Z的工作占空比,通过GPIO切换均衡方向,通过串口上报均衡状态信息。这些功能用一颗8位单片机完全能Hold住,而且PIC18系列的抗干扰能力和工业级温度范围,对于储能设备的工作环境(机柜、户外电源箱、车辆后备箱)来说,可靠性有保障。

2.3 这套方案的取舍与边界

选MCU加外置功率芯片的组合,而不是直接用集成了均衡功能的电池管理芯片(比如BQ769x2系列),核心考量是灵活性和成本。

专用芯片的好处是集成度高,均衡算法都做在内部了,开发快。但代价是均衡电流通常不大,一般几十毫安级别,而且均衡策略是固化的,很难针对特定工况做深度定制。MCU加DC-DC的方案,均衡电流能做到几百毫安甚至安培级别,策略完全自己说了算——比如可以在充电末期用大电流强均衡,平时用涓流保持平衡。

缺点是开发周期长、可靠性需要自己做充分验证、保护逻辑要自己写代码。而且对这种方案来说,如果做不好软件层面的保护,硬件上出了极端情况(比如MCU死机导致均衡方向混乱、电流失控),后果比专用芯片方案更严重。所以后文我会专门讲安全兜底策略。

3. 硬件核心环节设计与参数计算

3.1 主功率环路设计

先给出主功率电路的简化结构:

Cell+1 -----+---------+ | | C1 L | | Cell+1/- ---+ PWM驱动 --- MP2642GR-Z | Cell+2 -----+----------+

实际设计里的关注点非常具体。电感选型是第一个硬骨头。MP2642GR-Z的数据手册一般会给出推荐电感范围,但在均衡应用里,还要考虑均衡电流的纹波。我给一个工程上的估算过程。

假设均衡电流目标I_bal = 500mA,开关频率f_sw = 1MHz,电芯电压约3.7V,两个电芯间的压差在50mV到300mV之间。电感电流纹波ΔI的经验标准是取I_bal的20%-40%,这里取30%,即ΔI = 150mA。

Buck-Boost拓扑的电感计算,以Buck模式(高电压侧放电给低电压侧)为例,占空比D ≈ V_low / V_high。若V_high = 4.0V,V_low = 3.7V,则D ≈ 0.925。电感值L计算式:

L = (V_high - V_low) × D / (f_sw × ΔI)

代入得:

L = (4.0 - 3.7) × 0.925 / (1×10^6 × 0.15) ≈ 1.85µH

所以选择2.2µH的电感比较合适,留一点裕量。电感饱和电流必须大于峰值电流,即I_bal + ΔI/2 ≈ 575mA,实际选择建议至少留1.5倍余量,选饱和电流1.5A以上的料。

再说采样电阻。如果要做电流环调节均衡电流,就需要在功率回路里串联采样电阻。一般放在低边,阻值选10mΩ到50mΩ之间,通过差分放大器放大后给MCU的ADC读。10mΩ的电阻在500mA电流下压降只有5mV,放大100倍后是500mV,正好在ADC量程的舒适区域。功率计算是I²R = 0.25 × 0.01 = 2.5mW,温升可以忽略。

3.2 电压采样网络与校准

串联电池包的电压采样有个经典坑:必须用电差分压的方式,不能直接用单片机的地去参考。1号电芯的正极是相对于单片机地来说浮动的,2号电芯负极才是系统地。所以1号电芯的采样必须用差分放大器或者独立ADC芯片来处理。

具体做法是这样:2号电芯可以直接用电阻分压后进ADC,参考地就是系统地。1号电芯则要先把正负极接成差分输入,经过运算放大器转成对地的单端信号再进ADC。这里有三个设计要点。

第一个是分压电阻的精度和温漂。既然10位ADC的LSB本身就有约5mV,分压电阻引入的误差就不能超过这个量级。选0.1%精度的精密电阻,温漂系数10ppm/°C的料,基本能做到全温度范围误差在±10mV以内。1%的普通电阻在这个场景就差强人意了——因为初始误差1%在4V的采样点就是40mV,远超均衡启动阈值,会造成误判。

第二个是采样滤波。锂电池电压在均衡过程中会有纹波,特别是电感电流的开关纹波。ADC直接采会有跳动,软件滤波是必须的。我习惯的做法是:对每个电芯连续采32次,去掉最大最小各8个,剩余16个求平均。这个窗口在10位ADC上能做到稳定的±2LSB抖动以内。

第三个是校准。所有电阻参数都有容差,批量生产组装后最好做一次出厂校准。方法是输入一个精确的基准电压(比如用0.1%精度的电压源),让MCU读取ADC值,计算出实际的增益和偏置,存入Flash的校准区。这样每次上电读取校准值做线性修正,可以把整体电压测量误差压到±10mV以内。

3.3 保护电路的底线设计

均衡控制的核心风险是什么?答案是能量失控。主动均衡是在两个电芯之间搬能量,如果控制方向错了、电流大了、或者系统时序乱了,轻微的情况是均衡失效,严重的情况是电池过放或者过充进一步加剧,甚至烧毁功率器件。

所以硬件保护响应必须不依赖MCU软件。我的设计里加了三层保护。第一层是硬件比较器监测两节电芯的电压,一旦超过4.3V或者低于2.8V,立即强制关闭MP2642GR-Z的使能引脚。第二层是过流保护,在采样电阻后加一级比较器,电流超过设定阈值直接拉低EN。第三层是温度保护,电感、MOS管或者电池温度超过85°C,同样硬关断。

这三层的响应时间都在微秒到毫秒级别,MCU的软件判断最快也要几十毫秒,而且存在死机的可能性。硬件兜底是绝对必要的。

3.4 实际打板时的布局经验

功率回路和信号回路严格分开。MP2642GR-Z的SW脚到电感的走线要短而粗,一般宽度不低于1mm,覆铜厚度1oz,走线长度不超过10mm。功率地和信号地单点连接,连接点放在IC的散热焊盘正下方。

ADC采样的参考电压尽量用小容值陶瓷电容在引脚旁边就近去耦,10nF加100nF的组合效果不错。分压电阻网络要靠近MCU的ADC引脚,避免走线过长被开关噪声干扰。电感底下不要走关键的信号线,电感磁场耦合会带来不确定性噪声。我在实际布局中发现,电感如果距离MCU的晶振太近,甚至可能让时钟信号抖动用示波器测到谐波,这个细节不注意真的会被坑。

4. 软件逻辑与均衡策略实现

4.1 整体软件架构

PIC18F4620的程序结构,我的组织方式是一个超级循环加定时中断。主循环跑状态机,定时中断负责ADC采样和PWM更新。

系统状态机的关系我整理如下:

  • 空闲状态:系统上电,初始化完成,电压在合理区间,压差小于启动阈值
  • 预充状态:两端电压和充电状态判断,均衡条件部分满足,开始小电流试探
  • 均衡状态:压差超过阈值,PWM开启,能量转移进行中
  • 暂停状态:温度超过安全值,或者电压接近限制边界,暂时停止均衡
  • 故障状态:硬件保护触发或者电压异常,记录错误并锁定

每个状态之间都有明确的转移条件。比如从空闲到预充的条件是:两节电芯电压都在2.8V-4.2V区间内,且压差大于30mV。从预充到均衡的条件是:预充运行200ms后,电流方向正确,电压变化趋势正常,说明系统工作点稳定,可以加大均衡电流。

4.2 均衡策略核心算法

均衡判定最核心的参数有三个:均衡启动阈值、均衡电流大小、停止条件。

我用的策略是滞回控制,不搞PID那套复杂的,原因后面说。启动阈值设为30mV,停止阈值设为10mV。也就是说压差超过30mV时开始均衡,没有降到10mV以下不会停。这中间有20mV的滞回区间,防止在临界点频繁开关。这个区间宽度对2S系统足够用。

均衡电流怎么定?考虑两个因素。首先是安全边际,均衡电流不能超过电芯厂家推荐的持续充电电流。常规18650电芯典型持续充电电流是0.5C到1C,均衡电流取0.1C到0.2C是比较保守的——按单颗2000mAh算,就是200mA到400mA。其次要考虑效率,电流太大,电感损耗和开关损耗都上去了,能量转移效率反而下降。实测下来,300mA左右是一个不错的折中。

我使用一个简单的PI调节器来限制电流。ADC采样电流放大信号,目标值300mA,PI输出控制PWM占空比。比例系数和积分系数都很小,因为被控对象是DC-DC这样的功率级,响应很快但不希望有超调。

停止条件除了压差到达10mV以内,还有一个保护性停止:如果均衡过程中某节电芯电压跌破2.9V或者超过4.15V,立即停止。原因很简单,在接近电量边界的时候还要强行搬运能量,容易形成一个电芯被"抽干"而另一个被"灌满"的极端局面。

4.3 采样滤波和时效处理

前面说过软件滤波用去掉最大最小再平均的方法,这里补充一下采样时序的逻辑。

ADC采样中断频率设在2kHz,也就是每500µs采一轮。每轮连续采8次电压值(两个电芯各4次),做初步平均。主循环里每100ms再对这20轮结果做一次滑动平均。为什么分两级?因为单次采样不可避免有开关噪声干扰,第一级硬过滤去掉异常尖峰,第二级滑动平均平滑掉充放电电流变化带来的缓变波动。

这样做的代价是电压响应变慢,大约100ms才能反映一次真实的电压变化。但对均衡这个应用来说完全足够,电池电压本来就是个缓变量,反而需要避免响应过快导致的误动作。这里要说一个关键经验:不要因为采样精度不够就不断缩短滤波窗口来"追速度",结果只会让系统在噪声上跳舞,滤波窗口和电压变化速度的匹配比追求响应速度更重要。

4.4 PIC18F4620的资源利用与实现代码示例

整个系统的资源占用情况大致是:Flash约用了8KB(含校准表和常量),RAM约300字节(不含堆栈),一个定时器用于ADC采样节拍,一个PWM模块用于控制信号输出,一个UART用于调试信息上报。PIC18F4620的32KB Flash和4KB RAM余量非常充足。

核心控制代码的架子大概是这样的思路:

void battery_balance_loop(void) { float v1 = get_voltage_avg(CELL_1); float v2 = get_voltage_avg(CELL_2); float diff = (v1 > v2) ? (v1 - v2) : (v2 - v1); switch (balance_state) { case STATE_IDLE: if (diff > BALANCE_START_MV && v1 >= 2.8f && v2 >= 2.8f && v1 <= 4.15f && v2 <= 4.15f) { balance_state = STATE_PRECHARGE; } break; case STATE_PRECHARGE: // 300mA预充电流方向判断 set_balance_dir(v1 > v2); set_pwm_duty(PRECHARGE_DUTY); balance_state = STATE_BALANCING; break; case STATE_BALANCING: if (diff < BALANCE_STOP_MV) { set_pwm_duty(0); balance_state = STATE_IDLE; } else if (v1 < 2.9f || v2 < 2.9f || v1 > 4.18f || v2 > 4.18f) { set_pwm_duty(0); balance_state = STATE_FAULT; } else { update_pi_current_loop(); } break; case STATE_FAULT: // 记录错误并等待复位 break; } }

这一小段代码代表了核心控制逻辑的全貌,真正落地的代码还需要把采样滤波、PI参数、低功耗管理等都加进去。

4.5 均衡策略的深度考量

为什么前面说PID不合适而选了滞回加PI?PID本身很强大,但是在电池均衡这个场景,问题在于被控对象和扰动特性。电池电压本身不是一个标准的线性系统,两个电芯的容量差、内阻差、温度差异都是时变的。如果PID整定参数刚好适配了当前状态下的工况,等到电池老化到一定阶段,参数可能就不再适用。而滞回控制天生对系统参数不敏感,简单粗暴的规则反而更可靠。PI只是用来限制均衡电流的瞬时值,起到电流环的作用,整体均衡策略还是滞回主导。

另外一个实际问题是,均衡不应该在浮充或者涓流状态下执行。浮充状态下电流微小,均衡电路从一个电芯抽走几十毫安就可能让充电回路误判,影响整个电池包的充电管理策略。所以我加了充电状态检测,只有检测到明显的充电电流或者系统处于放电间隙时,才允许均衡切入。

5. 实物联调与典型问题排查

5.1 我的调试过程记录

调试过程我按下面几个阶段来推进:先送电测电压采样精度,再联调功率级验证均衡电流,最后跑完整的状态机策略。

第一阶段,上电后先看MCU读到的两个电芯电压是否准确。用数表实测电池电压,再通过串口打印MCU读到的值做对比。一般第一次会差个几十毫伏,因为是原始分压比和ADC参考电压的偏差叠加。经过校准流程后可以压到±5mV以内。

第二阶段,手动把PWM占空比设到一个固定值,用电流探头测电感支路的电流波形。这里第一次调试最容易出问题——开机瞬间如果PWM方向不对,电流方向就是反的,均衡成了"助纣为虐"加剧不平衡。所以我在代码里做了一个安全措施:上电后禁止均衡功能,先采样确认两个电芯电压以及系统方向配置正确,然后经过200ms延时,确认无误后才打开PWM输出。

第三阶段跑完整策略。用可编程电子负载或者直接用一个电阻做模拟负载,对电池做充放电循环,观察均衡是否把压差控制在目标范围内。我习惯用两个有0.3V压差的电芯做测试:串联起来,初始压差300mV,连续跑一小时均衡,理想情况下压差能降到20mV以内。

5.2 我踩过的坑和排查方法

下面是我实际调试中遇到的几个典型案例,每个都值得注意。

第一个坑,ADC采样在均衡开启后出现明显跳变。原因很经典:功率回路的开关电流在PCB地上产生了压降,干扰了ADC参考地。我换了低边小电阻采样,但地线还是拉得不对。排查办法是用示波器探头直接在MCU的ADC引脚和VSS之间量波形,发现在均衡工作时能看到几百毫伏的毛刺。解决方案是重新走地线布局,把功率地引到IC的焊盘底,再单点接到MCU地。

第二个坑,电感发热。我的第一个版本代码把PWM频率设得太低,只有200kHz(为了照顾以前的旧代码逻辑),结果电感在500mA均衡电流下温升明显。查数据手册才发现这颗MP2642GR-Z的最优频率区间在1MHz左右。把PWM频率调到1MHz之后,电感温升直接降下来了,效率也从82%提升到了91%左右。这件事给我的教训很直接:芯片推荐的频率范围是有原因的,想当然地降低频率来减少开关损耗,实际可能适得其反。

第三个坑,均衡电流从0加到300mA的过程中出现振荡。波形上看电流环在300mA附近反复过冲衰减。原因是PI参数太激进,积分系数过大导致在目标值附近震荡。我把积分系数从0.05降到0.01,并且加了积分限幅,振荡消失。

第四个坑,系统在上电瞬间偶发错误均衡方向。后来查代码发现是MCU的GPIO默认状态和PWM模块初始化存在时序竞态。在初始化完成前,MP2642GR-Z的EN端是低电平,但PWM输出默认是高,等MCU把PWM拉低和设定方向寄存器之间,有几十微秒的错误方向窗口。解决方法是初始化时将EN拉低,所有PWM输出和方向寄存器配置完成后再拉高EN。硬件上,EN端并一个小RC延时(1µF加10kΩ构成约10ms的上电延时),双保险。

5.3 常见问题排查速查表

我把调试过程中遇到的高频问题汇总成一个自查清单,调试碰到类似现象直接对着排查即可。

现象可能原因排查方法
均衡电流一直偏低电感饱和、PWM频率不匹配换更大饱和电流电感,校准PWM频率到1000kHz附近
均衡电流方向错误方向寄存器设置反了上电时串口打印方向配置,和电压比较结果核对
MCU采到的电压波动大地线干扰、分压电容缺失示波器测ADC引脚对地波形,优化地线布置
均衡中途停止温度保护触发查看温度检测值是否合理,检查散热条件
充电末端仍然压差大均衡阈值设置过高确认启动阈值是否超过30mV,适当下调到20mV
功耗异常偏高静态损耗和待机电流没优化MCU进入睡眠,PWM输出关闭,查看整板静态电流
电芯电压被拉到保护值均衡电流过大检查电流环目标值,回落到200mA

5.4 关于安全和寿命的几点实操心得

均衡电路做好之后,有些使用层面的体会值得多说几句。

第一,均衡不能替代电芯分选。好的均衡系统只能做"在线补偿",两个电芯如果容量匹配度太差(出厂容量差超过5%),均衡电流再大也跟不上充放电过程中容量差累积的速度。均衡对大电流充电和满电保持的场景效果好,但对深度循环的场景,作用其实有限。

第二,均衡电流不是越大越好。我实测过用500mA均衡电流做充放电循环,对比300mA工况,电芯温度差了差不多5°C左右,而均衡最终效果差异并不显著。电池包内部本来就密闭高温,额外增加的热负担对寿命的损害可能比那点不平衡更严重。没有特殊需求的话,保守的均衡电流设定是更理性的选择。

第三,MCU的失效保护比想象中重要。PIC18F4620本身可靠性不错,但任何MCU都可能死机、跑飞。我的代码里放了一个看门狗定时器,喂狗时间4秒,同时在GPIO输出上加了硬件去耦和RC滤波,确保MCU异常时不会把错误的PWM信号送到MP2642GR-Z。这套组合做了几百小时的持续运行测试,没有出现过锁死问题。

6. 数据实测与场景落地参考

6.1 一个完整的实测案例

我用两节容量相差约8%的18650电芯做了一组对比实验。电芯A实际容量2050mAh,电芯B容量1900mAh,初始压差直接就是180mV。

不开启均衡,按常规串联充电流程从3.0V充到4.2V、再以标准放电电流放至3.0V做循环。三圈跑完后,A电芯电压4.13V,B电芯电压4.01V,压差扩大到120mV左右。这里需要注意的是满电静置后压差从180mV降低到120mV,是静置自放电和极化效应混合的结果,并不是系统自动改善了。

开启均衡后重复同样的流程。第一圈,均衡在充电末期持续工作了约37分钟,把压差稳定在15mV以内。三圈下来,实测压差始终没有超过25mV。均衡效率的实测值为88.7%,相比被动均衡几乎为零的效率,提升非常明显。

从能量角度分析,3圈循环下来,均衡系统大约搬运了340mAh的能量从A到B,如果按被动均衡来算,340mAh的能量如果全部以热量形式释放,温差和寿命损耗都很可观。

6.2 成本与实现难度分析

我按小批量(100片以内)来估算一下这套方案的物料成本。MP2642GR-Z约2元一颗,PIC18F4620约8-20元一颗(看渠道和采购量),电感2.2µH大电流一体成型电感约1.5元,采样电阻和分压电阻加起来约1元,电容和PCB均摊下来大概2元。整体物料成本在15-30元之间,取决于MCU的采购渠道和数量折扣。

对比专用电池管理芯片方案,成本相近,但这套方案的策略完全自主可控。同一个硬件平台不改版,通过改单片机里的均衡策略代码,就能适配不同容量规格的电芯。这种灵活性对产品研发阶段非常有价值。

6.3 适合直接照搬的扩展方向

这套架构的扩展性其实很强,并不局限在2S电池上。比较自然的延伸是把N个电池单元分组,每组两节,MCU用多路PWM驱动多个MP2642GR-Z,实现各组的独立均衡。PIC18F4620的PWM资源足够支撑2-3组,如果是更大的系统,换更高端的MCU即可。

另一个方向是增加通信功能。目前串口只用于调试,量产时可以通过UART连接蓝牙透传模块或者CAN总线,把均衡状态和电芯健康数据上报到云端。在储能系统里,电芯的均衡日志对维护和预警非常有价值。

标题项目用到的一些量:滞回阈值、均衡电流大小、采样滤波窗口、PI参数,这些参数在不同容量的电芯上需要重新标定。我已经把参数集中放在一个配置结构体里,换电芯时只需要改参数值,不用动代码逻辑。这也是做这类多工况系统的一个关键经验,参数与逻辑解耦,后期的维护成本会成倍下降。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进