ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

光伏储能虚拟同步发电机并网仿真:从转子运动方程到Simulink参数整定实战

2026/9/16 3:38:12 拓冰建站 浏览量
光伏储能虚拟同步发电机并网仿真:从转子运动方程到Simulink参数整定实战 这两年做并网逆变器仿真或者说光伏储能系统仿真的同行应该都绕不开一个词虚拟同步发电机VSG。我最初看到这个概念的时候第一反应是“这不就是给逆变器加了个惯量嘛”直到自己在Simulink里把光伏、储能、逆变器和VSG控制真正搭成一套能运行的并网仿真模型之后才发现里面门道远比想象的多——惯量给大了整个系统在那里振荡给小了下垂又调不动锁相环在弱电网下会跟着电压畸变一起发疯直流侧功率平衡更是牵一发动全身稍微没配好母线电压直接崩给你看。这篇文章就把我从零搭建“光伏储能虚拟同步发电机并网仿真模型”的完整思路、参数整定过程、仿真调试过程中踩过的坑原原本本摊开来讲。适合正在做并网逆变器仿真、写毕业论文或者做新能源并网预研的同学参考我会把为什么这样选型、为什么这样取参数、波形抖了该往哪个方向调都交代清楚争取让你少走几个月的弯路。1. 光伏储能VSG为什么值得单独搭一套仿真模型1.1 新能源占比高了以后电网缺的不只是电量光伏发电的随机性和波动性大家都很清楚白天发电高峰和负荷高峰错位晚上又完全不出力所以光伏要配储能这是目前行业里的共识。但储能配上去以后下一个问题马上就来了光伏逆变器和储能变流器本质上都是电力电子装置它们的响应速度极快快本身是优点可快到没有“惯性”就成了问题。常规新能源电站的并网逆变器绝大多数是跟网型控制也就是把自己当成一个电流源靠锁相环去跟踪电网电压的相位然后按照给定的有功无功指令往外送功率。这种做法在电网比较强的时候没有问题因为电网自己有大量的同步发电机提供频率和电压支撑。可当光伏渗透率越来越高电网里传统的旋转同步发电机被大量替代以后整个系统的等效转动惯量不断下降。这时候要是出现一台大机组跳闸或者一条线路故障电网频率的变化率会非常快跟网型逆变器只会被动地“看着”频率掉下去甚至因为电网电压畸变导致锁相环失锁然后一批新能源机组集体脱网进一步加剧事故。储能这时候只靠PQ控制是不够的它只是把电压电流指令算出来往外送本质上还是在向电网“索取”参考相位和电压支撑。要让储能真正替同步发电机承担起频率支撑和电压支撑的责任就需要一种能让逆变器表现出同步发电机外特性的控制方法。1.2 跟网型控制与虚拟同步发电机控制的分水岭虚拟同步发电机技术本质上是构网型控制里的一种实现方式。跟网型控制和构网型控制最大的区别在于谁来决定系统的频率和电压。对比维度跟网型控制Grid-FollowingVSG构网型控制Grid-Forming外特性电流源电压源依赖锁相环是锁相环失锁会直接崩溃基本不依赖自身惯性维持相位对电网频率的响应不主动响应只按指令出功通过转子运动方程自动响应频率变化弱电网适应性较差容易振荡较好能独立建立电压和频率惯量支撑能力无有参数可控这个表格看起来简单但落实到Simulink模型里差别非常大。跟网型模型的控制核心是电流内环加锁相环而VSG模型的控制核心是转子运动方程和功率计算锁相环反而变成了一个“辅助工具”只在预同步和并网监测时使用。我刚开始做的时候总想着把PLL留着后来发现它才是导致模型不稳定的最大根源。1.3 为什么先用Simulink仿真而不是直接上实物做VSG控制最忌讳一上来就碰实物。我们实验室原来有一套30kW的储能变流器平台刚开始我也想直接改控制代码做实验结果功率模块炸了两回母线电容也坏过一次后来老老实实回到Simulink先把模型调明白。原因很简单VSG的参数惯量J、阻尼D、虚拟阻抗这些玩意儿在实物上根本没法直观地“看”到它们的作用只能通过波形慢慢试效率非常低。Simulink的好处是所有的内部变量都能拖出来观察J和D的作用能一目了然参数改起来也不用重新编译烧录拖个滑块就能扫参数而且后续还能直接通过Simulink Coder生成控制器代码或者和RT-LAB、dSPACE做硬件在环联合仿真。所以先把仿真模型做扎实是成本最低、迭代最快的路线。2. VSG控制环路的数学内核从转子运动方程到电压电流双闭环2.1 转子运动方程整个VSG的灵魂同步发电机的机械特性可以用一个二阶转子运动方程来描述。VSG控制要做的事情就是把同步发电机的这个小脑移植到逆变器的控制算法里。方程长这样J * dω/dt Pm - Pe - D * (ω - ωn)这里的每一项都有清晰的物理意义J是虚拟转动惯量单位kg·m²它决定了当功率出现差额时频率变化的快慢Pm是机械功率对应到VSG控制里就是一次调频后的有功功率指令Pe是电磁功率也就是逆变器实时注入电网的有功功率D是阻尼系数它模拟同步发电机的阻尼绕组效应给频率振荡提供衰减ωn是额定角频率通常取314.16 rad/s50Hz系统。在Simulink里实现这个方程非常直接用两个积分模块串联就行先用Pm - Pe - D·Δω除以J得到角加速度dω/dt然后积分一次得到角频率ω再积分一次得到相位角θ。这个θ就是后续坐标变换和SPWM调制波所需要的相位。注意这里得到的θ不是从锁相环来的是VSG自己“转”出来的所以这套系统才能真正做到构网。2.2 有功-频率下垂与无功-电压下垂的实现路径光有转子运动方程还不够因为同步发电机还有一次调频和调压能力。在VSG控制里对应的就是两条下垂特性曲线。有功-频率下垂的表达一般是Pm Pref Kp * (ωn - ω)意思就是当电网频率降低时VSG输出的机械功率参考值要增大这样就相当于火电机组的一次调频。这里Pref通常是调度给定或者MPPT限功率后的有功指令。注意Pm出来之后不是直接接到转子运动方程的Pm端而是要再和反馈的Pe做差形成转子运动的驱动功率。无功-电压下垂则用来生成电压幅值指令E E0 Kq * (Qref - Q)当系统无功不足导致电压降低时VSG需要抬升内电势幅值来支撑电压。E0一般取额定电压幅值Kq是下垂系数Qref是无功功率指令Q是实测无功。E和前面转子运动方程算出来的θ一起构成了VSG内电势电压指令的空问矢量。2.3 电压电流双闭环从控制输出到真实功率输出VSG内电势指令不能直接驱动逆变器中间还隔着滤波器。如果直接拿这个电压去做SPWM调制好处是结构特别简洁很多论文里也这么做但问题在于逆变器输出电压受直流母线电压利用率和负载波动影响很大波形质量和抗扰动能力一般。所以我采用的是更工程化的做法VSG输出的是电压幅值和频率后面再接电压外环和电流内环。电压外环的作用是让逆变器输出电压跟踪VSG生成的内电势指令电流内环则提供快速的过流限制和阻尼。在Simulink里这个环节通常把三相电压电流变换到dq坐标系下做PI控制电压环带宽取100~300Hz电流环带宽取1~2kHz两个带宽要拉开差距否则整条环路会互相干扰。我一开始图省事把电压环和电流环带宽设成一样结果系统一扰动就振荡后来才明白带宽要至少差一个数量级才行。3. Simulink模型搭建的完整蓝图主电路、储能侧与控制环怎么组织3.1 系统拓扑选择两级式光储混合还是单级式搭建模型之前第一件事是把系统拓扑定下来。光伏储能系统的电路拓扑常见的有好几种但做VSG研究我最推荐的还是两级式光储混合拓扑光伏侧Boost变换器负责MPPT控制储能侧双向Buck-Boost变换器负责维持直流母线电压三相逆变器负责并网和VSG控制。这条拓扑最大的好处是三个功能环节解耦清楚光伏管发电功率、储能管母线电压和功率平衡、逆变器管并网外特性。调试的时候可以一级一级来先让Boost工作正常再让储能维持母线电压最后再启动VSG逆变器。要是用单级式拓扑光伏方阵直接接到逆变器直流侧没有储能接口光伏功率波动就会直接反映到逆变器的有功输出上VSG的动态特性完全没法看。3.2 主电路关键模块与参数设置以一个额定功率100kW、电网电压380V、频率50Hz的光储VSG并网仿真模型为例主电路的核心参数可以照着下面这张表来配。Simulink版本不同模块名称会有一点差异我这里用的是Simulink/Simscape Electrical的常规命名习惯。环节模块/参数数值说明光伏阵列开路电压Voc1000V单阵列由多块组件串并联组成Boost电路电感L_boost2mH滤波并配合MPPT控制直流母线电容C_dc20mF缓冲不平衡功率容量要足够储能电池额定容量200Ah满足100kW下连续放电约2小时双向变换器电感L_batt1mH储能侧滤波电感三相逆变器开关频率10kHz常用IGBT模型注意损耗不计LCL滤波器L1 / L2 / Cf0.3mH / 0.15mH / 30μF逆变器侧电感和网侧电感要拉开比例电网等效线电压/频率380V / 50Hz可串联RL模拟弱电网阻抗3.3 控制环分层组织功率环、VSG算法环、电压电流内环一套完整的VSG并网模型控制环建议从外到内分成三个层级。最外层是功率环负责测量三相电压电流通过瞬时功率理论计算有功P、无功Q。中间层是VSG算法环利用上方说的转子运动方程和下垂公式计算输出电压指令的幅值和相位。最内层是电压电流双闭环把指令电压变成实际开关信号。模型文件要按层级做好子系统封装这是我能给的最强烈建议。不要在根目录里摆一堆散落的积分模块和PI控制器不然参数多了以后连自己都找不到哪根线接哪根线。我通常把主电路放在Chassis子系统和Control两个顶层子系统里Control里面再拆成Power Calculation、VSG Core、Voltage Current Loop、PWM Generation四个部分每个子系统端口名称写得清清楚楚改起参数来非常高效。3.4 求解器、步长和电源模块设置这一步很多人不在意但PWM逆变器仿真的数值稳定性和求解器设置关系极大。我一般用离散求解器固定步长设为1e-5秒也就是10微秒开关频率10kHz下每个开关周期有10个仿真点既能保证精度仿真速度也能接受。如果用连续求解器LCL滤波器加上PWM开关动作会带来非常小的闭环时间常数步长自适应往往会往下压到1e-7的量级一个50ms窗口的动态过程都要跑老半天。另外要留意的是逆变器直流侧电源在上电瞬间会有很大的充电电流直接把恒定直流电压源接到逆变器上仿真开始阶段就容易出现数值冲击。我是用一个软启动电阻串联在直流源和母线电容之间启动之后把电阻旁路掉这样母线电压能平缓建立后面的控制环也不会在一开始就饱和。4. 惯量J、阻尼D和虚拟阻抗的参数整定思路4.1 转动惯量J如何根据频率变化率约束来定转动惯量是整个VSG最核心的参数它直接决定了系统频率的动态响应。J取大了系统惯性大频率变化平缓但响应慢而且容易和功率环耦合产生振荡J取小了频率响应快但抗扰动能力弱外界一个功率波动就能让频率剧烈摆动。工程上整定J的一种思路是先根据系统允许的频率变化率来反推。比如一个100kW的并网系统假设允许在10kW功率缺额下电网频率变化率不超过0.5Hz/s。根据转子运动方程可以估算J ΔP / (ω0 × dω/dt) 10000 / (314.16 × 2π × 0.5) ≈ 10.1 kg·m²如果系统要求的惯量支撑更强可以把频率变化率限制到0.2Hz/s那么J就要加大到25kg·m²左右。实际工程中大型同步发电机的惯性时间常数H通常在2到10秒之间可以用H反推虚拟惯量J 2 × H × Sn / ω0²比如H取4秒100kW系统算出来J大约是8.1kg·m²和我前面按频率变化率算出来的数量级是一致的。所以一块去调能互相印证。4.2 阻尼系数D只调J不调D系统早晚要振荡阻尼系数D的作用是给功率振荡提供衰减。没有阻尼或者阻尼很小的时候VSG受到扰动后有功功率和频率会呈现欠阻尼振荡而且振荡衰减很慢。理论上阻尼系数可以按下式估算D ΔT / Δω ΔP / (ω0 × Δω)假设系统在0.5Hz频率偏差时能输出10kW阻尼功率D大概在20左右。但实际调试时这个值不能光靠理论算因为D的取值和J、下垂系数都有耦合关系。我的经验是先把J按上面的算好D先取一个跟J同数量级的初值然后在Simulink里做阶跃响应观察有功波形有没有超调和等幅振荡。波形振荡不收敛就把D加大波形响应太“肉”就把J减小。实际操作中J10kg·m²、D40左右往往能在这个功率等级的模型里得到比较好的动态响应。4.3 虚拟阻抗的取值范围和电压降落校验虚拟阻抗是VSG控制里模拟同步发电机同步电抗的一个环节它的作用主要是抑制并网冲击电流、改善有功无功解耦特性。三相静止坐标系下虚拟阻抗可以在dq坐标系里实现指令电压减去虚拟阻抗上的压降得到最终的调制电压参考。虚拟电感和虚拟电阻的取值一般用标幺值来定。虚拟电感标幺值选0.1到0.3pu比较常见虚拟电阻选0.02到0.1pu主要用来提供阻尼。这里要特别提醒虚拟阻抗不是越大越好。虚拟阻抗大了负载突变时电压会明显往下掉要是掉到低于电网电压的90%系统就进入低压穿越边界反而触发保护。我在模型里取的是Lv0.2pu、Rv0.05pu满载时虚拟阻抗压降大约5%既有效限制环流又不至于让电压掉太多。4.4 一套可以直接抄的初始化参数把这套参数直接整理成一个Matlab初始化脚本放到模型的InitFcn回调里每次仿真自动运行非常省事。下面这段脚本就是我那套100kW模型的参数供参考实际还是要按你自己的额定容量折算%% 系统额定参数 S_base 100e3; % 额定容量 VA V_ll 380; % 线电压有效值 V f_n 50; % 额定频率 Hz w_n 2*pi*f_n; % 额定角频率 rad/s V_dc_ref 750; % 直流母线电压参考值 V %% VSG参数 J_vsg 10; % 虚拟转动惯量 kg·m^2 D_vsg 40; % 阻尼系数 N·m·s/rad K_q 2000; % 无功-电压下垂系数 R_v 0.05; % 虚拟电阻 pu L_v 0.2; % 虚拟电感 pu %% LCL滤波器 L1 0.3e-3; % 逆变器侧电感 H L2 0.15e-3; % 网侧电感 H Cf 30e-6; % 滤波电容 F R_d 0.5; % 阻尼电阻 Ohm %% 控制环PI参数 kp_v 2; ki_v 100; % 电压环 kp_i 0.5; ki_i 20; % 电流环 %% 预同步参数 w_pre 2*pi*0.5; % 预同步积分器增益5. 仿真中反复遇到的问题振荡、锁相失败、直流侧崩溃的排查链路5.1 有功功率等幅振荡J和D错配的排查过程我在调试这套模型时遇到的第一个大麻烦是并网开关闭合以后有功功率出现了明显的正弦等幅振荡振荡频率大概在5Hz左右看着像是不收敛。我当时第一反应是PI参数有问题把电压环和电流环的PI换来换去折腾了一整天情况完全没有好转。后来我把视线从内环转到外环大胆做了一组对比仿真把J从10kg·m²加到30kg·m²再减到3kg·m²结果发现振荡频率尾巴跟着J在变这下就确定了问题出在VSG的功率外环。稍微懂一点控制理论的话这其实就是典型的二阶系统固有振荡固有频率约等于sqrt(K_power/J)K_power是由并网功角特性决定的等效同步转矩系数。要让系统稳定合适的阻尼比需要满足D大约2×zeta×sqrt(J×K_power)。我最后是把J从10往回调小到7D从20调到40再叠加一个适当的虚拟电阻波形瞬间就安静了。这里想说的是VSG调试不要一上来就动内环PI先确认外环的J和D是否匹配往往事半功倍。5.2 锁相环在弱电网下的失灵和我的替代方案最初搭建模型时我沿用了传统逆变器那一套SRF-PLL用它检测电网电压相位然后做并网预同步。仿真发现当电网侧串联了比较大的线路阻抗模拟弱电网时电网电压表现出明显的谐波畸变。SRF-PLL在这种工况下输出的相位一直在抖并网开关闭合瞬间造成的冲击电流高达额定电流的3倍直接把母线电压都拉下去了。后来我做了两处改动。第一在VSG正常运行阶段彻底切掉PLL相位完全由转子运动方程自己积分产生第二把并网前的预同步单独做成一个环节不用PLL的输出直接去强迫同步而是用预同步环把VSG内电势的幅值、频率和相位通过PI积分逐步调到和电网一致等三个量的偏差都小到阈值以内再发并网命令。这个思路和同步发电机的整步并网过程本质上是一样的。改完之后并网冲击电流能控制在额定电流的10%以内效果立竿见影。5.3 直流侧功率不平衡导致母线电压崩溃还有一个典型问题是直流母线电压稳不住。光伏侧功率突然从100kW掉到40kW储能侧如果还在按原来的功率放电那么母线电容就必须把差额补上电容能量放完以后母线电压就一路狂跌。相反如果光伏侧功率突然增加储能来不及充电母线电压又会蹭蹭往上涨直接触发过压保护。解决办法要从功率平衡的角度整体考虑。储能双向变换器的控制外环必须用母线电压的偏差来生成有功指令也就是说母线电压一旦偏离750V储能就自动增加充电或放电功率把它拉回来。这里储能功率的响应带宽和VSG的功率环带宽要拉开差距储能环慢一点VSG外环快一点否则两个环会争夺功率。与此同时母线电容也不能选得太小可以用公式粗估电容容量C_dc (P_max × Δt) / (2 × V_dc × ΔV_dc)假设允许功率差额50kW持续100ms母线电压允许波动20V算出来的电容量至少要在12.5mF以上我取20mF是留了余量的。5.4 仿真启动阶段最容易出现的数值爆炸最后一个常见问题仿真一启动就出现NaN或者十几千安级别的电流尖峰。多数情况下是因为启动时序没有设计好。正确的启动流程应当是第一步光伏Boost先工作但逆变器封锁脉冲直流母线由预充回路建立电压第二步储能变换器启动接管母线稳压第三步逆变器解除脉冲封锁但VSG的功率指令给0相当于空载运行第四步预同步完成后闭合并网开关第五步功率指令从0斜坡过渡到目标功率。我原来图省事仿真一开始就让逆变器带着额定功率指令直接并网结果不光波形难看数值上也经常出现不收敛。后来把功率指令改成带斜坡上升的功能上升速率设在额定功率的50%/s左右启动过程就平稳多了。对于这种具有多个能量端口的系统启动时序本身就是控制算法的一部分不能省。6. 并网动态波形盯哪几个点以及从单机仿真到工程化的扩展6.1 动态响应判据不能只盯着有功功率看模型调通以后开工做各种工况前要先把“什么叫表现好”定义清楚。我一般把观察面列成一张清单每次仿真后逐项核对。观察对象关键指标允许范围有功功率阶跃响应超调量、调节时间超调20%调节时间200ms系统频率最大频偏、恢复时间频偏0.5Hz恢复时间500ms直流母线电压波动幅度波动±3%参考值输出电压电流THD、电流谐波THD5%并网冲击电流并网瞬间电流峰值1.2倍额定电流比如在t1s时把VSG有功指令从50kW阶跃到80kW一个合格的响应应当是有功功率快速跟上但不要冲过头频率短暂下降后自动恢复到额定值。如果响应波形了一个大的尖峰大概率是J和D还需要微调。6.2 从单机仿真到多机并联与离并网切换单机模型稳定以后下一步很自然的扩展方向是两个。一个是多台VSG并联运行这能验证虚拟阻抗参数是否合理、多机之间有功无功能否自动均分另一个是离网切换也就是并网运行时电网发生故障VSG从构网并网模式平滑切换到孤岛供电模式。这两个方向在Simulink里都不难搭难点都在控制模式切换的时刻不能产生电压相位跳变和功率突变。我的做法是把并网模式和离网模式的控制环共用一个VSG内核模式切换只改输出电压的参考源这样切换瞬间不会出现相位阶跃。这个思路也从仿真一直沿用到了后面的半实物平台运行效果很稳。6.3 从Simulink仿真到硬件在环与代码生成如果你做这套模型的目的是后续要上控制器那可以提前考虑代码生成和硬件在环验证。Simulink模型整理成离散定步长以后通过Simulink Coder可以生成标准C代码部署到DSP或ARM控制器里。但仿真模型和控制器的真实代码差别主要在于仿真里的理想电压电流传感器在实物上有采样延迟和噪声PWM发波也有死区时间这些非理想特性等在第一次硬件实验时会原形毕露所以在仿真阶段要保留一定的裕量不要把PI增益往临界方向调到太满。有条件的话建议把Simulink模型配合RT-LAB或dSPACE做功率级硬件在环仿真把真实控制器接上去用实时仿真机代替真实主电路。这套流程我在项目里走下来最大的价值是能在安全的环境里把弱电网故障、光储功率突变这些极端工况跑一遍发现问题后回到Simulink里改参数再重新生成代码整个迭代速度比直接炸功率器件快太多了。最后再分享一个我自己的体会做VSG仿真卡住你的往往不是Simulink操作而是你要在脑子里真正建立“这台逆变器现在就是一台虚拟的同步发电机”这个物理画面。J、D、虚拟阻抗不是用来背的参数它们分别对应着飞轮的胖瘦、阻尼绕组的强弱、定子电抗的大小。把物理图景想通了参数整定就有了方向调试时看到波形基本就能猜到是哪个环节出了问题。如果你现在也正被这套模型的振荡问题折磨千万别急着怀疑代码有问题先回到参数端J和D重新配对一次再检查一遍虚拟阻抗的量级大概率能解决。