储能BMS电池均衡实战:主动均衡拓扑、参数计算与调试经验
发布时间:2026/10/16 4:49:09 锦皓数字建站

前阵子做储能项目的BMS被两组串联电池单元的压差问题折腾得够呛。电芯出厂参数明明一致系统上电时两组电压也差不多可跑了几十个循环后静置状态下的压差就慢慢拉到了200mV以上整柜可充放电容量肉眼可见地缩水。最后敲定的方案是用MP2642GR-Z做均衡功率级、STM32L152RE做采样和决策把高压单元的能量一点一点搬给低压单元。这篇文章把从拓扑选择、参数计算到软件策略和调试踩坑的完整过程写下来给做储能BMS、备用电源管理的同行做个参考。如果你正在纠结用被动均衡还是主动均衡或者面对两个串联的电池包不知道怎么处理又或者拿到一颗DC-DC芯片想把它改造成能量转移均衡器这篇应该都能帮到你。文中涉及的采样精度问题、滞回控制、超时保护这些点都是实际项目中绕不开的细节我会把推导过程和现场记录都放出来。1. 两个串联电池单元为什么也要专门做均衡1.1 先看串联电池组的“木桶效应”先从一个最基础的现象说起。两个电池单元串联回路里流过的电流完全相同所以充进去的电荷量、放出来的电荷量也是一样的。但问题在于两个单元的可用容量不一定一样老化速度也不一样。充电时容量小的单元会先达到充电截止电压。为了保护电池系统只能停止充电这时候容量大的单元还没充满。放电时容量小的单元先降到放电截止电压系统又得停止放电容量大的单元还剩不少电没用出来。整个系统能用的电量永远被容量最小的那个单元限制住这就叫“木桶效应”。用生活里的例子类比就是两个水桶串在一起装水决定总装水量的不是最大的桶而是最小的桶。储能系统里这种浪费尤其可惜因为设备按整柜容量标称用户付的是全额的钱实际可用的却打了折扣。更麻烦的是恶性循环。容量小的单元每次循环都会比容量大的单元承受更深的充放电区间老化速度更快压差越来越大木桶短板越来越短。如果放任不管整套系统的寿命会被这个“短板单元”直接拖垮。1.2 储能和备电场景里为什么会出现两个串联单元有人可能会问电芯不均衡我理解但标题里说的是“电池单元”而不是“电芯”。确实在很多储能和备用电源系统里结构并不是“一堆电芯直接串联成整组”而是先封装成两个独立的电池包再串联成母线电压。比如家用储能柜里母线电压是48V柜内可能放两组24V电池包串联备用电源系统里常见两组12V电池串联成24V给设备供电。每个电池包内部可能已经有自己的电芯均衡但包与包之间是老死不相往来的各自的BMS独立工作散热条件不一样充放电循环次数也可能不一样时间一长两个包之间的不均衡就被放大了。这种单元级不均衡的代价比电芯级不均衡更直观。单元容量差异3%的时候整系统可用容量可能损失超过10%。如果差异超过10%系统甚至会出现“小单元过充、大单元长期吃不饱”的危险状态。所以单元之间的均衡不是锦上添花而是必须做的维护性功能。2. 均衡拓扑与芯片选型思路2.1 被动均衡和主动均衡怎么选一张表看明白均衡的本质是让两个单元的电压或荷电状态(SOC)趋于一致。实现手段大致分两类被动均衡和主动均衡。被动均衡很好理解就是给高电压单元并联一个电阻多余的能量以热量的形式耗散掉。优点是电路极简、成本低、技术成熟电芯级BMS里大量使用。缺点也很明显能量白白浪费了均衡电流大一点发热就吃不消而且它只能“削高”不能“补低”削下来的能量也没法给另一侧用。主动均衡则相反通过功率变换电路把能量从高电压单元搬到低电压单元属于“取高补低”。能量没有浪费效率可以达到90%以上均衡电流也能做得比较大。代价是电路复杂、成本高、控制策略需要仔细设计。对比项被动均衡电阻耗散主动均衡能量转移能量去向变成热量散掉转移到低电压单元均衡电流能力受散热限制一般在100mA以下可以做到几百mA甚至A级电路复杂度低一颗MOS加一颗电阻中高需要功率级和控制逻辑成本低较高适用场景小容量电芯级均衡大容量单元级均衡、储能/备电为什么储能和备用电源系统更适合主动均衡因为这两个场景对能量利用率和系统寿命非常敏感被动均衡那种“耗电求平衡”的方式在几十Ah甚至上百Ah的电池包面前完全不够看。均衡电流如果只有几十毫安面对上百mV的压差可能要均衡十几个小时才能见效实用性很差。主动均衡能做到数百毫安级别同时能量不外耗这才是大容量场景的正解。2.2 为什么是MP2642GR-Z加STM32L152RE的组合确定走主动均衡路线后最关键的问题就是用什么芯片实现“能量搬移”。市面上的方案有分立MOS加电感自己搭、专用均衡芯片、还有拿现成的DC-DC控制器来做功率级。我们最后选了MP2642GR-Z作为均衡功率级STM32L152RE作为主控分工很明确。MP2642GR-Z这颗芯片集成了同步整流功率级本质上是一个完整的半桥驱动方案配一个储能电感和少量外围就能组成高效的Buck/Boost拓扑。这对主动均衡特别合适均衡的核心就是“把某一侧的能量先存进电感再释放到另一侧”本质上就是一个非隔离双向变换器。用这颗芯片做功率级省掉了自己搭半桥驱动和同步整流的麻烦可靠性也更高。选STM32L152RE做主控理由更直接。均衡判定依赖电压采集而电压采集需要高分辨率、低噪声的ADC。L152RE内置12位ADC配合DMA可以连续扫描多个采样通道不用CPU频繁介入。再加上它本身是超低功耗系列储能设备长期待机时电流可以压得很低符合备用电源对静态功耗的要求。内部有足够Flash存校准参数掉电不丢失。综合下来这套组合既有执行能力又有决策能力均衡效果才有保障。3. 硬件电路核心设计与参数计算3.1 电压采样链路均衡精度的生死线主动均衡做得好不好首先取决于你“看”得准不准。如果电压采样误差有20mV均衡判定的任何阈值都是笑话。串联结构里两个电池单元共用一个中点采样拓扑很简单一路测上单元正极到中点一路测中点到下单元负极必要时再测总电压。我这里以两个12V单元组成的24V系统为例展开。ADC输入范围通常受限直接采12V电压是不行的必须分压。分压电阻的选型有讲究阻值不能太大否则ADC输入阻抗会引入误差也不能太小否则分压网络本身一直在耗电。我用的总阻抗大概在10kΩ级别配合STM32L152的ADC输入阻抗完全够用同时静态损耗也在可接受范围。分压比按下式折算实际电压 ADC读数 × 参考电压 ÷ 4096 × 分压比。比如参考电压3.3VADC读数2048分压比4那么实际电压就是3.3 × 2048 / 4096 × 4 ≈ 6.6V。这个计算要固化到固件里并且一定要留校准接口。ADC的参考电压选择也很关键。STM32L152内部有个VREFINT但用来做绝对电压测量精度一般温漂也偏大。我们实际做法是用外部基准或者用VDDA供电并单独滤波。调试中发现参考电压即使只是0.1V的偏差折算到12V量程上就是0.4V误差这种误差会直接毁掉均衡判断所以这一块不能省。采样线路上还要加RC低通滤波我用的100Ω串100nF截止频率大约16kHz主要滤掉均衡功率级开关带来的纹波。采样走线一定要远离功率回路最好单独走差分线否则板上开关噪声耦合进来ADC读数会跳得让你怀疑人生。3.2 均衡功率级电流设定与电感参数MP2642GR-Z作为功率级外围最重要的两个参数是均衡电流和储能电感。均衡电流定多少取决于电池容量和可用的均衡时间。我按均衡电流0.3A来设计。这个电流下如果两个单元压差200mV理论上每小时能搬运0.3A × 3600秒 1080库仑电量约0.3Ah换算成电压变化大约几十毫伏几个小时内能把明显的压差拉回到合理范围。电流再大当然更快但电感、MOS管和PCB的发热压力都会上来对长时间运行的可靠性不利。电感值的计算要用Buck/Boost的经典公式。假定输入电压Vin13V输出电压Vout11V开关频率fsw500kHz允许的电流纹波取均衡电流的20%即ΔI0.06A。占空比D≈Vout/Vin≈0.85那么电感值L(Vin−Vout)×D/(fsw×ΔI)(13−11)×0.85/(500000×0.06)≈56.7μH。我实际选了68μH留了一点裕量纹波比理论值更小对采样干扰也更低。电流采样用输出端的低阻采样电阻加反馈网络实现恒流控制。采样电阻0.1Ω反馈阈值电压30mV对应0.3A均衡电流。如果要调整电流只需要软件改PWM占空比或硬件调反馈分压就行。调试时建议先从小电流开始确认方向无误后再逐步提高到目标值。PCB布局上有个注意事项MP2642GR-Z的功率回路要尽量短粗电感要远离模拟采样区。功率线一分米外的采样走线和功率线旁边的采样走线测出来的噪声完全是两个级别这一点直接影响后面的压差判定。3.3 主控系统与安全保护设计主控系统以STM32L152RE为核心供电、复位、时钟、调试接口四件套配齐。供电直接由系统母线通过降压稳压得到3.3V复位电路用外部看门狗配合内部独立看门狗双保险。调试接口在量产板上保留但不引出到外部壳体方便产线校准。保护电路是储能设备的重中之重。均衡通道的输入和输出都要做过压、欠压判断。我设置了两个硬性保护条件单元电压超过14.5V或低于10V时直接禁止均衡持续工作温度超过65℃时功率级强制关断。这些保护除了在MCU软件里做还通过硬件比较器直接接到MP2642GR-Z的使能脚即使MCU死机也不影响安全关断。和上位BMS的联动也要考虑。我们的系统在外部BMS发出故障信号时会通过硬线信号切断均衡功率级不经过软件处理从信号到动作的延时在微秒级别。因为均衡本来就是锦上添花的功能在不安全的状态下宁可不去均衡也不能给电池带来额外风险。4. 软件架构与控制策略实现4.1 ADC采集与数据预处理软件架构上我习惯用一个轻量级的前后台系统主循环负责均衡状态机、策略判定和异常处理定时器中断里触发ADC采样DMA把结果搬运到内存缓冲区完全不阻塞CPU。ADC采样配置成扫描模式三个通道分别对应上单元电压、下单元电压、温度。温度用NTC热敏电阻通过分压进采样。为了消除噪声每次采集16个样本去掉最大最小值后取平均。这种“去极值平均”的滤波方法对尖峰干扰特别有效而且不会像普通滑动平均那样把真实的电压变化拖得过于迟钝。换算公式如下float ConvertVoltage(uint16_t adc_raw, float ref_voltage, float divider_ratio) { float v (float)adc_raw * ref_voltage / 4096.0f * divider_ratio; return v; }校准环节绝对不能少。板上电后用高精度万用表实测两节单元电压和MCU读出来的值对比算出增益误差和偏移误差写进Flash。我实测下来不做校准时两路采样可能差15mV左右做完校准能压到3mV以内。这个精度对均衡判定才是有意义的。4.2 均衡启动判定与滞回控制均衡策略上我采用的是“静置均衡”为主系统处于既不充电也不放电的静置状态时电压才近似等于开路电压OCV这时候的电压差异才能可靠反映SOC差异。带载时电池内阻会制造虚假压差这时候去均衡反而会误判。启动条件整理如下系统静置时间超过30秒充电和放电电流都小于0.5A上单元电压与下单元电压之差的绝对值大于启动阈值温度正常无任何故障标志均衡超时计时器未耗尽启动阈值我一开始设的是30mV后来改到50mV。原因后面调试部分细说。停止条件则是压差小于20mV或者均衡持续时间超过8小时又或者系统检测到超过1A的充放电电流。这里有一个细节很关键滞回控制。启动阈值50mV停止阈值20mV两个值之间留了30mV的缓冲。如果启动和停止阈值设成同一个值在临界点附近会出现“均衡一下、停一下、再均衡”的振荡MOS管和电感反复冲击发热和应力都不健康。加上滞回振荡问题就自然消失了。4.3 均衡状态机与保护逻辑状态机是整个软件的核心我定义了六个状态空闲、静置监测、充电中、放电中、均衡运行、均衡超时保护。状态转移条件如下表当前状态转移条件下一状态空闲检测到充电电流充电中空闲检测到放电电流放电中空闲静置满足且压差大于启动阈值均衡运行充电中/放电中电流恢复正常静置超30秒静置监测均衡运行压差小于停止阈值空闲均衡运行均衡时间超过8小时超时保护超时保护人工清除或系统重新上电空闲均衡运行状态下软件通过PWM控制功率级的占空比实现软启动和稳流。启动时先把均衡电流限制在设定值的50%运行1秒后提到100%避免上电瞬间的电流冲击。停止时也做斜坡降流不直接切断。这个细节让电感和电容上的振铃小了很多。均衡超时保护非常重要。如果系统判断“需要均衡”却始终达不到停止条件可能是电池已经损坏或者采样出问题这时候不能让它无限跑下去。8小时超时后状态机会进入保护状态并报故障需要人工介入检查。这个设计在实际项目中救了我一次有一颗电池内部微短路均衡一直拉不平如果没有超时保护功率级会一直满载运行发热。代码骨架大概是这个风格typedef enum { STATE_IDLE, STATE_STANDBY, STATE_CHARGING, STATE_DISCHARGING, STATE_EQ_RUN, STATE_EQ_TIMEOUT } BmsState; BmsState current_state STATE_IDLE; void BmsStateMachine(void) { float v1 ReadCellVoltage(CELL_UPPER); float v2 ReadCellVoltage(CELL_LOWER); float diff v1 - v2; switch (current_state) { case STATE_IDLE: if (diff EQ_START_THRESHOLD) { EnableEqualizer(1); current_state STATE_EQ_RUN; } break; case STATE_EQ_RUN: if (fabsf(diff) EQ_STOP_THRESHOLD) { DisableEqualizer(); current_state STATE_IDLE; } break; /* 其他状态类似处理 */ } }实际工程代码会比这个长不少但核心逻辑就是这张状态表。清晰的状态机让代码可维护性高很多后续加新功能也不用担心把策略逻辑改乱。4.4 温度降额与多机协调储能机柜里可能不止一组电池均衡策略上需要考虑温度差异的影响。两个电池单元通常会分布在机柜的不同位置散热条件不同同一时刻的温度可能差不少。电压和温度是强相关的低温单元电压偏低但并不意味着它的SOC真的低。我加了温度降额逻辑如果两个单元温差大于5℃把启动阈值临时提高到80mV优先让温差回落再谈均衡。如果温度超过55℃均衡电流自动降为设定值的50%超65℃彻底关闭。这个逻辑用一次简单的分段函数实现不需要复杂的模型但能避免很多误判。多机协调方面我们的方案是每套均衡系统独立工作但不和主BMS抢控制权。高端BMS下达的充放电指令优先级高于均衡状态机系统一旦进入大功率充放电状态均衡立刻挂起。道理很简单均衡是在“空闲时间”做的事情不能干扰主功能。5. 实测数据与调试心得5.1 均衡前后的压差变化整机调通后我专门做了72小时连续均衡测试。测试对象是两个标称12V的铅炭电池单元一个静置电压12.85V一个12.63V初始压差220mV。测试记录如下时间点上单元电压下单元电压压差说明起始12.85V12.63V220mV均衡启动1小时后12.78V12.70V80mV压差快速缩小2小时后12.74V12.71V30mV接近停止阈值3小时后12.73V12.71V20mV均衡自动停止24小时后12.73V12.72V10mV静置回弹后仍稳定72小时后12.74V12.72V20mV无明显反弹最明显的感觉是均衡过程前期速度快后期变慢。原因是恒流均衡模式下单位时间搬运的电量相同但同样的电量在低压差阶段引起的电压变化更小因为充电曲线的斜率在平台区更平缓。这很正常不要指望主动均衡能把压差做到0mV能稳定在20mV以内已经非常理想。5.2 调试中遇到的三个核心问题第一个问题ADC采样读数总比万用表低将近20mV。排查了一圈发现是分压电阻用了5%精度的普通电阻两颗电阻的误差叠加起来足以造成这么大的偏差。解决办法是把分压网络换成了0.1%精度电阻并在固件里做了两点校准。这事给我提了个醒均衡系统的精度瓶颈经常在最不起眼的分压电阻上。第二个问题临界点附近的均衡振荡。第一次实测时我把启动阈值和停止阈值都设成30mV结果系统在26mV到34mV之间反复启动、停止功率级的开关频率和温度都有明显波动。引入50mV启动/20mV停止的滞回区间后问题彻底消失。这个经验后来也用到其他项目的阈值设计上。第三个问题均衡MOS管和电感温度偏高。0.3A均衡电流设计值下实测温度到了70℃以上明显超出预期。拆开分析发现是PCB功率回路走线过长寄生电感导致开关损耗增大。重新布局铺铜将功率回路面积缩小到原来的三分之一后温度降到了50℃以内。这类问题在低压大电流电路里非常典型板级布局对效率的影响往往比芯片本身更大。5.3 参数调优的经验值几轮测试下来我最终定的参数组合是均衡启动阈值50mV停止阈值20mV均衡电流0.3A最长均衡时间8小时温度保护65℃。如果你的系统电池容量更大或者对均衡速度有更高要求可以把电流往上调但每增加0.1A均衡电流都需要重新核算电感和MOS管的散热。散热不够就降低电流不要硬扛。6. 常见问题排查速查现象可能原因解决办法均衡从未启动过压差采样误差大实际压差未触发阈值校准ADC检查分压电阻精度均衡一直运行不停止停止阈值设太低电池损坏均衡时间上限未生效检查压差数据确认超时保护是否开启均衡时系统电压波动大软启动未做或功率级关断过急增加启停斜坡控制采样读数跳动明显采样走线靠近功率回路重新布局增加RC滤波电容功率级过热电感选小了或回路面积太大增大电感缩小功率回路面积均衡效果不明显均衡电流太小或者本来就是电池组内故障实测均衡电流确认功率级是否真正工作上电后ADC读数异常参考电压不稳检查VDDA滤波考虑外部基准排查问题切忌只盯软件或者只盯硬件均衡系统是软硬件的交叉体很大概率问题出在采样上而不是功率上。多准备一块高精度万用表直接把电压读数打到芯片侧的ADC引脚上从源头一级一级缩小范围效率最高。写在最后的实际操作体会项目做到现在我最深的体会是均衡系统真正的难点不在那颗功率芯片而在采样精度和控制逻辑的细节里。MP2642GR-Z的功率级表现很稳定反而是采样链路让我折腾了最久。如果重新做一版我会在硬件设计阶段就直接预留外部基准和校准接口而不是依赖封装内部的参考这样能省掉大量后期校准的返工。最后分享一个调试技巧对比两个单元电压时用两块高精度万用表同时测量比一块表轮流测量更靠谱。轮流测会引入时间差而两块表同时读才能抓到同一时刻的真实压差。这个细节看起来不起眼但排查采样问题时能帮你少绕很大一圈弯路。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。