☰
风储VSG仿真平台:虚拟同步发电机惯量支撑与Simulink建模实践
2026/10/2 9:48:03 网站建设 项目流程

搞新能源并网仿真这几年,被问得最多的问题就是:风机光伏接进电网之后,系统惯量越来越低,扰动一来频率就抖得厉害,怎么在不过度改造硬件的前提下解决?我自己的答案是做一套“风储VSG”仿真平台,用虚拟同步发电机(VSG)算法把储能和风机变流器改造成一台“数字同步机”,让它在电网眼里看起来就是一台有惯量、有阻尼的发电机。这篇文章就是围绕这个仿真项目展开的,我会把整个系统的建模思路、每个关键模块的Simulink实现、参数整定逻辑和踩过的坑一次说清楚。适合正在做电力电子并网仿真、新能源微电网研究或者准备毕业设计的同学参考,看完至少能少走一个月弯路。

1. 为什么风储并网需要虚拟同步发电机

1.1 风机并网的老大难:缺惯量、缺支撑

传统火电水电发电机组里,旋转发电机自带巨大的转动惯量。电网频率一旦波动,转子会像飞轮一样储存或释放动能,自动对频率变化形成缓冲。这就是电力系统“惯量支撑”的来源。风机就完全不一样了。现在主流的风力发电机(双馈和永磁直驱)都通过变流器并网,变流器本质上是一个电力电子接口,它和电网之间没有物理转子的直接耦合。电网频率跌落的那一瞬间,风机如果不加特殊控制,几乎不会像同步机那样本能地多出力。

结果就是高比例风电接入的电网,惯量水平断崖式下降。同样的功率扰动,以前频率只掉0.1Hz,现在可能掉0.4Hz甚至更多。弱电网环境下风机还容易触发低电压穿越、振荡甚至脱网。这个背景是理解后面所有控制逻辑的前提——我们做VSG,就是在仿真里给风储系统补上那部分缺失的“旋转惯量”。

1.2 VSG到底在模仿什么:同步发电机的“灵魂”

VSG的核心不是去模仿同步发电机的外观,而是模仿它的两个最本质的数学模型:转子运动方程和励磁绕组特性。转子运动方程决定了有功和频率之间怎么互动:

[ J\frac{\mathrm{d}\omega}{\mathrm{d}t} = P_m - P_e - D(\omega - \omega_n) ]

其中J就是虚拟惯量,D是阻尼系数,Pm是机械功率给定,Pe是逆变器实际输出有功。这个方程说白了就是在告诉逆变器:你当前输出功率和给定值有偏差,那你就要按这个偏差改变你输出的频率。频率不再是一拍脑袋定死的,而是像真实转子一样“转”出来的。

励磁特性对应的是无功电压控制,通常加上无功下垂:

[ E = E_0 + n_q (Q_{ref} - Q_e) ]

或者用电压偏差替代无功偏差,本质都是复现同步机“励磁越大、机端电压越高”的特性。这两套方程放进控制器里,再配合电压电流双闭环输出调制波,变流器就能表现得像一台有转动惯量的同步发电机。项目里所有让我觉得“有意思”的波形,比如频率扰动后的缓变过程、功率振荡后的收敛动态,都是这两个方程跑出来的。

1.3 储能在这里的角色:功率缓冲与母线稳压

风机是强波动性的电源,风一阵,出力就跟着一阵。如果让VSG直接控制风机变流器,风速突变时功率跟不上,VSG的转速方程就会被拉扯得很难看。所以要在直流母线上挂一组储能,通过双向DC/DC变换器跟直流母线连接。

储能干两件事。第一件事是平抑波动:风机出力突然高了,储能充电;风机出力突然低了,储能放电,把直流母线电压控制在设定值附近。第二件事是给VSG控制提供功率储备。VSG需要输出虚拟惯量的能量来源,储能就是那个“能量池”。这块在Simulink里用直流电压外环加电流内环的Buck-Boost双向变换器来实现,控制逻辑不复杂,但它的动态直接决定了整个VSG系统的稳定性。

