ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

风储联合调频Simulink仿真建模:一次调频与虚拟惯量控制解析

风储联合调频Simulink仿真建模:一次调频与虚拟惯量控制解析 1. 风电场为什么要做调频改造频率波动的物理机制与考核压力先聊一个很多人做仿真时容易忽略的底层问题。咱们在Simulink里搭风储联合模型本质上是想回答一个问题风电场到底凭什么参与系统调频电网频率这个量最直观的物理意义就是发电和负荷的实时平衡。系统里的同步发电机转子是一个整体负荷突然增加机械功率跟不上电功率转子减速频率往下掉。反过来负荷减少转子加速频率往上飙。传统火电、水电因为转子上带着巨大的转动惯量天然就是系统频率的“压舱石”。所以一次调频的本质是用同步机的旋转动能先顶着然后调速器动作把转速偏差映射成机械功率增量在几秒内把频率拉回来。但风机进来以后情况就不一样了。双馈风机和直驱风机的转子通过变流器和电网连接电磁转矩和机械转矩之间隔着功率电子器件的解耦控制。你频率跌了风机的控制系统如果不主动感知它根本不会像同步机那样自动释放转动动能。这就是业内常说的“风机不具备天然惯性响应”。更麻烦的是很多风机常年跑在最大功率追踪MPPT曲线上一点备用容量都不留你让它额外发功率它还真拿不出来。所以现实中的矛盾在这一方面新能源占比越来越高系统等效惯量持续下降一次调频需求比过去更迫切另一方面风电场本身“有劲使不出”频率跌落时只能干看着。我见过不少初学者在这个地方卡壳他们以为搭个双馈风机模型再挂个储能频率波动时系统就能自己稳定实际上仿真结果完全不是那么回事。关键就在于你得先把“风机为什么需要改造才能调频”这个问题想清楚后面的模型和控制器才是有的放矢。1.1 一次调频与二次调频在仿真里怎么区分做风储联合仿真之前先把一次调频和二次调频的边界分清楚这直接决定你的模型多复杂。一次调频是秒级至十秒级的动作由调速器本地感知频率偏差后自动完成不依赖调度通信。二次调频通常由AGC在分钟级下发指令通过改变机组出力设定值来消除稳态频率偏差。咱们这篇博文里聊的风储联合主要针对一次调频因为储能和风机虚拟惯量的响应速度都在百毫秒到几秒这个范围刚好填一次调频的坑。在Simulink模型里一次调频的典型工况设置是系统稳态运行到某个工作点比如风速12m/s电网负荷刚好等于风储总出力频率稳定在50Hz。然后在某个时间点比如t5s切进去一个负荷扰动比如5%的额定负荷然后观察频率跌落深度、最低点频率、到达稳态的恢复时间这几个指标。1.2 现实中的一次调频考核对模型的映射国内不少电网区域已经对风电场提出了明确的一次调频技术要求核心考核指标可以归纳为三件事死区范围、调频响应时间、调频持续时间。把这些指标翻译成Simulink模型的参数就是频率死区通常在±0.033Hz到±0.06Hz之间对应控制器里的滞环比较或死区模块响应时间要求一般在3秒以内这决定了储能功率控制环的带宽不能太低持续调频时间通常是15秒或更长这决定了储能的容量和SOC限制条件说白了仿真模型里控制器的参数整定不是随便凑出来的而是对着实际考核指标反向倒推的。这也是为什么我建议做这个课题的人不要只盯着风机内部的电磁暂态建得有多精细而要把重点放在“频率-功率-时间”这条主线上。2. 风储联合调频的总体控制思路一次调频的“快慢分工”我见过很多版本的方案最后发现工程上最靠谱的其实是“快慢分工”策略说穿了一文不值储能负责快风机负责慢两者在频率恢复的时间尺度上各干各的活。回头看一次调频的时间轴频率跌落最初的1到2秒是最危险的阶段。这个时候火电汽轮机调速器还没完全动作起来系统里能用的只有同步机的旋转动能。风电场想在这个窗口期出力唯一的办法是让储能以毫秒级响应顶上去因为风机的机械系统有惯性变桨也好、转矩控制也好再怎么快也有几百毫秒的滞后。但储能的问题在于容量有限。你拿一个2MW·h的电池去扛10MW的功率缺额满打满算也就12分钟的事。如果储能在这个窗口期把电全放光了后面频率回升阶段的功率支撑谁来补这时候就该风机登场了。风机参与调频的方式有两种主流路线超速减载和变桨减载两条路线的本质都是让风机在正常运行时就留出一部分功率储备。超速减载的实现方式就是把风机的工作点从MPPT曲线上往右移提高转速让叶尖速比偏离最佳值这样输出功率比最大功率低一些但转速的升高意味着转子动能增加了。当频率跌落时控制风机把转速降回MPPT点附近释放这部分转子动能就能短时间增加输出功率。这条路线在Simulink里非常好实现改一下转矩控制器的查表逻辑就行响应速度也不错。变桨减载则是把桨距角从0度往大调让风能利用系数下降同样留出功率储备。但变桨的执行机构是液压或伺服系统响应速度明显慢于转矩控制通常要几秒才能完成一次动作更适合调频的持续支撑阶段而不是最初的突发支撑。储能和风机合在一起控制权的分配逻辑可以很清晰。频率偏差超出死区的瞬间储能功率环立即动作按照下垂特性输出功率这一步是毫秒级的同时风机的虚拟惯量控制启动把转子动能释放出来在2到5秒内形成第二个功率支撑波峰如果频率偏差持续超过设定阈值储能改为恒定功率模式继续支撑同时风机的超速减载备用逐步投入形成更长时间的功率输出系统频率恢复到死区以内后储能转入充电模式逐步把SOC补回来风机也恢复到MPPT运行点这个逻辑放到Simulink里就是几层嵌套的使能控制和状态切换但每一步的时间常数不同仿真时很容易出现振荡。后面我会把参数整定的思路展开讲。2.1 储能容量与风机备用的比例怎么定很多人在仿真一开始就纠结储能到底配多大容量实话实说这个没有标准答案但有一个简便估算方法。以一台风力发电机额定1.5MW为例假设要求风电场在系统频率偏差0.2Hz时能提供10%额定功率的额外支撑持续15秒。粗略算一下功率缺额就是0.15MW能量需求是0.15MW乘15秒等于2.25MJ。磷酸铁锂电池的可用容量按80%放电深度算忽略变换器效率的话电池容量至少要配到2.8MJ左右换算成电量的表达方式大约是0.78kW·h。这个估算结果并不大实际项目中绝大多数储能的配置容量都会高于这个最小值原因有两个一是要考虑SOC维持在一个健康区间比如40%到80%之间这会让你实际可用容量缩水二是储能还承担着动态无功支撑、平滑波动这些任务不能只按一次调频的极限工况来配。在这些基础上我给模型里储能容量通常取风电场装机容量的5%到10%这个比例在仿真和实际项目中都有较好的代表性。风机的超速减载备用则取5%到20%可调视风速条件而定。这两个数值往模型里一填调频特性的差异立刻就能看出来了。3. Matlab/Simulink中风力发电机组建模的模块化拆解这章是整个Simulink仿真的核心我会按照从外到内的顺序拆。搭建模型的时候我的习惯是先把每个物理环节的输入输出列清楚一个表格再逐个模块去实现这个习惯能省掉很多接线错误和单位不匹配的问题。从仿真复杂度角度考虑我推荐用永磁直驱风机做风储联合模型原因后面会讲到。整体结构大致分为几个环节风速模型、风力机、传动链、永磁同步发电机、机侧变流器、网侧变流器、控制系统。3.1 风速模型别用恒定风速仿真结论会失真风速模型是很多人偷懒的第一个地方。恒定风速做出来倒是简单但风储联合调频研究的是“功率缺额下的频率响应”风速恒定意味着风机出力恒定你只能靠控制策略去制造虚拟功率备用整个系统的动态特性就少了一块真实感。我建议至少用组合风速模型也就是基础风、渐变风、阵风、随机风四部分叠加Matlab里用几个Signal Builder或自写MATLAB Function就能实现。基础风可以设为10到12m/s对应中高风速段这个区间风机才有余量做超速减载。阵风设置在仿真时间中段用于模拟扰动。随机风用白噪声经过低通滤波器产生带宽设低一点不然你会得到一条高频抖动的风速曲线平白给自己增加调试工作量。3.2 风力机气动模型与转速-功率曲线风力机的核心公式并不复杂风功率P_wind 0.5 × ρ × π × R² × v³捕获功率P_mech P_wind × Cp(λ, β)叶尖速比λ ω_rotor × R / vCp(λ, β)用通用的非线性函数拟合不同文献的拟合系数略有差别Simulink里用MATLAB Function模块写一个四输入单输出的函数就行。关键是Cp曲线画出来之后要把最佳叶尖速比对应的λ_opt和最大Cp值标出来后面整定MPPT控制器用得着。风机额定参数建议额定功率1.5MW风轮半径35m空气密度1.225kg/m³额定风速12m/s。这几个参数代入公式额定机械转速大概在2.2rad/s左右计算出来的额定Cp大概是0.44到0.48符合主流风机的水平。3.3 传动链与永磁同步发电机模型传动链用两质量块模型最合适——风机叶轮惯量和发电机转子惯量之间通过等效刚度连接。别用单质量块因为调频研究里恰恰需要观察风机叶轮释放动能的过渡过程单质量块把这段动态就抹掉了。两质量块模型参数里叶轮惯量通常在发电机惯量的几十倍到上百倍换算成标幺值之后这个比例不能反了。永磁同步电机模型用Simulink自带的PMSG模块就可以电气参数可以从厂家资料里拿到如果没有按主流机型填一个合理的默认值也行。转子磁链、定子电感、定子电阻这些参数会直接影响机侧变流器的dq轴电流控制效果。选择永磁直驱结构的另一个原因它没有齿轮箱传动链模型比双馈机简单少了齿轮箱的刚度折算环节模型的数值稳定性更好在仿真实战里能省不少麻烦。3.4 机侧和网侧变流器是详细模型还是平均值模型变流器建模有两种路线分别适用于不同目的。详细开关模型用IGBT和PWM发生器搭三相桥这种方法能看到开关纹波和谐波特性但仿真步长必须取到微秒级甚至更小一次调频仿真动辄几十秒跑一次就要几个小时调试效率极低。平均值模型把变流器等效成一个受控电压源忽略开关过程保留电压和电流的基波关系仿真步长可以放到几毫秒甚至几十毫秒。我在做风储联合调频这个方向时用的是平均值模型个别场景如验证锁相环动态时才改用详细模型。具体到Simulink设置机侧变流器控制的目标是维持直流母线电压稳定同时控制发电机转矩实现MPPT或减载控制。网侧变流器的目标是把直流母线功率馈入电网同时控制无功功率。这两套控制都是经典的dq轴PI双闭环前馈解耦项别漏了漏了之后电流环会有耦合仿真波形会出现明显的振荡。3.5 风机惯性响应控制的实现细节风机参与调频的虚拟惯量控制我在Simulink里的具体做法是在MPPT功率指令基础上叠加一个频率偏差的微分项和比例项。公式大致是ΔP_iner -K_d × dΔf/dt - K_p × ΔfK_d对应虚拟惯量系数K_p对应频率下垂系数。在这个基础上叠加的功率指令不能直接加进去就完事还要经过限幅和SOC状态检查。限幅要跟超速减载预留的备用容量匹配不然你指令给了但风机实际发不出来控制器就会出现饱和积分器也随之进入一个大时间常数的非线性状态。到目前为止风力机一侧的模型就齐了。下面转到储能侧和整体的并网调频仿真结构。4. 储能系统建模与风储协调控制器的实现储能建模的准确程度决定了仿真结果的可靠性但也不是越复杂越好关键在于模型的复杂度和研究目的匹配。做风储调频仿真目的是分析储能与风机的协调策略而不是电池内部的电化学过程所以储能模型用一阶惯性模型或者等效电路模型就够了。4.1 储能电池模型一阶RC等效电路足够用我常用的储能模型是锂电池一阶RC等效电路一个理想电压源串联一个欧姆内阻和一个RC并联网络。这个模型用Simulink基础元件就能搭电压源的电压值可以设置为SOC的函数对应电池开路电压随荷电状态变化的特性。RC网络的时间常数决定储能的动态响应速度一般取几十毫秒到几百毫秒这个带宽要高于调频控制环的带宽否则储能的功率响应会受到电池模型本身的限制。如果你对电池动态特性要求再高一点Simulink里有Simscape Battery工具箱可以直接拖一个Battery Table Based模块填SOC-OCV曲线和不同SOC下的内阻表精度够用。但注意这个工具箱仿真速度比一阶RC模型慢不少我在大规模风电场模型里通常只给储能单元用Simplified Model类型。4.2 储能变流器模型与功率控制储能单元通过DC/DC变换器和DC/AC变流器接入交流母线。在调频仿真里DC/DC的细节模型可以简化掉直接用受控电流源形式的储能等效模型来代替——内部用一个功率控制环计算给定有功功率对应的电流指令模拟变流器的外特性。功率控制环的实现方式输入是频率偏差Δf经过下垂系数K_e得到有功功率增量再经一阶惯性环节模拟变流器的响应延迟。一阶惯性时间常数取50ms左右对应实际PCS的响应速度。限幅模块要同时限制功率变化率和最大输出功率这两个限幅要跟储能容量匹配。4.3 风储协调控制器的状态机逻辑风储协调控制器是整个模型里最需要动脑子设计的部分。我建议用状态机的方式实现因为调频过程不同阶段的控制目标完全不同。状态分成几个档位正常运行、频率跌落支撑、频率恢复、储能充电恢复。用频率偏差的大小和方向作为切换条件配合滞环逻辑防止临界状态下的振荡。正常运行状态下风机跑MPPT或超速减载模式储能在SOC目标值附近浮充。频率跌落支撑状态下储能按最大可用出力快速放电风机同时切换为虚拟惯量控制。频率恢复阶段储能逐渐减小出力避免频率出现过冲。最后是储能充电恢复阶段风机恢复MPPT运行储能以受控功率充电回到SOC目标值。状态切换的逻辑用Stateflow实现最直观里面每个状态写对应的控制指令语句就行。或者不用Stateflow用几个使能子系统配合布尔逻辑信号也能实现但代码可读性差一些。Stateflow的模型在仿真时能实时看到状态切换过程调试时优势很明显。4.4 储能SOC管理模型储能SOC的计算是仿真里最容易被忽略但掉链子的地方。简单做法是SOC等于初始SOC减去累计放电功率对时间的积分除以电池容量单位统一问题一定注意。功率单位是W时间单位是s电池容量单位是W·h三者之间的换算用3600来统一很多莫名奇妙的仿真结果就是单位没对齐导致的。为了避免SOC进入极低区间我在SOC低于30%时设置一个保护性限功率逻辑让储能的最大输出功率线性下降直到SOC低于20%时完全禁止放电。这个逻辑虽然粗糙但符合工程实际的BMS保护思路比不做限制更接近真实系统的行为。5. 仿真工况设置与模型参数整定的关键技巧模型搭建完成后的调试阶段往往是整个项目最耗时、最考验经验的部分很多看起来不复杂的问题能让人卡上一整天。希望这部分内容能让你少踩几个坑。5.1 基准值系统和单位设置仿真的第一道坎Simulink里面最坑的一点就是单位混乱。电气系统用标幺值风机机械部分用国际单位储能部分又是物理电量单位三者混在一起稍不注意就出问题。我的做法是交流部分全部用标幺值基准功率取风电场总额定容量基准频率50Hz基准电压取电网相电压幅值。直流母线和风机机械部分用国际单位储能部分用国际单位但功率基准跟交流侧保持一致。不同单位制的信号在模块图里用信号名和颜色区分每个信号进Controller之前做一个单位归一化。这样虽然前期配置烦琐一点但后期排查问题的时候你只要看一眼波形就知道是哪个环节出了问题。5.2 典型工况设计负荷阶跃与风速阶跃双扰动一次调频仿真最经典的测试工况是两个扰动叠加t5s时切掉系统里5%的负荷模拟负荷突降t10s时叠加一个1m/s的风速阶跃模拟风功率波动。这两个扰动叠加在一起能同时考验储能快速响应、风机虚拟惯量、协调控制器的状态切换能力。负荷模型在Simulink里用三相并联RLC负载模块切换的时候给一个Step信号控制断路器模块就行。风速阶跃用Step信号和基础风叠加。扰动幅度别取太大5%的负荷阶跃在1.5MW风机模型上已经能让频率偏差接近0.5Hz了再大频率就会跌出死区范围仿真结果跟实际电网的运行场景就不匹配了。5.3 控制器参数整定的经验值参考控制器参数整定往往是初学者最头疼的问题这里给出一些实操中验证过的初始值大家可以在此基础上进一步调试。控制回路参数参考初值整定依据风机MPPT转矩环Kp / Ki0.5 / 20转矩环带宽约10Hz响应速度需远快于调频时间尺度风机虚拟惯量K_d / K_p5 / 2K_d过大容易在频率波动初期造成功率过冲储能下垂系数K_e30标幺值对应频率偏差0.2Hz时的功率出力约为6%额定容量储能功率环时间常数τ50ms模拟PCS响应延迟小于一次调频时间尺度频率死区—±0.033Hz对照实际电网考核要求给一个经常被忽视的建议PID控制器里的积分器要加限幅所有控制环的输出也要加限幅。仿真实战中不受限的积分器遇到大扰动时会迅速饱和等到扰动消失后模型需要很长时间才能从饱和状态恢复过来波形上表现为一条持续偏移的平线很多人误以为模型发散其实是积分限幅没做好。6. 仿真验证与结果分析的三个关键视角模型跑通了不代表仿真就做完了关键是看结果并提炼工程结论。6.1 系统频率动态曲线怎么看调频仿真的主输出是系统频率曲线。判断调频效果好坏有三个指标最低点频率、最大频率变化率、稳态频率偏差。频率跌落的最小值决定了系统是否触发低频减载这在真实电网里是保命指标。惯性响应改善的效果最直观的体现就是最低点频率的抬升。频率变化率反映系统的等效惯量大小储能虚拟惯量和风机转子动能释放都会降低这个指标的绝对值。稳态频率偏差则取决于一次调频的下垂增益和系统整体的功率平衡。做对比仿真时一定要跑三种工况无调频纯MPPT运行、仅储能调频、风储联合调频。三种曲线叠加在同一张图里功过是非一目了然。6.2 风储功率响应的时序配合如何评估风机功率曲线和储能功率曲线的时序关系是整个控制策略的核心证据。理想的配合应该是这样在频率跌落的头几秒储能功率快速放电形成支撑风机的转子动能释放功率在2到5秒内爬升上来储能的出力可以适当回调再往后风机的变桨减载或超速减载持续出力储能进入待命状态。这套时序如果对了频率曲线就会有两个明显的“波峰”在托举如果配合乱套曲线会出现明显的下凹或振荡。6.3 SOC轨迹与恢复策略是否需要优化储能SOC的曲线是检验协调策略是否可持续运行的关键指标。调频结束后SOC必须回到合理区间否则下一轮调频到来时储能无电可用整个策略就失败了。7. 仿真过程中绕不过去的几个坑与排查思路最后这部分是我最想写的因为这些坑几乎所有人都会踩而且踩的时候特别容易懵。7.1 仿真发散与数值不稳定问题调频仿真最常遇到的模型发散不是算法有问题而是代数环没有解算或者说差代数环。Simulink求解器在连续模型中检测到代数环时会用迭代求解如果迭代初值不好或模型里有不连续环节就会发散。排查方法是在模型编译时查看诊断对话框Simulink会直接提示Algebraic Loop的位置。解决手段一般在代数环里加一个Memory模块或Unit Delay打破环或者把代数环里的纯比例函数改成一阶惯性传递函数阻断瞬时传播路径。另一个常见的数值问题是求解器步长。风储联合模型是一个典型的刚性系统——风机的机械时间常数几十秒变流器的电气时间常数几毫秒两者相差几个数量级。固定步长求解器必须在微秒级才能保证稳定这样仿真速度太慢。解决方案是使用变步长求解器并设置Max Step Size为1e-3秒相对误差容差调整到1e-4兼顾精度与速度。7.2 直流母线电压漂移的排查直流母线电压异常波动是我在仿真里遇到最多的问题。通常是机侧和网侧变流器的功率不平衡机侧功率比网侧功率大直流母线电压升高反之电压降低。排查思路很简单先看两个变流器的有功功率波形再看直流母线电压波形对比功率差和电压变化的方向通常能直接定位是哪一侧的功率控制出了问题。如果是控制器问题检查对应的PI输出是否饱和如果是模型问题检查直流母线电容值是否设置成了默认值1μF这个值对风电场级模型来说太小了一般要设在几毫法级别。7.3 频率测量环节的滤波延迟问题Simulink里的PLL测频模块带宽设置不当会把真实频率信息滤掉或者引入明显延迟。带宽太低频率测量延迟太大控制器在频率跌落初期会响应迟钝带宽太高测量噪声大控制指令随之高频抖动。实测下来的折中方案是PLL带宽设在20到30Hz左右响应延迟大约几十毫秒量级远小于一次调频的时间尺度同时噪声抑制效果也不错。7.4 数据记录与批处理仿真的小技巧一次调频仿真时间通常60秒采样步长取1ms记录的数据量大约6万行。需要用To Workspace模块把频率、功率、SOC这些关键量记录到base工作区不要用Scope看波形截图——后期整理报告和画图时base工作区的数据才是真正有用的。批量扫描参数时用Simulink的parsim并行仿真配合一个循环脚本就行在参数变化表里把风速、储能容量、下垂系数这些参数设好。注意parsim默认会把多个仿真任务分配给多核如果模型里有全局变量或者随机数种子固定并行仿真结果可能会因为内存竞争出现偶发错误可以把随机风速种子设为依赖于仿真编号避免重复性错误。7.5 结果误读与复现的注意事项还有很多时候仿真结果本身没错但结论是错的。典型场景是仿真时间太短频率恢复阶段的特征还没显现就停了。一次调频的动态过程至少要跑30秒以上给储能充电恢复阶段留出充足时间。还有SOC限制没加就直接跑结果储能一直放电频率曲线看起来挺好但实际系统里早就触发荷电状态保护了。我自己做这个项目时习惯在模型里加一个Model Verification模块监控关键量的边界条件比如SOC是否越限频率是否低于死区功率是否超过限幅。仿真正式跑批之前先让模型自动检查一遍约束能省下大量无效仿真的时间。写在最后的实操建议回到开头那句话风储联合调频的真正难点不在模型精度而在“时序配合”四个字。误差哪怕只有几百毫秒联合效果可能就直接崩溃。仿真做出来后建议从三个方面验证模型是否合理不同风速下风机的出力备用是否随转速自动调整、储能SOC下降到保护值附近时控制策略是否正确接管、频率跌落幅度超过死区后状态切换是否存在多次振荡。这三个点通过了模型基本就能代表一套设计合理的风储联合调频系统了。我自己的体会是这套模型做熟之后往里面加AGC信号、加通信时延、做多机聚合扩展都是水到渠成的事。刚开始搭模型时不要追求一步到位先让系统跑起来、拿到第一版结果再逐步精细化比一开始就试图把所有细节建模到位要高效得多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进