模型预测控制提升风电一次调频能力:原理与Matlab仿真实践

发布时间:2026/10/11 0:14:34
模型预测控制提升风电一次调频能力:原理与Matlab仿真实践
风电装机并网越多系统频率反而越容易“飘”——这个现象在前些年刚做新能源并网仿真时我一度觉得很矛盾风不是清洁又便宜吗怎么还会给电网添乱后来才意识到问题不在风本身而在风机的“接口方式”。传统火电、水电用的同步发电机像一个自带大飞轮的转盘电网频率稍微降一点转子储存的动能会自动释放出来托住频率。风机呢绝大多数双馈和全功率变流风机转子和电网之间隔着一层电力电子变换器机械转速和电网频率完全解耦。换句话说风机对电网频率来说就是个“透明人”不参与、不响应、无感。大比例风电接入之后系统等效惯量直线下降同样一个扰动频率跌落更快、更深恢复更慢。这就是“基于MPC模型预测的风电调频改善系统频率一次调频”这个课题存在的根本意义。MPC指的是模型预测控制Model Predictive Control一次调频指电网频率跌落时通过有功出力调整在秒级到分钟级尺度上把频率拉回来。本文我会从问题背景、控制原理、Matlab仿真建模、实验结果分析再到复现过程中踩过的坑完整走一遍这个仿真课题给要做类似方向或者正在写相关论文的人一个可以直接参考的路线。1. 风电参与一次调频先搞清楚要解决什么1.1 一次调频和二次调频的分工差异电网频率调节按时间尺度和控制来源通常分成三级。一次调频是发电机组的调速器根据本地频率偏差自动调整有功输出响应最快动作在几秒到几十秒内完成目的是“挡住”频率继续恶化二次调频是自动发电控制AGC也就是调度中心下发指令在分钟级把频率拉回额定值目的是“收回”频率偏差。三次调频更慢一般是经济调度层面的机组组合和负荷预测问题。做仿真时最容易犯的错误是把一次调频和二次调频混在一个模型里。我要做的是MPC控制风机参与一次调频那么扰动发生后看的是前10秒到60秒这段窗口频率最低点、稳态偏差、恢复速度这些指标AGC那部分直接不建模把它当成外环背景就行。否则控制对象不清楚结果也讲不明白。1.2 风机身上哪来的调频功率风机虽然不像同步机直接带惯量但能用来支撑频率的能量来源有三个转子动能释放。风机转子本身就是个大转动惯量体在超速运行区间一般0.7pu到1.2pu转速可以通过控制器短时把电磁功率抬高让转子减速、释放动能。这个响应最快但持续时间短转速降到下限就得停手。超速减载备用。平时让风机偏离最大功率点跟踪MPPT转速偏高、桨距不变留出一部分有功余量。频率跌落时把备用功率释放出来能支撑几十秒甚至更久。变桨减载备用。通过增大桨距角让风机“人为低效”运行留出功率余量。问题是变桨动作慢、机械载荷大一般配合超速备用一起用而不是单独死磕。三种方式里转子动能释放适合MPC控制器里的“快速通道”超速备用则适合做成“持续通道”。这两者对应不同的控制目标和约束条件恰恰是MPC能发挥优势的地方。我见过很多做风电调频仿真的人一上来就翻MPPT的功率曲线把风机当成一个理想电源完全忽略转速约束结果仿真里风机功率上去了转速却掉到了0.6pu以下这在真实机组上早就触发保护切机了。记住风机能给出多少功率最终还是受转子转速和桨距角机械特性的限制。1.3 为什么偏偏是MPC来干这个活传统的风电调频控制多半是下垂控制droop control加虚拟惯量控制virtual inertia本质上是比例和微分环节参数靠试凑而且很难把转速下限、桨距角变化率这些约束系统性地考虑进去。MPC的思想是预测模型告诉你“如果我这么调节未来30秒频率会怎么走”滚动优化告诉你“在当前状态下怎么调才既能压住频率又能守住约束”反馈校正则保证模型误差不会被无限累积。这个框架做风电调频有天然的适配性——因为风电调频本质就是一个带约束的动态优化问题而不是单纯的反馈跟踪问题。2. MPC控制器设计的核心思路预测、滚动、约束2.1 预测模型到底在预测什么MPC的预测模型不是用来预测风的而是用来预测“系统频率对风机出力变化的动态响应”。通常要建两层的模型一层是风机的状态方程包括转子转速动态、变桨执行器动态、输出功率动态另一层是电网频率响应模型最常用的就是系统等效惯量加阻尼的摇摆方程。把这两层串起来写成一个状态空间形式x(k1) A x(k) B u(k) E d(k) y(k) C x(k)其中状态量x通常取转速偏差、输出功率偏差、桨距角执行器状态、频率偏差控制量u取功率指令增量可测干扰d取风速扰动和负荷扰动输出y取频率偏差和功率这个模型不需要特别精细重点是抓住主导动态。电网的频率响应模型一般用一阶或者二阶等效惯量模型就够风机部分如果做机理建模把一质量块或两质量块的传动链模型写进去即可不需要流体力学级别的精确度。MPC的鲁棒性有一部分正在于此——模型有点偏差没关系滚动优化每步都在用反馈修正。2.2 约束条件就是MPC的灵魂如果只调频率而不顾约束任何简单的PI控制器都能做。MPC之所以比PI好是因为它能在优化目标里显式处理下面这些约束约束项典型范围说明转子转速0.70pu ~ 1.20pu低于下限触发失速保护高于上限导致飞车桨距角变化率±5°/s以内过快会加大叶片疲劳载荷输出功率变化率0.1pu/s左右变流器热容量限制防止功率突变输出功率上限≤当前可用功率备用调频时不能超过实际可发功率电磁转矩不超过转矩极限保护齿轮箱和变流器在Matlab的MPC Toolbox里这些约束分成硬约束MV/MV Rate/OV和软约束两种。我建议转速和功率变化率用硬约束频率偏差的惩罚放到目标函数里而不是硬考虑因为频率偏差实在太大时硬约束会造成优化无解届时MPC会直接“罢工”这种项目里是最恐怖的事。2.3 目标函数怎么定权重MPC的每步优化都在最小化一个代价函数风电调频场景里一般包含以下几项J w1 * Δf^2 w2 * (ΔP_ref)^2 w3 * Δω^2 w4 * rate(ΔP_ref)^2w1是频率偏差惩罚权重越大越“卖力”调频w2是控制量惩罚权重防止功率指令来回抖w3是转速偏移惩罚防止过度释放转子动能w4是功率变化率惩罚让指令更平滑权重调整的基本思路是先让w1适当大保证频率恢复效果再逐渐加大w4避免功率指令抖动最后看w3能不能把转速限制在安全区。没有固定的万能权重不同风电场参数、不同风速下都得重调。很多仿真复现出来效果不佳基本都是权重比例问题不是MPC本身的问题。3. Matlab/Simulink仿真搭建全过程3.1 先把平台和工具箱理清楚做这个课题建议用Matlab 2020以后的版本主要用到下面几个工具箱Model Predictive Control Toolbox提供MPC对象设计、仿真验证在命令行里就能快速把控制器配好Simulink搭风机模型、电网模型、控制回路Simscape Electrical可选如果你想要电力电子层面的细节可以搭变流器模型如果只想看调频控制效果用等效模型就好我个人的建议是第一次做这个课题不要一上来就搭精细的电力电子模型否则仿真速度慢到你怀疑人生而且调MPC参数时分不清问题出在控制器还是变流器。正确做法是用线性化等效模型验证控制逻辑跑通之后再根据时间情况决定要不要往细节方向加东西。3.2 仿真模型的整体结构按照从内到外的顺序模型大致分五层风速模型 → 风机气动模型 → 传动链与变流器等效模型 → 调频控制器 → 电网频率响应模型风速模型用阶跃、阵风或者湍流风速都行做调频仿真时有必要加入一个风速小幅波动作为背景扰动不然系统太“干净”。气动模型里最关键的是功率系数Cp(λ, β)曲线用标准文献里的拟合公式就行。以下是一个经典公式Cp c1 * (c2 / λi - c3 * β - c4) * exp(-c5 / λi) c6 * λ传动链可以用单质量块简化转动惯量的等效值要按风机铭牌参数折算。电网侧用单机无穷大母线等效加上一个负荷阶跃扰动频率响应靠摇摆方程计算。3.3 MPC控制器在Simulink里的实现方式推荐用MPC Toolbox里的Controlled MPC Controller模块配合一个状态空间模型作为内部预测模型。具体步骤是第一步创建MPC对象% 假设已经通过线性化得到风机和电网的状态空间模型 sys_plant Ts 0.05; % 采样时间50ms p_mpc mpc(sys_plant, Ts, 30, 5); % 预测时域30步控制时域5步预测时域30步对应1.5秒的预测窗口对一次调频这个尺度来说够用控制时域取5步是为了减少计算负担又保留优化自由度。第二步设置约束% 功率指令变化率每步不超过0.01pu对应0.2pu/s p_mpc.MV.RateMin -0.01; p_mpc.MV.RateMax 0.01; % 转速约束 p_mpc.OV(1).Min 0.70; p_mpc.OV(1).Max 1.20; % 功率输出上限 p_mpc.OV(2).Max 0.9; % 备用调频时以0.9pu为限第三步设定权重p_mpc.Weights.OV [1 0.1]; % 第一输出是频率偏差权重1第二输出是转速权重0.1 p_mpc.Weights.MV 0.1; % 控制量权重 p_mpc.Weights.MVRate 0.5; % 控制量变化率权重这几个权重数值不算标准答案只是我一轮轮调下来比较稳健的一组起点。第四步在Simulink里连接MPC模块的输入接口要接测量信号频率偏差、当前输出功率、当前转速。输出接口接功率指令给风电场的功率跟踪环。这里有个关键点MPC模块内部用的是线性预测模型而你Simulink里跑的是非线性风机模型两者天然存在模型失配MPC的反馈校正机制会尽量弥补但初始线性化点如果偏差太大系统会直接发散。确保线性化点选在典型工作点比如风速12m/s、转速0.9pu、输出功率0.5pu左右取这个点做平衡点线性化。如果一个线性化模型撑不住全场可以考虑用多个MPC调度切换不过那是进阶玩法先把单点做稳定再说。3.4 频率测量和滤波的处理频率信号在真实系统里来自锁相环PLL或频率估算器仿真里直接用delta_f信号就行。但注意电气频率测量通常伴随噪声MPC对测量噪声比较敏感因为它会把噪声当成扰动去优化控制量导致功率指令抖动。处理方法是在频率测量后面加一阶低通滤波时间常数取100ms到300ms之间。注意滤波时间常数别太大一次调频动作在秒级滤波滞后超过0.5秒就会明显削弱控制效果频率低点会反复震荡。4. 仿真结果怎么设计才算有效4.1 扰动场景设置要让结果说明问题必须设置对比场景单跑一条曲线没有任何说服力。我做这个课题时用的一组场景是系统负荷在t5s时突增5%风机不参与调频对照组同一负荷扰动下风机采用传统下垂控制参与一次调频同一负荷扰动下风机采用MPC控制参与一次调频风速固定为额定风速附近初始状态都一致这样唯一变量就是控制策略。风电场用一台等效风机代表整个场容量设为200MW系统总装机1000MW风电渗透率20%左右。4.2 频率曲线里需要关注的关键指标一次调频效果的好坏不是看一条曲线好看不好看而是看几个硬指标指标含义目标频率最低点Frequency Nadir扰动后频率跌到的最低值越高越好通常要求不低于49.0Hz甚至49.5Hz频率到达最低点时间扰动到最低点的时间越小说明响应越快频率稳态偏差一次调频结束后频率与50Hz的偏差越小越好但不为零一次调频是有差调节频率恢复至可接受区间时间频率回到49.8~50.2Hz需要的时间越短越好仿真结果示意图无控制 50.00 ───── /\ 49.80 ──── / \ 49.60 ── MPC ────/ \ 49.40 ─ 下垂 __/ \ 49.20 ─ / \ 49.00 ─____/ \____ 0 10 20 30 40 50 t/s从趋势上看无控制时频率最深下垂控制次之MPC最浅。更重要的区别在恢复阶段下垂控制容易出现功率超调和频率过冲而MPC因为每一步都在滚动优化能把频率平滑拉回稳定区间。4.3 控制量的对比除了频率曲线还要对比风机的功率指令和转速轨迹。这里有两件事值得注意转子动能释放阶段MPC会比下垂控制更“凶”地抬升出力转速下降更快但在接近转速下限时MPC会提前开始减功率丰田平稳地“收手”下垂控制则容易顶到转速下限然后被保护限幅暴力拉回功率曲线看着就像一根锯齿。功率指令的平滑度MPC因为带MV Rate约束指令不会跳变而普通下垂控制的指令直接跨接在转速环上容易激励机械振荡。转速轨迹的计算方法也很直接风电调频的主要物理过程就是动能释放一转速下降一功率调整。转速下降的幅度公式是功率增量对时间的积分除以等效转动惯量乘以转速Δω ≈ - (1/(J_rot * ω)) * ∫(P_extra) dtJ_rot是风机等效转动惯量算出来如果转速跌出0.7pu对不起你的MPC权重设置或者备用容量设计肯定出了问题回去改。4.4 参数敏感性分析要怎么做如果时间充裕建议补一组风电渗透率或备用容量比例的对比分析。比如把风电渗透率从10%调到30%看MPC调频效果是改善还是恶化。这类敏感性分析在论文里非常受欢迎也是审稿人最爱看的内容。Matlab里做这个很方便把渗透率作为参数写进脚本套一层for循环就行。5. 复现过程中踩过的几个大坑5.1 预测模型用错工作点导致整段发散这是我最开始复现参考文献时踩的第一个坑。参考文献里的风机模型是用额定风速15m/s的工况线性化的直接拿来做MPC预测模型然后仿真里实际风速跑到9m/s模型失配太大MPC计算出的功率指令振动剧烈连Simulink都报“Singularity possible”。后来把线性化工作点改到12m/s、功率0.6pu附近并且把风速当成可测干扰直接引入MPC模块通过MPC对象的setoutdist属性系统就稳住了。如果模型与工况偏差实在太大还有一个土办法把MPC预测时域缩短一点让错误模型的“毒”来不及传太远。注意这不是治本只是临时止血。5.2 约束太硬导致优化无解给MPC设约束时我一开始把转速上限直接设在1.2pu、功率变化率限制在每步0.005pu结果扰动一来滚动优化连续好几步跑出“Infeasible problem”报警Simulink仿真随之发散。原因是约束太紧且彼此矛盾频率偏差需要快速大幅调功率功率变化率却只给很小的量优化器找不到可行解。解法是给转速用“软约束”的惩罚方式把转速偏差作为代价函数的一项而不是写进硬约束功率变化率放宽到每步0.02pu折合0.4pu/s接近变流器极限但不触发保护。MPC工具里可以在setConstraint时给OV加MinECR和MaxECRECR就是约束软化系数允许越界但逐点惩罚。这个一默认设置是0.1如果还无解就微调大。5.3 采样时间选择不合理拖死仿真速度MPC是滚动优化每一步都在解一个二次规划问题。我最早把采样时间设在0.001秒来“追求精度”结果一个20秒的仿真跑了快二十分钟而且因为预测时域对应的物理时间太短控制效果反而很差。后来想明白了一次调频的时间常数是秒级采样50ms完全够用预测时域30步就是1.5秒兼顾了快速性和平滑性。除非你要研究变流器开关级动态否则完全没必要把采样时间放到毫秒级。注意Simulink固定步长别设成和MPC采样时间完全一致否则计算量还是很大。MPC模块内部会按自己的采样周期工作主仿真步长可以比它更细或更粗建议主步长设为0.01s即可。5.4 参考文献复现时的参数陷阱很多论文的MPC仿真参数是不公开的图里那些漂亮的频率曲线复现时才发现缺关键数据比如MPPT曲线系数、备用比例、电网惯性常数。我的处理办法是先按风机厂家通用参数标定再拿文献里给的“频率最低点”结果反推待定参数调完一轮再回来把整条曲线对齐。如果文献只给了频率最低点是49.3Hz那就调整电网惯性时间常数和风机备用比例直到你的最低点也落在49.3Hz附近再往下做才有意义。提示这里面最容易忽略的是“基准值换算”。风机的0.1pu功率备用可能对应的是风电场基准容量而电网模型里频率响应用的是系统总容量两套基准值不换算的话MPC算出来的功率指令能差出去好几倍这个问题我帮人排查过很多次。6. 我的实际操作体会这套仿真课题做完之后我最大的体会是MPC做风电一次调频其实不是为了“把频率调得更深”而是为了“在同样的物理限制下把频率调得更聪明”。传统下垂控制把风机当成一个机械地按比例响应的电源MPC则是让风机像一个有预判能力的参与者——知道转速快到下限了就提前收力知道频率马上要二次跌落就保持功率输出不急着撤。如果后续要扩展我建议两条路一是把储能加进来和风机一起做协同调频MPC的框架天然适合多执行器协同优化二是把MPC做成分层结构上层慢MPC负责风电场功率分配下层快控制环负责单机执行。这两条方向在当前风电渗透率越来越高的背景下都很吃得开也是我下一步打算继续做的事。