
做VSG三相并网仿真模型我一开始最大的错觉是控制框图搭对了波形就自然对了。结果有功无功环、电压电流双闭环、虚拟阻抗全部接好一跑起来电流波形里全是毛刺FFT一看谐波大得离谱。后来一点点排查才发现问题不在拓扑而在带宽取值、功率环滤波时间常数和虚拟阻抗的离散化实现上。这篇就把我搭虚拟同步机VSG三相并网仿真模型的过程完整拆开讲讲有功无功环怎么建模、电压电流双闭环带宽怎么定、虚拟阻抗到底起了什么作用以及仿真波形出了问题该怎么定位。无论是做毕业设计、课题预研还是工程上验证并网控制算法这套模型和调参思路都可以直接拿来当起点。1. 为什么我最终选择用VSG控制做三相并网仿真1.1 VSG到底模拟了同步机的什么先说本质。逆变器本身是没有转动惯量的IGBT开关一动作功率几乎是瞬时跟着指令走。但电网里的同步发电机不是这样转子有质量功率波动要先把转子转速推起来这个过程天然就带惯性频率不会瞬间突变。VSG做的事情就是在控制器里写一个“虚拟转子”用软件方程模拟出同步机转子的惯性、阻尼和一次调频特性。这个需求在分布式电源大量接入之后特别明显。光伏、储能、风电这些电力电子设备如果全是“说变就变”的恒功率控制电网频率的支撑能力会越来越弱弱电网下也容易振荡。VSG让逆变器对外呈现类似同步机的外特性既能并网运行也能参与频率和电压支撑。从仿真模型角度看VSG不是某一个环而是整个控制链路的顶层。它生成的是电压幅值和相角指令底层再交给电压电流双闭环去执行。如果底层的双闭环带宽太低、跟踪滞后VSG算得再准最终波形也是拧巴的。这也是为什么我后来把调试重点放在“从功率环到双闭环的带宽逐级拉开”上而不是一个劲地调惯量参数。1.2 从电源到控制系统模型整体架构我搭的三相并网VSG仿真模型大致链路是直流源或直流电容带电压源接到三相两电平逆变器逆变器输出经过LC或LCL滤波接到三相电网控制部分先测量逆变器输出电压和输出电流计算瞬时有功功率和无功功率功率经过低通滤波后进入VSG有功环和无功环得到虚拟电动势的幅值 E 和相位 θ利用 θ 构建 dq 坐标系把 E 和电网电压做参考生成电压指令电压外环和电流内环在 dq 轴下分别做 PI 调节输出调制波调制波经过SVPWM产生开关驱动信号虚拟阻抗一般叠加在“VSG电动势到输出电压指令”之间等效改变逆变器的输出阻抗。实测下来这套结构里最容易出问题的地方有三处功率计算后面的低通滤波时间常数、电压电流双闭环的带宽分配、虚拟阻抗的离散化写法。这三处如果处理不好波形问题会全部反映在输出电流上。2. 有功环和无功环VSG的第一层“外特性”2.1 有功-频率环建模VSG的核心是有功-频率环我用的转子运动方程是J * w0 * dw/dt Pref - Pe - D * (w - w0) dθ/dt w其中 J 是虚拟惯量w0 是额定角频率314.16 rad/sPref 是有功功率参考Pe 是实测输出有功D 是阻尼系数w 是虚拟角频率θ 是虚拟转子角度。翻译成人话就是当外界需要逆变器多出力时虚拟转子先“慢半拍”功率差额先转化为转子动能变化频率逐渐过渡到新的平衡点。D 这个阻尼项相当于同步机里的阻尼绕组能抑制频率振荡。J 越大惯性越大频率变化越慢但动态响应也越慢D 越大振荡衰减越快但对同样有功差额的频率偏差也会更大。在仿真里实现时我通常把这一环写在离散域function [theta, w] vsg_active_power(Pref, Pe, w0, J, D, Ts, theta_old, w_old) dw (Pref - Pe - D * (w_old - w0)) / (J * w0); w w_old dw * Ts; theta theta_old w * Ts; end注意这里有个很容易忽略的问题Pref 和 Pe 必须换算到同样的单位体系。如果功率用标幺值那么 J 和 D 也要按标幺值换算如果用国际单位J 的单位是 kg·m²D 的单位是 N·m·s/rad。我最开始混用过一次波形直接就是发散的大振荡后来把所有变量统一到“额定功率基准下的标幺值”才稳定下来。2.2 无功-电压环建模无功-电压环模拟的是同步发电机的励磁调节特性。同步机并网运行时间长了励磁系统会自动调整机端电压让无功出力跟随指令。VSG里我用的是带积分恢复的下垂控制E E0 kq * (Qref - Qe) kqi * ∫(Qref - Qe) dtE 是虚拟电动势幅值E0 是空载电动势kq 是无功-电压下垂系数Qref 是无功功率参考Qe 是实测无功kqi 是积分系数。kq 决定了无功功率变化对应的电压幅值变化。设计时我习惯让无功从 0 变化到额定值时电压幅值偏差大约在 2% 到 5% 之间。比如电压基准为 311V相电压峰值Qbase 为 50kVarkq 就可以取 0.03 * 311 / 50000 这个数量级。积分项的作用是消除稳态无功偏差让无功出力最终准确跟踪指令。这个环看起来简单但仿真里有个坑实测功率 Pe 和 Qe 必须经过低通滤波。低通滤波的时间常数如果太小功率纹波直接进入 VSG会导致频率和电压指令抖如果太大动态响应会变得迟钝。我一般取 10ms 到 30ms对应滤波带宽大约 5Hz 到 16Hz既滤掉了 50Hz 基波二倍频纹波又不至于让功率环失去动态。2.3 功率环参数整定我用的具体数值与调整顺序以一台 50kVA、线电压 380V、50Hz 的三相并网逆变器为例我常用的功率环起步参数如下参数数值说明额定功率 Sbase50kVA功率基准额定角频率 w0314.16 rad/s电网角频率惯性时间常数 H2s转动惯量 J 2HSbase/w0²阻尼系数 D1000 N·m·s/rad 左右按标幺值调试先给偏大值无功下垂系数 kq0.0002 V/Var 左右按电压偏差 3% 折算无功积分系数 kqi5 到 20用于消除稳态偏差功率低通滤波20ms一阶低通调参顺序我建议先粗后细先把 J 取大一点保证系统稳定D 取大一点快速抑制振荡把功率环跑稳然后逐步减小 D观察频率波形有没有低频振荡最后再调 kq 和 kqi让无功阶跃响应既不慢也不超调。实测下来D 太小是最常见的振荡来源。有一次我把 D 从 1000 降到 100结果有功阶跃后频率波形出现明显的等幅振荡持续了好几秒才衰减。这说明 D 对 VSG 的动态品质影响比 J 还要直接调参时不要只盯着惯量。3. 电压电流双闭环带宽怎么定谐波为什么跟着变3.1 为什么需要双闭环而不是单环VSG 功率环出来的是一对电压幅值和相位指令如果直接拿这个指令去调制输出阻抗几乎完全取决于滤波器电感且没有任何阻尼并网瞬间冲击电流会非常大动态过程也容易振荡。电压电流双闭环就是在这个指令后面加一层“执行机构”电压外环负责把逆变器输出电压拉到指令值附近电流内环则快速响应电压误差产生的电流变化起到限流和阻尼作用。在 dq 坐标系下电压外环输出的是电感电流参考值电流内环对这个参考做快速跟踪。相当于电压环是“慢动作”负责稳态精度电流环是“快动作”负责动态限流和抗扰动。3.2 带宽设计的基本公式与仿真取值的平衡点带宽问题是我在这个模型上花时间最多的地方。电流内环带宽太低了电流跟踪电压外环指令有相位滞后整个系统动态变差带宽太高采样噪声、开关纹波、数字控制延时都会被放大甚至和 LC 谐振峰撞在一起引发高频振荡。我的设计顺序是这样的先看开关频率 fsw电流内环带宽通常取 fsw 的 1/10 到 1/5。开关频率取 10kHz 时电流环带宽可以放在 500Hz 到 2000Hz 区间。再看 LCL 或 LC 滤波器的谐振频率 f_res。电流环带宽必须明显低于谐振频率一般要小于谐振频率的一半否则相位裕度不够。电压外环带宽再比电流环带宽低通常取电流环带宽的 1/5 到 1/3。比如电流环带宽 800Hz电压环带宽取 100Hz 到 200Hz。这里有一组我实测过的带宽分配方式供参考电流环带宽电压环带宽现象200Hz50Hz稳定但动态慢并网切换电压跌落明显800Hz150Hz跟踪良好THD 较低动态响应够用2000Hz400Hz动态快但波形毛刺增多容易触发保护3000Hz600Hz高频出现振荡电流波形带振铃注意这里是“数量级”参考不是绝对标准。滤波参数一变谐振频率一变最优点就跟着变。3.3 带宽和谐波的关系一个实测对比热搜词里提到“电压电流双闭环带宽与谐波之间的关系”这个关系确实很直接。谐波来源主要有几个电网背景谐波、死区时间导致的低次谐波、数字控制延时、调制和采样带来的开关频率谐波。双闭环的带宽决定了控制器对这些谐波“管不管得动”。带宽低的时候控制器对几次谐波的增益不足。比如 250Hz 的 5 次谐波如果电流环带宽只有 200Hz对它的抑制能力就很弱输出电流里会明显看到 5 次、7 次谐波分量。这时候 THD 可能做到 5% 以上波形用肉眼看就是“平的里带点鼓包”。带宽高的时候情况反过来控制器对高次谐波开始有增益但因为采样和调制有数字延时相位滞后也变大。如果增益在高频段没有滚降干净开关频率附近的噪声反而被放大FFT 图上会出现一簇不规则的高频分量波形看起来就是毛刺。我做过一次对比电流环带宽从 300Hz 提高到 1000Hz输出电流 THD 先明显下降从 5% 降到 2.5% 左右再往上提到 2000HzTHD 反而回升到 3% 以上原因是高频毛刺把 THD 拉低了。这个“先降后升”的拐点就是我调带宽时最喜欢找的位置。所以我的经验是不要盲目追求高带宽。仿真里可以先扫一遍带宽从低到高的 THD 曲线找到拐点再根据动态响应要求微调。如果带宽调到合理值谐波还是压不住那就要考虑加准谐振控制器PR或者重复控制而不是继续往上推带宽。4. 虚拟阻抗有它没它并网波形完全是两个样4.1 虚拟阻抗在VSG里的角色真实同步发电机有同步电抗和阻尼绕组电流突变时定子绕组会天然限制电流和功率波动。VSG在控制方程里模拟了转子的惯性但并没有一个实体电抗去限制输出电流。如果没有虚拟阻抗VSG对外的等效输出阻抗就是滤波器电感那一小点阻抗低频段几乎为零并网瞬间会有很大的冲击电流并联运行时环流也很难压住。虚拟阻抗做的事情就是在 VSG 电动势指令和电压输出指令之间串联一个“软件电阻和电感”的压降v_ref E - (Rv * io Lv * dio/dt)这个式子表达的意思很直白输出电流越大虚拟阻抗上的压降越大逆变器端电压就被压得越低等效于给 VSG 加了一个内阻抗。故障或冲击电流大时这个压降能自动限制电流幅值不需要额外做限幅逻辑。4.2 阻性、感性还是混合虚拟阻抗的阻抗属性选择对这个模型的动态特性影响很大我分别试过纯感性和纯阻性结论是别走极端。纯感性虚拟阻抗Rv 很小、Lv 较大的好处是功率解耦清晰有功和无功之间的耦合小控制起来直觉感好。缺点是阻尼效果差故障限流能力弱谐波电流在不同频率上得不到有效抑制。纯阻性虚拟阻抗Rv 较大、Lv 很小的好处是限流能力强阻尼好系统更容易稳定。缺点是在逆变器输出等效阻抗呈现阻性的情况下有功和无功会耦合调无功会影响有功控制环路之间容易打架。我最终用的是阻感混合而且把 Rv 和 Lv 的比值调得比较讲究。一般希望基波频率附近呈现感性这样功率解耦好在高频谐波附近呈现阻性这样谐波抑制和阻尼好。这个效果可以通过 Rv/Lv 的比值配合控制带宽来实现想让某个频率以上呈阻性就要求这个频率处 Rv ωLv。4.3 实现与参数起步值虚拟阻抗在仿真里的实现难点在电感项 dio/dt 的离散化。如果直接用 Simulink 的 Derivative 模块很容易产生代数环和噪声放大。我推荐用一阶后向差分实现function v_drop virtual_impedance(Rv, Lv, io_d, io_q, Ts, io_d_old, io_q_old) v_drop_d Rv * io_d Lv * (io_d - io_d_old) / Ts; v_drop_q Rv * io_q Lv * (io_q - io_q_old) / Ts; end这个实现有个前提采样步长 Ts 要比虚拟电感的时间常数 Lv/Rv 小得多否则差分会不准。我一般让 Lv/Rv 至少大于 10 倍的 Ts避免数值抖动。参数起步值我这样定以 50kVA、380V 系统为例阻抗基准 Zbase 380² / 50000 ≈ 2.89Ω。虚拟阻抗先取 0.02 到 0.05 pu对应 Lv 大约在 0.2mH 到 0.6mHRv 大约在 0.05Ω 到 0.15Ω然后逐步加大 Lv 观察并网冲击电流的变化。有一个我没少踩的坑虚拟阻抗加上之后输出电压指令被压低但 VSG 的无功环会去补偿这个压降导致实际无功出力偏大。仿真里表现为无功功率从 0 慢慢爬到几千 Var 甚至更高。这说明无功环的电压基准 E0 要考虑虚拟阻抗的稳态压降或者把虚拟阻抗的压降补偿项也反馈给无功环。4.4 虚拟阻抗对谐波的影响虚拟阻抗对谐波的影响本质上是“分压器原理”。电网背景谐波电压可以看作一个谐波源逆变器输出的等效谐波阻抗和电网阻抗串联谐波电流按阻抗分压关系分配。虚拟阻抗越大逆变器在谐波频率上的等效阻抗就越高电网谐波电压在逆变器上引起的谐波电流就越小。但代价是电压降落加大能带的无功范围变小。从波形上看同一个电网背景谐波条件下虚拟阻抗从 0 加到 0.05pu输出电流的 5 次和 7 次谐波占比能明显下降一截但同时并网点的电压幅值也低了一些。所以调虚拟阻抗时我会同时盯着 THD 和电压幅值两个指标找到一个两者都能接受的点。5. 仿真波形解读能看懂的VSG动态才有价值5.1 启动与并网瞬态仿真的第一步就是看启动和并网瞬间。VSG要有预同步过程先锁相获取电网电压的幅值和相位然后用相位差来调整虚拟转子角度让 VSG 的电动势和电网电压基本一致后再闭合并网开关。波形上预同步完成后闭合开关电流应该从一个很小值开始而不是猛地冲上去。如果闭合瞬间电流出现一个尖峰我第一反应是查两个东西一是 VSG 输出相角和电网相角差是否已经小于 3° 到 5°二是电压幅值差是否还很大。这两个差越大闭合瞬间冲击电流就越猛。我习惯把预同步过程做成一个自动程序先锁相再让 VSG 的 θ 逐步逼近电网相位逼近到误差小于设定值后才发并网指令。这样每次跑出来的并网电流冲击都干净。5.2 稳态波形稳态阶段主要看三个指标电流 THD、有功功率纹波、无功功率纹波。电流 THD 和前面说的双闭环带宽、虚拟阻抗都相关。如果稳态 THD 高于 3%我一般会先做 FFT 分析看是哪几次谐波偏高。低次谐波高优先调双闭环带宽和虚拟阻抗高频毛刺多优先检查采样步长和调制实现。有功和无功功率的纹波主要来自功率计算里的二倍频分量。低通滤波不够狠的时候功率波形上会看到明显的 100Hz 纹波这属于正常现象只要纹波不进入控制环导致频率抖动就没问题。如果功率环滤波时间常数给得太大功率响应会变得很肉阶跃后要好几秒才稳定这时候反而要回调滤波时间常数。5.3 负荷突变与频率响应VSG 的核心卖点是惯性支撑所以我在仿真里一定会做有功阶跃和负荷突变测试。比如让 Pref 从 20kW 阶跃到 40kW观察虚拟频率波形。理想波形是这样的功率开始爬升频率先略微下探因为虚拟转子被“减速”了然后被阻尼项拉回最后稳定在额定频率附近如果带了二次调频稳态无差不带二次调频会有一个小的稳态频差。如果频率在阶跃后来回振荡好几次才稳定说明 D 偏小如果频率响应慢吞吞像“睡着”了一样说明 J 偏大或者功率滤波太慢。这个现象在波形上非常直观比看理论公式容易判断得多。5.4 波形“怪相”排查链路我把仿真中常见的异常波形和定位路径整理成一个表方便排查波形现象优先检查常见原因并网瞬间电流尖峰预同步逻辑、并网时刻相位差或幅值差过大稳态电流低次谐波高双闭环带宽、虚拟阻抗电流环带宽过低、虚拟阻抗过小高频毛刺采样步长、调制频率电流环带宽过高、数字延时低频功率振荡阻尼系数 D、功率滤波D 过小、滤波时间常数过大无功缓慢爬高无功环 E0、虚拟阻抗压降虚拟阻抗稳态压降未补偿频率长时间振荡J 和 D 配合J 过大且 D 过小三相电流不平衡电网电压、触发角电网不平衡或调制波含负序分量每次波形异常我都会按这个链路查一遍而不是直接加一个滤波器把波形“抹平”。因为仿真里波形异常往往是控制参数失配的信号滤波只能掩盖不能解决。6. 参考参数表、Simulink设置与可复现性建议6.1 一套可以直接起步的完整参数表把前面分散的参数汇总成一套可以直接起步的配置前提是电网相电压峰值 311V、线电压 380V、额定容量 50kVA、开关频率 10kHz类别参数取值主电路直流母线电压800V主电路逆变器侧电感 L11mH主电路滤波电容 Cf20uF主电路电网侧电感 L20.5mHVSG 功率环惯性时间常数 H2sVSG 功率环阻尼系数 D800 到 1500VSG 功率环功率低通滤波时间20msVSG 无功环无功下垂系数 kq0.0002 V/var 左右VSG 无功环无功积分系数 kqi10电压电流环电压外环带宽150Hz电压电流环电流内环带宽800Hz虚拟阻抗虚拟电阻 Rv0.1Ω虚拟阻抗虚拟电感 Lv0.5mH这套参数跑出来的典型波形是并网冲击电流小于 10% 额定电流稳态电流 THD 在 2% 到 3% 之间有功阶跃后频率在 0.5 秒左右恢复稳定。不同滤波器参数下需要重新整定不要原样照搬。6.2 求解器与仿真步长大部分VSG这种电力电子仿真我用 Simulink 里的 Simscape Electrical 或者 SimPowerSystems 搭主电路控制部分用离散模块。Powergui 设置为离散仿真采样步长取 10us 比较稳。这里有个细节控制周期和仿真步长最好一致或者控制周期是仿真步长的整数倍。我习惯开关频率 10kHz控制周期也按 10kHz 下采样仿真步长取 1us 来做开关暂态精确分析但这样跑起来很慢。如果只是验证控制算法可以用平均模型或者把死区效应简化仿真步长放到 10us速度会明显快很多。数值稳定性上最需要留意的是电流内环的数字延时。实际控制里从采样到 PWM 更新有一拍延时仿真里如果完全忽略这个延时带宽可以拉得很高波形很“漂亮”但一上硬件就崩。所以我在仿真模型里故意加了一拍延时让带宽设计更贴近实机。6.3 复现时的三个坑这三个坑我每次搭类似模型都会遇到专门写在这里。第一个坑是 dq 坐标变换的角度源。并网前应该用 VSG 自己的虚拟角度 θ 做变换并网后有些做法会切到 PLL 的电网角度。如果切换时机不对波形会瞬间乱掉。我建议整个控制链路统一用 VSG 的 θ电网角度只作为预同步的参考这样切换逻辑最简单。第二个坑是功率计算的滤波延迟。功率环低通滤波的延迟会影响 VSG 对外表现的惯性。滤波时间常数越是大功率环响应越慢等效“额外惯性”越大。写论文时如果要把仿真结果和理论公式对上滤波时间常数的影响必须考虑进去。第三个坑是限幅的位置。VSG 输出的电压幅值、频率、以及电流环的输出都必须限幅但限幅不能放在反馈回路内部否则会产生奇怪的幅值突变。我一般对 VSG 输出电压限幅放在虚拟阻抗之后电流环输出限幅放在调制之前这样逻辑清晰也不容易触发代数环。6.4 我自己最深的体会这套 VSG 三相并网仿真模型我从第一次把波形跑崩到现在基本一次成型花了大量时间在带宽和虚拟阻抗的配合上。个人的体会是VSG 的功率环决定“该不该出力”双闭环决定“能不能跟得上”虚拟阻抗决定“跟的时候稳不稳、冲不冲”。三者是串联关系任何一层的参数和下一层不匹配最终的波形一定是乱的。而判断匹配不匹配最好的工具就是波形上的谐波、振荡和并网瞬态冲击这三个信号会非常诚实地告诉你问题出在哪一层。