
1. 为什么我不建议你从教科书第一章开始啃VSG如果你正在读电力电子或者新能源相关的研究生或者刚入职做光伏逆变器、储能PCS的工程师大概率听过**虚拟同步发电机VSG**这个词。我第一次接触VSG的时候翻了三天的文献满脑子都是转子运动方程、无功-电压下垂、虚拟惯量这些概念但真正让我把VSG搞明白的不是哪篇论文而是我在Simulink里搭出第一个能跑通故障工况的并网模型的那个下午。这篇内容就是把我自己从零搭VSG并网模型、模拟线路三相故障的完整过程拆开来讲。不扯太多公式推导重点放在Simulink里怎么搭、参数怎么设、三相故障模块怎么用、跑出来波形不对怎么排查。适合已经有一点Simulink基础、但面对VSG并网和故障仿真不知道从哪下手的人。如果你连Simulink的Simscape Electrical工具箱都没打开过建议先花半小时熟悉一下基本操作再回来。我见过太多人卡在两个地方一是VSG控制环搭出来了但并网之后功率振荡得根本没法看二是想模拟线路故障结果发现Simulink里的三相断路器模块怎么设都不对要么不动作要么动作了波形完全不对。这两个问题我都会在下面详细讲。2. 搭建前的全局规划主电路拓扑与控制架构怎么定2.1 主电路选型三相全桥加LC滤波是起步标配VSG并网模型的主电路最常用的结构是三相全桥逆变器 LC滤波器 线路阻抗 电网。为什么用LC而不是LCL因为对于VSG这种需要模拟同步机惯性和阻尼特性的控制策略来说LC滤波器在低频段的相位特性更友好LCL虽然高频衰减更好但谐振峰的处理会额外增加控制复杂度。如果你做的是大功率储能PCSLCL是行业主流但仿真验证阶段先用LC跑通逻辑后面再换LCL也不迟。直流侧我用的是理想直流电压源因为VSG的核心验证点在交流侧的控制行为直流侧动态可以先简化。如果你要研究直流母线电压波动对VSG的影响那就需要把直流侧换成带电容的整流源或者电池模型。线路部分我用了三相串联RL支路来模拟线路阻抗。这里有个细节线路阻抗的X/R比直接影响VSG的功率解耦效果。低压配电网X/R比小有功无功耦合严重高压输电网X/R比大近似解耦。我一般先设R0.1ΩL2mH对应X/R大约在3.77左右50Hz下X0.628Ω这个值比较接近中压配网的典型工况。2.2 VSG控制架构有功-频率环和无功-电压环的拆解VSG控制的核心是两层有功-频率控制模拟同步机的转子运动方程无功-电压控制模拟同步机的励磁调压特性。有功环的方程是J·dω/dt (Pref - Pe)/ω - D·(ω - ωg)其中J是虚拟惯量D是阻尼系数Pref是有功指令Pe是实际输出有功ω是VSG输出角频率ωg是电网角频率。这个方程在Simulink里用积分器加反馈就能实现但关键在于J和D的取值。J太大响应慢功率跟踪迟钝J太小频率波动大失去惯量支撑的意义。我一般先用J0.5 kg·m²D10 N·m·s/rad起步然后根据波形微调。无功环的方程是K·dE/dt Qref - Qe Dq·(Eref - E)其中K是励磁惯性系数Dq是无功-电压下垂系数E是VSG内电势幅值。这个环相对简单但Dq的符号和大小容易搞错。Dq为正时无功增加会导致电压幅值下降这是符合同步机励磁特性的。如果你发现无功输出和电压的关系反了先检查Dq的符号。2.3 坐标变换与PWM调制别在角度上栽跟头VSG输出的是三相调制波需要经过PWM调制驱动开关管。我用的是SPWM载波频率10kHz调制比0.8。这里最容易出问题的是角度VSG输出的角频率ω需要积分成角度θ这个θ用于Park变换和反Park变换。如果你发现并网电流波形畸变严重或者功率振荡十有八九是θ的初始值或者积分器初始条件没设对。我的做法是在并网前先让VSG空载运行用锁相环PLL锁定电网相位然后把VSG的θ初始值设为PLL输出的θg这样并网瞬间相位是对齐的冲击电流最小。3. 三相故障模块的实战用法从参数设置到动作逻辑3.1 三相故障模块和三相断路器的本质区别很多人第一次在Simulink里找故障模块会直接搜“breaker”然后用Three-Phase Breaker去模拟故障。这是错的。Three-Phase Breaker是用于正常投切操作的它的动作逻辑是“合闸-分闸”而故障模拟需要的是“正常运行-短路-恢复正常”这个逻辑。Simulink里专门有一个Three-Phase Fault模块在Simscape Electrical的Elements库里面。Three-Phase Fault模块可以设置故障相单相、两相、三相、故障电阻Ron、接地电阻Rg、外部控制信号用于触发故障和清除故障。我一般用外部控制信号因为这样可以精确控制故障的发生时刻和持续时间。3.2 故障参数设置接地电阻和故障电阻的取值逻辑故障电阻Ron和接地电阻Rg的取值直接影响故障电流的幅值。金属性短路Ron0.001ΩRg0.001Ω会产生极大的短路电流对VSG的限流能力是极端考验。经过渡电阻短路Ron0.1ΩRg0.5Ω更接近实际工况比如线路对树枝放电、绝缘子闪络等。我建议先跑金属性短路看看VSG的限流环能不能把电流限制在1.5倍额定以内。如果限流环响应太慢电流冲到3倍以上那就要回去调限流环的PI参数。然后再跑过渡电阻短路验证VSG在非极端工况下的行为。3.3 故障时序控制用Step模块还是Stateflow故障的触发和清除我一开始用两个Step模块叠加一个控制故障投入一个控制故障清除。但后来发现Stateflow更灵活因为可以设置故障序列比如“0.5s发生三相短路0.6s切除故障0.8s重合闸”。如果你只是做单次故障仿真Step模块足够了如果要模拟重合闸或者多次故障Stateflow是更好的选择。这里有个坑Three-Phase Fault模块的外部控制信号是逻辑信号1表示故障投入0表示故障清除。如果你用Step模块Step time设0.5Initial value设0Final value设1那故障在0.5s投入但永远不会清除。你需要第二个Step模块Step time设0.6Initial value设1Final value设0然后把两个Step模块的输出相乘或者用逻辑与才能实现“0.5s投入0.6s清除”。4. 并网逻辑与限流环故障工况下VSG能不能扛住4.1 预同步并网相位和幅值都要对齐VSG并网前必须做预同步否则并网瞬间会有巨大的冲击电流。预同步包括相位对齐和幅值对齐。相位对齐用PLL锁定电网相位然后把VSG的θ初始值设为PLL输出。幅值对齐更简单直接把VSG的E初始值设为电网相电压幅值。我一般用断路器在并网点做并网操作断路器初始状态为断开0.3s时合闸。合闸前VSG空载运行合闸后VSG开始输出功率。如果你发现合闸瞬间电流冲到几十安培先检查相位和幅值是否对齐。4.2 限流环的设计故障时VSG的保命机制VSG在故障期间必须限流否则开关管会过流烧毁。限流环的做法是检测输出电流幅值当超过阈值时切换控制模式从VSG模式切到电流控制模式。这个切换逻辑用Switch模块实现阈值设1.2倍额定电流。限流环的PI参数要调得快因为故障发生后电流上升很快。我一般把限流环的Kp设得比正常控制环大3-5倍Ki也相应增大。但注意限流环太快会导致切换时的振荡所以要在切换逻辑里加一个短时间的延时或者滞环。4.3 故障清除后的恢复VSG能不能平滑回到正常控制故障清除后VSG要从限流模式切回VSG模式。这个切换如果处理不好会有很大的暂态冲击。我的做法是故障清除后先让VSG在电流控制模式下运行0.1s等电流稳定后再切回VSG模式。切换时把VSG的积分器初始值设为当前的实际值避免积分器突变。5. 仿真跑通之后波形分析和常见异常排查5.1 正常并网波形功率跟踪和频率响应正常并网时VSG应该能跟踪有功指令和无功指令。我一般设Pref从0.5s开始从0阶跃到5kWQref保持0。观察有功输出应该在0.2s内跟踪到5kW超调不超过10%。频率应该在50Hz附近偏差不超过0.1Hz。如果功率跟踪太慢增大J或者减小D。如果频率波动太大增大D或者减小J。J和D的调节是耦合的需要反复试。5.2 故障期间波形电流限幅和电压跌落故障期间并网点电压会跌落VSG输出电流会被限幅。观察电流波形应该被限制在1.2倍额定以内。如果电流超过限幅值说明限流环响应太慢需要增大Kp。电压跌落深度取决于故障电阻。金属性短路时并网点电压可能跌到0.1pu以下。VSG的无功环会试图抬电压但故障期间电压由电网决定VSG的无功输出会增大。5.3 故障清除后波形恢复时间和振荡故障清除后VSG应该能在0.5s内恢复到正常控制模式功率和频率回到指令值。如果恢复过程中有持续振荡说明VSG的阻尼不够增大D。如果恢复太慢减小J。我遇到过一种情况故障清除后VSG的频率一直偏低回不到50Hz。排查后发现是积分器饱和了。故障期间频率环的积分器一直在积分导致输出饱和。解决办法是给积分器加限幅或者在故障期间冻结积分器。6. 几个让我调试到凌晨的坑第一个坑是Three-Phase Fault模块的接地方式。Simulink里Three-Phase Fault模块有“Ground Fault”和“Fault between phases”两种模式。如果你选错了模式故障电流的路径完全不对。三相短路应该选“Fault between phases”同时把接地电阻设得很大或者断开。第二个坑是PLL的带宽。PLL带宽太低锁相慢并网瞬间相位对不齐PLL带宽太高对电网谐波敏感相位抖动。我一般把PLL带宽设在20Hz左右阻尼比0.707。第三个坑是仿真步长。VSG的开关频率是10kHz仿真步长至少要设到1e-6s否则PWM波形失真严重。但步长太小仿真速度极慢。我的做法是先用1e-5s步长跑通逻辑确认控制逻辑没问题后再用1e-6s步长跑精细波形。第四个坑是代数环。VSG控制环里有多个反馈路径容易形成代数环。Simulink会报错或者仿真极慢。解决办法是在反馈路径里加Unit Delay模块打断代数环。7. 从仿真到实践的几点个人体会搭完这个模型之后我最大的感受是VSG的难点不在理论而在参数整定和故障工况下的模式切换。理论上的转子运动方程写出来就那几行但J和D取多少、限流环什么时候切入、故障清除后怎么恢复这些才是真正花时间的地方。另外Simulink的Three-Phase Fault模块虽然好用但它毕竟是理想模型。实际线路故障的弧阻是时变的故障相也可能不是理想的三相对称。如果你要做更真实的故障仿真可以考虑用可变电阻来模拟弧阻或者用外部数据导入的方式把实际录波数据注入仿真。最后分享一个小技巧在Simulink里用To Workspace模块把关键波形导出到MATLAB工作区然后用plot命令画图比在Scope里看方便得多。尤其是对比不同参数下的波形用MATLAB脚本批量跑仿真、批量画图效率会高很多。