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

蓄电池并联SOC均衡策略:自适应下垂控制原理与Simulink仿真

蓄电池并联SOC均衡策略:自适应下垂控制原理与Simulink仿真 ★ FEATURED ARTICLE
前段时间在调一个两组蓄电池并联供电的Simulink模型时我差点被一个现象搞到失眠下垂控制的下垂特性明明完全对称两组电池的参数也设得一模一样可是仿真跑久了SOC荷电状态的差距就是拉不回同一水平。后来把问题拆开才发现这正是“基于下垂控制的蓄电池SOC均衡策略”里最经典、也最容易踩进去的坑——下垂控制天然只能管功率分配比例管不了电量命运。这篇文章不打算给你贴一堆晦涩的数学推导。我想用自己调模型的过程把这件事讲清楚为什么两组蓄电池并着并着就会“贫富分化”怎么改造下垂系数才能让SOC自己往一处走在MATLAB/Simulink里到底怎么搭、怎么调参数、怎么从波形里判断策略有没有生效如果你正在做微电网储能仿真、直流微电网并联DC/DC控制或者电池储能系统PCS控制这篇东西应该能帮你少走不少弯路。1. 为什么并联蓄电池组的SOC会越跑越偏1.1 下垂控制的初衷把“接力赛”变成“拔河”下垂控制最早是从同步发电机的调速特性里搬过来的思想。发电机并联运行时大家不能各喊各的频率必须有一条共同的“公共母线”。在这条母线上所有电源的电压是同一个值输出电流则根据各自的“下垂阻抗”自然分配。写成最简单的外特性就是V_out V_ref - R_d × I_out其中V_out是变换器端口电压V_ref是空载参考电压R_d是下垂系数I_out是输出电流。这个公式翻译成人话就是谁出力出得多谁的端口电压就往下掉得狠一些于是公共母线会逼着它少出点力。R_d越大这台设备分摊到的电流越小R_d越小分摊到的电流越大。如果把两台蓄电池通过DC/DC变换器并联到同一根直流母线上下垂控制就能让它们按R_d的反比来分电流不需要互相通信也不会出现环流打架的问题。这正是它在工程中一直被青睐的原因——本质上是把并联电源之间的竞争关系变成了一场有纪律的拔河。1.2 失衡的三个来源初始差、线路差、特性差但是这里有三个问题下垂控制本身管不了。第一初始SOC不同。电池在安装、维修、部分更换之后各组的剩余电量几乎不可能一样有的90%有的80%一上来就差10个百分点。第二线路阻抗和变换器效率不同。母线到两组电池的电缆长度不同接触电阻不同DC/DC变换器的开关管导通压降也不同这些都会让“真实下垂系数”出现细微差异哪怕你在模型里把R_d设成同一个值。第三电池自身特性不一致。新旧电池的内阻不一样容量衰减程度不一样极化特性也不一样。两个“名义上同容量”的电池在实际放电过程中端电压随SOC下降的速率完全不同。这些问题叠加之后你会看到这样一个结果SOC高的电池出力的意愿和别人一样大SOC低的电池也不会因为自己“电量见底”而少出力。于是高SOC的被慢慢耗低SOC的也在被慢慢耗两者的差值就一直原封不动地保留着。更麻烦的是如果R_d因为线路阻抗不一致而略有差别差值甚至会越拉越大。1.3 传统下垂控制对SOC失衡“无能为力”的根本原因原因其实很直白传统下垂控制的外特性里没有任何一个环节读取了SOC。它只关注V_out和I_out这两个电气量而SOC是积分量、慢变量根本进不了它的反馈环。就像一个出租车调度中心永远只看每辆车当前位置和车速却完全不知道每辆车还剩多少油——那当然会有车子半路抛锚。所以“基于下垂控制的SOC均衡策略”本质上做的事情只有一件把SOC加进下垂系数的计算公式让下垂系数不再是定值而是SOC的函数。用工程点的说法就是给传统的静态下垂加一条“电量感知”的动态外特性。2. 让下垂系数跟着SOC走均衡策略的核心设计思路2.1 从固定下垂到自适应下垂关键就在一个函数现在我们把下垂系数的定义改一下V_out V_ref - R_d(SOC) × I_out原来那个固定的R_d现在变成了一个随SOC变化的量。那么问题来了这个函数应该长什么样思路并不复杂。放电模式下我们希望SOC高的电池多出力SOC低的电池少出力。根据下垂特性的公式想要“多出力”就要让R_d变小想要“少出力”就要让R_d变大。所以放电时R_d应该和SOC负相关SOC越高R_d越小SOC越低R_d越大。反过来充电模式下逻辑刚好掉转SOC低的应该多充电所以它的R_d要小SOC高的应该少充电所以它的R_d要大此时R_d和SOC正相关。为了在模型里好实现最经典的做法是把它写成幂函数形式放电模式R_d R_0 / (SOC^n)充电模式R_d R_0 × SOC^n这里n是一个大于1的指数用来控制均衡强度。n越大SOC对下垂系数的影响越剧烈均衡速度越快但母线电压的跌落/抬升也会更明显。R_0是基准下垂系数相当于SOC 1时的下垂值决定了系统在接近满电时的基本均流能力。2.2 线性、指数与分段策略的横向对比有人说那我直接用线性函数R_d R_min (R_max - R_min)×(1 - SOC)不也一样确实能用效果也不会太差但三种常见策略各有脾气。策略类型典型表达式收敛速度母线电压偏差实现难度线性映射R_d R_min (R_max - R_min)×(1 - SOC)中中等低一个Gain块加减法器就能完成指数映射R_d R_0 × e^(-k×SOC)快较大低Simulink自带exp模块幂函数映射R_d R_0 / (SOC^n)很快较大低但SOC接近0时容易爆炸分段映射不同SOC区间用不同参数可调可控中需要逻辑判断我在实测里的感受是线性策略最温柔波形好预测SOC接近一致后不会出现大幅度的参数抖动指数策略和幂函数策略收敛快但SOC很低的时候R_d会被推得特别大导致这个端口的电压被压得很低严重时甚至会触发电网侧的低压保护。所以我的建议是第一版模型用线性先跑通逻辑再换幂函数/指数策略做优化。不要一上来就上猛药。2.3 边界保护SOC限幅、下垂系数上下限、参考电压微调SOC本身有几个天然的边界问题。首先是SOC不能到0或者1不然幂函数那一路在SOC0时直接除以0模型报错。工程上一般在SOC进入0.1~0.9这个区间之外时把SOC值钳位住再参与计算。其次R_d不能无限大否则对应电池会直接退出出力母线电压被另外一组硬生生拉满对系统稳定性很不利。所以需要给R_d设下限和上限R_d_min保证重载时输出能力足够母线电压不会塌得太狠R_d_max保证轻载时不会出现某台变换器几乎不出力的极端情况另外还有一个可选的微调项就是让V_ref也随SOC做小幅度修正。比如SOC偏低时把V_ref略微调低一点进一步压低它的出力SOC偏高时把V_ref略微抬高一点让它多扛一些负载。不过这个操作要非常克制因为V_ref一旦改动公共母线电压的整体水平也会跟着动调得不好反而会引起其他负载的电压问题。3. Simulink模型搭建从器件选型到控制环落地3.1 蓄电池模型用自带模型还是自己搭MATLAB/Simulink里做这类仿真我推荐直接使用Simscape Electrical里的Battery (Table-Based)模型而不是自己用受控电压源搭一个戴维南等效。原因很现实Table-Based模型内置了SOC计算、温度影响、内阻随SOC变化的映射关系你只需要填一张表它就能输出电流积分后的SOC。自己搭的话SOC计算、安时积分、开路电压查表全都要手动做稍微疏忽一个初值问题结果就完全没法看。参数设置上如果你要仿真两组100Ah的电池标称电压可以考虑按360V设置大约100节3.6V电芯串联初始SOC分别设成0.9和0.8。内阻参数可以用系统默认的也可以在“Battery internal resistance”表格里改成随SOC变化的多维表。这里额外提醒一句如果两组电池的容量不一样比如一组是100Ah、另一组是120Ah那你必须按容量归一化来看SOC而不是直接对比SOC的绝对值后面我会专门说这个坑。3.2 双向DC/DC与PCS环节的搭建方式储能单元并联到直流母线通常经过一级双向DC/DCBuck-Boost变换器。仿真模型里可以用Simscape的MOSFET/IGBT开关模型也可以用简化模型——直接用受控电压源加内阻来等效变换器的外特性。我个人的建议是第一版用简化模型把精力放在控制逻辑上等均衡策略跑通了再换开关模型看纹波和谐波。控制架构走经典双环外环电压环参考值来自下垂特性计算出的V_ref - R_d×I_out输出电流指令内环电流环PI调节器输出PWM占空比请注意均衡策略在这里并不需要推翻双环架构它改的只是外环参考电压的生成方式。也就是说把原本常数形式的V_ref改成一个“V_ref - R_d(SOC)×I_out”的实时运算模块。这让改造工作量大大降低也是这个策略在工程上能被广泛接受的重要原因——不需要重新设计控制器结构。3.3 SOC计算与下垂系数生成一份可以直接复制的MATLAB Function在Simulink里放一个MATLAB Function模块输入是SOC和电流方向判断量输出就是R_d。下面是放电/充电模式下幂函数策略的具体实现我调通过可以直接抄function Rd droop_calc(SOC, I_out, R0, Rd_min, Rd_max, n) % 基于SOC的自适应下垂系数计算 % SOC: 电池荷电状态范围0~1 % I_out: 变换器输出电流正值为放电负值为充电 % R0: 基准下垂系数建议0.02~0.05 % Rd_min, Rd_max: 下垂系数限幅 % n: 均衡强度指数建议1~3 % SOC钳位防止幂函数越界 SOC_c min(max(SOC, 0.05), 0.95); if I_out 0 % 放电模式SOC越高下垂系数越小出力越大 Rd_raw R0 / (SOC_c^n); else % 充电模式SOC越低下垂系数越小充电越猛 Rd_raw R0 * (SOC_c^n); end % 限幅 Rd min(max(Rd_raw, Rd_min), Rd_max); end这段代码逻辑很简单但有两个细节值得说明。第一放电模式与充电模式的切换判断用的是I_out的符号而不是SOC的变化方向因为Simulink仿真里电流方向更容易直接从母线接口拿到。第二SOC钳位用的是0.05和0.95不是0和1这是故意留出的安全裕量防止模型在极端SOC下把R_d推到限幅值之外。说实话我自己第一版就是没做钳位SOC跑到0.02附近时R_d直接冲到几十欧母线电压当场被拉崩波形直接飞了。加了钳位和限幅之后模型随便跑都不会出数值爆炸的问题。3.4 电压环参考值合并别让代数环坑了你把R_d算出来之后再生成外环参考电压V_ref_adaptive V_ref - R_d × I_out然后在Simulink里用加法器和乘法器搭出来。这里最容易出问题的是代数环——R_d依赖于I_outI_out又依赖于V_ref_adaptive而V_ref_adaptive又反过来包含I_out如果直接连线Simulink会在每个仿真步长里去迭代求解这个隐式方程速度慢且容易不收敛。我解决的办法是加一个Memory块或者选用离散求解器把I_out反馈回路断开一个步长。具体操作I_out先用Demux从总线里取出来经过一个单位延迟Unit Delay后再返回去参与R_d和V_ref的计算。这样牺牲了一个步长的“实时性”但对仿真的稳定性帮助极大尤其是SOC变化本身很慢一个步长的滞后完全不影响均衡效果。4. 仿真结果解读均衡速度与母线电压的取舍4.1 一组可以直接上手的默认参数如果你不想从头摸索参数可以先照这张表把仿真搭起来。参数推荐值说明电池容量100Ah验证逻辑时可临时改为几个Ah容量越小SOC变化越快仿真不用跑几小时标称电压360V100节3.6V电芯串联初始SOCA组0.9B组0.8故意制造10%的初始差异直流母线参考电压400V留出升压裕量基准下垂系数R_00.03按母线电压和最大电流的3%~5%压降折算下半垂系数R_d_min0.005防止重载时电压塌陷上限下垂系数R_d_max0.5防止轻载时退出出力均衡强度指数n2起步推荐值负载恒定10kW电阻用电阻负载便于观察电压跌落仿真时间100秒小容量模式下真实容量下需跑几小时才能看到SOC明显变化这里有个仿真技巧我要专门讲一下。真实100Ah电池10kW负载下两个百分点SOC的变化可能要跑几十分钟仿真时间拉太长不现实。所以我在做算法验证时会把电池容量临时从100Ah改成3~5Ah这样几十秒的仿真就能看到SOC曲线明显拉开、再收敛的完整过程。等算法逻辑验证无误后再把容量改回真实值复跑一次确认动态特性。4.2 波形怎么看三种策略的SOC、输出电流与母线电压仿真跑完重点盯三个波形两组电池的SOC曲线、输出电流曲线、直流母线电压曲线。无均衡策略时固定下垂SOC两条曲线近似平行10%的差距从头保持到尾。线性自适应策略放电初期A组电流大于B组B组SOC下降变缓随着SOC差距缩小电流差值逐渐减小两条SOC曲线慢慢靠拢。幂函数/指数策略SOC曲线收敛更快但B组电流会一度被压得很低母线电压会出现一个几伏的短暂跌落如果负载比较重这个跌落会更明显。母线电压波形的评估标准很简单波动范围必须落在负载允许的范围内一般直流母线控制在±5%以内400V母线就意味着380V~420V。如果均衡策略导致的电压跌落超出这个范围那说明R_d_max太大或n太大需要往回调。4.3 SOC迟迟不收敛最常用的几个调试方向模型搭完跑一跑最常见的现象是“SOC在动但就是不往一处去”。这时候按下面顺序排查通常能快速定位。下垂系数上下限设得不对。R_d_max太小均衡力就弱R_d_min太大系统本身就分流不均。负载太轻。两三百瓦的负载下均衡电流只有零点几安培SOC变化当然慢得像蜗牛。这时候可以临时加大负载或者减小仿真容量先把收敛逻辑验证了再说。电流环饱和。内环PI限幅设置不当导致外环的电流指令根本没执行出来。看一下电流波形有没有“顶到天花板”就知道。SOC信号噪声过大。安时积分法在SOC反馈中加入测量噪声时会传递到R_d的计算里造成下垂系数抖动。解决办法是在SOC进入MATLAB Function之前加一个低通滤波时间常数设成1~5秒即可。I_out方向判断错误。充电模式下如果符号没翻过来策略会反着干活——高SOC电池拼命充电、低SOC电池拼命放电两边的SOC会越来越分岔而不是收敛。检查电流符号定义与模型中电流传感器的参考方向是否一致。这几条里最后一条是我见过最多人踩的坑。Simscape里电流方向、DC/DC变换器的端口方向、电流传感器方向三者一旦对不上整整一个上午都可能耗在这上面。5. 从仿真到工程落地的几个真实教训5.1 容量不一致才是常态SOC绝对值不能直接比仿真模型里两组电池的容量参数往往一模一样但实际工程中经过几百次充放电循环后电池的容量衰减程度完全不同。可能有用的概念是按SOC归一化处理本质上是把当前剩余电量除以当前实际容量而不是除以出厂标称容量。否则一组衰减严重的旧电池虽然SOC算出来是90%但实际剩余能量可能远低于另一组标称容量更大的电池。所以工程上判断“均衡是否完成”标准不能是“SOC完全相等”而应该是“SOC之差收敛到一个允许范围”比如5%以内。追求绝对相等会让系统频繁地大幅调节各端口出力反而加剧电池循环寿命损耗。5.2 通信延时与SOC刷新率仿真是理想值工程要面对延时Simulink仿真里SOC是连续实时算出来的但工程中BMS电池管理系统上报SOC往往有固定的刷新周期1秒到10秒不等。这意味着你的均衡控制器看到的SOC永远是上一拍的旧值。这个延时本身不会让系统发散但会让R_d的变化滞后等效于给均衡回路增加了一个大惯性环节。我当时在一个模拟项目里做过测试SOC刷新率从1秒降到10秒均衡收敛时间大约增加了20%~30%。应对办法有两种一是适当增大n值补偿滞后带来的“迟钝”二是用零阶保持器把刷新延时也建模进仿真里这样控制参数才是按真实系统调出来的而不是按理想系统调出来的。5.3 母线电压允许波动范围决定了均衡策略的上限这是我最想强调的一点。很多人设计SOC均衡策略时满脑子都是“怎么收敛更快”结果把下垂系数上限拉得过高母线电压波动超出了负载容许范围整个系统被电压保护动作干停。母线电压约束才是均衡策略真正的天花板。比如400V直流母线允许±5%波动那意味着最坏情况下单组电池的下垂压降不能超过20V。折算到下垂系数上就是R_d_max × I_max ≤ 20V。你手上的负载最大电流一旦确定R_d_max的上限就被定死了无论SOC偏差多大都不能突破这个值。懂得这个逻辑之后你再回头看那些文献里的自适应下垂策略就不会再被花哨的公式绕晕本质上都是在“电压约束”的笼子里跳舞。最后说句实在话。如果让我重做一次类似的项目我第一步就会把SOC观测误差和容量不一致直接放进模型里而不是等到算法调通之后再补。因为真正限制均衡策略上限的往往不是什么精妙的数学公式而是母线电压约束和SOC测量精度这两个最枯燥也最真实的边界条件。先把它们框住剩下的工作只是在这个笼子里把曲线调好看而已连仿真都会跑得顺畅很多。
阅读完成 · 觉得有帮助?
咨询建站