做电池系统的人都知道,只要两节电池一串联,问题就不是容量够不够,而是电压和剩余电量能不能同步。尤其在储能和备用电源系统里,两个串联电池单元的均衡不是一个锦上添花的选项,而是决定系统能用多久、是否安全的关键环节。这篇文章记录的是我用 MP2642GR-Z 加上 ATmega32 完成的一套两串电池主动均衡方案,从硬件搭接到均衡算法、参数计算都会展开讲。如果你正在做小容量储能、UPS 备电或两串电池的便携电源,可以把它当成一份直接能上手的参考。
1. 为什么要做双电池均衡:一个容易被忽略的瓶颈
1.1 串联电池失配从哪里来
先聊一个很多人容易忽略的常识:两节电池出厂时标称容量可能完全一样,但实际装进电池仓后,它们几乎不可能保持完全同步。电芯制造过程本身就有离散性,内阻、自放电率、初始电压都会差一点点。温度场的差异更明显,电池块内部靠近功率器件的一侧更热,自放电和副反应也会更快。再加上长期浮充、偶尔放电、偶尔又长期闲置,两节电池的电压差会越拉越大。
我用一组 2S10Ah 的铁锂电池做过一次比较粗糙的实测。新电池组静置 24 小时后,两节电压差大约 3mV,容量差几乎为零。连续跑了几十次 0.5C 充电、0.5C 放电后,电压差在充电末端被放大到 30mV 以上。如果继续这样用下去,充电时电压高的一节先到达截止电压,充电器被迫中断,另一节实际上还没有充满。放电时则是电压低的一节先到达放电截止,整组可用容量被它卡住。这就是串联电池系统的“木桶效应”。
在两串电池里,这种失配的危害不只是容量下降。备用电源系统经常处于浮充状态,电压差会让高电压那一侧长期处于过充边缘。锂电池长期在超过 4.2V 的电压区间运行,阳极析锂风险上升,轻则容量加速衰减,重则热失控。所以我不太认同“两串电池把总电压管理好就行”的说法,均衡不是可有可无的附加功能。
1.2 被动均衡与主动均衡的取舍
串联电池均衡最常见的是被动均衡,思路很简单:检测到哪个电池电压高,就给它并联一个功率电阻,把多余的电量以热的形式放掉。这种方案几十元就能做出来,很多低成本 BMS 都在用。它的缺点同样明显。能量被白白耗散,均衡电流越大发热越严重,所以通常只敢把电阻电流设在几十毫安到一两百毫安,均衡速度慢。而且被动均衡只能在充电过程中“压住”高电压电池,对静置或者放电时发生的电压失衡无能为力,只能等下一次充电再处理。
主动均衡的思路则完全不同。它是用功率变换电路把电荷从高电压电池搬到低电压电池,而不是烧掉。效率高,发热小,均衡电流也可以做得更大。缺点是要用 DC-DC 结构、磁性元件和额外的控制逻辑,电路复杂度增加。但对于储能、备用电源这种对长期可靠性和待机功耗敏感的应用,多花一点成本换来的收益非常值得。
我选 MP2642GR-Z 加 ATmega32 的架构,是看中了两点。第一,MP2642GR-Z 这类均衡功率级把功率 MOSFET 和驱动控制集成在内部,我不用去搭半桥,也不用纠结栅极驱动布线。第二,ATmega32 虽然只是一个 8 位 MCU,但完成两串电池的电压采样、均衡判据、故障保护绰绰有余。这样方案既有模拟前端的效率,又有数字控制的灵活性。下面这张对比表可以看得更清楚:
| 方案 | 均衡方式 | 发热 | 效率 | 成本 | 灵活性 |
|---|---|---|---|---|---|
| 电阻被动均衡 | 高电压电池放电 | 高 | 低 | 低 | 低,只能限制充电过压 |
| 独立 DC-DC 模块 | 电荷转移 | 低 | 高 | 高 | 中,需要自己搭控制 |
| MP2642GR-Z + ATmega32 | 电荷转移 | 低 | 高 | 中 | 高,算法可改可调 |
1.3 系统级框架
整个系统本质上是一个闭环,而不是简单地把两颗芯片放在同一块板上。电池组输出的两节电压分别经过电阻分压网络进入 ATmega32 的 ADC。ATmega32 负责判断电压高低、方向和时间窗口,然后通过 GPIO 给 MP2642GR-Z 发送使能信号,通过一个滤波后的 PWM 信号设定均衡电流。MP2642GR-Z 的功率级再依据这些输入控制内部开关管,让能量从高电压单元流向低电压单元。
这个分工意味着,均衡行为完全由固件决定。你可以先跑一个保守的阈值,拿到批量数据后再放参数,而不用重新改电路。某些比较严格的系统,还可以把 MP2642GR-Z 的故障状态反馈到 AD 端口,让 MCU 在异常时锁死动作。后面所有硬件和软件工作,都是围绕这个框架展开的。
2. 硬件设计与关键电路实现
2.1 总体电气连接方式
先说连接关系,这决定了后面所有引脚的逻辑。对于两节串联电池,我习惯把节点命名为 CELL1+、MID、CELL2-。MP2642GR-Z 的功率端连接到这些节点,中间的电感电容网络就是电荷搬运通道。ATmega32 的地必须和电池组负极共地,否则 ADC 采样和逻辑输出都没有参考点。
ATmega32 采样我采用的是两个独立分压支路。第一支路从 MID 到 CELL2-,采样的是电池 1 的电压;第二支路从 CELL1+ 到 MID,采样的是电池 2 的电压。这样 MCU 的单端 ADC 可以直接读取,不需要额外使用差分仪表放大器。要注意的是,这两个被测电压在中点处会互相影响,均衡电流流过时会在 MID 节点引起短暂扰动,所以采样线要单独走,不能和功率线混在一起。
功率回路方面,MP2642GR-Z 的电源输入直接接在电池端子上,外部只需加输入输出端的小电容。电池本身就是低内阻源,所以大容量电解电容不一定要加,但芯片电源引脚旁的陶瓷电容必须离芯片非常近。我在项目里使用的是 10μF 陶瓷电容加 0.1μF 高频去耦电容组合。
2.2 MP2642GR-Z 接口电路设计
关于 MP2642GR-Z 的引脚,这里按我手头封装的常用功能位来介绍,具体到你们的批次还是以数据手册为准。核心引脚包括:使能方向输入 EN1 和 EN2,电流设定输入 ISET,故障输出 FAULT,电源和接地引脚,以及两个电池功率连接点。
EN1 和 EN2 的逻辑由 ATmega32 控制。EN1 有效时,能量从 CELL1 向 CELL2 方向转移;EN2 有效时方向相反。设计上用一个 10kΩ 电阻把 EN 引脚下拉到 GND,MCU 输出高电平时才允许启动均衡,避免上电瞬间引脚悬空导致误动作。两个 EN 引脚之间还应在固件里做互锁,硬件上如果有条件可以加一个与门或使用 MP2642GR-Z 自带的互锁机制,防止同时使能造成冲突。
ISET 引脚用于设定均衡电流。可以用一个电阻固定限流,但我建议把它接到一个由 ATmega32 PWM 经 RC 滤波得到的模拟电压上,让固件在运行时动态调整电流。这样在压差大时电流可以大一些,压差接近停止阈值时电流自然减小,减小电池瞬时电压波动,也减小均衡结束时的冲击。RC 滤波的截止频率不要太高,我用 1kHz 以下,确保 PWM 纹波不会被直接送到电流环。
FAULT 引脚输出的是芯片内部的过温、过流等保护状态,通常为开漏输出。ATmega32 把它接到一个带内部上拉的 GPIO,用轮询或者外部中断读取。对两串系统来说,故障状态一定要让 MCU 知道,因为均衡功率级一旦进入锁存保护,如果 MCU 还继续发送 EN 信号,反复尝试会带来额外功耗,也可能使芯片温度居高不下。
2.3 ATmega32 采样电路与参考电压处理
ATmega32 的 ADC 是 10 位单端型的,本身不算高精度,但对于均衡应用完全够用,关键是参考源和分压比要处理好。我选用内部 2.56V 参考电压,分压网络把单节电池电压缩放到 0V 到 1.0V 左右。满量程 10.24V,正好覆盖两串锂电 2.8V 到 9.0V 的工作范围。
分压电阻的选择要特别注意温漂和阻值。两个分压电阻阻值都取 100kΩ 级别,不只是为了省电,更是为了和滤波电容配合形成低通。但电阻过大又容易引入 PCB 漏电流误差,所以我在 ADC 前再加了一级电压跟随器,运放输入阻抗大于 10MΩ,采样误差就能控制在 1% 以内。如果不想加运放,直接用 100kΩ 和 33kΩ 分压也可以,但要注意高温潮湿环境下漏电流带来的额外误差。
每个采样通道都加了一组 RC 低通滤波,我用的是 10kΩ 电阻加 0.1μF 电容,截止频率大约 160Hz。只要均衡电流不突变,这个带宽足够。更关键的是,均衡开启瞬间 MID 节点会有电流跳变,采样不宜在这个瞬间进行。我通常在每轮采样前先关闭 MP2642GR-Z 使能,等 2ms 后再读 ADC,这样的电压接近电池的开路状态,判据更可靠。
供电方面,ATmega32 的 AVCC 引脚和数字 VCC 分开滤波。AREF 引脚如果使用内部参考则只需要加一个 0.1μF 电容,但如果想让参考更稳定,也可以外接一个 2.56V 的低温漂基准。对于长期浮充的备用电源,温度变化引起的电压漂移直接决定均衡精度,这里多花十几块钱很值得。
2.4 布局布线和去耦的注意点
布局是这类功率离散型设计的隐形坑。MP2642GR-Z 的功率电流路径必须尽量短粗,开关节点是快速脉冲信号,环路面积过大就会辐射干扰,ADC 线离它一远,采样数值就会乱跳。所以我在 PCB 上强制划分了两个区域,左边是功率区和电池端子,右边是 ATmega32 和模拟采样区,中间用一排过孔隔离,只在单点做共地连接。
去耦电容的位置比容值更重要。0.1μF 电容距离 MP2642GR-Z 电源引脚不能超过 5mm,否则高频开关电流会在寄生电感上产生尖峰。ATmega32 的数字电源也放一个 10μF 钽电容和 0.1μF 陶瓷电容,AVCC 单独接一个 1μH 磁珠,防止 I/O 翻转干扰 ADC。这些看起来像强迫症的处理,在量产焊装后真的能少很多莫名其妙的问题。
3. 均衡算法与固件逻辑
3.1 电压采样、滤波与校准
固件的第一步不是均衡,而是把电压读准。我在代码里做了一个每次 8 次采样的均值滤波,再加一个一阶低通滤波器:新滤波值等于上一次滤波值加上当前值与上一次滤波值的十六分之一偏差。这个算法在 AVR 上不需要浮点运算,一个移位指令就能完成,非常适合对 RAM 和速度都有限的 ATmega32。
电压校准不能省。因为分压电阻和运放都有误差,直接采出来的值可能整体偏大或偏小。我的做法是用一个稳定的直流电源分别给两个电池位置输入精确到 0.1mV 的电压,从 MCU 串口读出 ADC 原始值,拟合出每个通道的增益和零点偏移。校准系数存到 EEPROM 中,上电时加载。经过校准,两节电池的测量误差可以从 30mV 压到 5mV 以内,均衡判据才有意义。
校准时的注意点:校准输入电压不要只设 4.0V 一个点,应该在 3.0V、3.7V、4.2V 三个点各采一次,做两点或三点线性拟合。因为 ADC 码值在小电压区间和非线性区间有偏差,单点校准只能修零点,不能修增益。对于定量均衡来说,增益误差会直接变成均衡电流的偏差。
3.2 均衡启动与停止判据
均衡不是看到压差就先跑起来,需要一套迟滞逻辑,否则会频繁启停。我的标准是:压差绝对值大于 50mV,并且持续 10 次连续采样,才启动均衡;启动后压差降到 20mV 以下,或者均衡时间超过设定上限,则停止。这中间的 30mV 窗口是迟滞区,目的是防止在阈值附近反复切换。
为什么阈值不设得更低?因为两节电池在浮充过程中的瞬时电压时刻都在波动,10 位 ADC 本身也有量化噪声。就算滤波做得再好,也很难把 10mV 级别的真实压差和随机噪声完全分开。设置 50mV 的启动阈值,意味着 MCU 要在大约 5 个 ADC 码值的差异上做判断,配合滤波后可靠性比较高。如果系统对均衡速度要求更高,可以把阈值降到 35mV,但采样噪声和震荡风险也会成倍增加。
均衡时机也很重要。充电过程中电压变化剧烈,如果压差阈值没有区分充电阶段,很容易误判。我的策略是只在静置状态或充电末端电压基本稳定的窗口合并均衡动作。放电状态下不做主动均衡,因为大电流负载会让电压读数失真,同时均衡器叠加的功耗会缩短续航。这样做保守,但足够安全。
3.3 状态机设计与故障处理
固件整体可以做成一个最简单的四状态状态机:空闲态、正向均衡态、反向均衡态、故障锁存态。
在空闲态,MCU 周期性采样电压,判断是否需要均衡。需要从 1 节向 2 节转移时切到正向均衡态,反之切到反向均衡态。当压差达标或超时,再回空闲态。进入均衡态后,MCU 输出对应的 EN1 或 EN2,同时按压差大小调整 ISET PWM 占空比。
故障态必须做成锁存,不能自动恢复。过压、过温、均衡电流超限、FAULT 引脚触发,都直接进入故障态,同时关闭所有使能输出,并通过串口输出故障标志。只有掉电或者外部故障复位信号才能回到空闲态。这是为了避免瞬时故障恢复后,系统在恶劣状态下继续重启均衡,反复损坏器件。
3.4 核心代码片段
这里给出一个简化但可读的框架,实际工程中可以把电压采样和状态机拆成单独文件。代码使用的是 AVR 的寄存器方式,只有 ADC 和 PWM 初始化部分,更多细节需要结合实际原理图完善。
#define ADC_CH_V1 0 // MID 到 GND 的分压,对应电池1 #define ADC_CH_V2 1 // CELL+ 到 MID 的分压,对应电池2 #define EN1_PIN PB0 #define EN2_PIN PB1 #define ISET_PWM PB2 #define FAULT_PIN PB3 #define BAL_TH_ON 50 // 启动阈值 mV #define BAL_TH_OFF 20 // 停止阈值 mV #define BAL_TIMEOUT 30 // 最大均衡时间分钟 typedef enum { BAL_IDLE, BAL_1_TO_2, BAL_2_TO_1, BAL_FAULT } bal_state_t; static uint16_t filter_value(uint16_t sample, uint16_t last) { return last + ((sample - last) >> 4); } static void set_balance(bool dir1, bool dir2, uint16_t current_pwm) { // dir1=1 表示电池1向电池2搬能量,dir2=1 表示反向 PORTB &= ~((1 << EN1_PIN) | (1 << EN2_PIN)); if (dir1) PORTB |= (1 << EN1_PIN); if (dir2) PORTB |= (1 << EN2_PIN); OCR1A = current_pwm; // 经过RC滤波后接到ISET引脚 } static bool check_fault(void) { return !(PINB & (1 << FAULT_PIN)); } int main(void) { // 初始化IO、ADC、PWM、定时器,略 bal_state_t state = BAL_IDLE; uint16_t v1 = 0, v2 = 0; while (1) { uint16_t raw1 = adc_read_avg(ADC_CH_V1); uint16_t raw2 = adc_read_avg(ADC_CH_V2); v1 = filter_value(raw1, v1); v2 = filter_value(raw2, v2); int16_t diff_mv = voltage_v1 - voltage_v2; // 由ADC码值换算成mV switch (state) { case BAL_IDLE: if (diff_mv > BAL_TH_ON) state = BAL_1_TO_2; else if (diff_mv < -BAL_TH_ON) state = BAL_2_TO_1; break; case BAL_1_TO_2: set_balance(true, false, diff_to_pwm(diff_mv)); if (diff_mv < BAL_TH_OFF) { set_balance(false, false, 0); state = BAL_IDLE; } break; case BAL_2_TO_1: set_balance(false, true, diff_to_pwm(-diff_mv)); if (diff_mv > -BAL_TH_OFF) { set_balance(false, false, 0); state = BAL_IDLE; } break; default: set_balance(false, false, 0); break; } if (check_fault()) { set_balance(false, false, 0); state = BAL_FAULT; } _delay_ms(100); } }diff_to_pwm需要一个简单的比例映射,把压差从 20mV 到 200mV 映射到 PWM 0 到 100。压差越大,均衡电流越大。不要直接用线性映射到满占空比,否则压差非常大时电流容易冲过头,芯片保护或者电感饱和都可能冒出来。
4. 关键参数计算与器件选型
4.1 均衡电流目标与散热估算
MP2642GR-Z 能扛多大均衡电流,最终由封装热阻、PCB 铜箔面积和电感饱和电流共同决定。参考设计里我一般把目标放在 0.3A 到 0.8A,两串小电池组选 0.5A 是比较中庸的点。电流越大,均衡越快,但发热、电感体积和 PCB 走线压力都会上来。
用 0.5A 算发热:先看功率管导通损耗,假设内部两个功率 MOSFET 的导通电阻合计 50mΩ,导通损耗大约 I²R = 0.5×0.5×0.05 = 12.5mW。这看着很小,实际还有开关损耗和电感损耗,在 300kHz 开关频率下总损耗大约 100 到 200mW。这个热量在普通 FR4 板上只要预留 1cm² 铜箔散热就完全压得住。如果均衡电流设到 1A,总损耗可能翻到 0.5W 以上,发热就不能忽视了,所以除非需求紧张,不建议长时间大电流均衡。
均衡时间取决于容量差,这里给一个估算方法。如果两节电池容量差为 5%,单节容量 10Ah,差额就是 0.5Ah。0.5A 均衡电流理论上需要 1 小时搬完。考虑到实际损耗和迟滞窗口,通常要预留分母,实际可能花 1.5 到 2 小时。备用电源每天只有一次充电机会,这个时间可以接受;便携储能如果希望 20 分钟完成均衡,就得把电流提到 2A 或更高,这时候整个功率级设计和散热系统都要重新评估。
4.2 储能电感与滤波电容计算
均衡功率级的电感是核心元件。电感值影响电流纹波、开关管应力和噪声。经验值范围一般在 3.3μH 到 10μH 之间,我按 300kHz 开关频率、0.5A 平均均衡电流、纹波系数 0.3 来选,得到一个比较折中的电感值。公式可以用 buck 降压方向粗略估算:
[ L \geq \frac{(V_{in} - V_{out}) \times D}{f_{sw} \times \Delta I} ]
如果高压电池 4.2V,低压电池 3.8V,占空比 D 约等于 0.9,(\Delta I) 取 0.4A,(f_{sw}=300kHz),代入得到:
[ L \geq \frac{(4.2 - 3.8) \times 0.9}{300000 \times 0.4} \approx 3\mu H ]
考虑到反向 boost 方向上电感电流会有不同应力,并且电感实际感值会随直流偏置下降,我最终选了 6.8μH、额定饱和电流 1.5A 的贴片功率电感。电感选择时特别要看饱和电流,不要只看封装尺寸。6.8μH 额定电流 0.8A、饱和电流 1.2A 的电感在 0.5A 时可能已经离饱和不远,开关电流纹波一叠加就容易导致发热。
输入输出端的小电容主要吸收高频开关电流。输入侧用 10μF X7R 电容,输出侧同样 10μF,并各并联一个 0.1μF 高频电容。如果发现开关节点振铃严重,还可以在功率管开关节点对 GND 加一个 RC 吸收,阻值比如 10Ω,电容 1nF,用示波器观察振铃频率来微调。
4.3 ADC 精度与电压采样分辨率
ATmega32 的 ADC 是 10 位,参考电压如果设为 2.56V,我的分压网络为 0.25 倍,那么满量程对应电池电压 10.24V。每个 ADC 码值对应电池电压 2.56V / 1024 / 0.25 ≈ 10mV。也就是说,50mV 的均衡阈值在 ADC 上大约是 5 个码值,经过滤波后这个信噪比是够用的。
不过要注意,分压电阻比例误差会直接破坏这个精度。0.25 倍并不是靠一对电阻就能精确实现的。比如用 100kΩ 和 33kΩ 分压,实测比例可能偏离百分之几。这就是为什么我强调校准,不是为了修 ADC,而是为了修正电阻网络的增益误差。另一个容易出问题的是 MCU 参考电压,内部 2.56V 参考有一定的温度漂移,好在均衡判据是两个通道做差值,公共参考漂移会部分抵消,因此在均衡应用里内部参考完全可以接受。
如果未来想升级到 16 位外部 ADC,可以将采样部分从 ATmega32 移到一个外置 16 位 SPI ADC,比如常见的小型逐次逼近型 ADC。这样 ADC 之间的串扰完全消除,均衡阈值可以降到 10mV,但成本和时间都要增加。对大多数备用电源场景来说,10 位加校准已经够用,不必盲目堆精度。
4.4 保护阈值设计
除了均衡阈值,保护值也要提前定好。过压保护建议每节电池设为 4.25V,并且在充电过程中如果发现任意一节超过 4.25V,只能禁用充电,同时可以启动该节的能量转移来降压,但稳妥起见我会直接让整个系统进入故障。欠压保护设置 2.8V,低于这个值说明电池已经深度放电,再让它放电或均衡都很危险。过温保护设置 60℃,温度传感器贴到 MP2642GR-Z 和电池表面,两级报警,60℃ 停止均衡,65℃ 强制系统停机。
均衡超时也需要设置。我的保护逻辑是连续 30 分钟压差没有降到停止阈值,就停止均衡并报一个“均衡超时”的日志。电磁阀式地说,如果压差始终不变,要么采样有问题,要么功率根本没在搬送电荷,这时候继续工作只会白耗电,甚至内部出现局部过热。这个超时逻辑在生产测试中非常有价值,它能直接暴露产线装机时采样线接反或功率级焊接不良的问题。
5. 调试实录与常见问题排查
5.1 均衡不启动
均衡不启动是最常见的调试问题,但原因往往出奇地简单。第一个要确认的是 MCU 读到的电压是否正确。通过串口打印 ADC 原始值和转换后的电压值,和万用表同时测量电池两端,如果数值对不上,先检查分压网络和采样点位置。我遇到过一次分压电阻焊错规格,100k 焊成了 010,导致 ADC 电压低到接近零,均衡自然不动。
第二个常见问题是使能引脚逻辑不对。MP2642GR-Z 的 EN 是高有效,但如果在量产板上多了反向逻辑,MCU 输出高电平时实际在关闭均衡。调试时用万用表直接量 EN 引脚对 GND 的电压,再用小电流探头看电感电流,两步就能定位。不要只看代码里状态机有没有切换,状态机切了不一定说明硬件在动作。
第三个问题出在 ISET 引脚。如果 ISET 被接地或者电压太低,即使 EN 有效,内部电流环限流值可能只有几毫安,均衡速度慢到看起来像没启停。这个很好排查,直接用外部直流电源替换 PWM 滤波后的电压,人为拉高 ISET,观察均衡电流是否随之上升。
5.2 均衡电流异常或震荡
有一次我把均衡电流规划从 0.3A 改成 0.8A,然后发现电流表读数大幅度跳动,同时电感发出嘶嘶的啸叫声。用示波器看开关节点波形,发现开关频率附近的振铃很大,这是典型的功率回路寄生参数过大。电感电容选择没问题,但 PCB 走线环路太大,开关尖峰没有有效抑制。
震荡还有一个常见来源是电流环响应过快。如果把压差直接映射成电流指令,而电流指令变化又太快,均衡功率级的环路会来回振荡。我处理的办法是在 MD 换算函数里留一个小步进:每次调整 PWM 只允许 5% 以内的变化,相当于给电流指令做一个斜坡。这样电感电流变化率被限制,电压噪声也小很多。
我还试过把开关频率从 400kHz 降到 300kHz,啸叫立刻消失大半。原因是电感在较高频率下磁芯损耗和绕组分布电容表现更差,降频后虽然纹波略大,但整体噪声明显降低。如果你们项目也存在类似问题,不要一开始就动硬件,先在固件里降频或加斜坡,效果往往立竿见影。
5.3 待机功耗偏高
备用电源产品对待机功耗往往有严格要求,MP2642GR-Z 的硬件没法拿下来,只能从 MCU 和辅助电路上抠。早期版本我在空闲态完全没有关闭 ADC 和 PWM,MCU 也不 sleep,整机待机电流到了 5mA 左右。如果使用电池供电,5mA 一个月就是 3.6Ah,对于 10Ah 的小系统来说不可接受。
优化方案分三层:第一,等待均衡时把 MP2642GR-Z 的 EN 全部拉低,确保功率级不工作;第二,ATmega32 进入 Power-down 模式,使用外部 RTC 或 UART 中断唤醒,采样周期从 100ms 拉长到 5s;第三,用 NMOS 开关在待机时把分压电阻网络的供电断掉,避免电阻持续分压耗电。优化后实测待机电流降到了 0.2mA 左右,效果明显。
第三层需要特别注意,分压网络一旦断开,ADC 引脚会悬空。MCU 侧要把对应引脚配置成高阻输入,并加一个 100kΩ 下拉到 GND,防止悬空引脚电压漂移。唤醒后再给分压网络供电,等待几个毫秒让电压稳定,再开始采样。
5.4 常见问题速查表
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| 均衡不启动 | EN 逻辑接反 | 用万用表量 EN 引脚电压,确认有效电平 |
| 均衡不启动 | 采样电压不对 | 串口打印 ADC 值,校对分压网络 |
| 均衡不启动 | ISET 电压过低 | 外部电压源拉高 ISET,观察电流 |
| 均衡电流大且跳动 | 功率回路振铃 | 降低开关频率,调整 RC 吸收 |
| 均衡电流大且跳动 | 电流指令变化过快 | 给 PWM 输出加斜坡限幅 |
| 电感啸叫 | 电感饱和 | 更换更大饱和电流的电感 |
| 待机电流高 | MCU 没有 sleep | 进入 Power-down,延长采样周期 |
| 待机电流高 | 分压电阻一直在耗电 | 用 NMOS 断开分压网络供电 |
| 电压读数漂移 | 采样线路受开关节点干扰 | 布局分离,增加 RC 滤波 |
| 故障状态不恢复 | 过温或过流锁存 | 关机重启或外部故障复位 |
6. 应用场景、影响范围与实操心得
6.1 适合的产品形态
这套系统最典型的应用是两串锂电池的小型储能和备用电源。两节电池串联的配置常见于便携式储能电源、小型 UPS、电动工具电池包、太阳能控制器的备用电池模块等。只要电池组总电压在 7.4V 到 8.4V,保护阈值和参考电压设置合理,就可以直接参考这套方案。
MP2642GR-Z 本身对电池化学体系不挑,调整过压、欠压阈值后也可以工作在两串磷酸铁锂电池上。磷酸铁锂的标称电压比三元锂低不少,3.0V 到 3.6V 区间的工作点需要重新标定参考电压和分压比。调试时不要照抄锂电池的整组电压判断逻辑,电池类型切换必须重新做一轮校准。
6.2 对系统寿命与可靠性的实际影响
均衡方案带来的不是某一项性能的提升,而是系统整体寿命曲线的改变。一个没有均衡的两串电池系统,可能在第 100 次循环时可用容量就已经下降到 80%;加入主动均衡后,只要电芯本身的衰老没有到终点,电压失配会被不断纠正,可用容量可以持续保持在接近 95% 的水平。对备用电源来说,这意味着同样的电池组可以多用一两年,设备维护周期被拉长,综合成本反而下降。
可靠性影响更关键。主动均衡避免了长久浮充时的过充,高压电池不再长期在窗口上限工作,内部副反应和析锂风险都显著降低。均衡时的电荷转移电流是受控的,不会像充电器那样把电压硬往上顶,所以热安全隐患也得到抑制。除此之外,MP2642GR-Z 的故障反馈让 MCU 可以对功率级异常做出及时反应,系统多了一层保护。
6.3 最后几条实操体会
最开始调试这套方案时,我犯了一个几乎所有硬件工程师都会犯的错,一上电就着急调均衡算法,结果电压读数还没校准,所有判据都是白搭。所以建议你们拿到板子后,第一件事不是写状态机,而是老老实实做两个通道的电压校准,确保静置时读到的压差和万用表一致,再往下走。
第二个体会是,均衡阈值和电流不要追求极致。两串电池本来压差通常不会很大,把阈值设到 50mV 其实已经很积极。真正值得花时间的是均衡超时、故障锁存这些边界行为,因为这些边界状态在现场最难复现,一旦出了问题往往对系统伤害最大。
最后提醒一个容易忽略的点:量产版本里均衡状态必须通过某种方式上报给整机控制器。哪怕是拉高一个 GPIO 代表“正在均衡”,也可以让充电管理策略知道当前不能强行满充,否则充电器和均衡器之间会互相打架。我在一个备用电源项目里加了均衡状态上报后,整机充电策略立刻变得更合理,电池压差也再也没有出现过异常。
如果你也要做类似的两串电池均衡,建议先在电池模拟器上验证所有保护和切换逻辑,再实际接电池。这套 MP2642GR-Z 加 ATmega32 的方案最大的优势是软硬件边界清晰,出问题时可以清楚定位是功率级的问题还是策略的问题。做到最后你会和我一样感慨:均衡系统的调试其实不难,难的是把每一个边缘条件都想到并守住。