2. 风储VSG系统的整体架构与关键技术选型

2.1 系统拓扑:风机、储能、变流器怎么接

整个系统的功率链路我建议这样布:风机经过整流器整流到直流母线,储能通过双向DC/DC变流器也接到同一条直流母线上,母线上再并联一个三相逆变器作为VSG并网接口,逆变器出口接LCL滤波器、隔离变压器、线路阻抗,最后接在大电网上。这个拓扑结构清晰,各子系统独立建模、独立调参,后面出问题也好定位。

直流母线是整个系统的压强阀。风机整流器和储能DC/DC一起维持母线电压,VSG逆变器从母线上取能量注入电网。仿真的时候给母线电压加一个测量点,所有功率平衡都会反映在这个电压波形上。项目里我习惯把电网、线路、负载这些“外部环境”单独放一层子系统,方便切换强电网和弱电网两种工况——弱电网用更大的线路阻抗模拟,很多时候你想要的效果在强电网下根本看不出来,一换弱电网立刻现原形。

2.2 能量管理策略:什么情况下用VSG,怎么切

VSG不是随时都在满功率输出的。实际运行中要分模式:正常并网运行,VSG按有功和无功参考值输出;频率跌落上升超过死区时,VSG利用虚拟惯量主动调整输出;风速波动导致母线电压偏高时,储能优先吸收。这些模式之间的切换用状态机或者简单的条件判断就能做,关键要设置好滞环,防止在边界处来回跳。

这个项目里我用了最简单的三模式策略:模式一是风机MPPT最大功率跟踪,储能只维持母线电压,不参与功率输出;模式二是电网频率扰动,VSG根据转子运动方程动态调整有功输出;模式三是孤岛或弱网下,VSG独立带载,频率电压全靠虚拟参数撑住。这三个模式用一个两输入的Mode选择开关切换,仿真跑起来逻辑非常清晰。等你能把这三个模式都跑顺,再看多机并联、一次调频这些进阶功能就顺理成章了。

2.3 技术选型的几个关键考量

风机类型选永磁直驱还是双馈,直接影响建模复杂度。我建议仿真里优先用永磁直驱(PMSG),结构简单,全功率变流器跟VSG的配合也自然。双馈的话转子侧和网侧两个变流器都要建模,参数更多,初学容易陷进去调不完的PI。

储能容量不能随意设置。按我实测的经验,仿真时储能容量至少要能支撑VSG在额定功率下持续输出一个惯量响应周期的时间,否则频率动态还没结束,储能就亏空了。取额定功率的10%至20%、持续响应时间大于2秒,基本够用。电池模型我用的是Simulink自带的Simplified Battery,选择内阻加开路电压模型,别用那种很复杂的电化学模型,仿真速度会被拖得很慢。

3. Simulink建模实操:手把手拆解每个模块

3.1 风电机组建模:风速、传动链、MPPT

风机子系统中我分了三块:风速模型、气动模型和发电机整流模型。

风速模型不要只给一个常数风速。至少用四分量模型:基本风、渐变风、阵风和随机风。随机风用Band-Limited White Noise加一阶低通滤波生成,模拟自然风的连续性。风速突变是考验VSG的最好场景,所以风速输入口要留一个Step信号源方便做阶跃测试。

气动模型按叶素动量理论近似,用公式:

[ P_w = 0.5 \rho \pi R^2 v^3 C_p(\lambda, \beta) ]

重点在Cp曲线。工程上常用多项式拟合,比如:

[ \lambda_i = \frac{1}{\frac{1}{\lambda + 0.08\beta} - \frac{0.035}{1 + \beta^3}} ]

[ C_p = 0.5176 \left( \frac{116}{\lambda_i} - 0.4\beta - 5 \right) e^{-\frac{21}{\lambda_i}} + 0.0068\lambda ]

