做电力系统仿真最怕的不是模型跑不出来,而是模型跑出来了、波形画了一大堆,结果连“这个系统到底为什么会稳/为什么会失稳”都说不清楚。这几年只要聊到新能源高渗透率,构网型变流器(Grid-Forming Converter,GFM)就会和“虚拟同步机”“惯量支撑”“频率稳定”这几个词绑在一起出现。很多人在Simulink里搭同步电机模型很熟练,一换成构网型变流器就不知道该怎么建模、怎么整定参数、怎么评价两套设备之间的频率交互。
我前阵子正好完整做了一个“同步电机与构网型变流器频率稳定性研究”的课题,用Simulink和Matlab把同步机、构网型变流器放到同一个孤岛系统里做了联合仿真,涵盖了从建模、参数整定、扰动设计到小信号稳定性分析的全流程。这篇文章就把整套思路、模型结构、核心参数计算和调试踩过的坑全部梳理出来。内容适合作毕业设计的电力系统研究生、做新能源控制器算法开发的工程师,以及想快速上手构网型变流器仿真的初学者。你不需要提前懂很深的内容,但最好对Simulink基本操作和电机学里的转子运动方程有个印象。
1. 为什么要把同步电机和构网型变流器放在同一张图里研究
1.1 频率稳定性的本质不是电压稳不稳,而是功率平不平衡
频率稳定性是一个非常“物理”的问题。同步电机的转子本身就是个旋转质量块,当系统里出现负荷突变时,发电机电磁功率和机械输入功率瞬间不平衡,多余或缺口的功率只能靠转子动能的增减来暂时弥补。写成标幺值下的转子运动方程就是:
2H·(dΔf/dt) = ΔP_m − ΔP_e − D·Δf
这个方程就是整个频率稳定研究的“总剧本”。H是惯性时间常数,决定频率变化的初始速度;D是阻尼系数,决定频率振荡能不能快速衰减;ΔP_m和ΔP_e的关系决定最终频率偏到哪里。
打个比方:骑自行车上坡时突然遇到一个台阶,体重越大(惯量大),车速的变化率就越缓;链条的摩擦阻力越大(阻尼大),车身的晃动越快停下来;腿上的蹬踏力能不能跟上(一次调频),决定最终能不能在一个可接受的速度下继续骑。同步电机天然具备这三样东西,但新能源机组里的电力电子变流器本身没有旋转质量,电磁功率变化时它不会“惯性缓冲”——这就是高渗透率系统频率容易出问题的根本原因。
1.2 “构网型”构的不是电压,而是转子的特性
很多人对构网型变流器的理解停留在“输出电压幅值和频率由自己定,不用锁相环”这个层面,其实这只是表象。构网型的本质是在控制算法里模拟同步电机的外特性,把自己“伪装”成一台虚拟同步机。控制器内部构建一个虚拟转子运动方程,让有功功率和频率呈现出与同步机类似的惯性响应和下重特性。
为什么要这样做?因为当大量的同步发电机被光伏逆变器、风机变流器替代以后,电网丢失的其实不是“发电能力”,而是惯量和一次调频能力。构网型变流器的作用就是用电力电子器件毫秒级的响应速度,把这个缺失的“虚拟转子”补回来。
但问题也随之而来:真实的同步电机转子只有一个,机械动态的响应速度通常很慢;GFM的虚拟转子是写在代码里的,时间常数可以设得很小也可以设得很大,控制带宽高了容易和同步机的励磁系统、调速器发生交互,产生低频振荡甚至次同步振荡。这就决定了不能把同步机和构网型变流器分开研究,必须放到同一个系统里看它们之间的机电耦合。
1.3 课题研究要回答的四个核心问题
做仿真的第一大忌是“为了仿真而仿真”。项目组在正式建模之前在技术方案里先把问题清单定下来了,一共四件事:
- 同步机的真实惯量和GFM的虚拟惯量如何共同决定系统的等效惯量?
- 负荷阶跃扰动下,频率变化率(RoCoF)、最低频率点(Nadir)、稳态频差分别跟哪些参数对应?
- 增大虚拟惯量和增大阻尼系数是否完全等价,会不会引入新的振荡模式?
- 同步机和GFM并联运行时,一次调频功率如何分配,能否通过调差系数和容量合理配置来优化?
这四件事直接决定了仿真模型要有哪些功能模块:能独立修改同步机的H和调差系数,能独立修改GFM的虚拟惯量、阻尼系数、下垂系数,还要能灵活切换负荷大小和机组投退。模型缺了一个参变量,后面分析就会卡壳。
2. 仿真系统建模层次与整体架构
2.1 系统拓扑:为什么选择孤岛双机等值系统
我建的仿真是一个小型孤岛电网:一台同步发电机经过升压变压器接入中压母线,一台构网型变流器通过滤波电感和隔离变压器接入同一母线,母线上带一个基础负荷和一个可投切负荷。投切负荷用断路器来控制,用来模拟系统受到的阶跃扰动。
选孤岛系统而不是直接并无穷大电网,原因非常直接:并网后频率被大电网“钉死”在50Hz附近,频率稳定问题的现象不明显,也不利于观察同步机和GFM各自的惯量响应。孤岛环境里负荷突变后频率偏移足够大,RoCoF和Nadir这些指标能有清晰的差异,研究结论也能更好地迁移到微电网、独立电网等真实场景。
拓扑细节上,同步发电机用升压变压器把机端电压升到中压母线,GFM用滤波电抗加隔离变接入同一母线。母线上的负荷部分用恒阻抗模拟(稳定工况好收敛),部分用恒功率模拟(扰动响应更真实)。建议把联络线阻抗也做成变量,因为后面分析同步机和GFM之间的功率振荡时,联络阻抗是绕不开的关键参数。
2.2 同步电机建模:完整电磁暂态模型还是二阶摆动方程
这是建模路线上的第一个选择题。Simulink里同步电机有两条路:
一条是用自带的“Synchronous Machine pu Fundamental”完整模块,包含电枢反应、阻尼绕组、励磁绕组动态,能真实反映电压和无功耦合,但状态变量多、仿真步长要求高、调参慢。
另一条是自己搭一个二阶机电暂态模型:转子运动方程加上一阶调速器模型和简化励磁模型。速度快、线性化简单,但看不到电磁暂态过程中电压、无功的变化。
我的建议是:如果课题重心放在频率稳定性和有功/惯性配合上,完全可以用简化机电模型先把核心结论跑出来;如果后期要设计GFM控制器参数、分析励磁系统对频率振荡的贡献,就必须用完整同步机模块。项目组最后用的是完整同步机模块,同时保留了一个简化机电模型版本用来交叉验证。同一个工况下,两个模型的频率响应曲线能基本对上,才敢继续往下做参数分析。
2.3 GFM控制链路:功率环到电流内环的四层结构
构网型变流器在Simulink里的控制结构一般是四层,从外到内依次是:
- 功率外环:计算有功P和无功Q,经过VSG有功-频率环节和Q-U下垂环节,生成频率和电压幅值指令。
- 电压中环:把指令电压和实际输出电压做差,经过PI调节器生成电流内环指令。
- 电流内环:对滤波电感电流做高速反馈控制,输出调制波参考值。
- PWM调制层:生成开关管的驱动脉冲。
如果只研究频率稳定性,有人会问“能不能不搭电压电流内环,直接把变流器等效成一个受控电压源?”理论上可以,因为电压电流内环带宽远高于功率环,在低频段等效成理想受控源是合理的。但在实际调参时,如果电压内环和电流内环的带宽没有拉开差距,这个等效就会失真,动态响应会和你预期的不一样。
我最终采用的是平均模型方案:功率环、电压环、电流环全部搭真实的PI控制器,但开关管用受控电压源代替,不做高频PWM载波级仿真。第一版我试过理想开关加高频PWM,跑到4秒仿真时长要半个多小时,数据量大到不好调试。改成平均模型后,同样工况十几秒就跑完,指标几乎一样。
2.4 VSG功率环的实现细节
VSG的核心是有功-频率环节。简单来说,就是让变流器的输出角频率ω满足这个关系:
ω = ω_0 + ∫ [ (P_ref − P_meas − D·(ω − ω_0)) / (2H_v) ] dt
在Simulink里实现时,用Fcn模块计算有功功率P_meas = 1.5·(v_d·i_d + v_q·i_q),经过求和、乘上增益1/(2H_v)后接入积分器,积分器输出加上额定频率ω_0,再积分得到相位角θ。这个θ同时送到Park变换、调制波生成和功率计算里,整个控制环就闭环了。
有一个极其容易踩的坑:阻尼项D的位置。有的文献把D放在功率误差内部,写成(P_ref − P − D·Δω)/(2H),有的把D放在调速器等效环节外面。这两种写法稳态结果一样,但动态响应和线性化得到的阻尼比差别很大。我采用的是“D在功率环内部、与频率偏差相乘”的写法,因为这样在标幺方程里和同步机的转子运动方程完全同构,后续做统一小信号分析时非常方便。
3. 频率稳定性仿真实验设计与参数整定方法
3.1 扰动工况设计:不能只做一个阶跃
频率稳定研究里的“扰动”不是随便设的。我设计了三种典型工况:
- 稳态负荷基础上突增10%的负荷阶跃,考察RoCoF、最低频率和恢复时间。
- 持续0.5秒的20%短时大冲击,考察频率最低点会不会触发低频减载逻辑。
- 紧急工况:同步发电机或GFM其中一台突然跳闸退出,考察剩余机组的调频能力和备用容量。
这三种工况必须在同一组控制器参数下全部跑一遍,不能给每个工况单独调一套好不容易收敛的参数。因为在工程上控制器一旦投运,参数就是固定的,扰动是随机的。每一套参数都要能扛住所有考核工况,否则就是不合格设计。
3.2 关键参数怎么来的:调差系数、惯量、阻尼的整定逻辑
参数整定是这种仿真研究里最花时间的环节。我直接把项目里用的核心参数整理成一张表,后面做复现可以直接照抄。
| 参数 | 符号 | 取值 | 整定依据 |
|---|---|---|---|
| 系统基准容量 | S_base | 100 kVA | 自定义孤岛系统基准 |
| 同步机惯性时间常数 | H_sg | 2.5 s | 参考同容量柴油发电机组典型值 |
| 同步机调差系数 | σ_sg | 4% | 一次调频常规范围3%~5% |
| 调速器时间常数 | T_g | 0.3 s | 油动机响应的典型简化值 |
| GFM额定容量 | S_gfm | 50 kVA | 设定50%渗透率便于对比 |
| GFM虚拟惯量 | H_v | 2 s | 先取与同步机惯量同级,再扫参 |
| GFM阻尼系数 | D_v | 20 | 目标阻尼比0.1以上,后反复校验 |
| GFM有功下垂系数 | m_p | 0.02 | 对应调差系数2%左右 |
调差系数要特别解释一下。标幺化下次调频的静态关系是:
ΔP_pu = −(1/σ)·Δf_pu
当σ=4%,频率偏差1%时,同步机需要提供25%额定功率的增量。这是很“硬”的调频特性。GFM的下垂系数取值逻辑类似,但要注意:GFM容量更小,如果下垂系数和同步机取一样的标幺值,实际分担的功率会按容量比例缩小,这是合理的;但如果让GFM的下垂特性太硬,它会抢走过多的功率增量,导致同步机出力反而不匹配,这个问题后面专门会讲。
虚拟惯量H_v的物理含义要再强调一遍:它表示GFM控制环节能模拟一台惯性时间常数为H_v的同步机。但GFM并没有真正的机械储能,H_v只是控制环路里的计算参数。H_v过大相当于在控制环路里插入了一个巨大的相位延迟,结果可能是“而不是多了惯量,而是反应慢到振荡”。这个反直觉的结论在第4章的结果里会体现得很明显。
3.3 指标三件套:RoCoF、最低频率、稳态频差
频率稳定性评估不要只盯一个指标,至少要三个一起看:
- RoCoF(频率变化率,Hz/s):扰动后df/dt的最大值,惯量不足时这个值会异常大,实际系统里保护装置可能因此误动。仿真里用频率曲线在0.05秒到0.2秒区间做线性拟合来提取。
- Nadir(最低频率,Hz):扰动后频率的最低点。低于低频减载整定值会直接甩负荷,这个值由惯量大小和一次调频响应速度共同决定。
- 稳态频差(Hz):一次调频结束后的频率偏差,由总调差系数和扰动大小决定。想消除稳态频差必须加二次调频(AGC),本文不模拟AGC,但仿真结论里能看到“还差多少”。
举个例子说明这三个指标怎么用。100kVA系统,负荷从80kW阶跃到90kW,阶跃量0.1pu。如果只有同步机运行(H_sg=2.5s),初始RoCoF的估算值大约是:
Δf_init ≈ −0.1 × 50Hz / (2 × 2.5s) = −1.0 Hz/s
如果把GFM也投进来,系统等效惯量H_eff大约从2.5s提高到3.75s,同工况下RoCoF会变成约−0.67Hz/s。Nadir和稳态频差则要看调频能力和阻尼的综合作用。这三个数值最后都要和仿真结果对上,对不上就是模型里有bug。
4. 仿真结果如何解读:三张频率响应曲线图
4.1 同步机单机带负荷:减速、调频、回稳的过程
先看参考工况:只有同步发电机带全部负荷,负荷突增10%。频率曲线形态是经典的“快速下坡、缓慢爬坡、微弱振荡、最终平直”。
扰动发生的瞬间,频率以接近常数的斜率快速下降,这段下降斜率就是RoCoF,它基本由惯量H决定。随后调速器开始动作,汽轮机或柴油机的机械功率逐渐增加,频率下降速率放缓,来到最低点Nadir。再往后,调速器持续补功率,频率回升,最终稳定在一个低于额定值的位置。这个稳态位置和调差系数直接相关。
如果阻尼不足,回升段会叠加明显的衰减振荡,振荡频率通常在0.5到2赫兹之间,和转子机械动态、励磁动态有关。振荡收敛时间超过十几秒就说明阻尼太弱或者调速器时间常数过大。
这里有一个容易被忽略的细节:频率曲线最低点的出现时间,并不等于调速器开始动作的时间。Nadir一般出现在扰动后1到3秒之间,具体取决于惯量大小和调速器响应速度。惯量越大,Nadir出现越晚,但最低点可能更高也可能更低,因为调速器的功率补充也被“拖延”了。
4.2 加入GFM之后的频率响应:收益和副作用一起来
同工况下把构网型变流器接入系统,频率曲线会有三个可见的变化:
第一,初始RoCoF显著变小。因为等效惯量增加了,这是GFM最直观的贡献。
第二,频率最低点抬高,恢复过程整体变快。GFM的功率环响应速度远快于同步机的调速器,它能在扰动初期就快速增加有功输出,相当于给系统额外提供了一次“快调频”。
第三,曲线上升段会出现新的振荡尾巴。这个振荡频率通常在1到5赫兹,对应GFM虚拟转子和同步机真实转子之间的机电振荡模式。振荡的强弱和虚拟惯量H_v、联络线阻抗、阻尼系数D_v都有关系。
最值得警惕的情况是:如果你为了追求更低的RoCoF,把虚拟惯量H_v盲目调到很大的值,比如从2s调到10s,频率下降确实更缓了,但恢复段的振荡周期也会大幅拉长,频率会长时间偏离额定值。虚拟惯量并不是越大越好,它不是免费的“物理储能”,而是“用响应延迟换取缓和变化率”。做频率稳定设计时,这本质上是一个权衡。
4.3 参数扫表:虚拟惯量和阻尼系数各管什么事
为了把参数影响定量化,我用Matlab的for循环批量修改H_v和D_v,在同样的10%负荷阶跃下跑完Simulink仿真,自动提取RoCoF、Nadir、振荡收敛时间。下面是典型的一组结果,数值有代表性:
| H_v (s) | D_v | RoCoF (Hz/s) | 最低频率 (Hz) | 收敛时间 (s) | 评估 |
|---|---|---|---|---|---|
| 2 | 20 | 0.68 | 48.9 | 4.2 | 稳定,响应快 |
| 4 | 20 | 0.55 | 49.2 | 6.1 | 稳定,收敛变慢 |
| 6 | 20 | 0.45 | 49.4 | 9.8 | 接近边界,小心振荡 |
| 6 | 50 | 0.45 | 49.4 | 3.9 | 稳定,阻尼补偿有效 |
| 8 | 50 | 0.38 | 49.6 | 5.7 | 稳定,RoCoF最优 |
从这张表能读出三个结论:
- 虚拟惯量主要管RoCoF和Nadir,对收敛时间影响是负面的。
- 阻尼系数主要管振荡收敛,对RoCoF基本没贡献。
- 工程上合理的整定顺序是“先按RoCoF约束选惯量,再按收敛时间要求找最小阻尼”,二者不能互换。
这张表在论文里配一张三维曲面图,参数影响规律会非常直观。
5. 用Matlab做稳定性定量分析:不能只靠肉眼看波形
5.1 从Simulink模型里提取线性状态空间模型
看波形只能得到“它好像是稳的”这种模糊感觉。要回答“阻尼比是多少”“临界参数在哪”这类问题,必须在工作点附近把模型线性化。Matlab的linearize命令可以自动从Simulink模型里提取状态空间模型。
基本流程是:先把Simulink模型里负荷扰动输入点设成线性化输入,把系统频率测量点设成线性化输出,用findop找到稳态工作点,最后调用:
mdl = 'sg_gfm_system'; io(1) = linio('sg_gfm_system/Step_Load', 1, 'input'); io(2) = linio('sg_gfm_system/Freq_Measurement', 1, 'output'); sys = linearize(mdl, io);得到状态空间模型后,用eig和damp直接看主导特征值和阻尼比。一个实用的习惯是:确定关键模式对应的状态变量名,看它是不是VSG的虚拟角频率状态或是同步机的转子角频率状态,这样才能把“小信号分析结论”对应到“具体哪个控制器环节出了问题”。
5.2 特征值分析、根轨迹和相角裕度怎么用
拿到线性化模型后,我通常会做三件事:
第一,用damp函数看所有特征值的频率和阻尼比,先把阻尼比低于0.1的主导模式找出来。这个模式对应的物理环节就是系统最脆弱的地方。
第二,对临界参数做根轨迹扫描。比如把D_v从5扫到50,画一对主导特征值在复平面上的移动轨迹,看它们什么时候跨过虚轴。D_v低于某个值时系统失稳,这就是阻尼系数的理论下限。
第三,对GFM的功率环开环传递函数用margin命令读相角裕度。相角裕度在45度到60度之间时,动态响应舒适;低于30度,超调大、容易触发保护;低于0度,闭环必然失稳。
这套方法最大的好处是能“预判”非线性仿真的结果。很多时候你调整一个参数,非线性Simulink模型还在慢吞吞地跑波形,线性化模型已经几秒内算出这个参数会引发失稳,效率天差地别。
5.3 线性化分析和非线性仿真必须互相验证
我强烈建议养成一个习惯:任何一次参数调整,都先用线性化分析给出预判,再用非线性时域仿真验证。比如线性化分析说“D_v降到10时会出现一对特征值实部为正”,再跑时域仿真,基本都会复现出发散的振荡,只是波形因为有非线性限幅和饱和环节,形态更丰富。
反过来,如果非线性仿真里看到了线性模型里没有的振荡,那通常就是限幅、死区等环节在起作用。这种“线性模型预测不到的现象”本身就是很好的分析素材,说明系统里存在非线性因素在关键工况下被激活了。
值得一提的是,线性化之后,后面设计分散式控制器、加阻尼控制器时都会需要这个状态空间模型。整个仿真代码可以复用,后续扩展很方便。
6. 调试中的典型问题与排查经验
6.1 仿真一开始就发散,或者报代数环错误
这是Simulink建GFM模型最常遇到的第一个坑。现象是运行到t约等于0时步长骤减,要么报错,要么数值直接溢出。
原因通常有两个:一是电压源直接串联电感形成纯电抗支路,导致代数环;二是VSG积分器的初始值不对——积分器默认从0开始,而额定工况下它应该初始化为额定角频率314.159 rad/s左右。
解决办法也很简单:在电压源或受控源出口串联一个很小的电阻(比如0.001Ω),打破代数环;把积分器初值设为额定角频率而不是0;功率测量模块放在滤波电感后面,而不是直接取调制波信号。这几处改完,大部分“初始发散”问题就消失了。
6.2 频率曲线持续振荡但不发散
振荡不消失,多半是阻尼不足或控制带宽间隔不够。先试加大D_v,如果振荡立刻衰减好转,说明阻尼环节设计有效,只是取值不够。如果加大D_v后没反应,可能是功率测量值P_meas里混入了电流内环的高频纹波,导致VSG功率环输入信号“脏”了。这时在功率测量后加一个一阶低通滤波器,截止频率一般取50到200赫兹,既能滤掉纹波又不会影响低频段频率响应。
还有另一种情况:电压环的带宽和功率环的带宽靠得太近,两个控制环之间发生交互振荡。检查一下两组PI参数对应的闭环带宽,确保电压环带宽至少是功率环带宽的10倍以上,否则就需要重新整定。
6.3 稳态频率偏差和调差系数对不上
假设你设了σ=4%,负荷阶跃0.1pu,估算稳态频差应该是−0.4%即大约−0.2Hz。但仿真跑出来只有−0.1Hz,偏差正好是两倍。这种对不上的问题,十有八九是基准功率的问题。
Simulink里很多电机和多领域物理模块的标幺基准是自己定义的,不一定等于你心里想的那个额定容量。负荷模块如果用kW而不是pu数值输入,两边的基准就对不上,计算出来的功率偏差自然差一倍。这类错误非常隐蔽,排查方法是把所有信号的单位统一换算成同一基准下的pu值,再做一次手算核对。
6.4 GFM和同步机的功率分配不均匀
两台设备并联运行时,频率是全局统一的,但有功增量如何分配取决于各自的调差系数和容量。如果GFM的下垂系数设置得比同步机的调差特性“硬”得多,在负荷突增时GFM会抢走大部分功率增量,严重时甚至把同步机推到逆功率状态。
要让功率按容量比例分配,原则是调差系数与容量成反比。即小容量的GFM应该取更大的标幺调差系数,或者加一个容量权重系数。这个设计方案需要在仿真里验证:同步机和GFM各承担的有功增量之比,应该等于它们的容量之比。
6.5 问题排查速查表
| 现象 | 第一排查项 | 第二排查项 | 判断标准 |
|---|---|---|---|
| 初始发散/代数环 | 电压源串联阻抗、积分器初值 | 功率测量位置 | 0.1秒内曲线平缓 |
| 频率持续振荡 | 阻尼系数D_v | 功率低通滤波、带宽间隔 | 阻尼比大于0.1 |
| 稳态频差异常 | 基准功率不一致 | 负荷单位换算错误 | 与调差系数计算一致 |
| 功率分配不均 | 调差系数与容量失配 | P_ref设定错误 | 增量按容量比例分配 |
| 收敛特别慢 | 变步长求解器容差 | 平均模型开关频率设置 | 同类工况与文献时间同量级 |
最后再分享一点我在实际操作中的体会:做这类仿真研究,不要一上来就去追求“和真实系统一模一样”的复杂模型。先把最小有效模型搭起来——一台同步机带负荷跑通,再加一台GFM,跑通一套完整工况,提取指标,再做参数扫描。每一步都确保前一步的结论是扎实的,再去加复杂度。虚拟惯量、阻尼、调差系数这些参数之间的耦合关系一开始不摸清楚,模型再复杂也只是给自己挖更多的bug。先掌握同步电机和构网型变流器的配合逻辑,再去看异常工况,思路会清晰很多。这个课题后续还能扩展的方向很多,比如多机系统、微网离并网切换、考虑储能能量约束的限功率控制,以及带通信时延的分散式调频。每一条路,都建立在本文这套基础仿真框架之上。