做双馈风机虚拟惯性控制这事,得先把一个非常反直觉的事实摆出来:风机的转速和电网频率,在物理上本来一点关系都没有。风机转多快,取决于风有多大,而电网频率取决于整个系统发电和用电的平衡。但是电力系统调度又特别希望风机在频率跌的时候能帮一把,这就催生了虚拟惯性控制——通过控制手段,强行让转子里的动能和系统频率建立联系。这篇文章我想把整个建模思路、控制策略和Simulink实现过程完整摊开讲,包括我踩过的那些坑。
1. 项目背景与核心需求拆解
1.1 为什么一次调频需要风机参与
传统发电机组(火电、水电)自带物理惯性,转子本身就是个巨大的能量存储器。系统里突然少了一台机组,频率开始下跌的瞬间,所有同步机组的转子会不约而同地放出一部分动能来抵抗频率变化,这个过程叫惯性响应,持续几秒到十几秒,给调速器争取动作时间。风机的问题在于,它是电力电子变换器并网的,转子转速和电网频率解耦了。即便风很大、转子转得飞快,只要变频器不把功率送出去,系统频率跌落时风机就是个旁观者。
这就引出一次调频参与的必要性。所谓一次调频,通常指系统频率出现偏差后,机组在几秒到几十秒内自动调整有功出力,把频率拉回允许范围内的过程。风机想做这件事,只能靠两条路:一是让风机在当前风速下留出备用功率(桨距角减载运行);二是利用转子本身的动能,在频率变化时短时释放或吸收。前者牺牲发电量,后者不牺牲发电量但有时间限制。虚拟惯性控制走的就是第二条路,本质上是让电力电子接口"虚拟"出一台同步机组的惯量特性。
1.2 虚拟惯性控制的本质
虚拟惯性控制的核心可以用一个简单公式解释:传统同步机组的电磁功率变化率与频率变化率成正比,即P = 2H·f·df/dt(H为惯性时间常数)。虚拟惯性控制要在变频器的有功指令里叠加一个与频率变化率(ROCOF)成正比的附加分量,同时还要叠加一个与频率偏差成正比的分量来模拟一次调频的下垂特性。这样一来,风机对系统的外特性就非常接近一台自带惯量、自带调速器的同步机组。
实现上有两条路线:一条是附加功率补偿回路,在原MPPT功率指令上直接叠加ΔP;另一条是附加转矩补偿回路,在电磁转矩指令上叠加ΔT。两者的区别在于功率回路响应快但容易受转速变化耦合影响,转矩回路的物理意义更清晰。实际工程中通常两种都做,频率偏差大时靠转矩补偿,频率变化剧烈时靠功率补偿。当然,Simulink建模里两条路都能实现,关键看你要对接什么形式的接口。
1.3 项目范围与预期目标
这个项目的目标是搭建一个完整的双馈风机(DFIG)并网系统仿真模型,在其中实现虚拟惯性控制,并验证其在系统频率跌落事件中的响应特性。模型应包含几个关键层次:风轮气动模型、传动链模型、DFIG电磁模型、背靠背变流器及其控制、虚拟惯性控制回路、简化的系统频率响应环节。
预期能看到的仿真现象是:频率跌落发生时,传统MPPT控制的机组几乎无动于衷,而加入虚拟惯性控制后,风机有功出力在几百毫秒内快速抬升,短时释放转子动能支撑频率,随后根据转速恢复逻辑慢慢退出。整个过程要能清楚看到有功功率、转速、电磁转矩和频率的联动曲线。规划模型时建议做模块化,空气动力学、传动链、发电机、变频器、控制器完全分块,后期把虚拟惯性控制换成其他策略(比如自适应惯量、OLC、模糊控制)时只动控制模块,不用重搭模型。
2. 系统建模与参数设计
2.1 风机气动与传动链模型搭建
风机的原始动力来自风轮捕获的风能,气动模型用标准公式就可以:P_w = 0.5·ρ·π·R²·V³·C_p(λ, β)。其中ρ是空气密度,R是风轮半径,V是风速,C_p是风能利用系数,由叶尖速比λ和桨距角β决定。C_p的表达式有很多工程近似版本,我用的是经典的非线性拟合公式:
C_p(λ, β) = 0.5176·(116/λ_i - 0.4·β - 5)·exp(-21/λ_i) + 0.0068·λ
其中1/λ_i = 1/(λ + 0.08·β) - 0.035/(β³ + 1)。这个公式来自Heier的著作,双馈风机仿真里用得最普遍,Simulink里用MATLAB Function或者Fcn模块直接写进去都行。
传动链用两质量块模型比单质量块更贴近真实,因为风轮惯量和发电机惯量之间隔着齿轮箱和弹性轴。两质量块模型包含一个扭转弹簧和阻尼项,能反映轴系的扭振模态。如果只是一般性的调频研究,单质量块也够用,但有个细节必须注意:虚拟惯性控制释放动能时,电磁转矩会有短时突变,这个突变会激励传动链的扭振。如果模型太简化,你就看不到这些振荡,会让仿真结果比实际乐观。所以建议建模阶段就保留两质量块,折算到高速侧的等效惯量、刚度系数和阻尼系数按实际机组参数给出,默认值可以取:
- 风轮惯量折算到高速侧:约 17.2 kg·m²(1.5MW 级机组典型值)
- 发电机转子惯量:约 1.2 kg·m²
- 轴系刚度:约 1.2×10⁸ N·m/rad
- 轴系阻尼:约 100 N·m·s/rad
2.2 DFIG电磁模型与变流器接口
DFIG的电磁模型在Simulink里有几种实现方式:直接用Simscape Electrical里的专用DFIG模型,或者自己搭dq坐标系下的五阶/三阶微分方程。我的建议是,如果你还是学生或者刚开始搞,直接用Simscape里现成的DFIG模块,把参数填进去就行,省掉大量调试时间。但如果你想搞清楚内部机理、或者做论文里那种"改进控制"的研究,自己推导dq模型更灵活——你可以在定子磁链方程里注入你的控制量,不会黑箱。
DFIG的关键参数包括定子电阻、定子漏感、转子电阻、转子漏感、激磁电感、极对数、额定电压和频率。以1.5MW机组为例,典型参数可以设为:额定电压 690V、额定频率 50Hz、极对数 2、定子电阻 0.0071pu、转子电阻 0.005pu、定子漏感 0.171pu、转子漏感 0.156pu、激磁电感 2.9pu。这些标幺值参数只对额定工况有意义,如果你要模拟低风速、高转差工况,需要核对模型内部的状态方程是否完整。
变流器部分,转子侧变流器(RSC)控制DFIG的电磁转矩和无功功率,网侧变流器(GSC)维持直流母线电压并向电网馈送无功。Simulink里可以用平均模型代替开关模型——两电平PWM用理想开关也行,但仿真速度会很慢,尤其是你要跑几十秒的调频动态过程时,步长会被强制压到微秒级。平均模型把变流器当成功率变换环节,忽略开关谐波,调频研究的频率范围是0.1~2Hz,这个频段上平均模型完全够用。开关模型可以留到最后的电磁暂态验证里再做。
2.3 电网与负荷模型简化
一次调频研究关注的是频率的机电暂态过程,不需要精确的电力系统拓扑。最常用的简化方法是用一台等效同步发电机、一段线路阻抗、可变负荷和无穷大电网的组合来模拟系统频率特性。同步发电机可以用三阶模型加调速器,调速器用典型的下垂控制G = 1/(1 + T_G·s),原动机用再热式汽轮机模型。但很多研究为了简化,直接用一个惯性环节加频率-有功下垂关系代替整个系统,形式为:
2H_sys·df/dt = P_m - P_e - D·Δf
这个公式实际上就是整个系统的摇摆方程。在Simulink里用积分器实现这个方程,输入是发电机机械功率与负荷功率的差值,输出就是系统频率。这样做有一个好处:你可以直接看到系统等效惯量H_sys对频率变化率的决定作用。虚拟惯性控制的风机接入系统后,等效惯量H_sys会变大,频率跌落的速度就会变慢,这就是"虚拟惯性"命名的由来,非常直观。
我建议在做完局部模型验证后,用这个摇摆方程搭一个极简系统模型,把风机模型接进去,先跑通控制逻辑,再换复杂电网模型。原因很实在:摇摆方程模型几乎没有数值稳定性问题,调试速度快,变量观察也方便。等控制参数调得差不多了,再过渡到完整电网模型,能减少大量排错时间。
3. 虚拟惯性控制策略实现
3.1 控制逻辑与功率分配
虚拟惯性控制的整体逻辑可以分成三层:最高层是频率感知层,采集电网频率,计算频率偏差Δf和频率变化率df/dt;中间层是惯量响应计算层,生成附加功率指令ΔP;底层的功率分配层把ΔP叠加到MPPT功率指令上,送入RSC的功率控制环。
叠加方式上有两种流派。一派认为直接在有功指令P_ref上叠加ΔP,即P_ref = P_mppt + ΔP;另一派主张在转矩指令上叠加ΔT,即T_e_ref = T_mppt + ΔT,这样转速环不会参与进来。前者简单直接,但存在耦合问题——功率指令增加,转速下降,MPPT功率点会漂移,控制效果会打折扣。后者物理意义清晰,转矩指令直接与电磁过程对应。我做仿真时的体会是:频率偏差比较大的扰动事件,建议用功率叠加方案,响应直接;频率偏差小的日常波动,用转矩叠加方案更稳定。
附加功率ΔP的一般形式是两项之和:
ΔP = K_d·df/dt + K_p·Δf
第一项是惯性响应项,只在频率变化过程中起作用,频率恢复稳定后它自然归零,这模拟了惯量"只挡变化、不管稳态偏差"的特性。第二项是下垂响应项,只要频率仍然偏离额定值,它就一直存在,模拟了一次调频的稳态有功-频率特性。两者配合,动态特性和稳态特性都能兼顾。
3.2 控制参数整定与限幅逻辑
K_d和K_p的整定是整个控制策略的核心。K_d对应虚拟惯量大小,它的物理意义是频率每变化1Hz/s,风机额外输出多少功率。以一台1.5MW风机为例,如果希望频率变化率为0.5Hz/s时释放大约10%额定功率(150kW),K_d可以取300kW·s/Hz。换算成标幺值,假设基准功率为1.5MW、基准频率50Hz,K_d* = (300kW/1500kW) / (0.5Hz/s/50Hz) = 0.2 / 0.01 = 20 pu。不同文献的基准定义略有差异,仿真时务必统一。
K_p对应下垂系数,按照电力系统一次调频的典型要求,频率偏差0.2Hz让风机增加20%额定功率是比较合理的取值。倒算下垂系数:R% = (0.2/50) / (0.2·P_n/P_n) × 100% = 5%。所以K_p = 0.2·P_n / 0.2Hz = P_n / Hz,也就是频率每下降1Hz,增加一整台额定功率。实际中要考虑功率上限,折算下来大约每个0.1Hz偏差增加5%~10%额定功率。
限幅逻辑是我在所有仿真里都会强调的一环。虚拟惯性控制本质上是把转子动能变现,变现速度受变流器容量和转子转速下限的双重约束。功率指令限幅一般在0.1~1.1pu之间,留出一定余量防止过载;转子转速下限由风机运行安全决定,一般不低于0.7pu;更重要的是频率变化率限幅——如果实测df/dt异常高(比如故障切除瞬间),控制器容易瞬间发出过大功率指令,形成功率冲击。我在实际仿真里见过6Hz/s的瞬时变化率,如果不加限幅,功率指令直接飞上2pu,电磁转矩快到极限,那时候不是调频,是制造扰动。
3.3 与转速恢复逻辑的配合
虚拟惯性控制有个与生俱来的副作用:短时释放动能后,转子转速下降,如果不做处理,风机可能长时间运行在低转速区,发电效率下降,严重时转速低于最小值触发保护停机。因此必须设计转速恢复逻辑。
常规做法是:转子转速低于某个阈值(比如0.9pu)后,逐步降低惯性附加功率,让风机慢慢回到MPPT转速。恢复速率要控制好,太快会造成二次功率冲击,太慢则占用调频资源。我在仿真中把恢复时间常数设为5~10秒,恢复过程用一阶惯性环节过渡,实测效果是不错的。更高级的做法是用一个比例环节控制转速偏差,转速越低,允许的附加功率越小,形成负反馈。也可以用模糊逻辑或自适应增益,但那是后话,先把基础逻辑跑通。
还有一个关键细节:转速恢复期间如果再次发生频率跌落,控制器要能立刻识别并重新进入惯量响应,不能被恢复逻辑锁死。所以模式切换逻辑必须基于频率变化率判断外加延时确认,而不是简单的状态机开关。这个细节在入门论文里很少讲,但实际系统里特别重要。
4. Simulink模型搭建与仿真分析
4.1 模型架构与模块划分
整个Simulink模型的架构我按以下层次搭建:
第一层是风模型与气动模块,输入风速序列,输出气动转矩。风速序列考虑阶跃变化、阵风和湍流三种场景,调频研究主要用恒定风速加瞬间扰动,把风速波动的影响先排除掉。
第二层是传动链模块,两质量块模型用State-Space或Integrator搭建,输出发电机转速。
第三层是DFIG模块,Simscape里的DFIG模型包含电磁方程,输出有功、无功、定转子电流等状态量。
第四层是变流器控制模块,包含RSC的功率/转矩控制环、GSC的直流电压控制环。这里要单独留出虚拟惯性控制的信号接口——一个Add模块输入端。
第五层是系统频率模块,用摇摆方程模拟系统频率响应,输出频率信号,反馈到虚拟惯性控制器。
模块之间用Goto/From标签连接,别用信号线拉长线,否则模型一大就乱得没法看。我习惯在变量命名上加前缀区分层级:Wind_V、Grid_f、DFIG_Pe、VIC_deltaP等等,保持可读性。
4.2 仿真参数与工况设计
仿真步长设置:用变步长求解器(比如ode45),相对误差1e-4,最大步长限0.01秒。不要用固定步长,除非你有特殊原因。整个仿真时长设计为60秒:0~20秒让系统稳定运行,第20秒时投入负荷阶跃(比如增加0.15pu负荷),模拟系统功率缺额,观察频率跌落过程中风机的响应。第40秒后切除部分负荷,观察频率上升时虚拟惯量控制的反向动作。这样一次仿真能同时检验高载和低载两侧的动态特性。
风速工况方面,分别设9m/s(MPPT功率约0.6pu)、11m/s(约1.0pu)和7m/s(约0.3pu)三组。低风速工况特别值得跑一遍,因为此时风机可释放的动能本身就少,而且转速下限问题更突出。你可能看到低风速时虚拟惯量控制效果明显变差,这时候就知道为什么实际工程里低风速下通常要退出虚拟惯量控制或者是限制功率了。
4.3 仿真结果解读与调参
仿真结束后要重点查看几个波形:系统频率曲线、DFIG有功功率、转子转速、电磁转矩、直流母线电压。我见过的典型正确响应是:20秒负荷突增后,频率下降,t≈0.5秒内DFIG有功功率快速上升(从0.6pu涨到0.75pu左右),同时转子转速从1.0pu缓慢下降到0.92pu左右;随后功率回落到一个新的稳态值(高于原值),转速慢慢恢复。整个过程频率下降的最大速率在加入虚拟惯量后被明显削平——没有虚拟惯量时频率可能以0.8Hz/s的速度跌,加入后变成0.5Hz/s。
如果仿真出来的波形不是这样,多半是参数问题。常见的不正常现象有:功率指令振荡(K_d太大)、转速跌穿下限(限幅没设好或K_d太大)、频率二次下跌(恢复逻辑太快)、直流母线电压波动(GSC控制参数没整定好)。
调参顺序我的建议是先调K_p把稳态支撑确定下来,再调K_d改善动态过程,最后调恢复时间常数。每调一次跑一遍仿真看波形,别想着一把调到位。实际工程里这套参数大概率还要按电网调度要求做离线仿真验证,但Simulink里能跑出合理波形,就已经完成了仿真层面的验证目标。
4.4 模型验证与对比分析
做控制策略研究,一定要有对比基准。我建议搭建三组模型做对比:A组是纯MPPT控制(基准),B组是MPPT加虚拟惯性控制,C组是MPPT加虚拟惯性加转速恢复逻辑。这样你能量化每层控制带来的改善幅度。
对比指标包括频率最低点(频率跌落最深处)、频率稳态偏差、最大有功变化率、转子转速最低点、恢复时间。把这些指标做成表格,你会发现很清晰:纯MPPT对频率跌落几乎无贡献,频率最低点可能跌到49.2Hz;加虚拟惯性后最低点抬高到49.5Hz左右;加转速恢复后稳态频率进一步改善。这些数字不一定精确,但趋势是稳定的。在做论文或者技术报告时,这样的对比数据很有说服力。
5. 常见问题与排查技巧实录
5.1 模型发散与数值振荡问题
跑Simulink仿真,最让人崩溃的就是莫名其妙发散。虚拟惯性控制相关的发散原因主要有三类。
第一类是控制环增益过大,尤其是K_d过大时。频率变化率信号本身噪声就大,如果增益再大,相当于在系统里注入一个强激励,EPLL或者鉴频器的噪声会被放大,功率指令剧烈波动。对策:限制K_d的量级,同时对df/dt信号做滤波,滤波器时间常数选0.05~0.1秒比较合适。第二类是限幅模块和积分器配合问题——比如转速恢复逻辑用了积分器,积分器输出被限幅后没有做抗饱和处理,一旦积分器饱和,控制效果就很差。第三类是Simscape模型和解算器的兼容问题,这时换成Local Solver或者在DFIG模块内部配置合适的采样时间常数。
一个特别容易忽略的点:频率测量环节。我用过Simulink中的PLL模块,也用过EPLL(增强锁相环)。PLL带宽太高,会把谐波和噪声带入虚拟惯性控制;带宽太低,df/dt信号滞后严重,惯量响应变慢。建议PLL带宽选10~20Hz,然后对df/dt再额外做低通滤波。如果你发现频率波形有毛刺,先看PLL输出干不干净,别看其他地方。
5.2 转速恢复的二次冲击问题
我在早期仿真里遇到过这样一个现象:第一次频率跌落事件中,风机释放动能,转速从1.0pu掉到0.88pu;恢复逻辑启动,功率逐步回调到MPPT值,转速开始回升。但这个过程中系统频率已经逐渐恢复,虚拟惯量控制输出的附加功率本应归零。由于恢复逻辑还在作用,功率反复波动,转速回升过头,频率出现二次上冲。
这个问题的根源在于恢复逻辑和虚拟惯量逻辑同时作用,没有优先级管理。我的解决办法是:设置一个状态标志,当频率偏差绝对值小于死区(±0.03Hz)且变化率小于阈值时,虚拟惯量控制停止输出,只有这个时候恢复逻辑才接管;如果频率再次越限,立即切换回惯量控制。这个思路在仿真里实测非常有效。另外,转速恢复速率不能太快,我用了一阶惯性加定时延的复合逻辑,实测要稳很多。
5.3 参数标幺值与基准的坑
最后分享一个最隐蔽的参数坑:标幺值基准不统一。DFIG模型内部用电机额定值做基准,但你在虚拟惯性控制器里可能会习惯性用系统侧的基准(比如100MVA),两者混在一起用,功率指令差了几个数量级都不自知。
我的建议是:整个控制器的标幺值全部统一到风机额定值,然后在接口处按需转换。比如虚拟惯量控制输出的ΔP以风机额定功率为基准,送入RSC之前不需要额外处理;但如果你要统计对系统频率的贡献,再乘上一个系数换算到系统基准。养成习惯,在一进一出两个接口处都标注基准量,这个毛病基本就能避免。
6. 从仿真到工程落地的几个额外思考
仿真模型跑通只是第一步,工程落地还有不少问题要补充考虑。
风机的桨距角控制与虚拟惯量的耦合是一个容易被忽视的问题。高风速区间,风机通常处于满发状态,桨距角控制器在不断调节桨距角限制功率。此时如果虚拟惯性控制叠加一个功率指令,桨距角控制器会产生对抗性动作。仿真模型如果只做中低风速工况,就看不到这个问题;但真实风场里高风速工况占比极高,所以工程上通常在高风速段限制虚拟惯量控制的深度,或者与变桨控制做协调。
风电场层面的功率分配也有讲究。单台风机跑通虚拟惯量控制,不代表一个风电场就能按比例参与一次调频。风电场内部有集电线路损耗、尾流效应、各台风机风速不同导致的功率差异,调度下发的调频指令要在线分配给每台机组。普通的做法是按可用容量比例分配,高级的做法是考虑各台风机的转速裕度和变流器裕度做优化分配。这些在Simulink里做风电场聚合模型时都能模拟,但工作量不小。
我个人做完这个项目的最大体会是:虚拟惯性控制的本质是在"时间尺度"上做文章。它利用的是转子的动能储备,只能在有限时间内提供功率支撑,时间尺度用秒计。一次调频的时间尺度是几十秒到几分钟,二次调频更长。所以虚拟惯量不能替代传统的备用容量调频,它的价值在于"抢时间"——在传统机组响应过来之前,把频率下跌的速率压住,把频率最低点抬高,为后续AGC动作争取时间。理解了这一点,你在设计控制参数和恢复逻辑时就会有更清晰的优先级判断。
另外一个实用建议是:仿真做完,把波形导出来做成标准的对比图,把每一组工况对应的关键指标做成表格。这些材料无论是写论文、给调度做认证,还是跟同事讨论,都是最直接的通货。我见过太多人跑完仿真就关掉,后面写报告时又要重跑,浪费大量时间。
最后分享一个小技巧:在Simulink里给虚拟惯性控制模块加上手动开关和参数面板,用Slider直接在线调K_d和K_p,能在仿真运行过程中实时观察参数变化对波形的影响。这个操作习惯帮我快速圈定了合适的参数范围,效率比停下来改参数再重跑高好几倍。你不需要每次都只改参数然后重新启动仿真,利用Simulink的交互式调参功能,在仿真运行中就能完成参数扫描,数据采集效率会完全不同。