这段公式在Simulink里用Fen模块或者MATLAB Function模块实现。风速变化时,Cp和叶尖速比λ联动,输出机械转矩给传动链。传动链用两质量块模型模拟,电机侧惯量加齿轮箱折算惯量,用二阶传递函数等效。你如果觉得两质量块太复杂,先用单质量块也行,但低频振荡现象会被抹掉,早期看惯量响应够用,研究次同步振荡就不够了。

永磁发电机的模型可以直接用SimPowerSystems里的永磁同步电机模块,转矩由风机侧给定,定子接三相整流桥到直流母线。整流器电流在电机里面,通过调节直轴电流实现转速控制。MPPT根据实时转速查表算最优叶尖速比参考值,输出转速外环的参考值。

3.2 储能与双向DC/DC模型

储能子系统包括电池模型和双向DC/DC变流器。电池接在低压侧(比如400V),通过双向DC/DC升到直流母线侧。

建模的核心是双向DC/DC控制器。Buck模式(充电)和Boost模式(放电)各有一个PI控制器:

  • Boost放电:恒压外环控制母线电压,内环控制电感电流。直流母线电压与设定值的偏差通过PI得到电感电流参考,再经内环PI产生占空比。
  • Buck充电:电池侧做恒流充电。限制充电电流上限,母线电压高于上限时自动转入充电。

用一个使能开关切换两种模式。模式切换用电压滞环,比如说母线电压高于755V切充电,低于745V切放电,中间是死区,避免继电器来回抖。DC/DC的开关频率我设20kHz,电感值按电流纹波要求算:

[ L = \frac{V_{in}(1-D)}{\Delta i_L f_s} ]

开关器件用理想开关加反并联二极管即可,不需要详细的IGBT热模型,仿真快很多。这个模块里最容易出问题是电感电流初值不为零,仿真启动瞬间容易冲高,在前面的积分器初始值里把电感电流初值设为负载电流差不多的值能避免。

3.3 VSG控制核心:转子运动方程的数字实现

这部分是整个项目的灵魂。VSG控制模块我分成四个环节:有功频率环、无功电压环、虚拟阻抗和电压合成、电压电流双闭环。

有功频率环直接在Simulink里搭:

  • 输入参考有功Pref、电网频率测量值ωg、VSG实际输出有功Pe
  • 计算功率差ΔP = Pref - Pe
  • 用惯性环节模拟转子:搭建1/(Js)的积分器,并加入阻尼项DΔω反馈

从功率到相角的数学关系是:

[ \Delta \omega = \frac{P_{ref} - P_e - D(\omega - \omega_g)}{J s} ]

[ \theta = \frac{\omega_n}{s} + \Delta\theta ]

积分器J的单位在仿真里其实是秒的平方乘以功率,要注意标幺化。如果你是全标幺系统,J一般在5到10之间。如果是有名值,J就会很大,容易数值发散。

无功电压环相对简单:读取电网电压幅值Vm,跟额定电压比较,偏差通过下垂系数nq转换为无功偏差,和无功参考值一起求解电压幅值E。公式是:

[ E = E_0 + n_q(Q_{ref} - Q_e) ]

然后在dq坐标系下合成三相电压参考信号,反变换到abc,给到电压电流双闭环。电压环输出作为电流环参考,电流环用PI控制器输出调制波。

双闭环在dq旋转坐标系里做,所以还需要锁相环。但注意,VSG并网时不需要锁电网电压相位,因为VSG自己就是相位基准,它所需要的是从电网提取频率信息。这里建议别用PLL去锁别人,只需要一个简单的频率测量模块:用三相电压过零检测算频率,或者用DLL,或者直接接到电网的实测频率总线。

相角和时间步长要理顺。我用一个积分器产生角度theta,每步累加ω*dt,这个角度用于dq变换和PWM同步。三相2.3.4调制就靠这个theta。

3.4 电压电流双闭环与PWM生成

电压电流双闭环的标准结构是:

外环电压PI:[ V_{dq_ref} = (V_{dq_ref0} - V_{dq}) * (K_{vp} + \frac{K_{vi}}{s}) ]

内环电流PI:[ V_{inverter} = (I_{dq_ref} - I_{dq}) * (K_{ip} + \frac{K_{ii}}{s}) + \omega L I_q + V_{grid_dq} ]

