最近手头在做一个风储并网的项目,核心思路是把虚拟同步发电机(VSG)控制算法写在储能变流器里,让风电、储能和电网三者能像一台真实同步机那样协调工作。整个系统在 Simulink 环境里已经跑通,实测下来的效果很直观:风速突变时,电网频率的波动幅度明显被压住了,有功调节的速度也让人满意。这篇就把这套仿真从原理到落地的全过程拆开讲透,包括控制参数怎么定、模型怎么搭、波形怎么分析,以及我踩过的几个典型的 Simulink 仿真大坑。适合正在做新能源并网仿真的研究生、从事变流器控制开发的工程师,以及刚接触 VSG 想快速入门的人参考。
1. 风储系统为什么需要虚拟同步发电机
1.1 传统逆变器并网的隐藏短板
风电和光伏这类新能源,本质上都是通过电力电子变流器并网的。传统的逆变器控制多数是“跟网型”(grid-following)思路——用锁相环 PLL 去锁电网电压的角度,然后跟着电网跑。这种控制方式在电网比较强壮、短路比足够高的场合下问题不大,可一旦风电占比越来越大、电网的同步机被替换掉,整体系统惯量就会下降,电网在扰动之下的频率和电压支撑能力会明显变弱。这时候传统 PLL 方案就有个尴尬处:它既没有天然的惯量响应能力,又容易因为电网阻抗变化导致锁相环失稳,严重时甚至引发次同步振荡。
这个问题的根源在于,逆变器作为静止设备,本身没有旋转质量,转子上那套“惯性储能”的物理机制在变流器里完全不存在。真实同步机里,当系统出现频率下降时,转子的转动惯量会自然释放能量去阻挡频率跌落,这个响应是自动的、零延时的。逆变器想模拟这个行为,就必须在控制算法里“伪造”一个虚拟的转子出来。
1.2 虚拟同步发电机的本质:给变流器装一个“虚拟转子”
VSG 控制的本质其实就一句话:把同步发电机的转子运动方程写进逆变器的有功控制环里,让变流器对外表现为一个有惯性和阻尼特性的电压源。这样一来,并网变流器不仅能输出有功和无功,还能在电网频率波动时像同步机一样释放或吸收动能,暂时支撑系统频率。
风储系统里面引入 VSG 还有一个额外的好处:储能本身的响应速度极快,可以主动补充风电功率的波动分量。风电是随机的,功率时高时低,储能负责平抑这部分波动,而 VSG 控制则给整个并网接口提供了“类同步机”的外特性。也就是说,风储 VSG 系统是从物理层面同时解决了两个问题:源侧功率波动,以及并网变流器缺乏惯量支撑的问题。
1.3 风储系统的整体结构
我搭建的风储 VSG 并网系统大致分成几个部分:
- 风电单元:这里用的是简化模型,把永磁直驱风机加背靠背变流器的输出等效成一条可控直流功率母线。做 VSG 研究的重点是并网接口的控制行为,把风机的机械细节简化掉是合理的,能省掉大量仿真时间。
- 储能单元:蓄电池加双向 Buck-Boost 变换器,控制上采用恒直流母线电压策略,实时充放电平衡母线功率。电池模型用 Simscape Electrical 里的 Battery 模块,SOC 初始值设为 80%。
- 公共直流母线:风电和储能在同一个直流母线上汇聚,母线电压维持在 800V。
- VSG 逆变器:三相全桥加 LC 滤波,经并网接触器和升压变压器接入 10kV 电网。这一块是整个系统的核心,VSG 算法就在这一级的控制器里。
- 本地负载:接入一组可控负荷,用来测试负荷突变时的动态响应。
系统额定容量我按 10kW 做的,三相 380V,电网频率 50Hz。这个规格不追求工业级规模,重点是验证控制算法的动态行为,仿真计算量也比较适中。
2. 核心控制逻辑与关键参数整定
2.1 VSG 算法到底在算什么东西
VSG 的控制本体分成三层,从外到内分别是有功控制环、无功控制环和电压电流内环。
有功控制环是最核心的部分。同步机的转子运动方程写作:
J * dω/dt = Tm - Te - D * (ω - ωn)其中 J 是虚拟惯量,ω 是VSG角频率,ωn 是额定角频率,Tm 是机械转矩(对应输入功率),Te 是电磁转矩(对应输出功率),D 是阻尼系数。在仿真里,这个式子用 Simulink 的积分器、增益模块和求和模块搭出来就行。机械转矩用额定有功功率和额定角频率的比值算出来,电磁转矩则是瞬时输出功率除以实际角频率。
有功控制环输出的是 VSG 的角速度,积分以后得到电压矢量的相位角 θ。与此同时,有功下垂环节根据系统的频率偏差修正有功指令。无功控制环用的是 Q-U 下垂,根据无功偏差修正电压幅值指令。有了相位和幅值,就得到了 VSG 内部电动势的三相参考电压,再送到电压电流环去跟踪。
2.2 关键参数如何整定:J 和 D 的计算思路
J 和 D 是 VSG 控制里最敏感的两个参数,也是仿真调参阶段最容易让人头疼的地方。
J 的物理意义是虚拟转动惯量,单位 kg·m²,它决定了频率响应的惯性程度:J 越大,频率变化越平滑,但动态响应也越慢,功率超调可能更严重。D 的物理意义是阻尼系数,单位 N·m·s/rad,它决定了系统衰减振荡的速度。D 太小,系统容易振荡;D 太大,又会削弱惯量支撑的效果。
我采用的整定思路是这样的:先根据稳态下垂特性算出 D,再用时域响应的经验规则确定 J。
有功下垂关系式是:
ω - ωn = -Kp * (P - Pn)也就是频率偏差 1% 对应有功变化 100% 时,下垂系数 Kp = (Pn/1%) / ωn。代入 Pn = 10kW,ωn = 314 rad/s,频率偏差 1% 即 3.14 rad/s,算出来 Kp ≈ 3185 W·s/rad。这个 Kp 本身就是 D 的下限参考值。我实际取了 D = 500 N·m·s/rad,这意味着在频率变化 1% 时,有功承担比下垂关系管得更多一点,有利于频率的快速恢复。
J 的取值我这里用一个工程近似:虚拟转动惯量 J 对应的惯性时间常数 H = J * ωn² / Sbase。真实同步机的 H 在 2 到 8 秒之间,取 H = 2,Sbase = 10kW,算出来 J ≈ 0.2 kg·m²。仿真试跑下来,J 从 0.1 到 0.5 之间都能稳定,我最终选定了 0.2 作为基准值,兼顾响应速度和频率平稳性。
2.3 电压电流双环与虚拟阻抗
VSG 产生的电动势参考值不能直接去控制 PWM 开关管,还需要电压外环和电流内环做跟踪控制。电压环按 PI 调节,带宽设在 200Hz 左右;电流环按 P 调节,带宽设在 1kHz 左右。这个频带安排的逻辑特别重要:电流环要快于电压环,电压环要快于 VSG 的有功/无功外环,这样才能保证各个控制层级之间不发生频率响应重叠,否则动态过程会出现奇怪的耦合振荡。
还有一个容易被忽略的环节是虚拟阻抗。VSG 作为电压源并网时,如果滤波器和线路阻抗不够大,在弱电网下会有功率耦合问题。我特意在 VSG 输出的参考电压里串了一个虚拟电感 Lv = 2mH,用于模拟同步机的同步电感作用。加了虚拟阻抗之后,有功环和无功环之间的动态耦合明显变弱,波形更干净。
3. Simulink 建模仿真全过程
3.1 模型层级划分与模块选择
模型的搭建我强烈建议按层级组织,不要一个大模型摊平到底。我的模型分了三层:
- 顶层是系统主电路,电机、电池、逆变器、变压器、电网都在这一层。
- 中间层是控制方式封装,VSG、电池控制、并网开关逻辑各自做成子系统。
- 底层才是指标计算和调制环节,比如 SVPWM、PLL、功率计算。
这样组织的好处是可以为一个模块做单元测试,调参数也更方便。我主电路用 Simscape Electrical 的基础模块库来搭:三相全桥用 Universal Bridge,IGBT 默认参数;LC 滤波器的 L 取 0.6mH,C 取 10μF;直流母线电容取了 2000μF,主要为了防止功率突变时母线电压震荡太大。
这里给一个参数取值提醒:滤波电容太大会导致 VSG 的空载损耗增加,高频谐波也跟着差;太小则高频开关纹波会串到电网上。C 的经验值选在开关频率的 1/10~1/20 谐振频率对应电容值,我开关频率设 10kHz,LC 谐振频率约 2kHz,这个取值关系还算合理。
3.2 关键控制子系统的搭建过程
VSG 控制子系统的搭建步骤是这样的:
有功通道第一级是功率计算:采样三相电压和电流,用二阶广义积分器构造正交分量后计算瞬时功率,或者直接用三相功率模块求平均带低通滤波。实测下来直接对瞬时功率做低通滤波也够用,截止频率 100Hz 就行。功率信号和给定功率做差,经过下垂和转子方程,得到角频率。
然后是对应角频率的积分,得到相位角。这一步要注意数值溢出问题:积分器输出的角度会不断地超过 2π,所以必须要规范化到 0~2π 範囲内。我用取余模块和判断逻辑做了角度规整,否则后面的坐标变换和三角函数计算会产生精度问题。
电压通道是无功下垂算出电压幅值参考,再叠加虚拟阻抗压降修正,形成三相参考电压信号。参考电压和逆变器输出反馈电压做差,送进电压 PI 控制器,生成电流指令;电流指令再和滤波电感电流做差,经过电流 P 控制器,生成调制波。调制波输入到离散 SVPWM 模块,产生六路 PWM 信号驱动逆变器。
这中间还有两级防饱和限幅:电压控制器的输出要限幅在 ±20A,电流控制器的输出要限幅在 ±1.5 倍的调制系数范围。限幅值是根据逆变器容量和直流母线电压计算的,如果漏掉限幅,仿真中的任何瞬态扰动都可能导致控制器输出飞掉。
3.3 仿真工作区与求解器设置
仿真时长 5 秒,前 1 秒系统空载启动,1.5 秒并网,2 秒风电功率突减,3 秒本地负荷突增,4 秒钟恢复原工况。这样一个流程覆盖了启动瞬态、并网冲击、源侧扰动、负荷扰动、恢复五种典型场景,基本把 VSG 的动态行为都考了一遍。
求解器是一个特别值得细说的部分。VSG 控制里有 10kHz 的 PWM 开关,主电路必须用变步长求解器才能保证快速开关沿的精度。一开始我用 ode45,跑起来又慢又不稳定,换到 ode23tb 之后无论是速度还是收敛性都明显改善。Simscape Electrical 模块库里很多元件自带刚性特性,ode23tb 是刚性系统专用的带刚性算法,对电力电子仿真远优于 ode45 的高阶非刚性算法。最大仿真步长可以放宽到 10ms,但 PWM 环节会拖慢仿真,为了精度和速度的平衡,我把局部求解器设置在连续模式下跑。
仿真数据的保存我也做了一点小优化:Scope 模块只做实时观察,真正要分析的数据用 To Workspace 模块输出为结构体或者时间序列。这样波形分析完全不受模型内截图范围的限制,多个工况的数据也可以在 MATLAB 里直接画在同一张图里做对比,大大减少了后期处理的工作量。
3.4 三个典型的仿真实测结果
第一组工况是空载并网。VSG 系统的相位角由转子方程自由产生,并网时刻的相位差控制在 ±5° 以内时才闭合并网开关,实测并网冲击电流大约只有额定电流的 10%,说明相位跟踪控制准确。
第二组工况是风电功率在 2 秒时从 8kW 突然跌到 4kW。如果没有储能和 VSG 的支撑,直流母线电压和并网功率必然会剧烈波动;加了 VSG 之后,储能立刻释放能量补偿功率缺额,母线电压纹波在 ±2% 以内,电网频率最大偏差被控制在 0.15Hz 以内,恢复时间约 0.8 秒。作为对比,我另外跑了一组不加 VSG、只用传统 PQ 控制的模型,同样的工况下频率跌落大约 0.45Hz,恢复时间也要多出一倍。
第三组是本地负荷在 3 秒时突然增加 3kW。这组测试考验的是 VSG 的电压外特性,实测电压跌落约 5%,无功功率在 100ms 内补偿到位,系统不发生明显振荡。
这三组数据合在一起,已经能相对全面地说明 VSG 对风储并网系统动态稳定性的贡献了。
4. 仿真中的常见问题与排查实录
4.1 经典的“Bus Selector 没有可选信号”
这个报错在 Simulink 里做电机、电力电子控制的人应该都不陌生。出现这个报错时,大概率不是 Bus Selector 模块的问题,而是上游信号根本没有按 Bus 结构组织起来。
我在初始搭建时,把三相电压和三相电流分别从不同的 Scope 总线引到功率计算模块,想着直接用 Bus Selector 提取单相信号,结果一直报“没有可选信号”。后来仔细检查才发现,信号线的变量名还是默认的“Signal1”“Signal2”,Bus Selector 不能识别这种默认名称。解决办法有两个:一是选中信号线,在属性里给它命名,比如 Ia、Ib、Ic;二是用 Bus Creator 把多条信号主动封装成 Bus,再在 Bus Selector 里选择。命名之后问题立刻消失。
这个坑的排查思路其实值得单独说一说:只要 Bus Selector 里没有信号,就说明模型里不存在能作为输入源的总线结构,至少 90% 的情况是上游信号没有命名或者根本没有创建总线,剩下 10% 才是引入了其他封装库的兼容性问题。先查信号名,再查总线结构,不用动模块本身。
4.2 代数环问题导致的仿真异常
VSG 控制里有功率反馈闭环,功率计算用到的电压电流和逆变器输出的调制波之间,天然存在直接馈通关系。仿真跑起来之后偶尔会出现“Algebraic Loop”警告,伴随着波形上的毛刺和严重的计算迟滞。
代数环的本质是 Simulink 在同一仿真步长内遇到了无延时的闭环数据依赖,需要迭代求解器迭代才能收敛。解决它最有效的办法是切断直通路径,我用的是在反馈回路中插入一个 Memory 模块,让这个控制周期使用的是上一时刻的功率值。这样的延时在 10kHz 控制周期里只有 0.1ms,完全在可接受范围内。后来我进一步把功率计算的低通滤波器截止频率从 100Hz 降到 50Hz,代数环彻底消失了,波形也更光滑。
4.3 MCDC 覆盖率测试中的“冗余”疑问
后续我对这套模型做过进阶的测试分析,用 Simulink Coverage 生成了 MCDC 报告。MCDC 的含义是修正条件/决定覆盖,它要求每个决定中的每个条件都必须独立地影响决定结果。对 VSG 控制来说,比如限幅逻辑里的条件、并网开关判断里的组合逻辑,都可以用 MCDC 来检验是否有永远执行不到的分支。
直观地说,如果报告里出现红色“不覆盖”的条目,不一定代表模型有故障,更常见的含义是这个条件是冗余保护或者边界值条件不容易被自动测试触发。比如我做并网相位判断时的逻辑“abs(delta_phase) < 5°”,自动生成测试用例时可能很难精确覆盖相位差刚好超过 5° 的边界点,这种标记就要手动补充测试条件,让它覆盖到边界两端。这个分析方法适合做工程代码验证时使用,对控制策略的成熟度检验很有价值。
4.4 仿真跑得太慢的经验:把 PWM 周期调大是一种误区
很多新手发现仿真速度慢,直接就把 PWM 载波频率从 10kHz 降下来,调到 1kHz 甚至 500Hz,速度是快了,但结果严重失真。我这里给出的经验是:保持开关频率不变的前提下,把主电路的离散化方式从“平均值模型”改为“开关平均值模型”——就是把开关管替换成受控电压源/电流源的均值等效模型。这样一来,虽然不能观察开关纹波,但低频信号的行为特征完全保留,仿真速度可以提高很多。如果你想看的是 VSG 与电网的动态交互,而不是 PWM 细节,用均值模型跑长仿真,再单独用一次高频模型跑短时详细验证,这个组合方案最省事。
另外如果遇到调试时仿真总是中断,检查一下“Infinity”问题。电池 SOC 在极端条件下有可能越界,功率计算出现除零异常,积分器输出飞掉导致相位角度出现非法值。做限幅保护不是可选项,是必须项。
4.5 变流器散热和储能 SOC 边界条件的仿真附加检查
这个可能超出了一般做控制仿真的范围,但我建议模型里至少加一个简单电池 SOC 维护逻辑。仿真中储能会在有功波动时频繁充放,如果不加 SOC 维持控制,长期仿真后电池电量会漂移,母线电压也终将失控。我在储能控制环里加了一个慢速的 SOC 回充补偿环,设定当 SOC 低于 50% 时自动增大充电功率,避免仿真后期储能容量耗尽导致系统崩溃。这个在仿真中虽然只是一个积分器和比较器的组合,但对长期稳定运行测试来说是保命的。
5. 一点实操体会与后续扩展思路
整套模型从控制原理到最终跑通大概花了两周时间,中间一半时间花在参数整定上,另一半时间可以说是花在和 Simulink 的数值问题搏斗上。我的体会是 VSG 本身是一个结构清晰、调试路径明确的控制策略,难点主要在工程实现层面——每个控制参数都不是孤立存在的,J、D、滤波截止频率、电压环带宽、电流环带宽之间要匹配,不能只追求某一个环节的完美响应。
给后面做这个方向的朋友一个具体建议:控制参数初值不要自己闷头去试,先把系统线性化模型拿到,用小信号分析画出特征根分布,再看哪些参数对阻尼比的影响最敏感。我后来用 Simulink Control Design 里的线性化工具,把 10kW 系统在额定工作点线性化了一次,画出的根轨迹图对 J 和 D 的整定帮助非常大。仿真试错只是验证手段,真正的参数设计还是要有理论计算支撑。
目前这套模型后续我还想扩展到两个方向:一是风电场群的开环动态下多台 VSG 之间的功率分配问题,二是从 Simulink 自动生成 C 代码,把 VSG 算法直接烧到 DSP 控制器里做硬件在环测试。总的来说,这套仿真已经能稳定复现 VSG 的各项动态特性,可以作为进一步研究的基础平台。