☰
基于MP2642GR-Z和PIC18F86J15的两串电池主动均衡板设计
2026/10/16 1:17:25 网站建设 项目流程

最近在整理一块两串电池均衡板的设计记录,用到的组合是 MP2642GR-Z 加 PIC18F86J15。可能很多人第一反应是:两节电池而已,还要专门做个均衡?但放到储能和备用电源场景里,两节串联电池的压差问题其实比想象中更常见,而且直接影响整个系统的可用容量和循环寿命。这个项目从硬件拓扑、采样电路、均衡策略到实测调试都走了一遍,我把关键设计思路和踩坑记录整理出来,给后面做类似项目的朋友一个参考。

先说结论:两串电芯的均衡,本质上就是“把高电压电芯的能量搬运到低电压电芯”。MP2642GR-Z 负责能量搬运这个苦力活,PIC18F86J15 负责判断“什么时候搬、往哪边搬、搬多少”。这套组合的好处是功率变换部分不用自己搭离散器件,而均衡策略又完全掌握在自己手里,不管是用在储能系统还是备用电源上,灵活度和可维护性都比较好。

1. 为什么两节串联电池也需要均衡:先想清楚问题再动手

1.1 串联电池组失衡是怎么发生的

两节电芯串联后,充放电电流完全一样,理论上它们应该永远保持一致。但实际工程里电池不是理想元件,内阻、自放电率、温度分布、出厂容量差异都会让两节电芯逐渐“分道扬镳”。尤其是备用电源这种长期挂浮充的场景,电芯常年处在接近满电的电压平台上,本身老化速度就快,节与节之间的差异会被放大。

我见过一个很典型的例子:同批次的两节磷酸铁锂电芯,标称容量一致,在备用电源系统里跑了半年之后,搁置静置三天,电压能差到 300mV 以上。这种差异带来的后果是连锁的:充电时电压高的那一节先触到充电截止电压,系统为了保护它只能停止充电,电压低的那一节永远充不满,可用容量白白浪费;放电时则是电压低的那一节先触发欠压保护,电压高的那节还有能量却已经不能用了。

所以两串均衡不是“有没有必要”的问题,而是“要不要让系统容量和寿命白白缩水”的问题。电芯数量越少的系统,单节不一致对总容量的影响占比越大,两串反而比串数更多的电池组更需要精细管理。

1.2 主动均衡为什么比被动均衡更划算

均衡方案按能量去向分两大类:被动均衡和主动均衡。

被动均衡最简单,就是把高电压电芯通过电阻放电,把多余能量变成热量烧掉。它的优点是电路简单、成本低、控制逻辑少,很多消费电子保护板里都在用。但它在两串储能和备用电源场景里有两个明显问题:一是浪费的能量在密闭空间里变成热量,对散热设计不友好;二是均衡电流做不大,通常只有几十毫安级别,面对几百毫伏的压差,均衡时间会非常长。

主动均衡则是用开关电源电路把电荷从高电压电芯搬到低电压电芯,能量没有损失,只是发生了转移。从系统角度看,主动均衡的效率虽然也是 80%~90% 左右,但能量还是留在电池组内部,比烧掉再充电要省得多。在储能场景里,效率就是经济效益;在备用电源场景里,电池长期浮充维持备用状态,每一次多余的能量损失都可能影响后备时长。

下面这个表格能直观看出两种方案在两串系统里的差别:

对比维度被动均衡主动均衡
能量去向电阻发热消耗转移到低电压电芯
均衡电流通常 30~100mA可做到 0.5A~2A
电路复杂度低,电阻+开关高,需要DC-DC功率级
静置均衡效果差,速度慢好,速度快
热管理压力大小
适合场景消费类小容量电池储能、备电、动力电池

我用在储能备电场景里做的是 0.8A 左右的主动均衡电流。这个电流级别下,静置状态下把 200mV 的压差拉平,基本一两个小时就能完成,被动均衡可能要做一整个晚上都未必够。

1.3 芯片分工:MP2642GR-Z 管能量,PIC18F86J15 管策略

