基于MP2642GR-Z与PIC18F97J60的储能电池主动均衡方案设计与实现
1. 储能电池均衡的底层逻辑与方案选型1.1 为什么串联电池组必须做均衡先聊一个很多人踩过的坑两节标称容量、内阻、出厂日期都一样的电芯串联起来充放电几十个循环之后端电压就开始分道扬镳。这不是电芯质量差而是物理规律——串联回路里电流处处相等但每节电芯的实际容量、自放电率、内阻、温度分布总有微小差异。充电时容量小的那节先到上限放电时它又先到下限BMS如果只看总压就会让强的电芯永远吃不饱、弱的电芯永远被过放恶性循环下去整组寿命被最短的那节拖死。储能系统和备用电源UPS、基站备电、家庭储能对这件事尤其敏感。这类场景的特点是长期浮充、偶尔深度放电、维护窗口少、要求循环寿命动辄三五千次。一旦某节电芯提前衰减整组就得换成本直接翻倍。所以均衡电路不是锦上添花而是这类系统的刚需。均衡分两大类被动均衡把多的能量用电阻烧掉和主动均衡把多的能量搬到少的电芯去。被动均衡便宜、简单、可靠但发热、效率低适合小容量、成本敏感的场合主动均衡效率高、发热小但拓扑复杂、成本高。这次我选的是主动均衡路线核心器件是 MP2642GR-Z 这颗双向升降压充电控制器配合 PIC18F97J60 做整机控制与通信。1.2 为什么是 MP2642GR-Z 这颗芯片MP2642GR-Z 是一颗同步双向升降压Buck-Boost充电控制器专门为单节锂电/磷酸铁锂的充放电管理设计。把它用在两节串联电芯之间做均衡思路是这样的把电压高的那节电芯当作电源电压低的那节电芯当作负载通过一颗双向变换器把能量从高的一侧搬到低的一侧。因为两节电芯的电压可能谁高谁低取决于充放电阶段所以变换器必须能双向工作而且输入输出都可能高于或低于对方这就必须用四开关 Buck-Boost 拓扑。选它的几个硬理由双向能力充放电方向可切换均衡方向由 MCU 决定不用额外加继电器或换向电路。宽输入输出范围单节磷酸铁锂工作区间大约 2.5V~3.65V两节之间搬运时Buck-Boost 能覆盖这个全区间不会出现电压接近时无法工作的死区。集成度高同步整流、驱动、电流采样放大、环路补偿都集成外围只需要电感、MOS、采样电阻和少量阻容PCB 面积可控。可编程性好通过外部电阻/电容设定开关频率、电流限值、软启动配合 MCU 的 PWM/使能脚就能做闭环控制。注意MP2642GR-Z 本身是充电控制器不是均衡专用芯片。用它做均衡本质是把它当成一颗受控的双向 DC-DC 来用环路和限流逻辑要靠 MCU 兜底。这一点在选型时一定要想清楚否则调试时会发现芯片手册里没有均衡模式。1.3 为什么主控选 PIC18F97J60PIC18F97J60 是一颗 8 位 MCU最大的特点是内置 10/100M 以太网 MAC 和 PHY还带 128KB Flash、近 4KB RAM、多路 10 位 ADC、多个 PWM 和 UART/SPI/I2C。储能和备用电源系统里BMS 通常需要和上位机、EMS能量管理系统通信以太网是工业现场很常见的一环。用这颗片子省掉外挂以太网控制器BOM 和 PCB 都省事。它要干的活采集两节电芯的电压、均衡电流、板温跑均衡策略什么时候均衡、往哪个方向、限流多少驱动 MP2642GR-Z 的使能和反馈网络通过以太网/串口上报状态、接收上位机指令做保护过压、欠压、过流、过温。8 位机跑这些逻辑绰绰有余关键是它把控制 通信两件事一颗芯片搞定对成本敏感的储能产品很友好。1.4 整体方案框图与信号流方案的核心信号流是这样的电芯A(高) --[采样]-- MCU ADC 电芯B(低) --[采样]-- MCU ADC | v MCU 判断均衡方向与目标电流 | v MP2642GR-Z 双向Buck-Boost 功率级 | 能量从高压侧电芯搬到低压侧电芯 | v MCU 回采电流/电压闭环修正MCU 是大脑MP2642GR-Z 是肌肉采样网络是神经。三者构成一个闭环采样→决策→执行→再采样。均衡不是一开了之而是持续微调的过程因为两节电芯电压差会随着能量搬运迅速缩小电流必须跟着收否则会在目标点附近来回震荡白白发热。2. 硬件设计细节与关键参数计算2.1 功率级拓扑与器件选型两节电芯均衡的功率级我采用的是四开关 Buck-Boost也就是两个半桥组成左侧半桥接电芯 A右侧半桥接电芯 B中间一个电感。四个 MOS 管 Q1~Q4Q1/Q2 是 A 侧半桥Q3/Q4 是 B 侧半桥。工作模式当 A 电压 B 电压能量从 A 流向 BA 侧半桥做 Buck降压B 侧半桥做 Boost升压的反向整体是 Buck-Boost 的降压-升压组合。当 B 电压 A 电压方向反过来。MP2642GR-Z 的驱动输出正好可以驱动这样一对半桥配合外部逻辑做方向切换。MOS 选型要点参数取值建议理由耐压 Vds≥ 30V单节最高 3.65V两节串联 7.3V留 4 倍余量抗尖峰导通电阻 Rds(on)≤ 10mΩ均衡电流 2A 时10mΩ 损耗仅 40mW发热可控栅极电荷 Qg≤ 20nC开关频率 300kHz 时驱动损耗小MCU/驱动能带得动封装DFN/PowerPAK散热好占板小电感是这套电路的灵魂。按 Buck-Boost 临界连续设计取纹波电流为额定电流的 30%L (Vin × D) / (fsw × ΔI)设均衡电流 2AΔI 0.6Afsw 300kHz最恶劣工况 D ≈ 0.5Vin ≈ 3.3VL (3.3 × 0.5) / (300000 × 0.6) ≈ 9.2μH取标准值10μH饱和电流要 ≥ 3A留 1.5 倍余量。电感选一体成型屏蔽式DCR 尽量小否则 2A 下 DCR 上的压降和发热会吃掉效率。2.2 采样网络与精度保障均衡的精度取决于采样。两节电芯电压差可能只有几十毫伏如果采样误差就有 20mV那均衡就变成瞎调。我的做法电压采样每节电芯经 RC 滤波1kΩ 100nF截止约 1.6kHz后进 MCU 的 10 位 ADC。PIC18F97J60 的 ADC 参考用外部 2.048V 基准比内部基准稳分压电阻用 0.1% 精度分压比设计成满量程 4.096V 对应 2.048V 参考留足余量。电流采样在电感回路串一颗 5mΩ、1% 的采样电阻用 MP2642GR-Z 内置的电流放大器输出送 MCU ADC。5mΩ × 2A 10mV放大 50 倍后 500mV落在 ADC 舒适区。温度采样MOS 附近和电芯表面各贴一颗 10kΩ NTC分压后进 ADC用于过温降额。实操心得采样电阻一定要用四端子Kelvin接法否则焊盘和走线的寄生电阻会直接叠加到 5mΩ 上误差可能超过 30%。我第一次打样就吃了这个亏均衡电流显示比实际大了近 20%查了半天才发现是采样点取错了。2.3 供电与隔离设计储能系统里BMS 的供电往往来自电池组本身但两节电芯的均衡电路如果直接从被均衡的电芯取电会引入额外的负载不平衡反而干扰均衡判断。我的处理MCU 和 MP2642GR-Z 的 VCC 由整组电压经 LDO 降压得到比如 7.3V 降到 3.3V不单独从某一节电芯取。驱动 MP2642GR-Z 的栅极驱动供电用自举电容A 侧和 B 侧各一套保证高边 MOS 能可靠开通。以太网部分按标准做变压器隔离和端接避免现场地环路干扰。这里有个容易忽略的点均衡电路工作时会在电芯上产生开关纹波如果采样和功率级共地处理不好纹波会串进 ADC。我的做法是功率地和信号地单点连接采样走差分对尽量远离电感。2.4 保护电路不能省再好的控制逻辑也怕硬件失效。必备保护过流MP2642GR-Z 的电流限值脚设硬件限流MCU 再设软件限流双保险。过温NTC 超过 60℃ 时 MCU 降额超过 75℃ 直接关断均衡。电芯过压/欠压任一节电芯超出 2.5V~3.65V 窗口立即停止均衡。看门狗PIC18F97J60 开 WDT防止程序跑飞后 MOS 一直导通。3. 控制策略与固件实现3.1 均衡触发条件与阈值设计均衡不是一直开着的。我的策略是**静默期判断 迟滞触发**系统处于充电或静置状态放电大电流时不均衡因为此时电压受内阻影响大判断不准两节电芯压差 ΔV 30mV 持续 10 秒启动均衡均衡过程中 ΔV 降到 10mV 以下停止30mV 和 10mV 之间是迟滞带避免在阈值附近反复启停。为什么是 30mV磷酸铁锂的电压平台很平静置时 30mV 已经能反映真实的 SOC 差异而 10mV 接近采样噪声上限再往下调没有意义只会让电路频繁动作。3.2 闭环电流控制均衡电流不是固定值而是根据压差动态调整I_target Kp × ΔV Ki × ∫ΔV dt用 PI 控制Kp 和 Ki 在 MCU 里以定点数实现。压差大时电流大但不超过 2A 上限压差小时电流自动收小接近目标时平滑收敛不会震荡。PIC18F97J60 没有硬件浮点全部用 Q15 定点运算10ms 一个控制周期实测收敛很稳。关键代码结构伪代码C 语言风格// 10ms 定时中断里执行 void balance_control(void) { int16_t v_a adc_read(V_A_CH); int16_t v_b adc_read(V_B_CH); int16_t dv v_a - v_b; int16_t abs_dv (dv 0) ? dv : -dv; if (abs_dv THRESH_START) { int16_t i_target pi_calc(abs_dv); // PI 输出目标电流 if (i_target I_MAX) i_target I_MAX; set_balance_dir(dv 0 ? A_TO_B : B_TO_A); set_balance_current(i_target); balance_enable(1); } else if (abs_dv THRESH_STOP) { balance_enable(0); pi_reset(); } }3.3 方向切换与死区处理方向切换是最容易出问题的地方。当两节电芯电压接近、方向来回翻转时如果切换瞬间两个半桥同时导通会直接短路电芯。我的处理切换前先关断所有 MOS延时 5μs 等电感电流续流完毕再按新方向重新配置半桥切换频率限制在每秒最多 2 次防止高频翻转。踩过的坑早期版本没加死区压差在 0 附近时方向疯狂翻转MOS 发热严重还烧过一次。后来加了方向迟滞比如从 A→B 切到 B→A 需要 ΔV 反向超过 20mV和切换延时问题彻底解决。3.4 以太网通信与状态上报PIC18F97J60 内置 MAC/PHY我用它跑一个精简的 TCP 服务周期性上报两节电芯电压、压差均衡电流、方向、累计搬运电荷量mAh板温、MOS 温度均衡开关次数、故障标志。上位机可以下发指令手动启动/停止均衡、修改阈值、查询历史。累计搬运电荷量这个数据很有用它能告诉你这组电池到底被均衡了多少能量是评估电芯一致性的好指标。4. 调试实录与常见问题排查4.1 上电第一步静态检查焊完板子别急着上电。先做三件事万用表测各电源对地阻抗排除短路不装电芯用可调电源模拟两节电芯比如 3.3V 和 3.2V限流设 100mA示波器看 MP2642GR-Z 的驱动输出确认有 PWM 且死区正常。这一步能挡掉 80% 的低级错误。我见过有人直接上电结果 MOS 焊反一通电就冒烟。4.2 均衡电流上不去现象设了 2A实测只有 0.5A。排查顺序可能原因排查方法解决电流限值脚设置过低测限流脚电压按手册公式重算电阻电感饱和看电流波形是否削顶换更大饱和电流的电感采样电阻偏大实测阻值换 1% 精度、正确阻值驱动不足看 MOS 栅极波形检查自举电容和驱动供电环路不稳看电流是否震荡调整补偿网络我遇到的是电感饱和波形顶部明显削平换了饱和电流 5A 的电感后正常。4.3 采样跳变与噪声现象ADC 读数跳动 ±30mV导致均衡误触发。原因通常是采样走线太长拾取了开关噪声地平面分割不当功率地串进信号地没有 RC 滤波或滤波截止频率太高。解决缩短采样走线、加 RC 滤波、功率地与信号地单点连接、ADC 多次采样取中值。实测下来处理后跳动降到 ±3mV 以内。4.4 常见问题速查表现象可能原因快速处理均衡不启动压差未达阈值 / 处于放电态检查状态机和阈值均衡方向反了采样极性接反交换采样输入或软件取反MOS 发热严重死区不足 / 频率过低加大死区、提高开关频率以太网不通变压器/端接问题查变压器、端接电阻、PHY 配置压差收敛慢电流限值太低提高限流或检查电感反复启停迟滞带太窄加宽迟滞或加方向迟滞4.5 几个独家避坑技巧先做单方向测试别一上来就双向闭环先固定 A→B 方向验证功率级和采样再开双向。用电子负载模拟电芯比真电芯好控制能精确设定压差调试效率高。记录均衡电荷量长期跑下来这个数据能帮你判断电芯是否真的在改善还是只是表面均衡。温度补偿采样NTC 和采样电阻都有温漂高低温环境下要重新标定否则冬天和夏天行为不一致。固件留调试口UART 打印关键变量比盯着示波器猜快得多。这套方案我在几个备用电源样机上跑过两节磷酸铁锂从 80mV 压差均衡到 10mV 以内2A 电流下大约 40 分钟板温稳定在 45℃ 左右效率实测 88%~91%。后续如果要做更多节串联思路是一样的——把每两节之间的均衡单元做成模块MCU 通过以太网级联就能扩展到整组。