风储VSG虚拟同步发电机Simulink仿真:从原理到参数整定全解析
先说个结论如果做新能源并网方向风储VSG这套Simulink仿真迟早要碰。虚拟同步发电机VSG技术这几年已经从论文概念变成工程落地的常用选项风储并网系统里加上VSG控制相当于让逆变器不再“逆来顺受”而是像一台真实同步发电机那样主动支撑电网电压和频率。这篇文章我把整套仿真从控制原理到模型搭建再到参数整定按我实际操作的过程完整写出来适合正在做毕业设计、项目预研或者刚从跟网型控制转构网型控制的同学参考。我最初接触这个题目时也踩了不少坑比如J和D参数随便填导致功率振荡、并网瞬间电流直接冲上天、储能SOC模型和风机MPPT耦合后直流母线电压崩掉等等。这篇文章不会只给一个“能跑”的模型而是把每一步为什么这么做、参数怎么来的、仿真里哪些地方最容易翻车都讲清楚你可以直接照着搭也可以在已有模型基础上查漏补缺。1. 风储VSG为什么是“虚拟同步发电机”而不是传统逆变器控制1.1 风机并网的两条路线跟网型与构网型传统风电并网大多采用跟网型控制也就是用锁相环PLL盯着电网电压的相位然后让逆变器输出电流去跟随这个相位。这种方式在强电网下没问题电网本身就又硬又稳逆变器只需要老老实实发有功、控无功就行。但到了高比例新能源场景电网里同步机越来越少系统惯量和短路容量都下降跟网型逆变器一旦遇到扰动PLL可能失锁整个系统就容易振荡甚至脱网。构网型控制就是冲着这个问题来的它不靠PLL锁电网而是自己给自己定电压幅值和频率逆变器对外呈现一个电压源特性。虚拟同步发电机属于构网型控制里最主流的一种它把同步发电机的转子运动方程写进控制器让逆变器的外特性在数学上与真实同步机等价。风储并网系统采用VSG之后风机和储能不再只是“电网的过客”而是参与了系统惯量支撑和一次调频。1.2 储能在这里到底扮演什么角色风机本身的可控性比较差风速一变机械功率就变输出功率天然波动。要让风电机组具备VSG那种“同步机性格”就需要储能来平抑功率差额。风储系统的结构通常是风机经整流后接入直流母线储能通过双向DC/DC变换器挂到同一条直流母线上然后整个直流母线通过一台电压源型逆变器并网。VSG控制作用在这个并网逆变器上储能的角色就是快速补偿风机功率波动、维持直流母线电压稳定。没有储能的话风机直接做VSG会有一个逻辑问题VSG要求逆变器能主动输出或吸收功率来支撑频率但风机受最大功率点跟踪MPPT限制风机转速和输出功率不是想变就变的。储能则是“快充快放”的功率缓冲池既能在风机出力上涨时吸收多余能量也能在出力跌落时补上缺口。仿真里如果不把储能SOC和功率限幅考虑进去VSG闭环很容易因为储能饱和而失控。1.3 VSG给风储系统带来的三个直接好处第一个好处是惯量支持。同步发电机的转子有旋转质量电网频率变化时它能自然释放或吸收动能VSG通过转子方程模拟了这个惯性过程所以在仿真波形上能明显看到频率变化变得平缓而不是像跟网型控制那样频率随PLL锁定后立刻“硬跟”。第二个好处是一次调频。VSG中通常加入有功-频率下垂控制频率跌下去时逆变器自动增加有功输出这正好可以和风储系统配合风机的MPPT功率作为基值储能作为调节量整体对外呈现出“有惯量、有下垂”的发电机特性。第三个好处是弱电网适应性。VSG不需要强电网提供稳定的电压参考它自己就是电压源所以短路比很低或者系统阻抗很大的场景下VSG的稳定性明显优于跟网型控制。这在Simulink仿真里可以通过改变电网阻抗或者增加本地负载来验证。2. 核心原理拆解VSG的转子运动方程与关键参数设计2.1 用一台“虚拟同步机”的视角看稳压与稳频VSG的核心是转子运动方程典型形式如下J * dω/dt P_m/ω - P_e/ω - D * (ω - ω_0)其中J是虚拟惯量D是虚拟阻尼ω是虚拟角速度P_m是虚拟机械功率由有功参考和下垂控制给定P_e是输出有功功率ω_0是额定角速度。同步发电机的转子方程描述的是转速变化率取决于不平衡转矩VSG就是把这一物理关系搬到逆变器控制器里。但是仅有转子方程只能得到频率和相位逆变器还需要电压幅值参考。通常VSG还会加上无功-电压下垂U_ref U_0 n * (Q_ref - Q)这样无功出力多的时候电压幅值抬高无功出力少的时候电压幅值降低模拟同步发电机励磁调节的效果。合在一起VSG控制器就输出了一个三相电压参考信号幅值来自无功下垂和电压调节相位来自转子方程积分频率也是转子方程的角速度。这里有个容易混淆的点VSG的“虚拟角速度”并不是一个实际存在的物理量它是控制器内部的状态变量。为了让读者理解我通常打个类比把VSG控制器想象成一个“数字飞轮”里面存了一个转速值这个转速值会根据有功平衡而被加速或减速然后驱动逆变器的输出相位。数字飞轮的转速变化快慢由J决定转速偏差衰减快慢由D决定。2.2 惯量J和阻尼D怎么定从二阶振荡系统说起参数设计是VSG仿真里最容易出问题的地方。J和D不是随便拍脑袋的它们决定VSG的机电振荡特性。把转子运动方程线性化可以看成典型的二阶系统振荡角频率和阻尼比大致为振荡角频率 ω_n ≈ sqrt(K_p * ω_0 / (J * S_n))阻尼比 ζ ≈ D * ω_n / (2 * sqrt(K_p * ω_0 * J / S_n))其中K_p是有功下垂系数S_n是额定容量。实际工程中通常先按照同步机的惯性时间常数来选J。比如一台额定功率50kW的VSG若希望虚拟惯性时间常数H在2秒左右则J 2 * H * S_n / ω_0^2这里的ω_0是电气角速度按2π*50314 rad/s计算。算出来J大约为0.05 kg·m^2量级但实际仿真中为了数值稳定J往往会折中取小一些比如0.02到0.08之间。D的常见经验范围是J的10到20倍左右。也有直接用阻尼比的思路设定ζ0.7左右通过上面的公式反推D。这个推导过程中需要小心的是仿真模型里的P_e是瞬时功率还是滤波后功率如果你在P_e通道加了低通滤波器滤波时间常数也会影响等效阻尼这时J和D需要重新微调。2.3 虚拟阻抗、有功-频率下垂和无功-电压下垂的配合VSG控制器的输出参考电压要经过虚拟阻抗再进入电流内环或直接生成调制波。虚拟阻抗的作用是限制短路电流、改善阻尼特性、防止并联VSG之间产生环流。虚拟阻抗通常包括虚拟电阻R_v和虚拟电感L_v典型取值是0.01到0.05 pu。R_v大一些对振荡抑制更明显但会增大稳态压降L_v大一些能改善均流但会让无功环响应变慢。有功-频率下垂系数K_p决定了频率偏差与有功输出之间的关系。按系统额定容量S_n和允许频率偏差比如允许50Hz到49.8Hz时满功率输出那么K_p (S_n / Δf) * (1 / ω_0)。换算到标幺值后K_p通常在0.01到0.05之间。无功-电压下垂系数n类似按无功满发时允许电压偏差2%到5%来定。一个比较隐晦的坑在Simulink里如果下垂控制的输入输出都采用标幺值那么K_p、n可以直接用很小的数值但如果用国际单位比如P的单位是瓦、频率是rad/sK_p就不是这个量级。建议在模型里统一用标幺值这样参数整定思路清晰也方便后续扩展到多机并联。3. 模型搭建实操Simulink里的风储VSG并网系统3.1 顶层架构先画系统框图再动手我搭这个模型的第一步是在纸上画出整个系统的电气拓扑和控制信号流。风储VSG并网系统大致分为四个物理部分风力机模型、永磁同步发电机加整流器、储能双向DC/DC变换器、VSG并网逆变器。电气拓扑上风机的PMSG输出三相交流电经不控整流或背靠背变流器整流后接到直流母线储能电池接一个双向DC/DC变换器也接到同一条直流母线直流母线再通过三相两电平逆变器经滤波电感和升压变压器接入电网。仿真里为了简化风机侧整流器可以用一个受控电流源代替储能DC/DC用平均值模型重点是验证VSG控制逻辑。控制信号流上VSG控制器输出的是调制波送入PWM发生器储能控制器根据直流母线电压误差和风机功率前馈计算功率指令风机控制器输出MPPT功率参考。这里我习惯用Simulink的Simscape Electrical搭建电气部分用普通Simulink模块搭建控制部分两者通过电压电流测量端口连接。3.2 风机与储能单元建模要点风机模型不用太复杂重点是给VSG提供一个“功率波动源”。我常用的方法是直接用一张风速-功率曲线或一个风力机转矩公式来算机械功率再经过一阶惯性环节模拟桨距控制延迟。如果用的是永磁同步发电机加不控整流发电机侧可以用一个简化的三相电压源串联同步电抗整流后得到直流电压。储能模型要看你的仿真目的。如果只验证VSG控制用理想直流电压源加一个电阻就够了但这样看不到直流母线波动对VSG的影响。更稳妥的做法是用电池模型加双向DC/DC电池内阻和开路电压用简单的受控电压源实现DC/DC用平均值模型输入是储能功率指令输出是直流母线电流。储能控制的目标是把直流母线电压控制在逆变器安全范围内通常用电压外环加电流内环。有一处细节我吃了不少亏储能功率指令和风机功率之和必须等于VSG输出有功加上损耗。如果VSG输出有功参考直接给一个固定值而不考虑风机实时功率直流母线电压就会漂移。正确做法是让储能的功率指令等于VSG有功参考减去风机输出功率同时用母线电压闭环做修正。3.3 VSG控制器内部实现含关键模块与代码VSG控制器我习惯分成四个子模块有功-频率控制器、无功-电压控制器、虚拟阻抗、电压电流双闭环。有功-频率控制器里核心是用积分模块实现转子方程。在Simulink里可以直接用Continuous库里的Integrator把转子方程写成omega_vsg 1/(J*s) * (P_ref - P_e - D*(omega_vsg - omega_0) ... (省略))但更直观的方式是搭成状态方程。我会先用一个减法器算不平衡功率再除以ω_0折算成转矩差再除以J得到角加速度积分得到ω_vsg再积分得到虚拟角度θ。注意这里的θ是电角度要和电网相位、PWM载波同步处理。无功-电压控制器相对简单按无功下垂算出U_ref再做电压幅值闭环得到E_ref。然后三相参考电压就是ua E_ref * sin(theta) ub E_ref * sin(theta - 2*pi/3) uc E_ref * sin(theta 2*pi/3)注意这里E_ref是幅值如果Simulink里用三相正弦波发生器可以直接输入幅值和频率频率用ω_vsg/(2π)相位用θ。虚拟阻抗实现方式是在参考电压上减去虚拟阻抗上的压降。例如输出电流是ia、ib、ic虚拟电阻R_v和虚拟电感L_v串联那么压降为R_v * i L_v * di/dt。用Simulink的Derivative模块求电流微分会有噪声建议用传递函数s/(T*s1)做一个微分近似或者干脆把虚拟电感等效为一阶惯性环节来处理。再往后就是电压电流双闭环。电压外环控制逆变器输出电压跟踪E_ref一般用PR调节器或dq坐标系下的PI调节器。电流内环控制电感电流限制短路电流同时给PWM提供调制波。PWM部分直接用Simulink自带的PWM Generator载波频率取10kHz左右死区时间设为2到5微秒。3.4 并网与离网切换的仿真配置风储VSG仿真的很常见做法是先让VSG带本地负载离网运行再在某个时刻闭合并网开关。离网模式下VSG自己建压建频负载由逆变器独立供电并网模式下电网和VSG共同带载。切换的关键是预同步控制也就是在闭合开关前让VSG输出电压的幅值、频率、相位都与电网一致否则并网瞬间会产生巨大的冲击电流。预同步实现方式比较多我常用的是基于锁相环的预同步用PLL检测电网相位θ_grid把VSG虚拟相位θ与θ_grid的偏差作为修正项叠加到VSG的角速度参考上。在Simulink里这个修正项的动态调整可以做成一个PI控制器输入是相位差输出是频率修正量。当相位差小于0.01rad时再合闸冲击电流会非常小。离网模式和并网模式的控制参数最好整理成两个可切换的常数集用Simulink的Variant Subsystem或者手动Switch做切换。我遇到过一种情况离网模式下虚拟阻抗作用不明显但并网后虚拟阻抗对环流抑制非常关键所以参数不能一套走天下。仿真时至少要预留两个参数组。4. 参数整定与仿真结果分析4.1 一组可落地的参数示例以一台10kW风储VSG样机模型为例我给出我自己调好的一组参数供你起步参考。参数符号数值备注额定功率S_n10 kW逆变器容量额定电压U_n380 V线电压输出端额定频率f_n50 Hz电网频率直流母线电压V_dc750 V由储能支撑虚拟惯量J0.03 kg·m^2可调虚拟阻尼D0.6 N·m·s/rad可调有功下垂系数K_p0.0002 rad/W标幺值约为0.03无功下垂系数n0.0005 V/Var标幺值约为0.04虚拟电阻R_v0.1 Ω虚拟电感L_v5 mH滤波电感L_f3 mH滤波电容C_f20 μF开关频率f_sw10 kHz这套参数在Simulink里跑起来离网空载启动后电压幅值稳定在380V左右频率在50Hz附近负载从0突增到5kW时有功大约在0.2秒内跟上频率跌落不超过0.2Hz。如果发现振荡比较明显优先调DD太小会产生低频振荡D太大会让响应变得迟钝。4.2 空载启动、并网、负载突增三个工况怎么看波形波形分析是整篇仿真里最有成就感但也最容易误判的环节。先说空载启动。启动瞬间VSG参考电压从零阶跃到额定值由于有虚拟惯量相位不会突变电压建立是一个比较平滑的过程。这里要看的是启动过程中有没有过冲如果U_ref上方有严重的尖刺一般是电压环PI参数太激进或者虚拟阻抗太小。并网工况看三样东西并网开关闭合前后的三相电流、有功功率、VSG频率。预同步做好了并网瞬间电流应该接近零之后随着VSG与电网交换功率逐渐增长。如果并网瞬间电流冲到额定电流的好几倍那就是预同步没做或者相位差补偿不足。并网后有功功率的阶跃响应可以观察J和D配合是否合理理想波形是快速上升然后小幅超调在几百毫秒内恢复稳定。负载突增工况是检验VSG惯量支撑能力的关键。在离网模式下突加负载时频率会先下降然后由于下垂控制和储能出力逐步回升。这里要注意VSG的频率动态和真实同步机一样频率最低点不会马上出现而是有延迟的这个延迟时间就是惯量支撑的体现。可以通过改变J的大小对比频率跌落深度和恢复时间理解虚拟惯量的物理意义。4.3 控制器参数对动态响应的影响对比做一个简单对比实验固定其他参数把J从0.01改到0.1观察频率曲线。J小的时候频率变化快可能跌得更深但恢复快J大的时候频率变化慢但可能振荡次数增加。D的作用更直接D增大相当于在转子上加刹车振荡衰减得更快但稳态频率偏差会变大。这两者在仿真里是“此消彼长”的关系调参过程其实就是找平衡点。有功下垂系数K_p主要影响稳态频率偏差。负载增加后VSG有功率输出增加同时频率会比空载时低一些。K_p越大同样的功率变化引起的频率偏差越小但可能会让功率环和转子方程的交互变强甚至引发功率振荡。无功下垂系数n的影响类似区别在于它作用于电压幅值调n时注意无功环在弱电网下可能变得敏感n过大会导致电压剧烈波动。我建议在调参时做一个扫描分析。使用PIMParameter Idle Management时直接看每个参数对时域的灵敏度。更简单的做法是连续运行几个参数组合把波形存到工作空间然后画在一张图上比对。我经常用Simulink的Signal Logging记录频率、功率、电压再用脚本批量画图比自己盯示波器高效得多。5. 常见问题与排查技巧实录5.1 仿真发散、数值溢出搭Simulink模型最常遇到的第一个问题就是仿真一开始就发散波形直接飞到十几万。排查顺序我建议先看电气侧电感电流的微分方程在仿真步长过大时容易数值不稳定。如果你的求解器选的是变步长最大步长默认可能偏大把最大步长改小到1e-5秒左右再试。如果还是发散就看控制侧有没有代数环。虚拟阻抗里用了Derivative模块或者电压电流双闭环里出现直接反馈会形成代数环Simulink需要迭代求解容易振荡。解决办法是在微分或反馈环节加上滤波和小延迟比如在电流反馈上串一个一阶低通。还有PWM生成器如果载波频率和仿真步长不匹配也会导致调制波乱跳。载波10kHz时至少要让仿真步长能解析每个载波周期建议最大步长不超过载波周期的四分之一。5.2 并网瞬间电流冲击大并网冲击大九成是预同步没做好。你要检查并网开关前VSG输出电压与电网电压是不是幅值一致、频率一致、相位一致。Simulink里可以先看Scope里的三相电压把两个电压源画在一起肉眼确认相位对齐。相位偏差大时即使频率一样也没用。另一个原因可能是并网开关用了理想开关但闭合瞬间没有考虑硬同步。我处理方式是加一个串联小电阻的软并网电阻合闸后延时0.1秒再旁路这样能显著降低冲击电流。实际工程中也有预充电电阻仿真里用串联电阻加延时旁路开关模拟效果很好。5.3 有功/无功波动不收敛如果并网后有功功率长时间低频振荡不停衰减那基本是J、D、下垂系数三者匹配出了问题。我排查时会先取消下垂只保留J和D看转子方程本身稳不稳定。如果不加下垂也振荡那就回到J和D的匹配如果稳定再逐步加上下垂观察系统是否因下垂增益过大引入新的振荡。无功波动不收敛时优先检查虚拟阻抗和电压环。虚拟电感L_v太大或虚拟电阻R_v太小会让无功环阻尼不足。另外无功-电压下垂中的Q_e测量如果用瞬时无功而没有滤波波动会很厉害。我通常给Q_e加一个100Hz或50Hz陷波或低通滤波截止频率设到20Hz左右。5.4 与PLL相关的相位跳变问题有意思的是VSG虽然不依赖PLL工作但在并网预同步、离网切换或者电网频率变化时你可能还是会用到PLL作为检测工具。如果在仿真中发现PLL输出的相位在电网电压跌落时突然跳变导致预同步修正逻辑紊乱那要留意PLL的带宽。PLL带宽太高会把谐波引入相位太低又跟不上电网频率变化。我的做法是给预同步PLL设置一个带宽为10Hz左右的二阶环路同时在相位差计算时做角度归一化把差处理到[-π, π]区间。否则角度差从π跳到-π时PI控制器会瞬间饱和合闸时刻就错了。这个细节不处理后面所有波形看起来都会“差点意思”。5.5 几个让你少走弯路的仿真小习惯最后分享几个我自己坚持的建模习惯第一每个控制环路都要加合适的饱和限幅特别是VSG的角速度参考、储能功率指令、电压幅值参考限幅能防止异常工况下控制器状态越飞越远。第二在关键测量通道上加一个小的滤波时间常数但滤波时间常数不要超过系统最快时间常数的十分之一否则你看到的波形全是滤波器的假象。第三把参数用基础工作空间变量保存模型里的常量一律改成参数名这样批量调参时不用一个一个打开对话框修改还能用脚本自动整定。我个人体会风储VSG仿真最耗时间的不是搭模型而是理解那些参数之间的耦合关系。J、D、K_p、n、虚拟阻抗每一个单独看都不难放到一个闭环系统里就互相纠缠。但只要把转子方程这条主线抓牢所有现象都能回到“功率不平衡导致转速变化”这个最朴素的逻辑上。你调试的时候多想想“如果这是一台真实的柴油发电机它会怎么动”很多参数选择就变得有直觉了。这套仿真做完之后你在跟网型控制基础上积累的经验也能自然迁移过来后续再做构网型储能、多机并联只是在这个模型上做加法而已。