这套系统里两颗芯片各司其职。MP2642GR-Z 这颗芯片的核心任务是实现双向的同步升降压变换。也就是说,它既能工作在降压模式,把电池组端的高电压降到单节电芯电压,给低电压电芯补充能量;也能工作在升压模式,把单节电芯的电压抬升回电池组端。整个能量搬运路径就是高电压电芯所在的那一侧通过变换器向低电压电芯馈电。

PIC18F86J15 则承担所有“决策”工作。它内部的 ADC 负责采集两节电芯的电压、电池组总电压、电流检测信号和温度信号,然后根据均衡策略判断当前应该停止均衡、从 CELL1 向 CELL2 搬能量,还是反过来。判定结果通过 PWM 信号和使能引脚控制功率级的开关状态。

这个“专用芯片管功率,MCU 管逻辑”的架构,是我个人比较推荐的做法。如果全部用分立元件搭同步升降压,光是四个功率管的驱动、死区控制、环路补偿就够折腾很久,而且一致性很难保证。如果只依赖电源芯片本身的简单逻辑,不做智能策略,均衡效果又太粗糙,容易出现振荡或者过均衡。两颗芯片配合,正好各自发挥优势。

2. 硬件框架搭建:双向能量搬运电路的三个关键模块

2.1 主功率级:基于 MP2642GR-Z 的双向升降压拓扑

两串电池组的均衡功率级,我采用的是四开关双向 Buck-Boost 拓扑。这个拓扑可以理解成电感和四个 MOSFET 组成的可切换功率级:四个开关中,两个高边开关接高压侧,两个低边开关接低压侧,中间跨接电感。MP2642GR-Z 内部集成对应的驱动和同步整流逻辑,外部只需要很少的阻容器件就能把环路稳定下来。

从电池组的角度看,整个均衡器就像一个可控电流源,挂在两个电芯之间的任意位置。如果 CELL1 的电压高于 CELL2,就让均衡器工作在“从 CELL1 取电,通过降压方式灌入 CELL2”的状态;反过来如果 CELL2 电压更高,就切换方向,从 CELL2 取电给 CELL1 补充。

这个拓扑在设计时有几个关键参数需要先定下来:

  • 工作频率:我按 500kHz 左右设置,这个频率下电感体积比较小,同时也避开音频范围,方便后期处理啸叫问题。
  • 均衡电流目标:设定 0.8A。求稳,因为两串系统里散热条件有限,电流太大功率管和电感发热会很集中。
  • 电感值估算:以输入 3.0V~4.2V、输出 3.0V~4.2V 的区间来算,在 500kHz 下电感值取 10uH 到 22uH 比较合适。电感小,电流纹波大;电感大,动态响应慢,要折中。

功率级的 PCB 布局是最大的坑。大电流回路一定要短粗,电感和功率管的开关节点要尽量小面积,否则辐射和开关噪声会严重干扰旁边的电压采样。我第一版就是吃了这个亏,采样线绕得太远,结果均衡电流一上去,ADC 读数跟着跳,后面单独讲调试部分再说。

2.2 采样与切换:两串电池的电压测量没你想的那么简单

两串电池系统最麻烦的地方在于“地”不是固定的。CELL2 的负极通常是系统地,但 CELL1 的负极其实是 CELL2 的正极,也就是节点电压是悬浮的。如果直接把 CELL1 的正负极分压到 MCU 的 ADC,输入范围可能超出 ADC 参考电压,而且共模电压很高,普通 ADC 根本扛不住。

我用的办法是差分采样。通过模拟开关切换,把需要测量的单元正负极分别引到一颗差分运放的两端,运放输出再进 PIC18F86J15 的 ADC。切换逻辑由 MCU 的 GPIO 控制,测量 CELL1 时把 CELL1+ 和 CELL1- 接入差分放大器,测量 CELL2 时再把开关切到 CELL2 的两端。这样既解决了共模问题,也只需要一路放大器和一路 ADC 通道。

PIC18F86J15 内置 ADC 是 10-bit 精度。单节电芯电压通常最高 4.2V,我按 2:1 分压后满量程对应 4.1V 左右,分辨率大约 4mV。4mV 对均衡判据来说够用了,因为均衡启动阈值一般设置在 30~50mV,停止阈值 10~20mV,接近 4mV 的量化误差可以接受。但如果想做得更精细,可以加一颗外部 12-bit ADC,或者对多次采样做平均滤波。这个项目里我靠软件滤波就解决了问题。

采样硬件上还有两个细节要强调:

  • 采样线要用开尔文接法,直接从电芯极耳引出,不能从功率走线上取信号。功率线上的压降在 0.8A 电流下可能有好几十毫伏,足够让均衡误判。
  • 采样电阻前后各加一个小 RC 滤波,截止频率放低,比如 10kHz 左右,能滤掉大部分开关噪声。但也不能太低,否则电压突变时响应太慢,会拖慢均衡启动。

电流检测我用的是采样电阻加运放方案。采样电阻取 10mΩ,0.8A 电流时压降 8mV,运放放大 50 倍后就是 400mV,进 ADC 精度足够。电流值用来做限流和状态判断,防止均衡电流超过设计值。

2.3 PIC18F86J15 的外围配置与引脚规划要点

PIC18F86J15 的资源配置在这个项目里并不紧张。内部振荡器跑在 16MHz 左右,省掉外部晶振;ADC 多通道用来采集两路电芯电压、总电压、电流采样和温度;定时器做均衡超时和状态机节拍;PWM 模块生成控制功率级的开关信号;UART 用来和上位机或主控通信。

引脚规划上,我把模拟采样通道和 PWM 输出隔离开,避免数字信号干扰模拟信号。开关管的驱动信号走驱动芯片,不能直接从 MCU 直驱功率 MOSFET。第一次做的时候图省事直接 GPIO 驱动,结果驱动能力不够,开关边沿又长又软,效率很低。

MCU 的电源我单独用了一颗 LDO,从电池组总电压取电。两串系统总电压在 6V~8.4V 之间,LDO 输出 3.3V 给 MCU 和逻辑部分供电,功率级供电直接取自电池组,两者在 PCB 上用磁珠做了单点隔离,避免功率级开关跳动污染 MCU 供电。

3. 软件与均衡策略:从电压判据到 PWM 控制的完整链路

3.1 均衡判据:什么时候该均衡,什么时候该停止

均衡策略的第一件事是判断“要不要均衡”。最简单可靠的判据是两节电芯的开路电压差。经过验证,我采用这样的规则:

  • 当两节电芯静置超过 30 秒,测得的电压差绝对值大于 50mV,启动均衡。
  • 当电压差绝对值降到 20mV 以下,停止均衡。
  • 均衡过程中加入最长 4 小时的超时保护,防止系统一直工作在搬能状态。

这里故意留了 30mV 的滞回区间,避免在阈值附近反复启停。如果启动阈值和停止阈值设成同一个值,系统会进入临界振荡状态,均衡继电器和功率级反复开关,寿命和可靠性都会受影响。

还有个很重要但容易被忽略的点:不要在充电或放电过程中做均衡判定。因为大电流下电芯的内阻压降会污染电压读数。比如一充一放,瞬时电压差可能拉得很大,实际静置压差可能并不大。所以我在软件里规定:只有当电流检测值小于 100mA,认定系统处于静置状态,才允许做均衡判决。

3.2 状态机设计:空闲、正向均衡、反向均衡、故障四个状态

均衡控制逻辑本身不算复杂,但一定要用状态机来组织,不能散在中断里到处写。我分了四个状态:IDLE、BAL_12、BAL_21、FAULT。

IDLE 表示系统空闲,持续监测电压;BAL_12 表示 CELL1 电压高,能量从 CELL1 往 CELL2 搬;BAL_21 表示 CELL2 电压高,能量反向搬;FAULT 表示检测到异常,停止一切均衡动作并上报。

简化后的 C 语言伪代码如下:

typedef enum { IDLE, BAL_12, BAL_21, FAULT } bal_state_t; bal_state_t state = IDLE; void bal_state_machine(void) { switch (state) { case IDLE: if (cell1_v - cell2_v > START_THRESHOLD) { enable_balancer(DIR_12, TARGET_CURRENT); state = BAL_12; } else if (cell2_v - cell1_v > START_THRESHOLD) { enable_balancer(DIR_21, TARGET_CURRENT); state = BAL_21; } break; case BAL_12: if (cell1_v - cell2_v < STOP_THRESHOLD) { disable_balancer(); state = IDLE; } break; case BAL_21: if (cell2_v - cell1_v < STOP_THRESHOLD) { disable_balancer(); state = IDLE; } break; case FAULT: disable_balancer(); report_fault(); break; default: state = IDLE; break; } }

