资讯详情

资讯详情

基于MP2642GR-Z与PIC18F87J11的储能电池主动均衡方案设计与实现

1. 储能电池均衡的底层逻辑与方案选型1.1 为什么串联电池组必须做均衡先聊一个很多人踩过的坑。两节标称容量相同的电池串联使用放电到截止电压时你会发现其中一节已经掉到2.8V了另一节还有3.4V。这时候如果继续放电低压那节会被过放容量永久性衰减充电时反过来高压那节先到4.2V低压那节还没充满继续充就会把高压那节过充轻则鼓包重则热失控。这个问题的根源在于串联回路里电流是同一个但两节电池的实际容量、内阻、自放电率不可能完全一致。出厂时配对的电芯经过几十个循环之后也会逐渐分化。分化一旦形成就会进入一个恶性循环——容量小的那节每次都被过充过放衰减更快差距越拉越大。所以储能系统和备用电源系统里电池均衡不是锦上添花而是必须做的一件事。均衡方案大致分两类被动均衡把多的能量通过电阻放掉和主动均衡把能量从高压那节搬到低压那节。被动均衡简单便宜但效率低、发热大主动均衡效率高但电路复杂、成本高。这次要聊的方案用的是主动均衡里的电感式双向均衡核心器件是MP2642GR-Z这颗双向升降压控制器配合PIC18F87J11做数字控制。选这个组合的原因后面会详细拆。1.2 为什么选MP2642GR-Z这颗芯片MP2642GR-Z是一颗双向同步升降压控制器注意是控制器不是转换器意味着它需要外接MOSFET。它的几个关键特性决定了它特别适合做电池均衡双向工作同一套功率级既能从高压侧往低压侧送能量也能反向送。做均衡时哪节电压高就往哪节送不需要两套电路。宽输入输出范围支持升降压意味着两节电池电压差在较大范围内波动时都能正常工作不会因为压差太小或太大而失效。同步整流用MOSFET代替续流二极管效率比异步方案高出一截均衡电流可以做得更大。可编程开关频率通过外部电阻设定方便在效率和体积之间做权衡。我实测下来这颗芯片在2A左右的均衡电流下效率能到90%以上发热控制得不错。相比用分立元件搭Buck-Boost省了一大堆调试时间。1.3 PIC18F87J11在系统里的角色PIC18F87J11是一颗8位MCU资源在这个应用里绰绰有余10位ADC用来采样两节电池的电压、均衡电流、温度。10位精度对于电池均衡来说够用配合软件滤波和校准电压采样精度能做到±10mV以内。PWM模块输出驱动信号给MP2642GR-Z的使能和频率设定或者直接参与环路控制。UART/SPI/I2C跟上位机或BMS主控通信上报每节电压、均衡状态、故障码。足够的GPIO控制继电器、指示灯、风扇等外围。选它而不是更便宜的PIC16主要是看中它的ADC通道数和运算能力。均衡算法需要做比较、查表、简单的PI调节8位机跑起来不吃力而且PIC18系列的抗干扰能力在工业环境里口碑不错。1.4 整体方案架构整个均衡系统可以拆成四块功率级MP2642GR-Z 四个MOSFET 电感 采样电阻构成双向Buck-Boost。控制级PIC18F87J11负责采样、算法、PWM输出、通信。采样级分压电阻网络 运放缓冲把两节电池电压送到ADC。保护级过流比较器、温度开关、看门狗硬件层面兜底。工作流程是MCU周期性采样两节电压算出压差如果超过阈值比如50mV就启动均衡根据哪节电压高决定能量流向通过MP2642GR-Z的MODE引脚切换升降压模式同时调节PWM占空比控制均衡电流大小。压差降到阈值以下就停止避免频繁启停。注意均衡阈值不能设太小否则电池正常波动就会触发继电器和MOSFET频繁动作反而缩短寿命。一般设30mV到50mV比较合理。2. 硬件设计细节与关键参数计算2.1 功率级拓扑选择与MOSFET选型MP2642GR-Z支持四种工作模式Buck、Boost、Buck-Boost、以及双向模式。做两节电池均衡最自然的拓扑是四开关Buck-Boost也就是常说的H桥结构。具体连接方式两节电池分别接在H桥的两端电感跨接在中间。当第一节电压高于第二节时芯片工作在Buck模式能量从第一节流向第二节反之工作在Boost模式能量反向流动。MP2642GR-Z的MODE引脚和方向控制引脚配合可以自动或手动切换。MOSFET选型要看几个参数参数要求说明耐压Vds≥30V两节锂电最高8.4V留足裕量导通电阻Rds(on)≤10mΩ降低导通损耗2A电流下压降小栅极电荷Qg≤20nC开关损耗低驱动容易封装PowerPAK或DFN散热好占板面积小我一般选30V/5mΩ级别的N沟道MOSFET比如某常用型号的SO-8封装版本。四个管子要配对Rds(on)差异控制在10%以内否则并联或桥臂之间会不均流。电感的选择更关键。MP2642GR-Z的开关频率我设在400kHz这个频率下电感值计算L (Vout × (1 - D)) / (fsw × ΔIL)取Vout4VD0.5ΔIL取额定电流的30%即0.6AL (4 × 0.5) / (400k × 0.6) ≈ 8.3μH实际选10μH的标准值饱和电流要大于3A直流电阻小于20mΩ。用一体成型电感屏蔽好EMI低。2.2 采样电路设计与精度保障电压采样是均衡精度的基础。两节电池的电压范围是2.5V到4.2VPIC18F87J11的ADC参考电压我设成4.096V外部基准这样每节电池直接用分压电阻降到ADC量程内。分压电阻选100kΩ 100kΩ分压比0.54.2V变成2.1V在量程中间线性度最好。但这里有个坑分压电阻的精度直接影响采样精度。普通5%精度的电阻分压比误差可能到2%4.2V上就是84mV的误差比均衡阈值还大。所以分压电阻必须用0.1%精度的金属膜电阻而且两节电池的分压电阻要配对温漂要一致。我在板子上会把四个电阻紧挨着放保证温度相同。ADC采样端要加RC滤波1kΩ 100nF截止频率约1.6kHz滤掉开关噪声。但RC时间常数不能太大否则采样建立时间不够。PIC18F87J11的ADC采样保持时间约2μs1kΩ源阻抗下没问题。实操心得ADC采样一定要在MOSFET开关的安静窗口进行。我通常把PWM周期设成2.5μs在开关动作后延迟500ns再触发ADC避开振铃区。这个延迟用定时器实现实测能降低约30%的采样噪声。2.3 均衡电流设定与热设计均衡电流取多大是个权衡电流大均衡快但发热大、元件应力大电流小发热小但均衡时间长对于两节电池的储能系统我一般取1A到2A。以2A为例两节电池压差100mV时均衡功率是0.2W听起来不大但MOSFET导通损耗和电感铜损加起来实际发热约0.5W。热设计要算清楚MOSFET导通损耗P I² × Rds(on) × 2两个管子同时导通2A下5mΩ管子P 4 × 0.005 × 2 0.04W很小电感铜损P I² × DCR 4 × 0.02 0.08W开关损耗P 0.5 × V × I × (tr tf) × fsw估算约0.1W总损耗约0.22W分散在几个元件上PCB铜箔散热足够不需要额外散热片。但如果均衡电流做到3A以上就要考虑加散热过孔或小铜片了。2.4 保护电路不能省再好的控制算法也怕硬件故障。保护电路是最后一道防线过流保护采样电阻比较器电流超过3A时硬件拉低MP2642GR-Z的使能脚响应时间小于1μs。过温保护NTC热敏电阻贴在MOSFET附近温度超过85℃时MCU降额或停止均衡。看门狗PIC18F87J11内部WDT防止程序跑飞后MOSFET一直导通。电池反接保护虽然概率低但一旦反接功率级全毁。加一个P沟道MOSFET做防反接成本不高。这些保护在正常工作时隐形但关键时刻能救整块板子。我见过太多因为省保护电路而烧板的案例得不偿失。3. 控制算法与固件实现3.1 均衡策略阈值控制还是PID最简单的策略是阈值控制压差大于50mV就全速均衡小于50mV就停。优点是简单缺点是压差在阈值附近时频繁启停MOSFET和电感会发出可听噪声。我实际用的是带滞环的阈值控制 电流闭环压差大于60mV启动均衡目标电流2A压差降到30mV以下停止均衡中间区域保持当前状态不动作这样避免了频繁启停。同时均衡电流不是固定占空比而是通过PI调节让实际电流跟踪目标值。电流采样用0.01Ω的采样电阻放大100倍后送ADC。PI参数整定Kp0.5Ki0.05积分时间约10ms。这个参数下电流阶跃响应约5ms稳定超调小于10%。参数不是拍脑袋来的是用示波器看电流波形反复调出来的。3.2 电压采样与滤波算法ADC采回来的原始值噪声不小直接用来比较会误触发。我用了滑动平均 中值滤波的组合每1ms采样一次连续采16次去掉最大和最小的2个值剩下12个求平均再经过一阶低通滤波系数0.2这样处理下来电压采样分辨率能到5mV左右足够判断50mV的压差。滤波会带来约20ms的延迟但电池电压变化很慢完全能接受。代码里用一个环形缓冲区存16个采样值每次新值进来就替换最旧的值然后重新计算。PIC18F87J11的RAM有3936字节存16个16位数据才32字节毫无压力。#define FILTER_SIZE 16 uint16_t adc_buffer[FILTER_SIZE]; uint8_t buf_index 0; uint16_t get_filtered_voltage(void) { uint16_t temp[FILTER_SIZE]; memcpy(temp, adc_buffer, sizeof(adc_buffer)); // 简单冒泡排序16个元素很快 for(uint8_t i0; iFILTER_SIZE-1; i) { for(uint8_t j0; jFILTER_SIZE-1-i; j) { if(temp[j] temp[j1]) { uint16_t t temp[j]; temp[j] temp[j1]; temp[j1] t; } } } // 去掉最大最小各2个中间12个求平均 uint32_t sum 0; for(uint8_t i2; iFILTER_SIZE-2; i) { sum temp[i]; } return (uint16_t)(sum / (FILTER_SIZE-4)); }这段代码在PIC18上跑一次约200μs1ms周期完全来得及。3.3 方向切换与死区时间MP2642GR-Z的方向切换不是瞬间完成的。从Buck切到Boost或者反过来中间需要死区时间防止上下管直通。死区时间由芯片内部逻辑控制典型值约50ns。但外部MOSFET的关断有延迟实际死区要算上驱动电阻和栅极电荷的影响关断延迟 Qg / Ig 关断时间假设Qg15nC驱动电流1A关断延迟约15ns加上MOSFET本身的关断时间20ns总延迟约35ns所以实际死区设100ns比较安全。MP2642GR-Z可以通过外部电阻微调死区我一般留一个可调电阻调试时用示波器看桥臂中点波形确保没有直通尖峰。注意死区太大电感电流会断续效率下降死区太小有直通风险。100ns是个平衡点实测效率损失约2%但安全。3.4 通信与状态上报PIC18F87J11通过UART跟主控通信波特率115200每100ms上报一次状态第一节电压mV第二节电压mV均衡电流mA均衡状态运行/停止/故障温度℃故障码数据格式用简单的二进制帧帧头0xAA帧尾0x55中间加CRC8校验。比ASCII协议紧凑解析也快。主控可以根据这些数据做上层决策比如整组电池的SOC估算、均衡策略优化等。如果主控不在PIC18自己也能独立工作只是不上报而已。4. 调试实录与常见问题排查4.1 上电第一步静态检查板子焊好之后别急着上电。先做三件事目视检查有没有虚焊、连锡、元件方向焊反。特别是MOSFET的引脚焊反了上电就炸。万用表测阻抗测各电源轨对地阻抗确认没有短路。3.3V对地应该在几百欧以上如果只有几欧肯定有短路。限流上电用可调电源限流设100mA慢慢升压。如果电流异常立刻断电检查。我吃过亏有一次MOSFET的栅极和源极焊反了上电直接冒烟。后来养成习惯上电前必测阻抗。4.2 均衡不启动或频繁启停这是最常见的两个问题原因往往相反现象可能原因排查方法完全不启动压差没超过阈值用万用表实测两节电压确认压差完全不启动ADC采样错误打印ADC原始值看是否合理完全不启动使能脚没拉高测MP2642GR-Z的EN脚电压频繁启停阈值设太小加大滞环宽度频繁启停采样噪声大加强滤波检查RC参数频繁启停均衡电流太小测实际电流调PI参数我遇到过一次压差明明有80mV但就是不启动。查了半天发现是ADC参考电压没接好采样值一直是0。这种问题用示波器看ADC输入脚最快一眼就能看出来。4.3 均衡电流上不去设定2A实际只有0.5A可能的原因电感饱和电感值选小了或者饱和电流不够。用示波器看电感电流波形如果顶部变平就是饱和了。占空比受限MP2642GR-Z有最大占空比限制压差太小时可能达不到目标电流。这是正常的压差小本来就不需要大电流。采样电阻太大采样电阻上的压降影响了环路。0.01Ω在2A下压降20mV可以接受如果用到0.1Ω压降200mV就太大了。MOSFET驱动不足栅极电阻太大开关速度慢等效导通时间短。减小栅极电阻试试。4.4 发热异常与效率优化均衡运行时摸一下MOSFET和电感温热是正常的烫手就不对。效率低的原因开关损耗大开关频率太高或者栅极驱动太慢。400kHz下如果驱动电阻大于10Ω开关损耗会明显增加。导通损耗大MOSFET的Rds(on)随温度上升而增大25℃时5mΩ100℃时可能到8mΩ。选管子时要看高温下的Rds(on)。电感铜损大DCR大的电感2A下发热明显。选DCR小于20mΩ的。死区时间太长死区期间电感电流走体二极管压降大损耗大。适当减小死区。我实测过同样2A均衡电流优化前效率85%优化后92%发热明显改善。优化的点主要是换了低DCR电感和减小栅极电阻。4.5 常见问题速查表故障现象优先检查快速处理上电无反应电源、使能脚测电压确认供电均衡不启动压差、ADC打印电压值频繁启停阈值、滤波加大滞环电流上不去电感、占空比看电流波形发热严重效率、散热测效率优化参数通信失败波特率、接线示波器看波形故障码频出保护阈值适当放宽但别取消最后分享一个小技巧调试时在关键节点留测试点比如两节电池电压、均衡电流、MOSFET栅极。用四通道示波器同时看问题一目了然。比万用表东测西测快得多。这个方案我前后调了大概两周从原理图到PCB到固件踩了不少坑但最终稳定性很好。连续跑了一个月两节电池压差始终保持在20mV以内达到了设计目标。如果你也在做类似的储能均衡项目希望这些经验能帮你少走弯路。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →