
这两年做光伏并网方向的项目被我摆弄最多的一个仿真框架就是“光伏 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.01Ki 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·id2.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.2VIsc 5.96A最大功率点电压 Vmp 54.7V最大功率点电流 Imp 5.58A这样搭出来阵列开路电压约 1284V短路电流约 119A理论最大功率约 305×400 122kW。实际在标准工况 1000W/m²、25℃ 下MPP 功率在 100kW 左右这个功率配后面的逆变器和负荷是合适的。MPPT 算法我用的是扰动观察法PO。虽然技术上电导增量法更好但 PO 在仿真里调试直观步子大小很好调。核心思路就是每隔一个周期给工作电压加一个小扰动 ΔV如果功率增加继续同方向扰动如果功率下降反向扰动。在 Simulink 里用 S-Function 实现 PO 最清晰也可以用 Stateflow 做状态机。采样周期建议 0.001~0.005s因为 Boost 的开关频率是 10kHzMPPT 动作不能太快否则会干扰 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求解器ode23tbstiff/TR-BDF2这类刚性问题用这个最合适最大步长设置为 1e-4即开关周期的 1/100相对公差1e-4零交叉检测开启为什么选 ode23tb因为逆变器模型里有快速开关动作和 LCL 谐振它是典型的刚性系统ode45 在这种系统下会非常吃力。od23tb 是专门处理刚性系统的实测下来速度和稳定性都比 ode45 好一大截。电源开关管模型我建议选 “Simscape Electrical 专用” 的默认模型不要用“理想开关”模型的某些参数否则开关动作瞬间会发生数值振荡。4.2 VSG控制器建模从功率环到PWMVSG 控制器是核心中的核心我把 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 2mHBoost 开关频率 f_sw 10kHzMPPT 采样周期 T_MPPT 0.001s占空比限幅 D_min 0.1D_max 0.9Boost 的占空比初始值给 0.4这样启动时光伏工作点比较接近 MPPMPPT 很快能收敛。4.4 仿真系统的启动顺序一个很关键的实操经验不要在仿真开始瞬间就把 VSG 并网开关闭合。那样的话VSG 输出电压还没有建立起来并网冲击电流可能是额定值的 10 倍以上直接把保护触发跳闸。正确的启动顺序是分段式的第一阶段0~0.2s光伏 Boost 电路启动MPPT 工作直流母线电压爬升到 700V。逆变器不输出功率只给 VSG 的电压环供电建立电压。第二阶段0.2~0.5sVSG 控制启动但让 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 100Ki 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避免一开始就陷入多层参数互相干扰的泥潭。