实际工程代码里还必须加 ECU 级别的保护,例如:连续 5 次采样结果都超过阈值才切换状态,防止单次毛刺误触发;均衡超时后进入故障状态并亮指示灯,而不是静默复位。

PWM 控制部分,我采用的是“目标电流闭环”方式。MCU 每 100ms 读一次电流采样值,如果实际均衡电流低于目标值,就加大占空比;高于目标值,就减小占空比。控制律用简单的增量式调节就行,不推荐在小系统里上复杂 PID,参数调起来麻烦,而且电池电压本身在缓慢变化,不需要太快的电流响应。

3.3 保护逻辑与通信接口

均衡系统虽然只在静置状态工作,但保护逻辑不能只在均衡时才生效。我在每一个控制周期都检查这些保护条件:

  • 单节电芯电压高于过压保护阈值(三元锂取 4.2V,磷酸铁锂取 3.75V),关闭均衡并上报。
  • 单节电芯电压低于欠压保护阈值(三元锂 2.8V,磷酸铁锂 2.5V),关闭均衡并上报。
  • NTC 温度高于 55°C 时降额,高于 65°C 时彻底关闭。
  • 均衡状态持续超过 4 小时,进入 FAULT。

通信我用的是 UART,输出一个简单的 ASCII 码帧:帧头、CELL1 电压、CELL2 电压、总电压、电流、温度、均衡状态、校验和。上位机只做监控显示,不参与控制。备用电源系统如果需要和主控联动,也可以通过 I2C 把状态数据转发出去。

一个实际的经验:ADC 的参考电压直接用 MCU 内部参考时,量产时不同芯片会有 ±2% 左右的偏差,电压读数会有系统误差。虽然均衡判据用的是两节电压的差值,误差会被抵消一部分,但单节过压保护阈值会受影响。所以我在量产后用一台高精度万用表逐板校准,软件里写入一个增益校准系数,这样可以保证过压保护触发的准确性。

4. 实测过程与调试记录:那些文档里不会写的坑

4.1 均衡不启动的“第一案”:方向反了

第一版板子焊好之后,我给两节电芯人为制造了约 200mV 的压差,CELL1 高、CELL2 低。按照设计,系统应该自动进入 BAL_12 状态。结果接上电池,等了半天没有任何均衡电流,状态机一直停在 IDLE,串口打印出来的电压差始终是 0。

排查了一圈,最后发现是驱动功率级的控制信号方向反了。我定义的控制逻辑里,DIR_12 应该通过高边开关把 CELL1 的能量引到变换器,实际上 MCU 输出的电平经过驱动后,打开的是 CELL2 那侧的开关。结果就是:状态机以为自己在从 CELL1 搬能量,实际系统在尝试从 CELL2 取电,又因为 CELL2 电压较低,根本无法建立正常的工作状态。

这种问题在纯软件仿真里根本发现不了,只能靠实际走电流来判断。当时我在功率路径上串了一个毫安表,切换不同的控制引脚电平,逐个确认每个开关管真正导通了哪一段电路,才把这个方向问题定位出来。后来我在硬件上预留了测试点,每颗 MOS 管的栅极信号都能直接测量,调试效率高很多。

4.2 采样毛刺和地弹:均衡电流越大,电压读数越飘

另一个大坑是采样毛刺。0.8A 的均衡电流启动后,ADC 读到的两节电芯电压出现周期性跳变,跳变幅度有 60~80mV,已经能直接干扰均衡判据了。用示波器测采样点波形,看到开关节点的高频振铃耦合到了采样线上。

问题根源是 PCB 布局。我最初的布局把采样走线放在了功率电感的正下方,又长又细,相当于一个天线。解决办法是重新走线:采样差分对直接拉到电芯端,远离电感;在采样点加 100Ω 串联电阻和 100nF 电容,构成低通滤波;MCU 的 ADC 触发采样时刻避开 PWM 开关沿,我一个 PWM 周期采样 8 次再做中位值滤波。

