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

基于MP2642GR-Z与PIC32的2S电池组主动均衡方案设计

基于MP2642GR-Z与PIC32的2S电池组主动均衡方案设计 ★ FEATURED ARTICLE
做储能和备用电源的都清楚2S电池组看起来简单真正让人头疼的从来不是充放电管理而是两个电芯之间的那点压差。我最近一套备用电源项目里就是用MP2642GR-Z做均衡执行器PIC32MX764F128L做策略控制把两个串联电池单元的均衡问题从头到尾收拾干净了。这套方案不算复杂但里面值得展开的细节非常多从拓扑选型到软件状态机再到调试现场踩过的坑我今天一次性讲完给正在做BMS、储能控制器或者锂电池保护板的朋友做个参考。这个系统最终解决的是典型的木桶短板问题两个电芯串联容量、内阻、自放电率总是有差异长期充放电后电压一个高一个低高的一节先充满低的一节还没到位整个电池组可用容量就被砍掉一截。在备用电源这种长期浮充、偶尔深放的工况下这个问题尤其扎眼。MP2642GR-Z负责在电芯之间搬移电荷PIC32MX764F128L负责判断什么时候搬、往哪搬、搬多久。下面我从设计思路开始讲。1. 为什么要均衡串联电池组里的木桶效应1.1 两个电芯的电压不一致源头不止一个很多人第一反应是两节新电池出厂一致性好是不是就不用均衡了。实际做了项目就知道这个想法过于乐观。哪怕同一批出厂、同一个批次焊接的电芯装上板子跑几十个循环之后压差还是会冒出来。原因有几个层面。首先是制造层面的分散性电芯的容量、内阻、自放电率都存在公差这个没法完全消除。然后是使用层面的差异电池组里靠散热风道近的那一节温度低靠发热元件近的那一节温度高一点温度不同同一时刻的端电压和极化程度就不同。更麻烦的是自放电率的差异长期静置或者浮充时自放电快的电芯电压会悄悄往下掉而自放电慢的还撑着于是压差一点点积累起来。在储能和备用电源系统里还有两个容易被忽视的因素。一个是长期浮充状态电芯基本不深度充放一直在涓流维持这时候内阻差异造成的电压分布差异会被放大另一个是间歇性带载备用电源系统平时空载、市电波动时突然切到电池放电电压阶跃让电芯内阻差异瞬间体现出来低压电芯可能被拉得更低。所以两串电池看起来简单均衡却是必须的。不做均衡的2S电池组短时间看不出问题放一个月再看压差可能从十几毫伏飘到几十甚至上百毫伏容量利用率直线下降过充过放风险也跟着上来。1.2 无源均衡与有源均衡方案选型背后的账均衡方案大致分两类无源均衡和有源均衡。无源均衡是最老套的做法原理就是给每个电芯并一个放电电阻和一个开关管检测到谁电压高就把谁的能量通过电阻放掉变成热量散掉。这个方案简单、便宜但问题也很明显效率低高电压电芯的宝贵能量被白白烧掉发热集中电流一大电阻温度就飙上去均衡电流一般只能做几十毫安到一两百毫安对大压差的纠偏速度很慢。有源均衡就不一样了它用电感或者电容做能量中间站把高电压电芯的能量搬到低电压电芯里而不是烧掉。MP2642GR-Z就是典型的电感型双向有源均衡方案。打个比方无源均衡像是把高水位桶里的水舀出来倒在地上有源均衡则像拿个桶把水从高水位桶舀到低水位桶水没少只是重新分配。我用一个表格把两条路线的差别列出来方便大家做方案对比对比项无源均衡有源均衡MP2642GR-Z方案能量去向以热形式耗散转移到低压电芯均衡电流一般数十毫安级别可做到数百毫安到1A级发热明显需要散热设计较微弱主要来自器件损耗器件成本低一颗电阻加一颗MOS管高一些需要电感等磁性元件控制复杂度简单开关逻辑即可需要控制方向、电流、时序适用场景低成本、小容量保护板储能、备用电源、长期在线系统在储能和备用电源这个场景里我更倾向于有源均衡。因为备电系统动辄设计寿命好几年长期浮充下压差会反复积累如果你用无源均衡把能量全部烧掉一部分电能变成柜子里的热量另一部分还要靠充电机重新补回来既费电又考验散热。而有源均衡的效率通常在70%到90%之间虽然也不是100%但对于定期纠偏来说已经非常够用发热也更容易控制。2. 器件拆解MP2642GR-Z 与 PIC32MX764F128L 的分工2.1 MP2642GR-Z负责干活的能量搬运工MP2642GR-Z这颗芯片核心定位就是电池均衡用的有源电荷转移器件针对的就是两串电池这种场景。它的优势是把电感型双向均衡需要的功率开关管和驱动电路集成进去了外部只要配一颗功率电感和少量外围电容电阻就能搭出一个完整的均衡通道。从系统角度看它像一个能量搬运工PIC32告诉它方向它就按照设定的电流大小把电芯A的能量先存储到电感里再释放到电芯B反过来也一样。这样搬运是双向的高压电芯往低压电芯搬没有人需要烧电阻。它给系统设计带来的最大价值是简化了功率级。以前做有源均衡从MOS管选型、栅极驱动、死区控制到同步整流时序每一步都要自己调工作量很大。MP2642GR-Z把这些集成进去之后硬件上省了一大块软件的负担也减轻不少。你只要关注于采准电压、定好策略、按时序把控制信号发过去剩下的开关时序和效率优化交给芯片自己处理。芯片的控制接口做起来并不复杂。我手头这块板子上PIC32通过控制信号线和MP2642GR-Z相连用来配置均衡方向、启动/停止均衡并在需要的时候调整均衡电流档位。不同封装、不同批次的丝印标识略有差异具体引脚定义和时序要求以你手里那颗芯片的数据手册为准这个做硬件的一定要养成查手册的习惯不能靠记忆里的大概齐。2.2 PIC32MX764F128L负责决策的大脑PIC32MX764F128L是一颗32位单片机MIPS32内核主频跑到80MHz左右我实测下来很轻松片内Flash从型号标识看应该在128KB量级RAM和外设资源对这个项目来说相当宽裕。它在系统里的角色是大脑负责采集两节电芯的电压、计算压差、判断均衡条件、控制MP2642GR-Z的启停和方向同时处理充电器通信、继电器控制、LED告警、串口调试这些杂事。如果系统里有电芯温度传感器也由它统一采集。为什么用32位单片机而不用普通8位机一个是因为均衡策略本身不复杂但你要叠加浮充管理、放电保护、通信协议、参数存储这些功能时8位机的资源就很紧张了。另一个原因是PIC32MX系列的外设比较全多路ADC、定时器、UART、SPI、I2C都有扩展性和后续升级空间都比较大。比如做完2S均衡之后后面想扩展到4S或者8S主控这颗芯片的资源还够用不用整个推倒重来。2.3 为什么这样组合而不是用单一方案有人可能会问现在很多AFE模拟前端芯片内部自带均衡逻辑为什么还要专门用一颗MCU来做策略答案是专用的归专用策略的归策略。AFE芯片里自带的均衡逻辑通常是固定阈值、固定策略灵活性有限。而储能和备用电源系统的均衡往往需要和充电策略、放电策略联动。比如浮充状态下要不要均衡、放电间歇要不要均衡、温度高了要不要暂停均衡这些判断如果全塞在AFE内部改起来很麻烦。PIC32MX764F128L来做策略层均衡执行层交给MP2642GR-Z两颗各司其职调参和迭代都快很多。这也是我比较喜欢的分工思路功率模拟部分尽量交给专用芯片数字逻辑部分自己掌控。做出来之后既稳定又不会被人说你这完全是拿AFE默认逻辑糊弄的。3. 系统架构与硬件设计要点3.1 均衡主电路拓扑与关键参数先理一下整体拓扑。两节电芯串联从上到下定义为电芯1和电芯2中间节点叫Mid。MP2642GR-Z的平衡通道跨接在整个串联组上其开关节点通过一颗功率电感连接到Mid节点。这样当电感从电芯1吸取能量再释放给电芯2就能实现电芯1到电芯2的电荷转移时序反过来就是电芯2到电芯1的转移。文字化描述就是Pack电芯1正极 │ └── MP2642GR-Z ── 电感 ── Mid电芯1负极/电芯2正极 │ Pack-电芯2负极严格说这颗芯片和电感的接法要严格按照数据手册里的典型应用电路来我上面画的是逻辑结构不是原理图大家照着做板前一定要去翻对应规格书里的参考电路。电感选型是这个均衡通道里最影响成败的器件。我试过几种参数一般来说电感量选在4.7μH到10μH之间比较合适感值太小会让纹波电流偏大感值太大会让能量转移速度变慢而且带来的DCR直流电阻损耗也会升高。最关键的是电感的饱和电流一定要留足余量我习惯按最大均衡电流的1.5倍到2倍来选免得均衡中后期电感磁芯饱和导致电流失控、啸叫甚至发热异常。另外一个要点是PCB布局。MP2642GR-Z的开关节点走线要短而粗电感要尽量靠近芯片减少寄生电感和开关振铃Mid节点的采样线要单独走不能在功率电流路径上直接分压采样否则采样点会因为铜箔电阻和电流流过产生额外压降导致电压测量不准。3.2 电压采样与信号调理均衡策略的基础是电压测量如果电压测不准后面所有判断都是空中楼阁。对于2S电池组最直接的采样方式是相对于Pack-地来测Mid和Pack两个节点然后软件算出电芯1电压和电芯2电压电芯1电压 V(Mid) - V(Pack-)电芯2电压 V(Pack) - V(Mid)这样采样有个容易踩的坑Pack电压可能是8.4V两串锂电满电而PIC32MX764F128L的ADC输入范围只有3.3V左右必须用电阻分压把电压降到ADC可接受范围。电阻分压本身不复杂关键是分压比的温度漂移和采样点阻抗问题。采样点串一个几十千欧的输入阻抗会让ADC采样建立时间变长所以我通常会在分压电阻之后加一个RC低通滤波既能滤掉高频纹波也给采样电容一个较低的源阻抗。参考电压同样不能将就。MCU内部ADC参考电压精度有限对于毫伏级均衡判断来说误差偏大。我在这套系统里用了一颗外部精密基准源给ADC做参考同时做了上电自校准把已知电压接到某个ADC通道反向推算ADC的增益和失调把测温漂分摊到运行过程中。这套做下来实测电压误差基本能控制在正负5mV以内均衡判断起来就很有底气。3.3 硬件设计里容易翻车的几个细节硬件上我踩过的坑可以列一堆这里挑三个典型的讲。第一采样线的走线方式。Mid节点既是大电流路径又是电压采样点这两者必须分开。大电流路径如果从采样点旁边经过铜箔上的电流会在采样回路里感应出额外的压差均衡电流一大测量值就会跟着飘。正确的做法是从电芯极耳或者电池连接片端子处单独拉一对采样线到ADC前端采样线尽量短最好做差分走线减少耦合。第二去耦电容一定不能省。MP2642GR-Z在开关瞬间有较大的di/dt电源引脚旁边的去耦电容如果容量不够或者距离太远很容易把整个电源轨搞出毛刺严重时PIC32的ADC读数乱跳甚至MCU复位。我在芯片电源引脚旁边放了一颗小容值高频瓷片电容和一颗大容值电解电容并且把它们放在芯片同一面、靠近引脚的位置实测开关噪音的传导好了很多。第三均衡启动瞬间的电流冲击。如果MCU在压差很大的时候突然让MP2642GR-Z全电流启动电感电流可能一下子冲过头。解决办法是不要一上来就跑满电流而是分档启动先小电流跑几百毫秒再过渡到目标电流。这个“软启动”过程在代码里实现成本很低但对系统稳定性的提升非常明显。4. 均衡控制算法与软件实现4.1 均衡判断压差阈值、滞回与联锁条件软件层面均衡逻辑的核心是几个问题什么时候开始均衡什么时候停止如果两个电芯都有问题怎么处理我先讲最基础的判断条件。启动条件一般是两个电芯的电压差绝对值超过设定阈值。这个阈值不能拍脑袋定。阈值设得太小比如5mV就启动电芯本身在静置状态下也会因为内部弛豫出现几毫伏的波动很容易导致频繁启停阈值设得太大比如100mV才启动等于把均衡做成了事后补救容量浪费已经发生了。我在这套2S系统里启动阈值设在30mV左右均衡电流500mA既不会太频繁启动纠偏速度也够快。停止条件更要讲策略。如果停止阈值也设在30mV均衡到压差29mV就停那就永远在临界附近徘徊。我的做法是停止阈值远小于启动阈值并且加滞回。比如压差回到5mV以下才停止中间一段压差在5mV到30mV之间时均衡状态保持不变。这种做法本质上是在避免“停止-启动”振荡。联锁条件也很重要均衡不是任何时候都能开的。我在代码里加了几个硬性条件系统处于静置或浮充状态时允许均衡充电或大电流放电期间不均衡因为这时候电芯极化电压会干扰判断而且均衡电流和主回路电流叠加可能让某些电芯过流电芯温度超过一定范围比如低于0℃或高于45℃禁止均衡系统检测到电芯过压、欠压、短路等故障状态时均衡无条件关闭优先保护电池。4.2 状态机设计与控制时序整个均衡控制逻辑我用一个简单的状态机来组织状态不多但每个状态之间的迁移条件必须想清楚IDLE空闲态。系统上电后没有故障两节电芯压差小于启动阈值MP2642GR-Z不工作。BALANCING均衡态。压差超过启动阈值且联锁条件满足PIC32控制MP2642GR-Z启动以设定电流把能量从高压电芯搬到低压电芯。COOLDOWN冷却等待态。压差已收敛到停止阈值以下均衡关闭但短时间内不重新启动等待电芯电压弛豫回稳。FAULT故障态。出现温度越限、均衡超时或通信异常均衡闭锁直到故障解除并手动复位。有了冷却等待态很多振荡问题就自然消除了。我实测发现电芯在均衡停止后电压会有几毫伏到十几毫伏的回弹如果停止后立刻再采样判断可能又触发启动条件就会反复启停。冷却等待几十秒再进入判断逻辑系统就稳定很多。状态机的迁移逻辑可以概括为IDLE: - 无故障 |ΔV| 启动阈值 - BALANCING BALANCING: - 故障发生 - FAULT - |ΔV| 停止阈值 - COOLDOWN - 均衡持续时间超上限 - FAULT BALANCING 每次进入时记录均衡方向与目标电流 COOLDOWN: - 冷却时间到 无故障 - IDLE - 冷却时间内出现故障 - FAULT FAULT: - 故障源消除 收到清故障指令 - IDLE4.3 关键代码骨架采样滤波与控制决策代码部分我贴一个简化版的骨架重点是展示采样滤波和状态机判断是怎么配合的。实际项目里还会加温度采样、通信处理、参数存储但核心逻辑就是这段。#define EQ_START_DELTA_MV 30 #define EQ_STOP_DELTA_MV 5 #define EQ_COOLDOWN_MS 30000 #define EQ_MAX_DURATION_MS 3600000 enum { EQ_IDLE 0, EQ_BALANCING, EQ_COOLDOWN, EQ_FAULT }; static uint16_t eq_state EQ_IDLE; static uint32_t eq_state_time_ms 0; static int eq_direction 0; /* 1: cell1-cell2, -1: cell2-cell1 */ int get_delta_mv(void) { uint16_t v1 read_cell_voltage_mv(CELL_1); uint16_t v2 read_cell_voltage_mv(CELL_2); return (int)(v1 - v2); } void eq_process_1ms(void) { int delta_mv get_delta_mv(); int abs_delta (delta_mv 0) ? -delta_mv : delta_mv; switch (eq_state) { case EQ_IDLE: if (abs_delta EQ_START_DELTA_MV temperature_ok() !system_fault()) { eq_direction (delta_mv 0) ? 1 : -1; mp2642_balance_start(eq_direction, EQ_CURR_500MA); eq_state EQ_BALANCING; } break; case EQ_BALANCING: if (system_fault() || !temperature_ok()) { mp2642_balance_stop(); eq_state EQ_FAULT; } else if (abs_delta EQ_STOP_DELTA_MV) { mp2642_balance_stop(); eq_state EQ_COOLDOWN; } else if (eq_state_time_ms EQ_MAX_DURATION_MS) { mp2642_balance_stop(); eq_state EQ_FAULT; } break; case EQ_COOLDOWN: if (eq_state_time_ms EQ_COOLDOWN_MS) { eq_state EQ_IDLE; } break; default: break; } eq_state_time_ms; }这段代码里的read_cell_voltage_mv函数内部我加了中值滤波和滑动平均两级滤波具体实现不展开但思路是清晰的先去掉采样序列里的最大最小值干扰再对连续几十次采样做均值得到平滑的电压值。这样能有效避免均衡启动瞬间的毛刺影响判断。5. 调试实录三个挽回了不少时间的坑5.1 ADC采样“跳字”引发误均衡第一次把板子焊好通电我还没给电池接上均衡负载就看到MP2642GR-Z莫名其妙启动了。抓了ADC原始值一看问题出在采样通道的最后几位一直在跳换算下来电压误差达到十几毫伏到二十毫伏直接把孟端阈值给冲过去了。排查过程比较曲折最后定位到两个原因。一个是MCU电源的纹波偏大ADC参考电压跟着抖动另一个是采样网络的高频阻抗太高开关电源的纹波串进了采样线。解决办法是给MCU电源加了低ESR的陶瓷电容并且把采样点做成差分形式采样线之间加了一颗滤波电容。软件上再加了中值滤波和滑动平均三层处理之后ADC读数稳定在正负2mV以内误均衡问题彻底消失。这里给一个经验电压采样稳定性的优先级高于一切。均衡策略再完美采样抖一下全部白搭。5.2 均衡启停振荡问题第二个坑看起来更奇怪均衡启动后工作正常电压差也确实在缩小但压差降到停止阈值附近之后系统并没有安静地进入空闲而是每隔几秒就重新启动一次均衡。看了波形才明白电芯电压在均衡停止后会发生弛豫回弹回弹量超过了启动阈值于是状态机在“停止-冷却-再启动-再停止”之间反复。我调整了两处。第一处是把停止阈值从10mV收紧到5mV让均衡多跑一小段时间把回弹余量预支掉第二处是引入冷却等待态停止后强制等待30秒再回到空闲判断给电芯电压足够的时间稳定。调整之后单次均衡过程结束后就不再反复启停芯片温度也明显下降了。如果大家也遇到均衡反复启停优先检查自己有没有做冷却等待而不是一味去调阈值。5.3 电感啸叫与局部发热第三个坑出现在均衡电流开到800mA的时候。均衡通道正常转移能量但电感发出刺耳的啸叫声同时芯片附近温度上升得比较快。我用手持热电偶测了一下电感表面温度几分钟就到了70℃以上。问题核心是电感选型偏保守饱和电流余量不足。均衡电流在800mA时电感峰值电流已经接近标称饱和电流磁芯进入非线性区不仅效率下降还伴随着机械振动引起的啸叫。我把电感换成饱和电流更大的规格并把均衡电流回调到500mA啸叫消失温度也降了下来。另外芯片底部的散热焊盘一定要好好处理PCB上对应区域要多铺铜、打过孔不能只靠引脚散热。这一点在MP2642GR-Z的规格书里应该也会强调实际板子上的表现差别很大。6. 实测数据与效果评估6.1 一组典型的均衡过程数据为了说明效果我整理了一组典型的2S均衡过程数据数据来源是调试板实测记录使用500mA均衡电流时间点电芯1电压电芯2电压压差系统状态初始3.312V3.354V-42mV启动均衡电芯2→电芯15分钟后3.320V3.345V-25mV均衡中12分钟后3.328V3.339V-11mV均衡中25分钟后3.333V3.340V-7mV停止均衡进入冷却静置30分钟后3.331V3.337V-6mV空闲压差稳定从数据可以看出有源均衡把42mV的压差收拢到6mV整个过程不到半小时而且没有产生大量废热。对于备用电源这种应用来说这个纠偏速度已经非常充裕毕竟均衡通常发生在浮充或者静置阶段不占用系统主放电时间。6.2 效率、时间与系统寿命的平衡有源均衡的效率其实没有固定值它取决于压差大小、均衡电流、电感DCR、开关频率等多个因素。我实测在压差几十毫伏、电流500mA的条件下整体效率在75%到85%之间。这个效率看起来不算特别高但要注意均衡功本就是辅助功能它的目标是让两节电芯同步而不是用均衡器给电池充电。均衡电流也不是越大越好。电流大纠偏速度快但电感损耗、开关损耗和电芯极化都会变大长时间大电流均衡对电芯寿命有一定影响。储能和备用电源系统的压差是缓慢积累的不需要像电动车快充那种秒级纠偏所以我把电流设定在500mA这个保守档位既保证了纠偏速度又不至于让均衡通道变成发热源。如果未来要扩展到更大容量的电池组比如把两串并联成大容量2S组均衡电流可以视情况提高到1A甚至更高但那时候要把散热设计重新过一遍包括电感选型和芯片铺铜都要加强。7. 常见问题速查表调试这套系统时遇到的问题我整理成一张速查表方便大家遇到类似现象时快速定位方向异常现象可能原因排查与解决思路均衡不启动压差未超阈值联锁条件未满足控制时序不对先看采样电压是否正确再看温度、充电状态等联锁条件最后查MP2642GR-Z使能时序均衡方向反了电芯电压映射关系排错核对Mid采样点的电压定义确认电芯1/电芯2与配置方向一一对应均衡反复启停停止阈值过紧缺少冷却等待增加冷却状态停止后等待足够时间再回到空闲判断必要时调整滞回窗口ADC读数跳动采样线受扰参考电压不稳滤波不足差分采样、缩短采样线、加强电源去耦、软件加中值滤波和滑动平均电感啸叫电感饱和开关频率落在音频范围更换饱和电流余量更大的电感调整PWM频率避开音频范围芯片异常发热均衡电流过大散热焊盘焊接不良降低电流档位检查散热焊盘过孔和铺铜用热电偶定位发热点均衡时电池组总电压异常波动均衡电流与主回路电流叠加检查是否在大电流充放电期间误开启了均衡加强联锁条件静置一段时间后压差重新变大电芯自放电率差异大均衡阈值太宽适当收紧启动阈值增加均衡执行频次或检查电芯本身健康状态除了这张表还有几个通用技巧值得多说一句。调试时一定把MP2642GR-Z的控制引脚全部引到测试点方便逻辑分析仪抓时序PIC32MX764F128L的留一个UART调试口把电压、状态机、压差这些参数实时打出来。有了这两个抓手几乎所有问题都能在半小时内定位而不是靠猜。做这个项目的最大体会是2S均衡不是一个高精尖功能但要把稳定不出错这四个字做到位需要在器件分工、硬件细节和软件策略三方面同时下功夫。尤其是软件状态机的滞回和冷却设计看起来不起眼实际对系统稳定性的提升是决定性的。方案的后续方向上我已经在把它扩展到4S和8S架构底层逻辑不变主要增加级联控制和处理更多电芯的电压采样。手里有类似项目的朋友随时可以拿这套思路做参考。
阅读完成 · 觉得有帮助?
咨询建站