那个ωLIq项是解耦补偿,别忘了加。我见过太多人在Simulink里搭电流内环不加解耦,波形出振荡还以为是PI调不好,其实解耦项才是稳定性的关键。

PWM生成有两种主流方案:SPWM和SVPWM。SPWM简单,直接用比较器加三角载波;SVPWM效果好但代码多一点。我建议先用SPWM跑通系统,波形验证无误以后再看要不要换SVPWM。三角载波频率取10kHz,仿真中需要把载波频率限制在解算器可接受范围内,否则仿真步长必须设很小才能分辨,速度极慢。

3.5 并网环节:变压器、线路与电网模拟

逆变器输出先经过LCL滤波器,把高频开关分量滤掉。LCL比L滤波对高频衰减更好,但是存在谐振尖峰。需要加阻尼,最实用的方案是电阻阻尼,就是在电容支路串一个阻尼电阻,阻值可按谐振频率计算。改为无源阻尼后,谐振峰就压下去了。

滤波后接隔离变压器,Simulink里用Three-Phase Transformer模块,变比按系统电压设计,比如逆变器出口380V,变压器升到10kV。变压器模型建议用带磁滞的经典模型,勾选饱和选项,否则模拟涌流之类都是空白。

电网线路用简化的串联阻抗模型。弱电网时阻抗值加大、短路比降低,就能看到VSG优势了。电网本身用Three-Phase Source,带一定的频率扰动功能。我在做测试时,会在0.5秒给电网频率一个1Hz的小阶跃,观察VSG的输出动态。

4. 参数设计与调参实战

4.1 虚拟惯量和阻尼系数的选取逻辑

虚拟惯量J和阻尼系数D是VSG最核心的参数。J越大,系统的惯性响应越强,频率变化越平滑,但响应速度也越慢,振荡周期变长,超调增加。D越大,功率振荡衰减越快,相当于给虚拟转子加了更重的摩擦,但D过大会导致频率静差变大。

工程上的做法是先用两参数与带宽的关系定一个范围。系统有功环的闭环传递函数可近似为二阶系统:

[ H(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2} ]

其中:

[ \omega_n = \sqrt{\frac{K_\omega}{J}}, \quad \zeta = \frac{D}{2\sqrt{J K_\omega}} ]

Kω是功率频率下垂系数。先定系统带宽ωn,比如需要1到2Hz的带宽,就选ωn在6到12 rad/s。然后选阻尼比ζ在0.7到1之间,这样直接反解J和D。

我经常用的一组初始值是J=8,D=40(标幺制,基准功率10kW,基准频率50Hz)。跑出来系统处于临界阻尼,超调小,响应也够快。这个系列可以当作第一组尝试值,再微调。

4.2 双闭环PI参数整定方法

双闭环PI不要拍脑袋调。我的方法是基于带宽解耦。

电流内环带宽取开关频率的1/10到1/20,比如10kHz开关频率,电流环带宽500Hz到1kHz。对于LCL滤波器,电流内环控制对象近似为L等效电感,PI参数可以由等效电感L和等效电阻R直接算:

[ K_{ip} = L \times 2\pi \times f_{ci} ]

[ K_{ii} = R \times 2\pi \times f_{ci} ]

如果你用的是标幺制,记得与基值统一换算。

电压外环带宽取电流内环的1/5到1/10,100Hz左右。同样方法先算出电压环PI,再用阶跃响应微调。这个方法的优点是不用反复试凑,一次可以订到能稳定运行的区间。

我这边调好的一组参数是:电流环Kp=3.2,Ki=180;电压环Kp=1.8,Ki=40。不同容量系统数值上会有差异,但整定流程是通用的,重点还是理解“带宽逐级外推”的逻辑。

4.3 仿真步长、解算器与运行技巧

Simulink仿真电力电子模型,解算器选择非常重要。我强烈推荐变步长ode23tb或ode15s,它们对刚性系统处理得好。固定步长如果设得过大,开关动作瞬间分辨不出来,波形毛刺严重;设得过小,仿真慢到怀疑人生。

我的经验是取载波周期的五十分之一作为最大步长。比如PWM载波10kHz,周期100微秒,那max step size设为2e-6秒,既能分辨开关纹波又不至于太慢。如果只是看低频动态(频率响应),可以适当放宽到载波周期二十分之一,波形没那么精细,但趋势对,速度快很多。

仿真开始前清空工作区,用clear all,但保留已经初始化好的参数脚本。模型里不要用无穷大质量的理想导线,要加小电阻。母线电容需要设置初值电压,否则启动瞬间充电电流极大,容易触发限流,仿真直接崩。

5. 仿真结果怎么看:波形解读与性能评估

5.1 频率响应波形:扰动后VSG如何扛住

给电网频率加一个阶跃扰动,比如t=0.5s时让电网频率从50Hz跳到49.5Hz。看两个波形:电网频率和VSG输出有功功率。

不带VSG的普通PQ控制会立刻输出参考功率,没有额外反应。带VSG控制的系统则不同:频率突然下降时,VSG检测到θ的变化,转子运动方程会指示VSG快速增加有功输出,这个额外的有功就是“虚拟惯量支撑”。波形上有功会先冲高到120%,再缓降回参考值,形成类似同步发电机的一次调频曲线。

这个曲线才是VSG价值的直接证据。你要关注的是有功超调量和回归时间。超调量控制在20%以内,回归时间在1到2秒之间,说明惯量参数选得合理。如果超调过大,增加阻尼D;如果回归太慢,减小惯量J。

5.2 有功无功输出跟随效果

有功目标值阶跃时,VSG输出的有功波形不会像PQ控制那样瞬间跳变到新设定值,而是比较平滑地爬升到目标值,体现出惯量延缓的效果。这时候看的是动态响应和稳态精度。

无功电压环也一样,无功阶跃后输出电压幅值跟随,同时端电压有一个下垂调整。这两个波形都能帮助判断无功下垂系数nv是否设置合理。系数过大会导致电压偏差过大,过小无法提供有效的无功支撑。

5.3 直流母线电压与储能功率的联动

把风速阶跃从8m/s升到12m/s,看风机输出功率突然上升时储能功率波形。储能此时应该瞬间进入充电状态,吸收多余功率;当风机输出不足时,储能放电。整个过程直流母线电压应该被控制在很小的波动范围内,一般不超过正负5%。

VSG在做惯量支撑的那几秒钟,储能功率也要跟随有功输出增加。这说明储能在配合VSG,而不是各干各的。如果你发现VSG输出有功突然增加而储能没动作,母线电压掉得很厉害,说明储能DC/DC控制器的带宽跟不上,需要提高电流内环的带宽。

6. 常见问题与排查实录

6.1 编译都过不了?先查这几处

Simulink模型跑第一步就报错,最常见的三个原因我列一下。

第一,模型里混用了相量模式模块和瞬时值模式模块。风机、双馈异步电机有些在Phasor模式下能用,而VSG逆变器和PWM在瞬时值模式下才能跑。两套模块一混,仿真器直接拒绝工作。解决办法是全模型统一用瞬时值模式。

第二,解算器类型不对。有些模块(比如电力电子开关)不支持离散解算器,模型根本转不动。确认配置里设的是连续变步长求解器,而不是离散求解器。

第三,代数环报错。VSG控制里如果直接把逆变器输出电流反馈进功率计算再送进转子方程,很容易出现代数环。解决办法是给反馈信号加一个Memory模块或者高增益的一阶惯性环节来切断代数环。

6.2 仿真发散、波形毛刺怎么处理

仿真发散一般从这几个地方找:电压源内阻抗太小导致启动瞬间电流巨大——加限流电阻或母线电容初始值;PI参数过大导致控制输出震荡——先减小电流环PI;LCL谐振未阻尼——加阻尼电阻。

波形毛刺基本都是步长问题。我踩过的一个坑是订阅的高频信号,比如逆变器输出电压的FFT分析,max step size设得大于开关周期的1/10,毛刺就一堆。把最大步长缩到1e-6秒或更小,毛刺立刻消失。代价是仿真时间变长,但至少结果能看。

6.3 Bus Selector没有可选信号这类低级坑

热搜词里出现“simulink bus selector没有可选信号”,这个我太熟了。Bus Selector在模块图标上打开时看不到信号,很多时候不是模型有问题,而是总线数据还没正确连接。检查三点:上游模块输出端口是否为Bus类型,连线是否真正连上了(粗蓝线才是总线,细黑线不是),以及上游总线是否用了Signal Copy或标记了Bus Creator之后再接入。如果是编码后的Bus Object,要用Bus Selector手动选择信号名,注意大小写必须完全一致。

这里还有一个经验:能用端口名匹配就不要用端口序号,后续改总线结构的时候不容易断掉。

6.4 调参总是调不出理想波形的经验

我见过有人调参调了一个月,频率响应波形仍然乱震。最后发现是电网电压频率测量方式不好。用过零检测的PLL,在谐波大时锁相不准,导致VSG计算出错误频率偏差。建议改用基于dq变换的SRF-PLL,并在PLL输出加滤波器,PLL带宽选择10Hz到20Hz,快速且稳定。

另一个经验是:调参时只从一组参数开始,其它全部锁定。我先固定电网、储能、风机参数,只调VSG的双闭环,再固定双闭环,只调惯量和阻尼。一次动多个参数会导致所有问题混在一起,永远找不到归属。

还有个容易被忽略的地方:功率测量信号有延迟。用Simulink自带的Three-Phase V-I Measurement模块,它内部带滤波,实测电压电流会滞后一拍,这在功率反馈环里会造成等效延时,导致控制器相位裕度降低。解决办法是测量模块采样时间改小(1e-6)或改用基于瞬时功率理论的无滤波功率计算法。

7. 这个模型后续还能往哪个方向扩展

模型搭好之后,可以做的扩展方向不少。我个人觉得这几个方向投入产出比最高。

第一是虚拟惯量自适应控制。固定J会产生一个问题:扰动大时振荡幅度大,扰动小时响应又太慢。让J根据频率变化率自动调整——频率变化剧烈时增大J,稳定时恢复正常J——就是自适应VSG。当前的模型在惯量计算部分其实已经留好了接口,将固定J替换成一个随df/dt变化的分段函数即可。

第二是多机并联。一台VSG并网平滑,两台并联后可能会出现功率振荡环流。可以让两台机组分别使用不同的虚拟惯量,用主从控制或下垂控制协调。这个扩展对微电网研究特别有价值。

第三是弱电网适应性测试。把电网用阻抗跟容性负荷模拟,短路比降到3以下,很多非线性现象会在低SCR下显现。VSG虽然比传统控制更稳,但参数需要重新整定,这个过程可以作为一个独立的仿真专题来写。

第四是把风机侧换成光伏加储能。光伏没有机械旋转部分,功角特性更简单,但如果要模拟调频和一次调压,同样需要VSG。把风机模块替换为光伏阵列和Boost变换器,其余不变,就是一个通用的新能源VSG平台。

这几种扩展都是从当前模型出发做局部替换,不用推翻重来,所以模型的前期结构和参数命名规范非常重要。我在建模时就刻意把所有参数集中在工作区的初始化脚本里,每个参数都有中文注释,后续改参和换型都不费劲。

如果你正在做类似项目,我最后再分享一个小技巧:先把风储系统当黑盒跑通,再逐步拆开看内部信号流,不要一开始把注意力放在各个子模块的细枝末节上。整个系统的逻辑链其实是“风速变化引起功率波动,SRF-PLL检测出频率变化,VSG转子方程响应,储能与风机配合吐纳功率,电网得到惯量支撑”。这条链路你心里清晰了,仿真细节出问题你也能一眼看出是哪个环节的逻辑出了问题。调参从粗到细,验证从整体到局部,模型越复杂,这个顺序越重要。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询