这样处理之后,均衡运行中电压读数波动降到了 10mV 以内,状态机做了滞回判断后完全不会误动作。经验总结就一条:采样电路和功率电路的“地”必须清楚分离,所有模拟器件推荐单点接地到系统电源地,大电流路径尽量不与采样路径共用铜皮。

4.3 实测数据:从 200mV 压差到稳定均衡

均衡效果我做了几组记录。一组比较典型的数据如下:

时间点CELL1 电压CELL2 电压压差均衡状态
初始3.62V3.47V150mVIDLE
30 分钟3.58V3.52V60mVBAL_12
90 分钟3.55V3.55V0mVIDLE

这个项目中我用的电池是磷酸铁锂,电压平台很平,3.55V 附近电压上升非常缓慢,所以均衡后期电压差降得没那么快。如果换成三元锂电池,平台区更陡,均衡收敛速度会更快一些。

另一个很有参考意义的现象:均衡过程中如果检测到负载启动,系统立刻停止均衡。等负载结束、系统重新静置 30 秒后,我们观察到一个反弹效应:压差会比均衡停止时略微回升。这是因为均衡停止后,电芯内部离子浓度重新分布,极化电压消失,表面电压体现出一个小的回弹。所以均衡停止阈值设置得越低,最终静置稳定后的压差越小。我最终把停止阈值定为 20mV,实际稳定后压差大多在 30mV 以内,完全满足备用电源对均衡精度的要求。

4.4 保护误触发:NTC 位置带来的温差问题

最初我把 NTC 贴在功率电感旁边,用来检测均衡器自身温度。结果夏天在室温环境测试时,均衡电流一上到 0.8A,电感表面温度迅速升高,NTC 读数一分钟内就能超过 65°C,系统直接进入过温保护,均衡反复启停。

后来我意识到:NTC 应该贴到电芯表面或者靠近电芯的位置,而不是功率器件上。功率器件温度是设计散热时需要关注的,但均衡系统的温度保护更应该以电芯温度为基准。最终我在电芯表面放了单独的 NTC,功率级温度只做记录不上报,过温保护逻辑只针对电芯。这样调整后再没有出现过高温误保护。

5. 常见问题速查与扩展思考

5.1 常见问题速查表

把这次项目里遇到的高频问题整理成一个速查表,新项目调试时可以对照:

现象可能原因排查和处理
状态机显示均衡中,但电流为 0控制信号方向反,MOS 驱动实际打开错误路径逐个测量 MOS 栅极信号,确认开关逻辑
均衡电流上不去电感饱和,电流值被限流;驱动电压不足核对电感额定电流,加大驱动电压
电压采样值跳变采样线受功率开关噪声干扰采样线远离电感,加 RC 滤波,避开开关沿采样
均衡反复启停启动和停止阈值过近设置 30mV 左右的滞回区间
均衡结束后压差反弹电芯极化和电压回弹停止阈值调低,重新静置后再确认
过温保护误触发NTC 位置处于功率发热点NTC 移到电芯表面,功率温度仅记录
过压保护提前触发参考电压误差导致 ADC 偏大校准增益系数,使用 1% 精度参考

5.2 从两串到多串的扩展思路

两串均衡做稳定之后,向更多串扩展时思路很简单:不用重新设计一套复杂度高的多串均衡系统,而是把刚才这套两串均衡模块当作一个基本单元。四串电池可以用两个单元分别管理,每单元只处理相邻两节电芯;八串则用四个单元。模块之间通过主控的通信总线汇总状态,避免单元之间互相竞争。

这种模块化思路最大的好处是功率级设计完全复用,测试验证只需要做一次,后续扩展只需要解决模块间的上位机调度问题。我后来在模拟四串系统中验证,每个模块独立工作,整体均衡收敛速度和两串时基本一致。

最后再分享一个细节:MP2642GR-Z 这类专用功率芯片的设计资料里,很多细节只有在数据手册的应用电路部分才有,务必以实际芯片手册为准,尤其是周边器件的选型范围。别完全照抄网络上的原理图,因为不同批次芯片的某些参数可能会调整,但整体架构思路是通用的。这个项目做完之后,我最大的体会是:均衡系统最难的地方从来不在功率拓扑,而在于“准确感知电池状态并做出可靠决策”这部分,MCU 的价值恰恰体现在这里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询