
搞新能源并网仿真这几年被问得最多的问题就是风机光伏接进电网之后系统惯量越来越低扰动一来频率就抖得厉害怎么在不过度改造硬件的前提下解决我自己的答案是做一套“风储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。我经常用的一组初始值是J8D40标幺制基准功率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/10100Hz左右。同样方法先算出电压环PI再用阶跃响应微调。这个方法的优点是不用反复试凑一次可以订到能稳定运行的区间。我这边调好的一组参数是电流环Kp3.2Ki180电压环Kp1.8Ki40。不同容量系统数值上会有差异但整定流程是通用的重点还是理解“带宽逐级外推”的逻辑。4.3 仿真步长、解算器与运行技巧Simulink仿真电力电子模型解算器选择非常重要。我强烈推荐变步长ode23tb或ode15s它们对刚性系统处理得好。固定步长如果设得过大开关动作瞬间分辨不出来波形毛刺严重设得过小仿真慢到怀疑人生。我的经验是取载波周期的五十分之一作为最大步长。比如PWM载波10kHz周期100微秒那max step size设为2e-6秒既能分辨开关纹波又不至于太慢。如果只是看低频动态频率响应可以适当放宽到载波周期二十分之一波形没那么精细但趋势对速度快很多。仿真开始前清空工作区用clear all但保留已经初始化好的参数脚本。模型里不要用无穷大质量的理想导线要加小电阻。母线电容需要设置初值电压否则启动瞬间充电电流极大容易触发限流仿真直接崩。5. 仿真结果怎么看波形解读与性能评估5.1 频率响应波形扰动后VSG如何扛住给电网频率加一个阶跃扰动比如t0.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参数过大导致控制输出震荡——先减小电流环PILCL谐振未阻尼——加阻尼电阻。波形毛刺基本都是步长问题。我踩过的一个坑是订阅的高频信号比如逆变器输出电压的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转子方程响应储能与风机配合吐纳功率电网得到惯量支撑”。这条链路你心里清晰了仿真细节出问题你也能一眼看出是哪个环节的逻辑出了问题。调参从粗到细验证从整体到局部模型越复杂这个顺序越重要。