最近在做一个2S电池的备用电源模块,遇到了电池均衡这个看着“老生常谈”、实际上手之后坑不少的问题。两个串联电芯,容量差个百分之几,内阻差个几毫欧,自放电率差一点点,用不了几个循环就会变成一节快满、一节亏电的状态。如果放着不管,要么充电提前截止导致可用容量缩水,要么其中一节长期处于过压或欠压状态,寿命直接打折。
我最后定的方案是用一颗专用均衡芯片 MP2642GR-Z 配合一颗 PIC18F86J15 单片机来做主动均衡。均衡芯片负责功率级的能量转移,MCU 负责电压采样、均衡策略、保护和状态上报。这篇文章就把这套系统的设计思路、硬件要点、固件逻辑和调试过程中踩过的坑完整梳理一遍,给正在做类似储能或备用电源均衡方案的同行一个参考。
1. 项目背景与方案选型:为什么选主动均衡芯片加 MCU 的组合
1.1 串联电池单元失衡的根源与后果
先说清楚均衡到底在解决什么问题。两个电芯串联,标称容量一样,但实际出厂就有离散性。循环过程中,每节电芯的温度场不同、接触电阻不同、自身老化速率不同,导致每次充放电的实际电荷量都略有差异。差异叠加到一定程度,就会出现一个典型现象:充电时某一节先到截止电压,另一节还没充满;放电时某一节先到截止电压,另一节还有余量。
在备用电源场景里,这个问题的代价更隐蔽。备用电源大部分时间处于浮充或待机状态,电流很小,但浮充电压对电芯而言就是持续的高电位压力。如果某节电芯电压偏高,长期浮充会加速电解液分解和正极结构退化。等到真正需要备电放电时,失衡的那节电芯会先放空,系统总容量被它拖住,整个后备时间比设计值短一大截。
所以均衡的核心目标不是让两节电压数字一模一样,而是让两节电芯的 SOC(荷电状态)尽量接近。电压是间接指标,但在不装库仑计的低成本系统里,以电压差作为均衡判断依据是最实用的做法。
1.2 MP2642GR-Z 与 PIC18F86J15 的分工思路
这个方案里,均衡芯片和单片机的界限划得很清楚:
- MP2642GR-Z 负责“能量搬运”。它内部集成了开关管和相应的控制逻辑,外围只需要一枚电感和少量电容电阻。它检测两节串联电芯的电压,把电压较高的一节电芯的能量通过电感搬运到电压较低的一节,实现双向的相邻单元均衡。
- PIC18F86J15 负责“决策和管理”。它的 ADC 采集每节电芯电压、温度以及均衡芯片的工作状态,运行状态机决定什么时候开启均衡、均衡多大电流、什么时候停止,同时把故障状态记录并通过 UART 上传给上位机或 BMS 主控。
为什么要用专用均衡芯片而不是自己搭一个升降压电路?原因很简单:分立器件搭双向 buck-boost,驱动电路、续流二极管、电流采样、占空比控制、死区保护和效率调优,工作量非常大。专用芯片把这些都集成好了,外围简单,可靠性也更高,省下的精力可以放在策略和保护逻辑上,这才是这类小型均衡板的核心价值。
PIC18F86J15 在这个系统里不是算力担当,但它的资源刚刚好:10 位 ADC 支持多个采样通道,可以同时挂电压采样和温度采样;多路 GPIO 用来控制均衡芯片的使能脚和读取状态脚;UART 负责上报数据。在 8 位单片机里属于“干活刚刚好”的选择,成本也压得住。
1.3 被动均衡与主动均衡的取舍
做电池均衡绕不开被动均衡和主动均衡的对比。被动均衡简单粗暴,给每节电芯并联一个放电电阻,电压高的那节通过电阻把多余能量以热量形式放掉。优点就是便宜可靠,缺点也明显:能量浪费,热量集中在电阻上,大压差时均衡时间很长。
主动均衡则是把能量从高电压电芯转移到低电压电芯,能量不浪费,均衡电流可以做得更大,均衡速度更快。坏处是成本高、电路复杂。
在这个项目里选主动均衡,核心原因是备用电源长期处于浮充状态,本身热量管理余量很小。如果做被动均衡,浮充阶段持续把多余能量转成热,对散热是个负担。而且备用电源的充放电循环不频繁,一旦出现失衡,需要在那次使用前尽快把状态修正回来,被动均衡的速度经常不够用。主动均衡虽然成本高一点,但在“少维护、高可靠”的备用电源场景里是更合适的投资。
| 对比维度 | 被动均衡 | 主动均衡(本方案) |
|---|---|---|
| 能量处理方式 | 通过电阻发热消耗 | 电感转移,能量再利用 |
| 均衡电流 | 常见 50~100mA,受散热限制 | 可到 200mA 以上 |
| 均衡速度 | 慢 | 快 |
| 热量影响 | 明显,PCB 和电池都有热应力 | 很小,只有功率路径上的软开关损耗 |
| 成本 | 低 | 中等 |
| 控制复杂度 | 低 | 中,需要 MCU 配合 |
实际测试下来,这套主动均衡方案在 50mV 压差的情况下,搭配 200mA 均衡电流,大概几十分钟就能把压差收敛到 20mV 以内。这个速度是被动均衡很难做到的。
2. 核心硬件电路设计与参数计算
2.1 电压采样电路的实现与坑
均衡策略的基础是准确的单体电压采样。2S 系统里测量两节电芯电压,常见做法是分压加 ADC。第一节电芯电压直接通过电阻分压进 MCU;第二节电芯电压可以先测总压,再减去第一节电压,也可以直接用差分方式测第二节。
我用的是分压加 ADC 多通道采样:两节电芯分别经过分压电阻网络后进入 PIC18F86J15 的 ADC 引脚。分压比例需要把最高单节电压 4.2V 映射到 ADC 满量程附近。MCU 供电是 3.3V,分压比取 1:1,4.2V 会变成约 2.1V,这样留了充足的裕量。
这里有个非常关键的细节:均衡开启瞬间,电芯两端电压会因为采样点位置的寄生电感出现尖峰,而且均衡电流切换时会在地线上产生噪声脉冲。如果分压电阻的滤波电容和采样走线布局不合理,ADC 采到的电压会跳来跳去,导致 MCU 误判“压差超标”然后不停地启停均衡。我在每路采样输入都加了 RC 低通滤波,截止频率压到 1kHz 以下,同时采样引脚附近的走线尽量短且远离电感的开关节点。
还有一个容易被忽视的问题:分压电阻的精度直接决定了测量误差。1% 精度的电阻在 4V 量级会有几十毫伏的理论误差,而均衡开启阈值可能只有 25mV,误差就比阈值还大了。所以分压电阻我用的是 0.1% 精度的薄膜电阻,而且出厂前在固件里做了两点校准,每个采样通道减去零偏,再乘增益修正系数。这个校准步骤强烈建议保留,它就几行代码的事,但对均衡判定准确性影响很大。
2.2 电感选型与均衡电流设定
MP2642GR-Z 的能量转移核心是外部一枚电感。电感感值、饱和电流和直流电阻(DCR)这三个参数决定了均衡能力和效率。
电感感值影响开关频率下的纹波电流。感值越大,纹波越小,但体积也越大,动态响应越差;感值太小,电流纹波变大,电感容易饱和,开关管应力也变大。我按目标平均均衡电流 200mA 来设计,工作频率设定在 50kHz 左右,感值选择了 10μH。
饱和电流必须往大了选,至少要覆盖峰值电流。200mA 平均电流在连续导通模式下,峰值电流可能会到平均值的两到三倍。我选了饱和电流标称 900mA 以上的功率电感,留了 3 倍以上的裕量,实测峰值电流大概在 550mA 左右,这个裕量是必要的,因为温度升高后电感的饱和电流会下降,标称值和实际值之间也有余量差异。
DCR 直接影响效率和发热。10μH 的电感如果 DCR 达到 0.3Ω,200mA 电流下损耗就有 12mW,看起来不大,但电感位置靠近电池和塑料外壳,热量散不出去就会累积。我用的电感 DCR 在 0.1Ω 以下,均衡 8 小时连续工作,电感表面温度只比环境高不到 10℃,完全可以接受。
均衡电流的设定可以通过 MCU 的 PWM 或 GPIO 控制均衡芯片的使能端来实现。如果芯片支持模拟控制,可以通过调节参考电阻的阻值设定基准电流。我这版选的是固定电流档位,通过一颗精密取样电阻把目标电流设定在 200mA。实测偏差约 ±5%,这个精度对均衡场景足够了。
2.3 保护电路与故障监测设计
均衡功能必须被严格约束,否则就是在加速电池老化。我按以下条件设计保护逻辑:
过压保护:单节电芯电压超过 4.25V 时,禁止均衡启动;如果均衡已启动,立即关闭。这个阈值可以通过分压电路修正,但要留出足够的迟滞,避免在 4.2V 附近反复启停。
低温保护:均衡时电流流过电感和开关管,虽然主动均衡发热小,但低温下电池内阻增大,大电流会产生额外的极化压降,影响电压采样准确性。低温下我用 10mV 作为更低阈值,温度低于 0℃ 时直接禁止均衡。
均衡超时:正常情况下,压差从 50mV 降到 10mV 以内只需要几十分钟。如果均衡持续 8 小时压差还不收敛,那大概率不是普通失衡而是电芯出了问题,我会使能超时关闭,把故障码记录下来并上报,避免均衡电路长时间空转。
另外,MCU 还必须实时监测均衡芯片的状态引脚。我在调试时遇到过均衡芯片内部出现异常关断,但 MCU 还天真地认为均衡一直在跑的情况。加上状态监测之后,MCU 能及时感知均衡芯片的启停,策略才真正闭环。
2.4 PCB 布局的几条实用原则
这个电路不太复杂,但布局好坏直接影响均衡电流的稳定性和采样准确性。总结一下我实际改版后的布局原则:
功率回路尽量短。电感、均衡芯片的功率引脚和电池端子之间的走线要宽,面积要小,避免在高频开关状态下形成大的环路天线,既能减少电磁辐射,也能减少振铃。
采样走线远离开关节点。电压采样是这个小信号路径,绝对不能和功率路径长距离平行走线。我特意在 PCB 板上把采样走线包了地,并且在 ADC 引脚前面放了一级阻容滤波,这样均衡开关噪声基本不会窜进采样通道。
单点接地。功率地和模拟地在 PCB 上分开走,在电池端或 ADC 参考地附近单点汇合。第一次打板时我犯过把功率地直接贯通整个板的错误,结果均衡一启动,ADC 采样数据就开始漂移,后来改成单点接地才解决。
3. 固件逻辑与均衡策略实现
3.1 系统状态机设计
均衡系统固件用一个标准的状态机来组织逻辑,避免在中断或主循环里到处散落判断条件。我的状态定义如下:
- IDLE:系统空闲,定时唤醒进行电压采样,判断是否需要均衡。
- BALANCING:均衡进行中,周期采样,监控压差、温度和保护条件。
- COMPLETE:压差已收敛到关闭阈值,停止均衡,记录本次均衡结果。
- FAULT:检测到过压、超时或芯片异常,停止均衡并上报错误。
主循环每隔 100ms 扫描一次状态。IDLE 状态下,每 10 秒唤醒一次 ADC 采样,这样可以降低功耗。配套备用电源系统的低功耗要求,MCU 在无均衡需求时进入休眠,用电芯电压监测的中断或定时器唤醒。
这个状态机的核心逻辑在于:状态切换必须有明确的条件和迟滞,不能因为采样噪声而飘忽不定。比如 IDLE 到 BALANCING 需要压差大于 25mV 且持续 30 秒,BALANCING 到 COMPLETE 需要压差小于 10mV 且持续 10 秒。迟滞和持续时间配合,基本避免了临界压差下均衡反复启动的问题。
3.2 ADC 采样与滤波的细节处理
PIC18F86J15 的 ADC 是 10 位精度,直接拿来用会面临两个问题:一是采样噪声,二是均衡开关带来的耦合干扰。我的滤波策略是移动平均加中值剔除。
每次采样连续读 8 次,去掉最大值和最小值,剩下 6 个值取平均。这样既滤掉了随机噪声,又不会被单次偶发的尖峰带偏。采样窗口避开均衡开关的动作时刻:均衡芯片的开关频率在 50kHz,所以我在软件里做了一个简单的时隙策略,每次均衡开关切换后延时几十微秒再启动 ADC 转换,保证采到的是稳定区间的电压。
电压换算方面,10 位 ADC 在 3.3V 参考电压下,每个 LSB 约 3.2mV。经过 1:1 分压后,对应到电芯电压约 6.4mV 的量化步长。这个分辨率作为均衡启动阈值来说偏粗,所以我做了数字滤波和时间平均,等效分辨率能提高到 3mV 左右。再加上前面提到的硬件校准,实际压差判定误差可以控制在 5mV 以内,满足 25mV 阈值判断的需求。
3.3 均衡使能判断与迟滞控制
均衡触发条件我在实际项目中最终确定为以下几项同时满足:
单节电压都在正常工作区间(3.0V 到 4.2V),过低和过高都不启动均衡。原因是:电压过低时,均衡会把高电芯能量灌入低电芯,但此时系统本身可能处于电池保护临界,强行均衡反而容易让低电芯跌得更快;电压过高时又面临过充风险。
压差大于 25mV,且持续 30 秒。这个阈值设置很有讲究:低于 20mV 的压差带来的容量差异通常只有零点几百分比,对系统影响很小,主动均衡没必要在这种微小压差下频繁动作。25mV 启动、10mV 关闭,中间有 15mV 迟滞带,避免在阈值附近反复切换。
此外还要考虑充电状态。备用电源系统在浮充阶段,电池电压会被外部电源主动钳制,电芯电压不能准确反映 SOC,此时均衡意义不大。我在浮充状态下禁止均衡,只在静置或放电后恢复状态时允许均衡。这个细节最开始没注意,后来发现浮充阶段的均衡容易造成“低电芯被灌进过多能量、但系统整体并没有消耗”的怪象,关掉浮充均衡之后系统的表现反而更健康。
均衡时间的控制也很重要。我每小时记录一次压差变化,如果连续 8 小时压差没有明显下降趋势,就主动停止均衡并且打故障标记。这里说的“明显下降”指的是压差减少至少 10mV,否则认为效率过低,可能有硬件问题或电芯严重损坏。
4. 实际调试过程与常见问题排查
4.1 均衡电流异常偏低
第一版电路板点起来之后,我用电流钳测均衡电流,发现只有标称值的一半。排查过程从简单到复杂:先测了均衡芯片的使能电压,正常;再测电感两端波形,发现占空比明显低于设计值。仔细看数据手册里的电流设定公式,发现我选的设定电阻值是 200mA 档位,但芯片还额外要求使能脚的 PWM 占空比达到一定范围才能全电流输出。我最初直接用 GPIO 输出高电平使能,结果芯片内部却以较低占空比工作。
把使能脚改成 PWM 输出、占空比拉到最小 90% 之后,均衡电流恢复了。这个坑提醒我:专用芯片的外围电路再简单,也要仔细读数据手册里的使能时序表格,不能想当然认为高电平就是全速工作。
4.2 开启均衡后单体电压跳变
调试中最让人头疼的现象是:均衡一开始,ADC 采样到的电压瞬间跳变几十毫伏,MCU 直接判定压差越限,立刻关闭均衡,关闭后电压又恢复,形成一个循环。用示波器抓采样引脚的波形,能看到明显的开关尖峰。
处理办法分两步:硬件上,在采样分压电阻后级并联了 100nF 的滤波电容,把采样引脚的高频纹波压平;软件上,ADC 转换窗口避开均衡开关动作的边沿,并且采样数据增加了中值剔除。两招一起用,电压跳变从几十毫伏降到了 5mV 以内,均衡可以稳定持续工作。
4.3 电感啸叫与开关噪声
均衡工作正常之后,耳朵贴着电路板能听到轻微的高频啸叫,示波器看电感节点的波形有比较大的振铃。这是因为开关频率处于人耳听觉上限的临界区,加上电感和分布电容在开关边沿激发谐振,产生了可闻噪声。
解决方式比较简单:把 PWM 频率从最初的 25kHz 提高到 50kHz,超出人耳最敏感的区域;同时在电感两端并联一个 RC 吸收网络抑制振铃。啸叫基本消失了。如果你的均衡板也有啸叫问题,先检查开关频率,再看电感选型是否合适,不要一上来就换电感。
4.4 长时间均衡不收敛
有一组测试电池,压差在 45mV 附近,均衡跑了一晚上,第二天看压差还在 35mV,明显不收敛。用上位机记录数据发现,均衡电流只工作了前半小时,然后芯片就进入短路保护状态,状态脚拉低。查下来发现是我初始设置均衡电流偏大,加上电芯内阻偏高,均衡启动瞬间在电芯内部产生了较大的极化压差,芯片误判为输出短路,触发了保护。
解决方法是把均衡电流从 200mA 调低到 150mA,同时把电芯的极化电压在软件里做补偿:均衡启动后前 5 秒内不读取压差,等极化稳定后再进入策略判断。这样既不会误触发保护,均衡效果也基本没有打折扣。
4.5 浮充状态的误判问题
备用电源系统里的电池,大多数时间挂在浮充电源上。浮充电压恒定,两节电芯电压会被外部电源强制拉到一个相对平衡的状态,但 SOC 可能并不平衡。如果这时用电压差作为均衡依据,系统会认为“压差不大,不需要均衡”,但实际上等放电一开始,真正的容量差就暴露出来了。
我在固件里针对这个场景做了调整:充放电转换时记录一次静置电压,静置后的开路电压才能反映真实 SOC;浮充期间计算的电压差只做记录,不触发均衡。这个调整解决了备用电源系统“平时看着很平衡,一放电就掉链子”的尴尬问题。
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 均衡电流偏低 | 使能 PWM 占空比不足 / 设定电阻错误 | 测量使能脚波形、检查配置电阻 | 使能脚改为 PWM 输出,确认占空比范围 |
| 均衡一启动电压跳变 | 采样受开关噪声干扰 | 示波器抓采样引脚波形 | 加 RC 滤波,采样窗口避开开关边沿 |
| 电感啸叫 | 开关频率落入音频范围 | 耳朵听 + 示波器看振铃 | 提高 PWM 频率,加 RC 吸收 |
| 长时间不收敛 | 极化电压触发芯片保护 / 电芯本身故障 | 记录均衡电流和芯片状态脚 | 降低均衡电流,启动阶段延时判决 |
| 浮充时均衡判断失真 | 浮充电压不反映真实 SOC | 对比静置电压和浮充电压 | 浮充阶段禁止均衡,只记录 |
5. 性能验证方法与参数整定记录
5.1 人工制造失衡并实测均衡曲线
要验证均衡系统是否有效,第一步是制造一个可控的失衡状态。我用恒流源分别给两节电芯预充到不同 SOC:一节充到约 80%,另一节约 60%,静置 2 小时后记录开路电压差。然后启动均衡,每 10 秒记录一次两节电芯电压,绘制压差随时间的变化曲线。
实测数据表现为:初始压差约 55mV,均衡开启后前 10 分钟压差下降最快,之后趋缓。这是因为前期的 SOC 差较大,均衡电流稳定输出;随着压差减小,芯片内部检测到的电压差变小,部分模式下传输功率自然下降。最终在约 45 分钟后压差稳定在 10mV 以内,均衡完成。
再换算均衡能量:电芯容量 10Ah,55mV 压差约对应 1.2% 的 SOC 差,折合能量约 0.44Wh。200mA 均衡电流在平均电压 3.7V 下的输出功率约 0.74W,理想情况下几十分钟足够完成。实测 45 分钟略高于理想值,主要损耗来自均衡路径的开关损耗和电感 DCR,以及电压差缩小后传输功率的自然下降。整体效率在我接受的范围内。
5.2 关键参数整定表
经过三轮迭代测试,最终参数如下(以 2S 锂离子电池为例,磷酸铁锂版本只需修改满充电压对应分压值):
| 参数 | 设定值 | 整定依据 |
|---|---|---|
| 均衡启动阈值 | 25mV(持续 30s) | 低于此值 SOC 差异影响小,避免频繁动作 |
| 均衡关闭阈值 | 10mV(持续 10s) | 带迟滞,防止临界抖动 |
| 均衡目标电流 | 200mA | 平衡速度与电芯极化、发热的折中 |
| 均衡最大时间 | 8h | 超过仍不收敛判为异常 |
| 过压保护 | 单节 4.25V | 高于满充电压即禁止均衡 |
| 过温保护 | 45℃ | 高温下暂停均衡,优先保安全 |
| 浮充策略 | 禁止均衡 | 浮充电压不反映真实 SOC |
| 采样滤波 | 8 次采样去掉极值取平均 | 兼顾噪声抑制与响应速度 |
5.3 备用电源场景特有的可靠性考量
备用电源与日常消费电子不同,电池可能在浮充下连续挂几个月甚至更久。这对均衡策略有两个深层影响:
一是均衡不能太频繁。每次均衡都会让电芯经历一次局部的充放循环,对锂离子电池来说,长期反复的小幅均衡也会累计老化。所以我设置了均衡完成后 24 小时内不再启动的冷却时间,避免同一组失衡被反复“纠正”。
二是故障记录要持久化。备用电源系统出现一次异常均衡,可能几个月后维护时才被发现。PIC18F86J15 内部有数据 EEPROM,我把每次均衡的启动时间、持续时长、最终压差、异常码写入 EEPROM,通过 UART 可以随时读出历史记录。这样即使巡检间隔很长,也能回溯电芯的健康状态变化趋势。
还有一个细节是上电顺序。备用电源系统的主电源来自市电,电池处于浮充状态;一旦市电掉电,系统切到电池放电。均衡功能必须在掉电切换瞬间主动关闭,原因是此时电池开始大电流放电,电芯电压会出现明显的动态压降,如果均衡还开着,电压采样会完全失真,甚至可能导致低电芯在放电过程中被均衡电路额外拉低。我通过检测 UART 接收的掉电中断信号来关闭均衡,并在放电停止后重新评估电芯状态再恢复均衡逻辑。
这套设计从打样到稳定运行,前后改了三版。第一版布局问题导致采样漂移,第二版浮充策略不当导致均衡误判,第三版才算真正把硬件和策略都理顺。回过头看,最值得分享的经验其实就两条:一是均衡电流和阈值参数不要照搬参考设计,一定要结合你实际电池的容量和内阻来整定;二是浮充和静置状态下的采样策略,必须单独写逻辑分支处理。很多人做均衡只盯着“怎么把能量搬过去”,忽略了“什么时候不该搬”,这两者同样重要。
如果你也在做类似的 2S 均衡系统,建议先把你现场电池的浮充电压、容量和内阻参数测出来,再对照本文的参数表做一轮整定。均衡不是越激进越好,稳稳当当、不误动作、不添乱,才是备用电源场景最需要的东西。