这两年做光伏并网方向的项目,被我摆弄最多的一个仿真框架就是“光伏 + VSG(虚拟同步发电机)+ Simulink”。说实话,刚接触这个标题时,我以为只是在常规光伏并网逆变器上套了个“下垂控制”的壳子,后来深度把模型跑起来才发现,这里面真正值钱的东西是惯量模拟和并网友好性。如果你正在做新能源并网研究、微电网仿真或者电力电子控制方向,这个项目值得好好拆一遍。
这篇博文我打算按“为什么做 VSG→核心控制原理→Simulink 建模实操→参数整定→调试实录”这条线来写,尽量把我在仿真里踩过的坑、试过的参数、改过的结构都交代清楚。
1. 为什么光伏逆变器要引入虚拟同步发电机
1.1 传统并网模式的局限
常规光伏逆变器并网,控制策略基本是 PQ 控制(恒功率控制)或者电流源型跟网控制,简单说就是让逆变器“跟着电网走”——锁相环锁定电网相位,然后根据功率指令输出对应的电流。这种模式在强电网下没有问题,电网电压刚性、频率稳定,逆变器顺利把功率送进去即可。
但一旦电网变弱,比如分布式光伏接入配电网末端,或者微网孤岛运行,电网电压和频率不再像“无穷大母线”那样稳定。这时候传统跟网型逆变器很容易出问题:锁相环在弱电网下会振荡、相位跳变时甚至失锁,导致过流保护动作;更严重的是,高比例光伏替代同步发电机后,整个系统的等效惯量和阻尼都下降了,电网频率波动会明显变大,抗扰动能力很差。
这就是 VSG 技术要解决的核心问题:让逆变器在控制层面模拟同步发电机的转子惯性和阻尼特性,从“跟网型”变成“构网型”,主动支撑电网电压和频率。
1.2 VSG 到底在模拟什么
很多人一看到“虚拟同步发电机”这个名词就被绕晕了,其实逻辑非常简单。同步发电机有三个最核心的对外特性:惯性、阻尼、调频调压能力。VSG 就把这三个特性通过控制算法搬到了逆变器上。
- 惯性:同步发电机转子有质量,功率突变时转速不能突变,体现在频率变化率受限。VSG 在控制环里加入“虚拟惯量 J”,等效于给逆变器装了一个虚拟的飞轮。
- 阻尼:发电机带阻尼绕组,频率变化时会产生阻止变化的转矩。VSG 通过阻尼系数 D 来实现等效阻尼。
- 调频调压:同步发电机的调速器根据频率偏差调整有功输出,励磁系统根据电压偏差调整无功输出。VSG 的有功-频率环和无功-电压环模拟的就是这两个功能。
这种“机电暂态模拟”的思路,让逆变器在电网眼中看起来就像一台发电机,所以叫“虚拟同步发电机”。
1.3 VSG 与下垂控制的本质区别
这里必须说清楚一个容易混淆的点。下垂控制(Droop Control)也做有功-频率、无功-电压的下垂关系,和 VSG 看起来很像,但两者有本质区别。
下垂控制基本是一个静态方程,P = P₀ + kp·(f₀ - f),输出频率直接跟随指令变化,没有动态过渡过程,也就没有惯量。
而 VSG 是有动态方程的,基于转子运动方程: J·(dω/dt) = P_m - P_e - D·(ω - ω₀) 这里 ω 是一个状态变量,由方程积分得到。也就是说,有功变化时,频率是“逐渐”变化的,这个“逐渐”就是惯量的体现。
在仿真里你很容易看到两者区别:负荷突变时,下垂控制的频率会瞬间跳变到新稳态值;VSG 控制的频率是一条平滑的斜坡式曲线,变化率受 J 约束。这个动态响应差异,就是 VSG 的核心价值。
2. VSG 控制核心:惯性、阻尼与调频调压
2.1 有功-频率环路:转子运动方程的数字化
VSG 控制器的核心是有功-频率环,对应同步发电机的转子运动方程。在 Simulink 里实现时,我通常把这一环拆成三步:
第一步,计算电磁功率 P_e。从逆变器输出端采集三相电压 ua、ub、uc 和三相电流 ia、ib、ic,通过瞬时功率理论算出有功功率。公式不复杂: P_e = ua·ia + ub·ib + uc·ic
我建议在仿真里用受控电压源和电流测量模块,采集电压电流后直接相乘再加和,然后用一个低通滤波器滤掉二倍频波动。注意这个滤波器是必要的,否则有功功率反馈里有 100Hz 波动(工频的2倍),会影响频率环的动态。
第二步,机械功率 P_m 设置。在并网模式下,P_m 就是调度给定的有功指令;在光伏场景下,P_m 通常来自直流侧功率平衡需求或 MPPT 给定的最大功率。这里有个细节:P_m 不是直接等于参考功率,还要叠加频率调节项,即: P_m = P_ref - K_f·(f_meas - f_0)
这个 K_f 就是一次调频系数,模拟同步发电机的调速器。
第三步,解转子运动方程。在 Simulink 中,用积分器搭出: ω = (1/J)·∫(P_m - P_e - D·(ω - ω₀))dt
具体操作是:一个减法器算出不平衡功率,增益 1/J,经过一个积分器得到角速度偏差,再加额定角速度 314 rad/s,得到 VSG 输出电压角频率。角频率再积分一次,就得到 VSG 合成电压的相位 θ。许多同学的模型振荡,问题基本都出在这一步里积分器初始值或者限幅没做对,后面调试部分我会细说。
2.2 无功-电压环路:励磁绕组特性模拟
无功-电压环相对简单,对应的是同步发电机励磁系统调节机端电压的特性。
基本原理是:用无功功率偏差来修正电压幅值, E = E₀ + K_q·(Q_ref - Q) + K_u·(U_ref - U_meas)
简化版就直接写成: E = E₀ + (Q_ref - Q)·K_q
这个 E₀ 是额定电压幅值(比如 311V 对应 220V 相电压峰值),E 就是 VSG 合成电动势的幅值。
在 Simulink 里实现时同样分三步:先用瞬时功率理论计算无功功率 Q = (交流项相移后运算),再和 Q_ref 做差并经过 PI 调节器或纯比例环节,最后与基准电压幅值叠加。
这里我推荐的做法是:无功-电压环用 PI 调节器,而不是纯比例环节。纯比例会带来稳态无功偏差,PI 可以做到无差调节。PI 参数一般先给 Kp = 0.001~0.01,Ki = 0.01~0.1,观察无功响应再微调。这块参数整定的经验我从后面调整过很多次,发现 Kp 太大会导致电压超调,而 Ki 太大容易引起低频振荡。
2.3 虚拟阻抗与电气方程
控制环生成的是 VSG 的内电势参考值e_a、e_b、e_c,表达式为: e_a = E·sin(θ) e_b = E·sin(θ - 2π/3) e_c = E·sin(θ + 2π/3)
这里 E 和 θ 分别来自无功环和有功环。
这个 e 不能直接当作调制波去触发脉冲,因为内电势是个理想电压源电动势,它和实际并网点电压之间还隔着线路阻抗和逆变器滤波阻抗。工程上普遍的做法是在 VSG 内电势后面串联一个虚拟阻抗 Z_v(s),得到调制参考电压: u_ref = e - Z_v·i_o
虚拟阻抗可以取感性(L_v),也可以取阻感性(R_v + jX_v)。作用有两个:一是让 VSG 的等效输出阻抗呈感性,和同步发电机的电枢反应对应;二是增加系统阻尼,抑制有功无功之间的耦合振荡。
在 Simulink 里,虚拟阻抗的实现很简单:把输出电流 i_o 分别乘以虚拟电阻 Rv 和虚拟电感 Lv 的微分,然后在 dq 轴下从电动势中减去即可。注意,用三相静止坐标系实现虚拟电感比较麻烦,建议先做 Park 变换到 dq 轴,在 dq 轴下处理: ud_ref = ed - Rv·id - Lv·d(id)/dt + ω·Lv·iq uq_ref = eq - Rv·iq - Lv·d(iq)/dt - ω·Lv·id
2.4 底层双闭环:让 VSG 输出真正可控
VSG 外环生成的是电压幅值和相位,最终还要交给底层电压电流双闭环去跟踪,才能得到 PWM 脉冲。
典型的控制结构是:VSG 外环(功率环)→电压外环→电流内环→PWM 生成器。
电压外环用 PI 控制器跟踪 VSG 给出的电压参考 u_ref,输出作为电流环参考;电流内环用 PI 控制器跟踪电流参考,输出作为调制电压,再经过坐标反变换和 SVPWM 或 SPWM 调制生成脉冲。
这个双闭环本身不难,难在 PI 参数整定。一个经验范围:电压环带宽选 500~1000 rad/s,电流环带宽选 2000~4000 rad/s,让电流环明显快于电压环,电压环明显快于 VSG 功率环,这样才能避免各环节之间互相干扰。
3. 系统整体架构与 Simulink 建模仿真
3.1 系统拓扑:从光伏阵列到并网点
一个完整的光伏 VSG 并网系统,在 Simulink 里从上到下大致是这么一条链路:
光伏阵列(PV Array) → Boost 升压电路 → 直流母线电容 → 三相两电平逆变器 → LCL滤波 → 并网开关 → 电网/负荷
在 Simulink 的 SimPowerSystems 库里,这套链路用现成模块就能搭出来。我建议整个系统分成三个子系统来管理:光伏子系统(PV + Boost + MPPT)、VSG 控制子系统(功率环 + 虚拟阻抗 + 电压电流环)以及主电路子系统(逆变桥 + LCL + 电网)。千万别把整个模型平铺在一个画布里,否则后期排查信号线你会疯掉。
三个子系统的信号连接关系记清楚:逆变器侧输出电流采样给 VSG 控制子系统 → VSG 控制子系统输出 6 路 PWM 脉冲给逆变桥 → 直流母线电压采样回给光伏子系统做 MPPT 和功率平衡。
3.2 光伏侧建模:PV阵列与MPPT
光伏阵列在 Simulink 里有现成的 PV Array 模块,设置参数时可以选预设模块(如 SunPower SPR-305-WHT),也可以自定义参数。我习惯自定义,常用的参数是:
- 串联电池数 Ns = 20,并联电池数 Np = 20
- 单块电池 Voc = 64.2V,Isc = 5.96A
- 最大功率点电压 Vmp = 54.7V,最大功率点电流 Imp = 5.58A
这样搭出来阵列开路电压约 1284V,短路电流约 119A,理论最大功率约 305×400 = 122kW。实际在标准工况 1000W/m²、25℃ 下,MPP 功率在 100kW 左右,这个功率配后面的逆变器和负荷是合适的。
MPPT 算法我用的是扰动观察法(P&O)。虽然技术上电导增量法更好,但 P&O 在仿真里调试直观,步子大小很好调。核心思路就是:每隔一个周期给工作电压加一个小扰动 ΔV,如果功率增加,继续同方向扰动;如果功率下降,反向扰动。
在 Simulink 里用 S-Function 实现 P&O 最清晰,也可以用 Stateflow 做状态机。采样周期建议 0.001~0.005s,因为 Boost 的开关频率是 10kHz,MPPT 动作不能太快,否则会干扰 DC-DC 的稳定。
3.3 直流母线电容的取值
直流母线电容是个容易被忽略但很重要的参数。它的作用是在光伏输出功率和逆变器输入功率不平衡时,提供能量缓冲。
工程上有近似公式: C_dc = (P_max)/(2·ω_g·U_dc·ΔU_dc)
以 100kW 系统为例,直流母线电压 700V,允许波动 5%,也就是 35V,代入计算: C_dc = 100000/(2×314×700×35) ≈ 0.0065F = 6500μF
这个电容值在仿真里还得配一个并联电阻做均压,否则启动瞬间会有严重的冲击电流。
3.4 逆变器与滤波器参数设计
逆变器选择三相两电平桥,开关频率 10kHz,直流母线电压 700V,交流侧线电压 380V。
LCL 滤波器参数设计我直接给一组实测能用的值,供你做参考基线:
- 逆变器侧电感 L1 = 0.8mH
- 网侧电感 L2 = 0.3mH
- 滤波电容 Cf = 40μF
- 阻尼电阻 Rd = 0.5Ω
这里有个细节:滤波电容支路串联的阻尼电阻 Rd 非常关键。LCL 无阻尼会在谐振频率处产生明显尖峰,导致电流波形畸变和系统不稳定。加了阻尼电阻后,谐振峰被压住,但代价是增加一点损耗(实际工程里属于可接受范围)。
仿真中验证 LCL 参数是否合理的方法是看阻抗频率特性,或者干脆看波形——并网电流的 THD 控制在 3% 以内,波形无明显振荡锯齿,则参数基本合理。
4. 实操过程:从零搭建一个可运行的光伏VSG仿真
4.1 全局求解器配置
很多人项目卡在第一步反而不是控制逻辑,而是求解器设置。Simulink 里如果你保持默认的变步长求解器,会碰到一个问题:电力电子开关和快速控制环路导致仿真速度极慢,甚至步长过小收敛失败。
我建议按以下配置来:
- 求解器类型:变步长(Variable-step)
- 求解器:ode23tb(stiff/TR-BDF2),这类刚性问题用这个最合适
- 最大步长:设置为 1e-4(即开关周期的 1/100)
- 相对公差:1e-4
- 零交叉检测:开启
为什么选 ode23tb?因为逆变器模型里有快速开关动作和 LCL 谐振,它是典型的刚性系统,ode45 在这种系统下会非常吃力。od23tb 是专门处理刚性系统的,实测下来速度和稳定性都比 ode45 好一大截。
电源开关管模型我建议选 “Simscape Electrical 专用” 的默认模型,不要用“理想开关”模型的某些参数,否则开关动作瞬间会发生数值振荡。
4.2 VSG控制器建模:从功率环到PWM
VSG 控制器是核心中的核心,我把 Simulink 的物理搭法按层次梳理给你。
功率计算模块:把采样到的三相电压电流做瞬时功率计算。这里我建议用 Simulink 自带的 “Three-Phase Instantaneous Active and Reactive Power” 模块,比手动搭乘法器干净得多,而且它内部已经处理好了滤波。
VSG 功率环子系统:里面包含有功频率环路和无功电压环路。有功环的解算用的是转子运动方程,用一个 Gain 模块(1/J)、一个 Integrator 和若干 Sum 模块搭建。这里提醒一句:Integrator 模块的初始值要设成初始角频率 314 rad/s,而不是从 0 开始积分,否则刚启动时频率会从 0 往上爬,并网瞬间冲击超级大。
电压电流双闭环子系统:先把 VSG 输出的三相同步电压信号做 Park 变换得到 dq 轴参考值,然后分别接电压 PI 控制环和电流 PI 控制环。PI 控制器的输出还要加上解耦项(ωL 和 ωC 补偿),否则 dq 轴耦合会让系统失去稳定。
PWM 发生器:我推荐用 SVPWM 而不是 SPWM。SVPWM 的电压利用率和波形质量比 SPWM 高约 15%,在同样的直流母线电压下能输出更高的交流电压,谐波表现也更好。Simulink 里可以直接用 “PWM Generator (2-Level)” 模块,选择 SVPWM 模式即可。
4.3 光伏-直流侧仿真参数设置
光伏侧建模仿真参数给一份参考:
- Boost 电感 L_boost = 2mH
- Boost 开关频率 f_sw = 10kHz
- MPPT 采样周期 T_MPPT = 0.001s
- 占空比限幅 D_min = 0.1,D_max = 0.9
Boost 的占空比初始值给 0.4,这样启动时光伏工作点比较接近 MPP,MPPT 很快能收敛。
4.4 仿真系统的启动顺序
一个很关键的实操经验:不要在仿真开始瞬间就把 VSG 并网开关闭合。那样的话,VSG 输出电压还没有建立起来,并网冲击电流可能是额定值的 10 倍以上,直接把保护触发跳闸。
正确的启动顺序是分段式的:
第一阶段(0~0.2s):光伏 Boost 电路启动,MPPT 工作,直流母线电压爬升到 700V。逆变器不输出功率,只给 VSG 的电压环供电建立电压。
第二阶段(0.2~0.5s):VSG 控制启动,但让 VSG 输出的电压幅值和相位跟踪电网电压(通过预同步模块),等待锁相环确认同步完成。
第三阶段(0.5s):并网开关闭合,VSG 带载并网,功率指令从 0 开始斜坡增加到额定值。
在 Simulink 中实现“分段启动”,我推荐的做法是用 Step 模块或 Signal Builder 控制预同步使能信号和并网开关指令。不要手动去调模型的使能端口,那样容易弄乱状态变量的连续性。
5. 调试实录:典型问题与排查方法
5.1 惯量参数 J 和阻尼 D 的整定
在虚拟同步发电机中,虚拟惯量 J 和阻尼系数 D 的整定是调节动态响应的关键。这组参数没有“万能值”,而是要结合电网强度和控制需求来定。
我先说整定的基础原则,再给你一个可操作的试点思路。虚拟惯量 J 越大,频率变化越平缓,但达到稳态的时间越长;阻尼 D 越大,振荡衰减越快,但 D 过大会导致频率偏差过大(因为 D 相当于负荷阻尼,等效于增大了系统的负荷调节效应)。
由于 J 和 D 的数值会直接影响功角振荡特性,我的做法是:
先固定 D,把 J 从小到大扫一遍(比如 1、2.5、5、10),观察有功阶跃响应;再固定 J,把 D 从小到大扫一遍(比如 20、50、100、200),观察频率超调量。
实测中比较好用的组合是 J = 2.5(标幺值),D = 50(标幺值)。这个组合下,有功阶跃响应的超调量约 10%,调节时间约 0.5s,频率变化率控制在 ±0.5Hz/s 以内,满足并网运行的要求。
5.2 逆变器输出电流波形畸变
如果你在仿真里看到并网电流有明显谐波畸变或者“毛刺”,第一反应别去调 VSG 参数,先检查这两处:
一是 LCL 参数和阻尼电阻。LCL 谐振峰没有被压住时,高频谐波放大得很明显,并网电流波形会有明显的“锯齿”。解决方法是检查 Rd 的阻值是否在合理范围,以及滤波电容支路是否正确串联了阻尼电阻。一个快速验证方法:把 LCL 换成纯 L 滤波器(L = 1.1mH),如果电流波形变好了,那就是 LCL 阻尼的问题。
二是 PWM 的载波频率与采样步长的匹配。Simulink 变步长求解器的最大步长必须小于 PWM 载波周期的 1/10,否则载波和采样点不对齐,会产生非特征次谐波。我前面建议最大步长 1e-4 就是基于 10kHz 开关频率来的,这个要严格落实。
三是功率外环滤波器延迟。有功功率计算后的低通滤波器截止频率太高时,二倍频分量会进入频率环,导致调制波轻微调幅,反映在电流上就是低频脉动。这个小问题很有迷惑性,波形看起来没坏,但傅里叶分析能看出 150Hz 附近有边频分量。
5.3 并网瞬间冲击电流大
这个情况我在 5.4 节也提过原因——相位不同步。但还有一个容易忽视的原因:VSG 通过虚拟阻抗后的输出电压参考值没有“软启动”。
解决办法是在 VSG 输出参考电压前加一个斜坡限幅模块,让电压参考值从 0 逐渐增加到额定值。具体做法是在电压环参考输入处串联一个 Rate Limiter,上升速率设置为 1000V/s 左右,这样不仅并网瞬间电流冲击小,预同步阶段的电压跟踪也更平滑。
5.4 MPPT 与 VSG 的动态配合问题
这是光伏 VSG 系统里特有的一类问题,和普通微电网 VSG 项目不同。
正常运行时,光伏阵列的 MPPT 追踪最大功率,直流母线电压保持稳定,逆变器把功率送出去。但工况突变时(比如光照从 1000W/m² 跳到 600W/m²),光伏输出功率突然下降,而 VSG 还在按原来的功率指令从直流侧取能量,这时直流母线电压会快速跌落,严重时触发欠压保护。
要解决这个问题,我用的方案是加一个直流母线电压外环:采样母线电压,与设定值做差,经过一个慢速 PI 调节器,输出作为 VSG 的有功功率补偿项,叠加到 P_ref 上。当光伏功率下降、母线电压跌落时,这个外环会自动减小 VSG 的有功指令,让系统重新回到功率平衡。
直流母线电压外环的 PI 参数要整定得比 VSG 有功功率环慢,否则两个环会互相争夺控制权,引起功率振荡。我用的参数是 Kp = 100,Ki = 50,带宽约 10 rad/s,效果正常。
5.5 求解器收敛失败
碰到的最后一个高频问题就是报错“Solver failed to converge”或者“Singularity at simulation time”。
出现这个问题的原因通常有三类:
一是模型里存在代数环。常见于功率计算和调制信号之间的直接反馈。排查方法是通过 Simulink 的 “Algebraic Loop” 警告来定位,然后在反馈路径上插入一个很小的延迟(如 Unit Delay 或 Memory 模块)打断代数环。
二是电感电流突变。Boost 或逆变器电感在开关瞬间电流变化率太大,求解器无法收敛。解决方法是给电感串联一个极小电阻(0.001Ω)作为阻尼,或者适当增大仿真模型的“Parasitic Resistance”默认值。
三是开关组件的参数问题。IGBT 模块的导通电阻、Rsnubber 等参数设置不当会造成数值振荡。把 Snubber 电阻从默认的 10000Ω 改成 100Ω 左右,通常能大幅改善收敛性。
6. 从仿真到实物:我的一些实战体会
当你把上面的模型调通后,不妨再把注意力放回一个问题上:这套仿真模型到底在多大程度上可以平移到一个实际光伏 VSG 并网系统?
我最深的体会是,仿真帮你解决的是“控制策略验证”层面的问题,而不是“实现细节”层面的问题。例如,VSG 的惯量参数 J 与实际储能容量有严格的对应关系:虚拟惯量的本质是转子动能,对应实际系统里需要存储或释放的能量。如果你的系统只有一个光伏阵列,没有配套储能,那 VSG 提供的所谓惯量支撑程度是受限的——直流侧能量不足,频率响应再好也无法在功率缺额时真正提供支撑。这类问题在仿真里不会暴露,因为直流母线电压模型总是理想化地在 700V 附近支撑着功率平衡。
另一个容易被忽视的问题是控制延时的建模。Simulink 里 PWM 模块默认没有计算延时,但实际的控制器从采样、计算到驱动有一个开关周期左右的延迟。如果你想做高 fidelity 的仿真,建议在 PWM 模块前插入一个采样保持模块来模拟数字控制器的零阶保持效应,这样会看到电流环相位裕度明显下降,而真实系统调参时需要预留这个裕量。
最后,还有一个值得尝试的扩展方向:把单机 VSG 扩展成多机并联系统。光伏电站往往由多个机组并联,每台 VSG 的惯量和阻尼参数如果不协调,会在并联功角之间产生振荡。这个方向的挑战比单机高出一个数量级,但也是目前虚拟同步机研究的前沿热点。
我个人在这个项目上最深的收获其实是:“模仿同步发电机”这件事,核心并不在于输出一个看起来像发电机的电压波形,而在于控制系统里真正保有那一组描述旋转质量的微分方程——只要这组方程还在,你的逆变器在电网眼里就是一台有惯性的发电机,电网中的其他设备就会用对待发电机的方式去与之交互,功率的分配、频率的支撑、扰动下的过渡响应,全都随之改变。
希望这篇光伏 VSG 仿真拆解能给你带来一些真正用得上的思路。如果你在搭建过程中遇到参数整定不顺或收敛报错,建议回到我上面列的调试顺序——先解决底层电流环,再管电压环,最后才碰 VSG 的 J 和 D,避免一开始就陷入多层参数互相干扰的泥潭。