首页 / 资讯中心 / 文章详情

基于MP2642GR-Z与PIC18F66K40的两串电池主动均衡方案设计与实现

基于MP2642GR-Z与PIC18F66K40的两串电池主动均衡方案设计与实现 ★ FEATURED ARTICLE
1. 项目背景与核心需求拆解1.1 为什么串联电池组必须做均衡先聊一个很多人踩过的坑。两块标称容量、内阻、出厂日期都一样的电芯串联起来用循环几十次之后你会发现它们的端电压开始分道扬镳。放电时弱的那块先到截止电压整组被迫停机充电时强的那块先到上限整组又被迫停充。结果就是整组可用容量被最弱的那块电芯死死卡住木桶效应在电池组里体现得淋漓尽致。储能系统和备用电源系统对这一点尤其敏感。这类场景的特点是长期浮充、偶尔深度放电、要求十年以上的循环寿命。一旦出现单体不均衡弱电芯会长期处于过充或过放状态加速老化最终整组提前报废。所以均衡电路不是锦上添花而是这类系统的刚需。均衡分两大类被动均衡和主动均衡。被动均衡就是把强电芯的多余能量通过电阻放掉简单便宜但发热、效率低主动均衡是把能量从强电芯搬到弱电芯效率高但电路复杂、成本高。这个项目里我们用的是基于MP2642GR-Z的主动均衡方案配合PIC18F66K40做主控针对两个串联电池单元做双向能量转移。1.2 两个核心器件各自扮演什么角色MP2642GR-Z是一颗双向同步升降压Buck-Boost控制器它的核心能力是在输入电压高于、等于、低于输出电压的三种情况下都能稳定输出。这一点对电池均衡至关重要——因为两个串联电芯的电压关系是动态的强的那块可能比弱的高也可能在均衡过程中逐渐接近甚至短暂反超。传统单向Buck或Boost做不到全区间覆盖而MP2642GR-Z的升降压拓扑天然适配这种电压关系不确定的场景。PIC18F66K40是Microchip的一款8位MCU带12位ADC、多个PWM通道、丰富的定时器和通信外设UART/SPI/I2C。它在这个项目里的职责是采样两个电芯的电压、判断谁强谁弱、决定能量转移方向、控制MP2642GR-Z的工作模式、管理均衡电流、做保护逻辑。选它而不是选更便宜的MCU主要看中它的ADC精度和PWM灵活性——均衡电流的闭环控制对这两点要求不低。1.3 这个方案适合谁参考如果你正在做以下任意一类项目这篇内容可以直接抄作业两串锂电池/磷酸铁锂/钛酸锂的储能模组备用电源UPS、基站备电、数据中心BBU的电池管理便携式储能电源的电池均衡模块想从被动均衡升级到主动均衡的改造项目如果你做的是4串以上的电池组思路可以借鉴但拓扑要扩展比如用多颗MP2642GR-Z做相邻电芯间的分布式均衡本文聚焦两串场景把细节讲透。2. 方案整体设计与选型逻辑2.1 为什么选双向升降压而不是其他拓扑先做个对比把选型逻辑说清楚。拓扑方案适用场景效率成本复杂度本项目适配度电阻被动均衡小容量、低成本低能量全放掉极低极低不选储能场景发热不可接受单向Buck强电芯电压始终高于弱电芯中低低不选电压关系会反转单向Boost强电芯电压始终低于弱电芯中低低不选同上双向Buck-Boost电压关系动态变化高85%~95%中中选它变压器隔离均衡高压、多串高高高不选两串场景杀鸡用牛刀核心判断依据两个串联电芯在均衡过程中电压差会从几十毫伏逐渐收敛到接近零。如果用单向拓扑当电压差接近零时变换器会进入极端占空比区域效率骤降甚至失控。双向升降压可以在整个电压差范围内平滑工作这是它最大的价值。2.2 MP2642GR-Z 的关键特性与工作模式MP2642GR-Z 的几个特性直接决定了电路设计宽输入电压范围支持从低于、等于到高于输出的全区间工作这是双向升降压的基础。同步整流上下管都用MOSFET导通损耗低均衡电流可以做到安培级。可编程开关频率通过外部电阻设定典型200kHz~500kHz。频率高则电感小、体积小但开关损耗大频率低则相反。储能场景我一般选300kHz左右做折中。电流模式控制内置电流环动态响应快适合做恒流均衡。工作模式上它根据输入输出电压关系自动切换Buck、Buck-Boost、Boost三种状态。对均衡应用来说我们不需要它自动而是通过PIC18F66K40主动配置方向引脚和反馈网络让它按我们指定的方向搬能量。2.3 PIC18F66K40 的资源分配把MCU的资源盘一遍做到心里有数ADC通道至少用2路差分或4路单端分别采两个电芯的端电压和均衡电流采样电阻上的压降。PWM模块1路用于控制MP2642GR-Z的使能和方向1路用于调节均衡电流基准通过RC滤波变成模拟基准。定时器1个做1ms系统滴答1个做ADC采样触发1个做均衡超时保护。UART留给上位机或BMS主机通信上报均衡状态。GPIO使能、方向、故障指示、看门狗喂狗。这里有个经验ADC采样一定要和PWM开关动作错开。开关瞬间的dv/dt会耦合进采样通道读数会跳。我的做法是用定时器在PWM周期的中点触发ADC此时电感电流处于平均值附近干扰最小。2.4 均衡策略什么时候均衡、均衡多久策略设计比电路设计更容易被忽视。我的做法是分三层触发层上电后延时30秒等电压稳定然后每5秒采一次两电芯电压。压差超过30mV才启动均衡低于10mV停止。这个迟滞区间防止在阈值附近反复启停。执行层均衡电流设为电芯容量的0.05C~0.1C。比如10Ah电芯均衡电流500mA~1A。太大发热太小均衡慢。保护层单次均衡最长30分钟超时强制停止并报故障。均衡过程中任一电芯电压低于2.8V磷酸铁锂或高于3.65V立即停止。注意均衡只在静置或充电末期做放电过程中做均衡会干扰负载判断得不偿失。3. 核心电路细节与参数计算3.1 功率级电路搭建MP2642GR-Z的外围电路是典型的四开关Buck-Boost结构但用在均衡场景有个特殊点输入和输出都是电池没有地的绝对参考。所以采样和驱动都要做电平处理。功率级关键元件电感L这是核心。计算依据是纹波电流。公式L (Vin × D) / (ΔIL × fsw)。取Vin4V单节锂电典型D0.5最恶劣ΔIL取均衡电流的30%比如1A均衡电流ΔIL0.3Afsw300kHz。算下来L ≈ (4 × 0.5) / (0.3 × 300000) ≈ 22μH。实际选22μH/5A的屏蔽电感饱和电流要留2倍余量。MOSFET选30V耐压、低Rds(on)的N沟道管。Rds(on)要小于10mΩ否则1A电流下导通损耗就有10mW四颗管子加起来40mW虽然不大但积少成多。我常用的是某型号30V/5A/8mΩ的管子。采样电阻均衡电流采样用10mΩ/1%的合金电阻放在电感回路里。1A电流产生10mV压降PIC18F66K40的ADC在12位、参考电压4.096V下LSB约1mV够用。输入输出电容各并两颗22μF陶瓷电容加一颗100μF电解抑制开关纹波。3.2 电压采样电路的设计陷阱两串电池的电压采样不能直接接ADC原因有两个一是共模电压问题上节电芯的正极对MCU地是两倍电芯电压二是分压电阻的精度直接影响均衡判断。我的方案每节电芯用两颗0.1%精度的电阻分压分压比1:2把电压降到ADC量程内。分压后的信号经过RC低通滤波1kΩ 100nF截止频率约1.6kHz再进ADC。上节电芯的分压电阻下端接MCU地但要注意分压电阻的功耗——两节电芯电压约8V分压电阻总阻值选200kΩ功耗约0.32mW可以接受。实操心得分压电阻一定要用0.1%的1%的电阻在30mV压差判断上会引入误差。我算过1%电阻在最坏情况下引入的电压判断误差可达±40mV直接把均衡阈值淹没了。3.3 均衡电流的闭环控制MP2642GR-Z是电流模式控制器但它的反馈是电压反馈。要做恒流均衡需要在电流采样电阻上取信号经过误差放大器反馈到MP2642GR-Z的FB引脚。具体做法PIC18F66K40的PWM输出经过RC滤波10kΩ 10μF截止频率约1.6Hz产生一个0~3.3V的模拟基准代表目标均衡电流。电流采样信号10mV/A经过运放放大10倍后与这个基准做比较误差信号送FB。这样MCU就能通过PWM占空比设定均衡电流大小。参数计算目标均衡电流1A采样电阻10mΩ采样电压10mV。放大10倍后100mV。PWM基准设为100mV对应的占空比。PIC18F66K40的PWM是10位3.3V参考下LSB约3.2mV对应电流分辨率约3.2mA足够精细。3.4 方向切换逻辑能量从强电芯搬到弱电芯方向由MP2642GR-Z的输入输出配置决定。具体实现用两颗MOSFET做H桥式的输入输出切换由PIC18F66K40的两个GPIO控制。当电芯A强于电芯B时配置A为输入、B为输出反之亦然。切换时有个关键点必须先关断再切换不能带载切换。带载切换会产生巨大的di/dt可能击穿MOSFET。我的做法是检测到需要换向时先把PWM基准降到零等100ms让电感电流归零再切换方向MOSFET然后再缓慢升回目标电流。这100ms的等待不能省。4. 软件实现与核心代码逻辑4.1 系统主循环框架PIC18F66K40的程序用状态机写主循环不阻塞。核心状态有IDLE空闲、SAMPLE采样、EVALUATE判断、BALANCE均衡、FAULT故障。typedef enum { STATE_IDLE, STATE_SAMPLE, STATE_EVALUATE, STATE_BALANCE, STATE_FAULT } SystemState; SystemState g_state STATE_IDLE; uint16_t g_cellA_mv, g_cellB_mv; uint16_t g_balance_current_ma; uint32_t g_balance_start_tick;主循环每1ms执行一次根据状态做相应处理。采样用定时器触发ADC转换完成后进中断置标志位主循环读取。4.2 ADC采样与滤波ADC采样不能只采一次就用要做滑动平均。我的做法是每1ms采一次存进8深度环形缓冲取平均值作为当前电压。这样既能滤掉开关噪声又不会引入太大延迟。#define FILTER_DEPTH 8 uint16_t g_cellA_buf[FILTER_DEPTH]; uint16_t g_cellB_buf[FILTER_DEPTH]; uint8_t g_buf_idx 0; uint16_t filter_avg(uint16_t *buf) { uint32_t sum 0; for (uint8_t i 0; i FILTER_DEPTH; i) { sum buf[i]; } return (uint16_t)(sum / FILTER_DEPTH); }电压换算ADC值 × 参考电压 / 4096 × 分压比。比如ADC读数2048参考4.096V分压比2则电压 2048 × 4.096 / 4096 × 2 4.096V。4.3 均衡判断与执行逻辑判断逻辑要处理迟滞和超时#define BALANCE_START_MV 30 #define BALANCE_STOP_MV 10 #define BALANCE_TIMEOUT_MS 1800000 // 30分钟 void evaluate_balance(void) { int16_t diff (int16_t)g_cellA_mv - (int16_t)g_cellB_mv; int16_t abs_diff (diff 0) ? diff : -diff; if (g_state STATE_IDLE abs_diff BALANCE_START_MV) { g_state STATE_BALANCE; g_balance_start_tick get_tick_ms(); if (diff 0) { set_balance_direction(DIR_A_TO_B); } else { set_balance_direction(DIR_B_TO_A); } set_balance_current(500); // 500mA } else if (g_state STATE_BALANCE) { if (abs_diff BALANCE_STOP_MV) { stop_balance(); g_state STATE_IDLE; } else if ((get_tick_ms() - g_balance_start_tick) BALANCE_TIMEOUT_MS) { stop_balance(); g_state STATE_FAULT; set_fault_code(FAULT_BALANCE_TIMEOUT); } } }4.4 保护逻辑的实现保护分硬件和软件两层。硬件层用比较器做快速切断软件层做逻辑判断。软件保护包括过压保护任一电芯电压 3.65V磷酸铁锂或4.25V三元锂立即停止均衡。欠压保护任一电芯电压 2.8V磷酸铁锂或3.0V三元锂立即停止。过流保护均衡电流 1.5倍设定值持续100ms停止并报故障。过温保护如果板上有NTC温度 85℃停止。这些保护在1ms主循环里检查响应足够快。5. 实操调试与常见问题排查5.1 上电调试步骤第一次上电不要直接接电池按这个顺序来空载测电源只给PIC18F66K40供电测3.3V和5V是否正常晶振是否起振。测PWM输出不接功率级用示波器看PWM波形确认频率和占空比可调。测ADC采样用可调电源模拟电芯电压从2V到4.5V扫一遍看ADC读数是否线性。接功率级空载接上MP2642GR-Z和电感不接电池用电源供电看输出是否稳定。接电池小电流接上电池均衡电流设100mA观察波形和发热。逐步加大电流确认无误后逐步加到目标电流。注意第三步和第四步之间一定要确认MP2642GR-Z的使能引脚是低电平关断状态否则可能烧管。5.2 常见问题速查表现象可能原因排查方法解决措施均衡电流上不去电感饱和看电感电流波形是否削顶换更大饱和电流的电感ADC读数跳动大开关噪声耦合示波器看采样点与PWM相位调整采样时刻到PWM中点换向时烧MOSFET带载切换看换向瞬间电流波形加100ms死区时间均衡效率低开关损耗大测MOSFET温升降低开关频率或换低Qg管子压差判断不准分压电阻精度不够用万用表对比ADC读数换0.1%电阻并校准均衡后压差反弹电芯老化不一致静置2小时后再测正常现象说明电芯需要更换5.3 几个踩过的坑坑一忽略电感直流电阻。电感标称22μH但直流电阻有50mΩ1A电流下压降50mV直接吃掉均衡精度。后来换成了直流电阻20mΩ以下的电感。坑二采样电阻温漂。普通厚膜电阻温漂100ppm/℃温度变化40℃时阻值变化0.4%对应电流误差0.4%。虽然不大但对精密均衡来说还是换成了合金电阻温漂25ppm/℃。坑三PCB布局。功率地和信号地没分开ADC读数一直被开关噪声干扰。后来改成单点接地功率地和信号地在电源入口处汇合问题解决。坑四软件看门狗。均衡过程中如果MCU死机MOSFET可能一直导通电池会持续放电。后来加了硬件看门狗并且把均衡使能信号设计成高电平有效这样MCU复位时默认关断。5.4 实测数据与效果用两节10Ah磷酸铁锂电芯做测试初始压差80mV。设定均衡电流500mA启动均衡。实测数据时间电芯A电压电芯B电压压差0min3.320V3.240V80mV10min3.310V3.250V60mV30min3.295V3.265V30mV60min3.285V3.275V10mV均衡效率实测约88%MOSFET温升在500mA下约15℃电感温升约20℃。整体表现符合预期。6. 方案扩展与优化方向6.1 从两串扩展到多串两串方案跑通后扩展到多串的思路是每相邻两串用一个MP2642GR-Z做均衡形成分布式均衡网络。比如4串电池用3颗MP2642GR-Z分别均衡1-2、2-3、3-4。PIC18F66K40的GPIO和ADC资源要重新分配可能需要换更多引脚的型号或者加多路复用器。这种分布式方案的好处是能量可以逐级传递最终实现整组均衡。缺点是均衡路径长效率会打折扣。另一种方案是用一颗MP2642GR-Z配合多路开关矩阵分时复用成本低但均衡速度慢。6.2 加入通信与上位机监控PIC18F66K40的UART可以接一个隔离通信模块把均衡状态上报给BMS主机。上报内容包括两电芯电压、压差、均衡电流、均衡累计时间、故障码。主机可以远程调整均衡阈值和电流也可以记录均衡历史做电芯健康度分析。通信协议我一般用Modbus RTU简单可靠工业场景通用。寄存器映射0x0000-0x0001放电芯A电压0x0002-0x0003放电芯B电压0x0004放均衡电流0x0005放状态字。6.3 效率优化的几个方向同步整流时序优化MP2642GR-Z的死区时间可以通过外围电阻微调找到效率最优点。电感选型用一体成型电感直流电阻更低但要注意饱和特性。开关频率动态调整轻载时降频重载时升频可以兼顾效率和纹波。PCB铜厚功率回路用2oz铜减少导通损耗。6.4 成本与可靠性的平衡这个方案的成本大头在MP2642GR-Z和电感。如果成本敏感可以考虑用分立元件搭双向Buck-Boost但调试工作量大很多。可靠性方面建议加TVS管做浪涌保护加自恢复保险丝做过流保护这些成本不高但能显著提升现场可靠性。我个人在实际操作中的体会是均衡电路不难难的是精度和可靠性。精度靠器件选型和校准可靠性靠保护逻辑和冗余设计。两串场景下MP2642GR-Z加PIC18F66K40的组合性能和成本平衡得不错适合中小功率储能和备用电源项目直接落地。如果你也在做类似项目建议先把采样和保护做扎实再调均衡算法这样能少走很多弯路。
阅读完成 · 觉得有帮助?
咨询建站