做微电网并网仿真的同行,多半都纠结过同一件事:同一套虚拟同步发电机(VSG)模型,转动惯量取大,负荷突增后频率掉得慢,但恢复也拖拖拉拉;取小,频率是恢复快了,可突增那一下的跌落幅度又让人心里发慌。我之前调试一组惯量阻尼自适应控制仿真模型时,把这两个参数从定值改成随运行状态实时调整,整个Simulink仿真的结果立刻不一样了——频率超调、调节时间、稳态精度都有了可量化的改善。
这篇文章就把这套VSG惯量阻尼自适应控制仿真模型的思路和建模细节拆开讲。内容包括:VSG到底在模拟同步发电机的什么行为、固定参数为什么顾此失彼、自适应调节律怎么设计、Simulink模型怎么搭、三组对照仿真结果怎么看,以及我复现过程中踩过的几个坑。想拿这套思路去做并网逆变器仿真、微电网频率控制或者毕业设计仿真验证的同学,可以直接参考里面的参数和建模路径。
1. VSG到底在模仿什么:转动惯量与阻尼系数的物理含义
1.1 电力电子变流器与同步发电机的本质差异
传统逆变器并网控制大多采用PQ控制或电流源控制,本质上是"给定功率—输出电流"的逻辑。电网频率跌了,它按照设定好的电流指令继续输出功率,没有那种"转子惯性托住频率"的物理响应。新能源渗透率一高,电网里真实旋转设备的比重下降,系统总惯量变小,频率抵抗扰动的能力自然变差。
VSG的思路很简单:在控制算法里塞进一个同步发电机的转子运动方程,让逆变器对外呈现"转子惯性+阻尼"的电气特性。负荷突变时,它不会像普通逆变器那样瞬间改变输出功率,而是像一台同步机那样,转速(频率)先有一个惯性过渡过程,再靠阻尼慢慢回到稳态。
1.2 转子运动方程的两个关键系数
VSG控制核心用到的转子运动方程,简化形式是:
J·dω/dt = T_m - T_e - D·(ω - ω_N)
其中T_m是机械等效转矩(由有功功率指令折算),T_e是电磁转矩(由实际输出功率折算),ω_N是额定角频率,J是虚拟转动惯量,D是虚拟阻尼系数。
用个生活化类比:J就是"质量",决定了系统对扰动的惯性抵抗能力。质量大的卡车,刹车不会瞬间停下,但碰撞时也不容易被弹飞;质量小的轿车,反应灵敏,但一撞就飞出去很远。D则是"黏度",负责把振荡能量消耗掉,频率跑偏之后能不能平稳归位,主要看它。
我做过一个很直观的测试:同样在0.5s时给负荷突增20%,J取0.2 kg·m²,频率最低点直接跌到49.55Hz左右,波动大但回得快,大概2s内基本稳定;J取1.5 kg·m²,频率最低点只跌到49.78Hz附近,抑制效果非常好,但恢复到49.9Hz以上花了4s多。这就是固定参数的典型两难。
1.3 为什么说固定参数解决不了全工况问题
并网逆变器面对的运行场景不是单一的。负荷阶跃、光伏出力波动、电网频率越限、孤岛切换,每种工况对惯量和阻尼的需求都不一样。
大扰动初期(负荷突增那几十毫秒),需要大惯量把频率变化率压住,避免频率飞轮效应太强导致保护动作;进入恢复阶段后,又需要小惯量让频率快速归位,否则大惯量会让系统"黏"在偏差点上,恢复时间被拉得很长。频率偏差比较大的时候需要强阻尼来减小超调,稳态附近阻尼太强反而会让功率响应变得迟钝,甚至诱发低频振荡。
一句话总结:惯量和阻尼的最优值,本身是运行状态的函数。固定参数只能保证某一段工况下表现良好,换一个工况就顾此失彼。这正是自适应控制要解决的问题,也是这套仿真模型的核心价值所在。
2. 自适应调节律设计:让转动惯量跟着扰动自己变
2.1 判断工况的"两只眼睛":频差与频率变化率
想让J和D动态调整,第一步是回答"现在是什么工况"。工程上最常用的两个判据,一个是频率偏差Δω = ω - ω_N,一个是频率变化率dω/dt。
Δω衡量"偏了多少":偏差大说明系统偏离额定点较远,需要更强的阻尼把系统拉回来。dω/dt衡量"正在往哪个方向偏、偏得多快":变化率大说明扰动正在发生,需要用惯量去缓冲。
把两者放在一起看,还能识别阶段。负荷突增瞬间,转速刚开始下滑,Δω还不大,但dω/dt的绝对值很大,这是扰动初期;经过惯量缓冲后,dω/dt逐渐变小、Δω达到峰值,这是最需要阻尼的阶段;之后转速开始回升,dω/dt的符号反转,Δω仍然不小,这是恢复期。
2.2 自适应调节律的常见设计思路
我采用的是一种工程上比较成熟、也容易在Simulink里实现的逻辑:分阶段调节。
当检测到频率正在偏离额定值(即Δω和dω/dt同号,Δω·dω/dt > 0),说明系统处于扰动冲击阶段,此时把J调大、D适度调大,用惯量缓冲冲击、用阻尼提前压制超调。
当检测到频率正在恢复(即Δω和dω/dt异号,Δω·dω/dt < 0),说明最猛烈的冲击已经过去,此时把J调小,让系统更快返回额定点,D维持在当前水平或略降,避免阻尼过强拖慢恢复。
用公式表达就是:
J = J0 + kJ·|dω/dt|·sign(Δω·dω/dt) 的正向区间限制
D = D0 + kD·|Δω|
再配合上下限幅和变化率限制,防止参数突变造成新的扰动。J的变化轨迹大概是这样:扰动到来那一瞬间J从基准值快速升高,峰值出现在dω/dt最大的时刻;随后频率开始恢复,J又逐步回到基准值附近,整个过程像一个"先冲上去扛住、再退下来放手"的动作。
2.3 自适应参数与实际物理量的换算
设置自适应参数时,经常遇到一个问题:J和D的数值范围怎么定?如果脱离基准值硬调,仿真很容易发散。
我习惯用标幺值体系来设计,再折算回物理值。以10kVA、50Hz系统为例,额定角速度ω_N = 314.16 rad/s,额定转矩T_N = P_N/ω_N ≈ 31.8 N·m。基准惯量J0取0.5kg·m²,对应惯性时间常数大约2秒量级,和一台同容量小型同步机相当;阻尼系数D0取2N·m·s/rad,对应频率偏差1Hz时产生约12.6N·m的阻尼转矩,大约0.4倍额定转矩,不算夸张。
自适应范围我一般限制在0.2J0到3J0之间,D限制在0.5D0到5D0之间。范围太小起不到自适应效果,范围太大又容易让系统在参数切换时出现不自然的振荡。至于调节律里的系数kJ和kD,先用仿真试凑出量级,再以"大扰动下J到达上限、小扰动下J只增加30%左右"为标准去校准。
3. Simulink整机模型搭建:主电路、控制层和参数表
3.1 模型总体架构
这套VSG仿真模型在Simulink里建议分三层组织,方便排查和复用。顶层是主电路:直流电压源、三相全桥IGBT逆变器、LC滤波器和负载/电网接口。控制层就是VSG控制器,内部再分子模块:瞬时功率计算、有功-频率环(转子运动方程+自适应模块)、无功-电压环、电压参考生成、电流内环、PWM调制。最下面是采样与信号转换层,把电压电流测量信号经过滤波、坐标变换送给控制层。
分层的意义在于:调自适应参数时只需要改动控制层里的Saturation和Rate Limiter,主电路不用动;如果换一个容量等级的系统,也只要改参数表和功率计算模块的尺度,控制结构完全保留。
3.2 核心模块的具体实现方式
转子运动方程用一个积分器链实现:输入P_ref和P_e,计算电磁转矩T_e = P_e/ω,然后用 (P_ref/ω - P_e/ω - D·(ω-ω_N)) 除以J,积分得到角频率ω,再积分一次得到相位θ。注意积分器要设置初始角频率ω_N和初始相位0,不然并网预同步会出问题。
自适应模块用逻辑运算加Saturation和Rate Limiter实现。先用减法器算出Δω,用Derivative算出dω/dt,判断Δω和dω/dt的符号关系,输出J的调整方向;再对|dω/dt|或|Δω|做增益缩放,叠加上J0或D0等基准值,最后经过Saturation限幅和Rate Limiter限速,输出给转子运动方程使用。
功率计算模块直接用三相瞬时电压电流做乘积加和:P = Va·Ia + Vb·Ib + Vc·Ic,Q按无功瞬时功率公式计算,然后统一过一个低通滤波器。低通时间常数建议取10ms左右,既能滤掉PWM谐波,又不会让功率反馈太滞后。
3.3 可以直接照抄的整机参数表
下面这组参数我用来跑通了一整套对照实验,48V低压验证和380V并网工况都改过,逻辑一致。直接照抄时注意单位,别看错毫亨和亨。
| 参数名称 | 符号 | 取值 | 说明 |
|---|---|---|---|
| 额定有功功率 | P_N | 10 kW | 逆变器输出额定功率 |
| 额定线电压 | U_N | 380 V | 三相交流侧线电压有效值 |
| 直流母线电压 | U_dc | 800 V | 提供给逆变桥的直流电压 |
| 额定频率 | f_N | 50 Hz | 电网/VSG额定频率 |
| 滤波电感 | L_f | 2 mH | LC滤波器电感 |
| 滤波电容 | C_f | 20 μF | LC滤波器电容 |
| 开关频率 | f_sw | 10 kHz | PWM载波频率 |
| 基准虚拟惯量 | J0 | 0.5 kg·m² | 自适应调节基准值 |
| 基准虚拟阻尼 | D0 | 2 N·m·s/rad | 自适应调节基准值 |
| 惯量调节系数 | kJ | 2.5 | 对应dω/dt的放大倍数 |
| 阻尼调节系数 | kD | 800 | 对应频差Δω的放大倍数 |
| 惯量限幅范围 | J | 0.1~1.5 kg·m² | 防止J过度增大 |
| 阻尼限幅范围 | D | 1~10 N·m·s/rad | 防止D过度增大 |
| 频率偏差阈值 | Δω_th | 0.5 rad/s | 低于此阈值的微调不触发强自适应 |
3.4 仿真场景设置与数据记录方法
模型运行前,先把求解器设置成变步长,算法选ode23tb或者ode23t,最大步长限制在1e-5秒。开关频率是10kHz,PWM周期0.1ms,步长比开关周期小一个数量级往上,才能捕捉到高频分量的影响,否则波形会显得很"毛"。
负荷突增场景用Step信号控制一个可变电阻或三相RLC负载的投入。具体做法是:在负载支路上并联一个Breaker模块,设置闭合时间0.5s,模拟额外20%负荷接入。波形记录建议用Scope加To Workspace一并输出,把频率、有功功率、J和D的实时值都存到工作区里,方便后面统一绘图对比。
4. 三组仿真对照:自适应控制带来的实际指标提升
4.1 工况设计与对照组设置
仿真模型搭好以后,需要回答一个关键问题:自适应控制到底比固定参数好在哪里。为此我设计了统一工况:系统先并网稳定运行,0.5s时刻负荷突增20%,持续0.3s后在0.8s切除,观察扰动期间和恢复过程的频率响应。
对照组设三组:固定小惯量方案(J=0.2,D=1)、固定大惯量方案(J=1.5,D=8)、自适应方案(J和D按调节律变化,范围同前)。三组采用完全相同的滤波参数、PWM参数和控制结构,只改惯量阻尼部分,这样指标差异可以归因于控制策略本身。
4.2 关键指标对比:最大频偏、调节时间、稳态误差
仿真跑完,把频率响应数据整理成表,差异非常直观:
| 方案 | 最大频率偏差 | 最低频率到达时间 | 恢复至稳态±0.05Hz用时 | 二次振荡 |
|---|---|---|---|---|
| 固定小惯量(J=0.2) | 0.65 Hz | 0.35 s | 2.1 s | 有轻微过冲 |
| 固定大惯量(J=1.5) | 0.24 Hz | 0.42 s | 4.6 s | 无明显过冲 |
| 自适应调节 | 0.29 Hz | 0.30 s | 1.3 s | 无过冲 |
固定小惯量的最大频偏最大,说明惯量太小导致系统承受冲击能力弱;固定大惯量虽然最大频偏最小,但恢复时间非常长,大惯量把频率"粘"在了偏差区域,切负荷后也回得慢。自适应方案最大频偏只比大惯量方案多0.05Hz,但恢复速度比大惯量方案快了三倍多。
这个对比清楚展示了一个核心观点:自适应方案等于把固定大惯量的"抗冲击能力"和固定小惯量的"快速恢复能力"结合了起来,代价只是控制算法里多几个乘法器和限幅环节,工程成本很低。
4.3 J和D的动态轨迹与频率曲线的对应关系
把自适应组的J、D变化曲线和频率曲线放在同一张图里观察,调节逻辑的行为非常清晰。负荷突增瞬间,频率还没掉太多,但dω/dt迅速增大,J从0.5迅速爬升到1.2附近,正好在频率跌落最快的阶段提供惯性支撑;随后频率到达最低点,dω/dt过零,J开始回落,D则随着Δω的增大持续上升,在频率偏离最大的时刻把阻尼推到最高值附近,加速频率回正。
切除负荷反方向扰动时,同样的逻辑又反向动作了一遍。J能够根据扰动的方向实时调整,D始终盯着频差大小,整个过程参数变化平滑,没有出现因为参数切换导致的抖动。这一系列波形既验证了调节律设计的合理性,也提醒我们:自适应控制不是让所有指标同时最优,而是让每个阶段的参数都贴近该阶段的最优需求。
5. 仿真复现中的几个坑和排查经验
5.1 自适应参数突变导致的数值振荡
这是最容易踩的坑。最初版本的自适应模块只加了Saturation限幅,没有加变化率限制,扰动瞬间J从0.5跳到1.2几乎是阶跃变化。结果频率曲线的确被压住了,但J跳变的瞬间,系统阻尼特性发生突变,功率波形上出现了明显的高频振荡,持续好几个周期才衰减。
原因在于转子运动方程本身是积分环节,参数J直接参与微分运算,J的阶跃变化相当于给系统注入了一个冲击激励。解决办法很简单:在自适应输出端串联Rate Limiter,把J和D的变化率限制在每秒不超过0.5倍基准值附近。加了这个环节以后,振荡立刻消失,参数过渡变得平滑,控制性能并没有因此下降。
5.2 求解器、步长和PWM谐波的纠缠
仿真数据看起来不错,但波形上叠着一层细密毛刺,这是变步长求解器在开关时刻附近步长过大的典型表现。把最大步长从默认的auto改成1e-5秒之后,毛刺明显减少;改用ode23tb并开启零交叉检测,毛刺基本消失。
如果模型规模大、追求仿真速度,还有一种选择是直接用离散仿真器,把控制周期和PWM周期统一设置成1e-5秒,功率计算和控制环都用离散模块。代价是离散化会引入一拍延迟,自适应调节律的相位会滞后大概0.1ms,对结果影响很小,但对初学者来说,连续变步长模型更容易定位问题。
5.3 并网预同步和初始条件设不好,启动瞬间电流爆表
把VSG控制器输出直接接在电网上,第一件事就是预同步。模型刚启动时,VSG输出的相位和电网相位很难正好一致,直接闭合并网断路器,等效于两个电压源之间存在相位差,瞬时冲击电流可能达到额定电流的十倍往上。
质量不错的三相逆变器仿真模型,建议在并网Breaker闭合之前,先用PLL锁存电网相位,再把锁相结果作为VSG角频率积分器的初值给定,让VSG输出电压先跟电网电压同幅、同频、同相,再闭合断路器。即使实际模型里用理想电源,也建议把这个环节加上,因为后续换成真实电网模型时,没有预同步的模型根本无法用。
5.4 功率计算滤波时间常数的影响
瞬时功率计算后面接的低通滤波器,时间常数不能拍脑袋。太小,PWM谐波混进功率反馈,VSG的有功环会出现高频抖动;太大,功率反馈滞后,频率响应会变迟钝,甚至和自适应环节的速率限制叠加后产生低频振荡。
我调模型时试过1ms到50ms的一组时间常数,最后稳定在10ms。判断标准是:P_e波形在稳态下应该比较光滑,但扰动发生时能在大约一个周期内跟上功率变化。如果P_e变化很慢,说明滤波太重,需要减小时间常数。
5.5 录波与对比实验的小技巧
做三组对比实验时,最好的做法不是每次跑完截图,而是把频率、有功、J、D四路数据全部存到工作区变量里,统一用脚本绘图。这样可以保证三组图的时间轴、坐标范围完全一致,对比时不会被不同的坐标尺度误导。
另外我习惯把频率偏差转成标幺值或者Hz来展示,而不是直接用角频率rad/s。很多论文里的频率波形都是50Hz附近的小范围波动,如果直接画角频率,数据波动太微小,肉眼几乎看不出差异。转成Hz后,49.8和50.2之间的差别一眼就能看出来,写报告时也更直观。
写在参数调试之外的一点个人体会
整套模型从固定参数改成自适应参数,最大的收获不是那几个漂亮的结果曲线,而是逼着我把"静态整定"的思维方式改成了"动态匹配"。固定参数方案下,整定的本质是在多个目标之间找一个折中,无论怎么调,总有不满意的地方;自适应方案下,需求的匹配关系被拆到了不同时间阶段里,J大时负责扛冲击,J小时负责恢复,D大时负责拉回,各有各的职责窗口。
最后再分享一个小细节:自适应范围不要贪大。很多初学仿真的人觉得范围越大效果越好,把J的上限设到基准值十倍,结果大扰动时频率确实掉得很少,但扰动结束之后,J来不及回到正常值,下一次扰动到来时参数状态完全不对,反而出现比固定参数更糟的连锁响应。我现在的做法是以上限三倍为界,超过这个范围就要检查是不是调节律本身的增益设计有问题,而不是继续加宽限幅。这套思路用于后续的微电网多机并联场景时,同样适用,只需要把J和D的调节律再叠加上多机之间的功率分配约束即可。