做储能和备用电源系统的人,基本都绕不开一个词:电池均衡。只要电池是串联的,不管两串还是二十串,时间一长都会出现单体电压拉开的情况。我最近做完的这块板子,就是用 MP2642GR-Z 这颗均衡芯片配合 PIC18F86J15 这颗 MCU,专门针对最小单元的“两个串联电池组”做主动均衡。它用在储能柜和备用电源的电池管理模块里,核心任务很单一:让两节电池的电压尽量保持一致,延长电池组寿命,避免过充、过放和容量衰减。
这套方案适合谁参考?如果你正在做 2S 锂电池、磷酸铁锂电池的均衡模块,或者想在储能系统里把均衡功能和主控分离、减轻后端 BMS 的负担,那这篇笔记基本覆盖了从选型到调通的完整路径。器件选型、采样电路、软件状态机、实测数据、踩坑记录我都会展开讲,尽量让拿到板子的人能直接照着复现。
1. 项目思路拆解:两串电池不均衡的账,要先算清楚
1.1 不均衡从哪里来
两节电池串联,电气结构很简单,正极接负极就是一组。但真实世界不存在两节完全一样的电池。容量有离散,内阻不一致,自放电率不同,甚至电池包内部一边温度高、一边温度低,这些都是不均衡的来源。更麻烦的是,不均衡会在每一次充放电循环里被放大:容量小的一节每次都比另一节先充满、先放空,长期下来衰减更快,然后差距越来越大。
这个现象在储能和备用电源场景尤其明显。备用电源长期处于浮充状态,电池一直挂在充电回路里;储能系统则是每天深充深放。两种工况都会放大单体差异。后果叠加起来就变成:
- 充电时,容量小或内阻高的一串先到达截止电压,BMS 为了保护电池只能停充,剩下的那串永远充不满。
- 放电时,最弱的一串先被拉低到欠压保护点,而另一串还有大量剩余电量。
- 长期这样循环,被反复深充深放的那串衰减速度远超预期,整组电池寿命大幅缩短。
所以结论很清楚:对两串电池不加均衡,短期看只是损失 5% 到 10% 的可用容量,时间一长就是整组提前退役。均衡不是锦上添花,而是串联电池组能长期稳定工作的必要措施。
1.2 为什么选“均衡芯片 + 普通 MCU”而不是其他方案
均衡有两条技术路线,被动均衡和主动均衡。
被动均衡最常见也最便宜,就是在电压偏高的电池两端并联一个放电电阻,把多余能量以热量形式放掉。它的优点是电路简单、可靠、好理解;缺点是均衡电流小、只能在高压侧做减法、发热明显。对储能和备用电源来说,单节电池容量很大,几十毫安的被动均衡电流基本等于是安慰剂,根本拉不平电芯之间的容量差。
主动均衡恰恰相反,它把高电压电池的能量搬运到低电压电池,电流可以做到 1A 量级,效率高、发热小。主流拓扑有电容电荷泵、电感储能、反激式变压器三种。MP2642GR-Z 这类集成开关管的均衡芯片,走的是电荷泵加电感储能的方向,外围只需少量元件,很适合做成独立模块。
那为什么还要加 PIC18F86J15 这颗 MCU?因为均衡芯片只负责“搬运能量”,它自己不知道什么时候该搬、搬到什么程度停下来。这些决策需要电压采样、阈值判断、状态切换,还要和上位机通信。用专用 AFE(模拟前端)也可以做,但成本高,策略固化,不够灵活。在 2S 这种最小系统里,用普通 MCU 加分立采样反而更划算,策略完全由自己掌控。
选型逻辑拆开就是:MP2642GR-Z 负责高频开关和能量转移,把均衡电流从硬件层面做出来;PIC18F86J15 负责采样、算法、通信,把均衡策略从软件层面做聪明。功率部分和控制部分分离,后面所有设计都围绕这个分工展开。
2. 核心器件拆解:MP2642GR-Z 与 PIC18F86J15 怎么分工
2.1 MP2642GR-Z:双向能量转移是核心能力
MP2642GR-Z 属于集成度比较高的电池均衡专用芯片。它内部集成了开关管和部分控制逻辑,外部只需要一颗储能电感和少量电容,就可以在相邻两节电池之间双向搬运能量。当第一节电压高于第二节,它能把能量从第一节搬给第二节;反过来也能反向搬。这个双向能力对均衡来说很重要,因为电池状态是动态的,今天可能第一节偏高,明天可能就变成了第二节偏高。
在我们项目里的典型接法是这样的:两颗电芯串联,电池组的正极、中点、负极分别接到均衡芯片的对应端口,一颗贴片电感跨接在开关节点上,控制信号由 MCU 给出。芯片的开关频率通常在几百 kHz 量级,具体工作频率和最大均衡电流依芯片批次和外围参数而定。我们实测在电池压差 100mV 时,平均转移电流能到 1A 左右(不同版本会不一样,以你手头手册为准)。
这颗芯片在工程上很友好,第一是外围元件极少,布局压力小;第二是通过使能引脚和方向控制引脚,把“决策权”完整交给了外部 MCU。也就是说,芯片只负责执行能量转移,判断逻辑全部放在软件里。这一点正是我们选择这套组合的核心原因。
2.2 PIC18F86J15:采样、决策、通信一肩挑
PIC18F86J15 是 PIC18 家族的一颗 8 位 MCU,常见于 3.3V 供电的工业应用。它的特点是外设够用、功耗低、成本可控,特别适合电池管理这类对可靠性要求高、又不希望把资源浪费在复杂操作系统上的场景。
在项目里,它的职责可以拆成四块:
- ADC 采样:采集两节电池的电压、电池温度、环境温度等模拟量。ADC 分辨率在 10/12 位量级,配合精密分压电阻和软件滤波,能把电压分辨率做到 1mV 级别,这是精确均衡判断的基础。
- GPIO 控制:通过普通 IO 口控制 MP2642GR-Z 的使能脚和方向脚,必要时还控制状态 LED 或外部继电器。
- 通信上报:通过 UART(也可以换 I2C 或 SPI,看系统接口需求)把两节电池电压、均衡状态、故障码上报给上位控制板或监控屏。在储能系统里,这块板通常是电池包内的子板,需要响应主控的查询指令。
- 可靠性管理:开看门狗防止程序跑飞,用内部模块做欠压检测,配置参数存进 EEPROM,掉电不丢失。
这些能力单独看都不算豪华,但组合在一起,正好覆盖了 2S 均衡模块的全部控制需求,而且留出了后续扩展成 4S 甚至更多串的控制余量。
2.3 两个芯片之间的配合逻辑
简单描述就是八个字:MCU 决策,芯片执行。
没有均衡需求时,PIC18F86J15 把使能引脚拉低,MP2642GR-Z 完全休眠,系统待机电流很低。当检测到某一节电池电压相对另一节偏高,而且压差超过预设阈值(比如 20mV),MCU 就输出使能信号并设置均衡方向。此时均衡芯片开始工作,把高压侧能量向低压侧搬运。MCU 在搬运过程中持续监控电压变化,当压差缩小到接近死区值(比如 5mV)时,关闭均衡。整个过程是闭环控制,而不是芯片自己开环工作。
这个配合方式也方便加入各种保护逻辑。比如电池温度过高时,即使压差很大也先不均衡;比如电池处于大电流放电状态时,端电压波动大,容易误判,软件可以在检测到电流超过阈值时强制暂停均衡。这些都是单纯靠硬件芯片难以实现的策略。
3. 硬件电路设计实操:采样、驱动与布板要点
3.1 两串电池电压采样电路设计
这个部分是整个硬件设计里最容易被轻视、又最容易翻车的环节。很多人觉得拿 ADC 直接量电池两端就行,实际上两串电池的中点电压和系统地之间有个坑:直接用单端 ADC 去量中点电压,会和负极形成共地干扰,低压差信号完全测不准。
两串电池的电压采样,正确做法通常有两种。
第一种是差分采样。用精密运放把每一个 cell 的电压转换成单端信号,再送进 ADC。优点是共模抑制好、精度高;缺点是板上要多一片运放,成本略增,还要给运放做零漂校准。
第二种是两路分压对地。先用两个电阻分压网络把每个 cell 对地的绝对电压降下来,再用两个 ADC 通道采样,最后在软件里做减法得到压差。优点是电路最简单、成本最低;缺点是两路的增益误差和分压电阻精度都会叠加到最终差值上,所以分压电阻必须用 1% 甚至更高精度,软件里还要做差分校正。
我们最终选了第二种,因为两块电池的中点和系统地之间有明确的电气参考,只要 MCU 的 ADC 参考地和电池负极共地,先测两个绝对电压再相减是可行的。但有三个细节必须守住:
- 分压电阻阻值要偏大,100kΩ 级别,把电池的静态漏电压到微安级;
- ADC 引脚要加 RC 滤波,典型值 10kΩ 加上 100nF 电容,滤掉高频噪声;
- ADC 采样时间要够,不要跟 GPIO 翻转的边沿撞在一起,否则毛刺会直接进采样结果。
我在调试中最深的教训是,ADC 原始数据不能直接拿来判断均衡,必须做多次采样和软件滤波。具体原因在实测部分会详细展开。
3.2 均衡功率回路的布板要点
MP2642GR-Z 的功率回路(电池、电感、开关管、续流电容)是高频大电流回路,布局不好会出现地弹、辐射干扰,严重时芯片还会自己震荡。
功率布板的三条核心原则:
第一,功率回路要最小化。从电池正极到芯片开关端、再到电感、再到电池负极,这段回路要短、要粗,不要绕远。PCB 上用开窗加锡的方式降低回路阻抗,效果比单纯加宽走线更明显。
第二,功率地和控制地要单点相连。ADC 采样电路的参考地不要混进功率地,否则均衡大电流会在公共地阻抗上产生压降,直接影响采样电压。我见过一块板图省事把所有地连成一片,结果均衡一启动,采到的电压直接跳了 20mV。
第三,电感要紧贴芯片摆放。电感是发热和磁辐射大户,一方面散热路径要短,另一方面要尽量远离 ADC 采样网络和 MCU 的晶振区域,必要时加屏蔽罩。
3.3 MCU 供电与通信接口
PIC18F86J15 由 3.3V 供电。在储能系统里,3.3V 通常由电池组电压经过 DC-DC 或 LDO 降压得到。这里有一个特别容易踩的坑:如果 3.3V 是从电池组高侧取电,均衡器工作时电池电压会被主动拉平,MCU 供电不能出现大的跌落。
实测下来,单独用一颗低噪声 LDO,并且在电源输入端放一个 22μF 左右的钽电容或 MLCC 阵列,能有效避免均衡启动瞬间的电压跌落。另外,LDO 的输出纹波要小,否则会直接影响 ADC 参考电压的稳定性。
通信接口方面,默认跑 UART,波特率 9600 或 19200,帧结构简单一些更可靠。数据内容少,但一定要加校验字节,而不是裸发裸收。通信地和电池负极必须保证共地,否则在均衡大电流回路附近,浮地会导致乱码。
4. 软件控制策略与状态机实现
4.1 电压采集、滤波与校准
代码逻辑本身不复杂,难的是让 ADC 读到的数据稳定可信。
我第一版程序每 10ms 读一次 ADC,直接求平均值来判断压差。结果均衡器一启动,读数就乱跳。原因就是功率地的噪声通过参考地串进了 ADC。后来改成两套动作。
第一套是软件滤波,每 20ms 采样 8 次,去掉最高最低值,再对中间 6 次求平均。等效采样率虽然降到 40Hz,但稳定性提高很多。核心代码大概是这样的:
#define ADC_SAMPLE_CNT 8 uint16_t ReadCellVoltage(uint8_t ch) { uint32_t sum = 0; uint16_t maxv = 0, minv = 0xFFFF; for (uint8_t i = 0; i < ADC_SAMPLE_CNT; i++) { uint16_t v = ADC_Read(ch); if (v > maxv) maxv = v; if (v < minv) minv = v; sum += v; } return (uint16_t)((sum - maxv - minv) / (ADC_SAMPLE_CNT - 2)); }第二套是采样窗口。均衡不是一直跑的,软件把均衡设计成间歇式,比如跑 250ms、停 50ms。停下来的那 50ms 里没有大电流,正好用来采样。MCU 只在这个无均衡窗口里更新电压数据,采回来的数据基本是干净的。
另一个关键是校准。分压电阻和 ADC 本身都有误差,不校准的话,两路通道自带 20mV 偏差很正常,均衡系统会被这个偏差一直带着跑。我们出厂时做两点校准,通常在 3.0V 和 3.6V 两个点记录原始 ADC 值,算出每通道的增益和偏移,写进 EEPROM。之后每次上电都按校准参数把原始值换算成实际电压。
4.2 带迟滞的均衡状态机
均衡动作不能做成单阈值开开关关,必须加入迟滞,否则压差会在阈值附近反复穿越,芯片每隔几秒重启一次,能量来回搬运,器件应力也大。
我的状态机只有四个状态:
- IDLE:等待采样,计算压差。
- BALANCE_HIGH:检测到 CELL1 偏高,使能均衡,方向为 CELL1 到 CELL2。
- BALANCE_LOW:检测到 CELL2 偏高,方向反过来。
- FAULT:过温、过压、过放或芯片异常,停止均衡并上报故障。
进入条件和退出条件这样处理:
#define DELTA_ON 0.020f // 压差超过20mV开启均衡 #define DELTA_OFF 0.005f // 压差低于5mV关闭均衡 int8_t delta_mv = (int8_t)((v_cell1 - v_cell2) * 1000.0f); bool balance_should_run = (balancing == FALSE && abs(delta_mv) >= 20) || (balancing == TRUE && abs(delta_mv) >= 5);也就是说,如果均衡正在跑,压差必须降到 5mV 才关闭;如果均衡没有跑,要等压差超过 20mV 才启动。这个迟滞设计看着简单,实际效果非常好,既避免了频繁开关,又能保证均衡最终停留在两颗电池电压足够接近的位置。
4.3 通信上报与告警处理
上报数据我喜欢用固定长度的简单帧结构。内容包含两节电池电压、电池温度、均衡状态、故障码,帧格式是 8 字节,帧头、两路电压高字节低字节、状态字节、校验字节、帧尾。上位机只需要解析固定位置,逻辑简单,不容易出错。
| 帧字节 | 含义 | 示例 |
|---|---|---|
| 0 | 帧头 | 0xAA |
| 1-2 | CELL1 电压 | 高字节+低字节 |
| 3-4 | CELL2 电压 | 高字节+低字节 |
| 5 | 均衡状态 | 0=待机,1=均衡,2=故障 |
| 6 | 校验 | 前6字节异或 |
| 7 | 帧尾 | 0x55 |
告警分成两级。警告级是压差持续超过 100mV,说明电池一致性偏差较大,但均衡仍在工作;故障级是任一电池电压超过过压阈值或者温度超过 60℃,立即停止均衡并置故障码。
这里有个工程建议:告警阈值一定做成可配置的,最好放 EEPROM。三元锂、磷酸铁锂、钛酸锂的平台电压完全不同,硬编码等于逼用户在换电芯型号时重新烧一遍程序,量产维护成本很高。
5. 实测数据、调试心得与常见故障排查
5.1 测试平台与实测数据
搭建测试平台时,我没有一上来就接电池,而是先用两台可编程电源模拟两节电池,精确控制压差和工况。算法逻辑验证完,再换真实电芯测。
真实电芯测试用的是两节同批次、但衰减状态不同的磷酸铁锂,标称 3.2V,初始压差约 80mV。记录的数据如下:
| 时间(分钟) | CELL1(V) | CELL2(V) | 压差(mV) | 均衡电流(A) | 芯片表面温度(℃) |
|---|---|---|---|---|---|
| 0 | 3.312 | 3.232 | 80 | 1.1 | 24 |
| 15 | 3.304 | 3.242 | 62 | 0.9 | 38 |
| 35 | 3.290 | 3.256 | 34 | 0.7 | 42 |
| 60 | 3.278 | 3.268 | 10 | 0.3 | 40 |
| 90 | 3.272 | 3.270 | 2 | 0 | 27 |
这组数据能清楚看到均衡过程的三个特征:开始阶段电流大、压差下降快;随着压差缩小,平均转移电流逐渐下降;最后压差稳定在 5mV 以内,芯片进入待机。90 分钟把 80mV 压差拉到 2mV,这个速度是被动均衡方案很难做到的,被动均衡通常要花半天以上,而且会产生大量热量。
5.2 调试中踩过的三个坑
第一个坑就是前面反复提到的 ADC 采样抖动。均衡启动后读数乱跳,最初差点让我以为是均衡芯片把采样电路干扰坏了。排查下来,根因是地弹加软件没滤波。用 4.1 节那套“去极值平均加无均衡窗口采样”的办法改完,采样跳动从 ±15mV 降到了 ±2mV,效果立竿见影。
第二个坑是均衡死区设太小。第一版我把关闭阈值设成 0mV,结果压差在 0 附近来回穿越,芯片每隔几秒就重新启动一次。虽然逻辑上没错,但能量被来回倒腾,器件应力也在增加。改成 5mV 关闭阈值后,系统稳定了很多,实测均衡效果没有任何下降。
第三个坑是电感啸叫。最开始用的电感额定电流偏小,在 1A 均衡电流下进入饱和状态,除了啸叫,芯片表面温度也偏高。换了一颗饱和电流 2A 以上的功率电感之后,啸叫消失,温度明显下降。经验是均衡电感不要只看标称电流,要看饱和电流,至少留出 1.5 倍余量。
5.3 常见问题排查速查表
整理一个我经常拿来给别人排查问题的速查表:
| 现象 | 可能的根因 | 排查方法 |
|---|---|---|
| 均衡不启动 | 使能引脚没拉高、方向设反、压差阈值未到 | 测量引脚电平,打印压差原始值 |
| 均衡一直不停 | 关闭阈值太小、两路采样偏差未校准 | 检查校准数据和死区配置 |
| 采样电压乱跳 | 地弹、ADC 采样时间不足、滤波不够 | 检查 PCB 地分割,加软件滤波 |
| 电感啸叫 | 电感饱和电流不足、外围参数不匹配 | 换大饱和电流电感,看开关波形 |
| 芯片异常发热 | 占空比过大、散热不良、电感参数不对 | 用示波器量开关节点波形 |
| 通信乱码 | 波特率误差、共地不良、线缆过长 | 核对晶振精度,检查通信地 |
| 均衡效果不明显 | 压差阈值设得太大、均衡电流过小 | 调低开启阈值,检查电感选型 |
6. 从两串到多串:方案扩展与工程落地建议
6.1 多串级联扩展思路
两串是串联电池组的最小结构,也是多级均衡系统的“细胞”。要扩展到 4 串或更多,有两条路。
第一条是每两串配一个独立均衡模块,模块间靠隔离通信握手。因为这种均衡芯片处理的是相邻两节电池,所以 4 串需要 3 个模块(1-2、2-3、3-4 各一组)。模块可以各自带一颗 MCU,也可以共用一颗主控,按地址区分。
第二条是用一颗 PIC18F86J15 同时管理多颗均衡芯片。只要 IO 口够用,可以让一个 MCU 轮询控制多个 MP2642,共用同一套电压采样和状态机逻辑。优点是成本低,缺点是采样和均衡的时序协调复杂,软件调试量明显增加。给我的建议是先按第一条跑通,确认策略没问题,再去做集成优化。
6.2 量产与可靠性层面的细节
最后说几个工程落地时必须注意的细节。
第一,均衡芯片的外围参数在不同批次之间可能略有差异,量产板一定要预留调试焊盘和可替换的电阻电容位。我们最早全部使用固定参数,想调整电感电容时只能重新投板,耽误了整个测试周期。
第二,均衡能缓解不一致,但救不了已经严重损坏的电池。我在软件里明确做了一条判断:当压差持续超过 200mV 且均衡无效时,上报上位机标记该电池组异常,避免用户误以为均衡是万能的。
第三,如果产品面向备用电源,均衡策略需要和充电策略联动。浮充阶段电压高、电流小,是均衡的最佳窗口;大电流放电阶段,电池端电压波动大,测量的压差失真,软件里应该按电流阈值屏蔽均衡。
第四,别忘了看门狗和复位电路。电池管理设备常年在线,一次程序跑飞可能造成均衡误动作,轻则浪费能量,重则长期过放。PIC18F86J15 的看门狗一定要开,超时时间也别设太长,我们用的 1 秒窗口比较稳妥。
这些点都做到位以后,这套“MP2642GR-Z + PIC18F86J15”方案就可以从两串稳定扩展到整组电池管理。我自己做完这个模块最深的体会是,主动均衡硬件只是工具,真正决定效果的是采样是否可靠、阈值是否科学、软件是否扛得住工业现场的噪声。把这些基础控制住,电池组的一致性维护就不再是一件玄学的事了。