前阵子接了一个微电网方向的仿真任务,甲方反复强调一个需求:虚拟同步发电机(VSG)在离网和并网之间切换的时候,能不能做到“无缝”。说白了就是不能让负载感觉到电源换了个工作方式,不能大电流冲击,不能电压跌落闪断,不能频率振荡半天才稳下来。用MATLAB/Simulink把这套东西搭出来,前前后后踩了不少坑,把整个模型从原理到参数再到切换逻辑完整梳理一遍,给后面做微电网控制或者写储能并网方向论文的朋友一个可以直接参照的样本。
这篇内容围绕一个核心:VSG控制下的三相逆变器模型,在MATLAB/Simulink里如何实现离网转并网、并网转离网的平滑过渡。适合正在做新能源并网控制、微电网仿真课题的研究生,也适合刚接触VSG想搞懂切换机理的工程师。我尽量把公式、参数、仿真时序都写具体,让你照着搭能跑出差不多的波形。
1. 项目背景与“无缝切换”到底难在哪
1.1 虚拟同步发电机解决的是“惯量缺失”问题
传统电力系统里,同步发电机的转子本身就是个巨大的储能飞轮。负荷波动的时候,转子转速不会瞬间突变,而是靠着机械惯量缓慢释放或吸收能量,给频率调整争取时间。但光伏、储能这些逆变器接入电网时,直流侧到交流侧是通过电力电子器件快速控制的,输出功率响应速度是毫秒级,几乎没有任何惯性。大量逆变器替代同步机之后,电网的频率特性会变差,一点扰动频率波动就很大。
虚拟同步发电机就是让逆变器在控制算法层面模拟同步机的转子运动方程。它把“虚拟惯量”和“阻尼”写进控制环,让逆变器对外呈现出一个类似同步发电机的机电特性。这样一来,离网模式下它能自己撑起电压和频率建孤岛,并网模式下又能参与一次调频、提供惯量支撑,这是PQ控制和V/f控制都做不到的。
1.2 “无缝切换”的真正难点是控制模式突变
并网和离网这两种运行方式,本质上对逆变器的控制要求是矛盾的。并网时,电网把电压和频率钳制住了,逆变器不能硬顶着电网电压输出,否则会形成巨大的环流,所以需要跟网型控制,输出功率可调;离网时,没有电网给它做参考,逆变器必须自己建立电压和频率,也就是构网型控制,这时候它是电压源。
传统方案是并网用PQ控制,离网切到V/f控制。两种控制器结构完全不同,切换的时候PI参数、参考值、反馈通道全变了,必然导致输出电压、电流的暂态冲击。VSG天生是构网型电压源控制,并网时靠着下垂特性又具备跟网能力,不需要更换控制器,这就从原理上降低了切换难度。但“天然适合”不代表“自动无缝”,具体实现时,预同步、相位连续性、积分器状态这些问题处理不好,依然会炸。
2. VSG控制原理:把这些方程放进Simulink
2.1 转子运动方程与虚拟惯量
VSG的核心是转子运动方程,我用标幺化的形式写,Simulink里也建议这么搭:
2H·dω_pu/dt = P_ref_pu - P_e_pu - D_pu·(ω_pu - ω_n_pu)
其中H是虚拟惯量时间常数,单位是秒,它决定了系统频率变化的快慢;D_pu是阻尼系数,反映功率差额对频率偏差的静态关系;P_ref_pu是有功功率参考值,P_e_pu是实测输出电磁功率。这个方程左边是惯性项,右边第一个括号是有功差额,第二项是频率偏差产生的阻尼功率。稳态时等式左边为0,输出功率会自然地停在参考值减去阻尼功率的位置。
实际建模时,P_e_pu是从输出端测量的三相瞬时功率低通滤波后得到的。低通滤波的截止频率需要注意,一般取基波频率的1/2到1/10,也就是5到25Hz,太大了功率纹波会影响频率控制,太小了响应迟钝。
2.2 有功-频率下垂与无功-电压下垂
当VSG独立带载运行时,负载功率突然增加,发电功率不变就会导致频率下降。转子运动方程里的阻尼项D_pu起到了有功-频率下垂的作用:频率偏差越大,VSG输出的有功功率偏离参考值越多,这正是同步机的一次调频特性。
无功-电压关系用另一条下垂方程:
E_pu = E_ref_pu + n_q_pu·(Q_ref_pu - Q_e_pu)
这里E是输出电压幅值参考,Q_ref是无功功率参考,Q_e是实测无功功率,n_q是无功-电压下垂系数。励磁电流增大时同步机端电压会变化,VSG用这个方程模拟了同样的行为。如果负载无功增加,输出无功Q_e变大,电压E就下降,下降的程度由n_q决定。
这两条下垂方程加上转子运动方程,就把VSG变成了一个既带惯性又带调压特性的受控电压源。电压幅值E和相位θ(频率积分)合成三相参考电压,送进电压电流双闭环,最后驱动PWM调制。
2.3 跟网型与构网型在VSG里的统一
并网以后问题就微妙了。VSG输出端被电网电压钳制,它的频率不会完全自由地随功率差额变化,而是会跟电网“同步”,有点像两台发电机通过母线并联。这时候转子运动方程仍然在运算,但电网的强支撑作用使得ω_pu被拉向电网频率,P_e_pu则由系统潮流自然决定。换句话说,VSG并不需要切换到另一套控制逻辑,只需要处理好外部断路器的开闭和预同步问题。
离网时VSG作为唯一电压源运行,仍然使用同一套方程,只是没有电网给频率兜底,输出功率完全由本地负载决定。这个统一性是VSG能做无缝切换的底层原因。
3. MATLAB/Simulink模型搭建全过程
3.1 顶层架构与模块清单
整套模型我用MATLAB R2023a,Simulink配合Simscape Electrical库搭的。顶层分成主电路、测量、控制和保护逻辑四块。
主电路侧需要:直流电压源、三相全桥逆变器、LC滤波器、本地负载、三相电网电源、三相断路器。逆变器用Universal Bridge模块,开关管选IGBT,断路器用Three-Phase Breaker,初始状态设成打开,对应离网运行。
控制侧需要:ABC/dq坐标变换、瞬时功率计算、低通滤波器、VSG主体方程、电压电流双闭环、PWM发生器、SRF-PLL锁相环、预同步控制器、模式切换逻辑。我习惯把VSG主体打包成一个子系统,输入是P_ref、Q_ref、实测功率、电网相位、预同步修正量,输出是三相参考电圧。这样模块边界清楚,调试时哪里出了问题一眼就能找到。
3.2 主电路参数怎么定
我用的是一套10kVA系统参数:额定线电压380V,频率50Hz,直流母线电压750V。滤波电感取3mH,滤波电容取10μF,LC谐振频率算出来约919Hz。开关频率设10kHz,谐振频率约为开关频率的1/11,这个比例可以保证高频纹波衰减,又不至于让谐振峰靠基波太近。
电感的选取还要校核电压降。额定电流大概15.2A,电感基波压降约14.3V,占相电压220V的6.5%,在常规5%到10%的推荐区间内。电容的容性无功在50Hz下约0.35kvar,小于额定容量的5%,符合工程习惯。
逆变器直流电压和调制方式有关。用SVPWM最高可以输出大约577V的线电压,留出滤波器压降余量之后,750V直流侧给380V交流侧供电是合适的。如果你是自己设计MCU相关参数,还要注意直流电压利用率的问题,但仿真里直接用理想直流源就可以。
3.3 电压电流双闭环与PWM生成
VSG出来的参考电压不是直接给PWM的,电压环输出作为电流环的参考,电流环输出作为调制电压。这套双闭环的不要省,因为逆变器出口电压会受到负载和滤波电容充放电的影响,没有闭环稳压,离网时电压波纹会很大。
电压外环PI参数设计我按带宽法估算。电流内环带宽取开关频率的1/10,大约1kHz,电流环PI参数按L和R计算,比例项主要克服电感惯性,积分项消除稳态误差。电压外环带宽取100到200Hz,按C计算。给定初始参数后要在仿真里看阶跃响应微调,比例系数太大容易振荡,太小恢复慢。
电压电流环都在dq坐标系下做,所以Park变换后d轴和q轴分别有独立的PI调节器。调制信号经过反Park变换成三相正弦波,进PWM发生器。SVPWM模块Simulink里现成的,不要自己去写空间矢量算法,除非你想研究调制的细节。
3.4 预同步模块:从PLL锁相到自动同期
离网转并网之前,断路器两端是带电的,一端是电网,一端是VSG。直接合闸的后果就是两个电压源硬并联,相位不一致时会有很大的冲击电流,仿真里你会看到电流波形直接顶到几十倍额定值,实际系统里这已经触发保护跳闸甚至烧开关了。
所以必须先做预同步。预同步要满足三个条件:频率一致、幅值一致、相位一致。频率一致通过锁相环获取电网频率,把VSG的频率参考值往电网频率上拉;幅值一致通过调节电压参考幅值跟踪电网幅值;相位一致是最严格的条件,因为电网相位是实时变化的,断路器两端相位差必须小于一定角度才能合闸。
模型里我用SRF-PLL锁电网电压相位,得到θ_grid。同时从VSG内部提取虚拟电角度θ_vsg,两个角度做差,差值经过一个PI调节器产生频率修正量,叠加到VSG的角频率上。这样VSG的相位就会逐渐向电网相位收敛。仿真里观察相位差信号,调到0.005rad以内(约0.3度)就可以发合闸指令。
幅值预同步也做了PI修正,把电网电压幅值和VSG输出电压幅值做差,修正量加到电压参考上。注意合闸成功后要慢慢撤掉这两个修正量,避免并网后预同步和下垂控制打架。
3.5 切换控制逻辑:一个状态函数搞定
切换逻辑我用了一个MATLAB Function模块,输入有外部指令mode_cmd、预同步完成标志pre_done、当前模式mode,输出断路器控制信号、预同步使能、模式更新。核心逻辑用数字状态机描述:
function [brk, pre, mode] = switch_ctrl(mode_cmd, pre_done, mode_old) % mode: 0=离网, 1=并网 % brk: 0=断开, 1=闭合 persistent state if isempty(state) state = 0; end switch state case 0 % 离网运行 brk = 0; pre = 0; if mode_cmd == 1 && pre_done == 1 state = 1; % 合闸并网 end case 1 % 并网运行 brk = 1; pre = 0; if mode_cmd == 0 state = 2; % 先转离网 end case 2 % 离网过渡 brk = 0; pre = 0; state = 0; % 回到离网稳态 end mode = state; end这里最关键的一点是:预同步使能不只在离转并阶段开启,并转离完成后如果还要并网,需要重新预同步,因为离网运行一段时间后VSG相位和电网相位又会跑偏。所以状态机里离网状态要允许预同步使能,我的简化写法里预同步使能是放在外层逻辑配合的,实际模型建议把pre信号在状态0时设为mode_cmd,这一点不要照抄上面的简化代码。
我自己的实现是把pre_sync_enable单独做成一个使能信号,拉高后开始预同步计时,一定时间内相位差满足条件就置位pre_done,然后状态机才允许合闸。
4. 关键参数表与仿真结果解读
4.1 一套能直接用的初始参数
以下是我调试最终定型的一套参数,10kVA系统可以直接用,其他容量可以按基准值折算。
| 参数 | 数值 | 说明 |
|---|---|---|
| 直流母线电压 | 750 V | IGBT逆变器直流侧 |
| 额定线电压 | 380 V | 三相输出 |
| 额定频率 | 50 Hz | 电网与VSG额定频率 |
| 滤波电感 | 3 mH | 逆变器出口 |
| 滤波电容 | 10 μF | 滤波电容星形连接 |
| 开关频率 | 10 kHz | PWM载波 |
| 虚拟惯量H | 2 s | 惯性时间常数 |
| 阻尼系数D | 20 pu | 标幺化阻尼 |
| 电流环KP/KI | 3.5 / 60 | 初始值,按实际微调 |
| 电压环KP/KI | 0.8 / 25 | 初始值,按实际微调 |
| 预同步PI | KP=50, KI=300 | 相位环收敛速度较快 |
| 断路器相角阈值 | 0.005 rad | 约0.3度 |
虚拟惯量H的取值影响很大。H=2s时频率变化比较柔和,但恢复过程也慢;H减小到0.5s,频率响应快了,但切换瞬间的尖峰更大。阻尼系数D主要影响振荡衰减,D太大会造成静态频率偏差变大,D太小功率会来回摆。二者要配合着调,不是孤立的。
4.2 离网运行阶段的波形特征
仿真时序我设计成:0到0.3秒离网带载运行,0.3秒启动预同步,0.5秒合闸并网,1.0秒断开电网模拟离网切换,之后一直运行到1.5秒。
离网阶段,本地负载10kW、2kvar,VSG独立供电。电压波形稳定在额定值附近,频率约50Hz,因为阻尼项的存在,实际频率比额定值略高一点点,这是下垂特性的正常现象。负载突变时,比如0.1秒把负载从10kW跳到15kW,频率会短暂下降然后恢复,幅度取决于虚拟惯量。
4.3 离转并过程的预同步与合闸
0.3秒预同步启动后,观察断路器两端相位差信号,会发现从初始的某个角度逐渐收敛,大概0.15到0.2秒后进入0.005rad以内。此时幅值差也收敛到1%以内,预同步完成标志置1。
0.5秒合闸,输出电流波形应当看不到明显的冲击尖峰。我调试到最好的一组结果里,合闸瞬间电流只出现了约1.2倍额定值的轻微波动,之后在一个工频周期内恢复平稳。如果你看到的电流尖峰在2倍以上,先别怀疑主电路参数,回到预同步环节检查相位差收敛条件是不是真的满足了。
4.4 并转离过程的电压支撑
1.0秒断路器断开,系统转为离网运行。这里考察的是VSG能不能在失去电网后继续保持供电。仿真里本地负载还挂着,VSG会立刻承担全部功率,由于转子运动方程的惯性作用,频率会有小幅跌落,但会在阻尼作用下重新回到稳态。
我调整D_pu之后得到的波形:频率最多下降了0.15Hz,大约300ms内恢复,输出电压幅值几乎没有看见明显跌落。如果出现电压大幅下降,问题一般出在电压环PI的积分状态被重置,或者模式切换时把电压参考切断了,切记离转并、并转离都不要重置电压环和电流环的积分器。
5. 常见问题排查与避坑速查
5.1 合闸瞬间冲击电流偏大
冲击电流大,90%的原因不是参数不好,而是预同步没做完。仿真里看合闸瞬间的三相电流波形,如果出现几十倍额定的尖峰,基本可以断定断路器两端电压幅值差或相位差不满足要求。先检查预同步使能有没有真的拉高,再检查相位差PI参数,相位差PI增益太小的话,收敛速度跟不上预设的合闸时刻,合闸指令发出时相位差还有好几度。
还有一种情况:预同步信号是拉高了,但VSG内部参考角度还是自己积分出来的,修正量没有真正作用到频率给定回路。这种问题常见于用常数替代了VSG内部的频率输入,修正量加不进去。排查时把相位差、修正量这两个信号同时拉出来看,一眼就能定位。
5.2 并转离之后频率振荡
频率振荡或来回波动,核心原因是虚拟惯量H和阻尼D配合不匹配。你可以用二阶系统类比:H相当于质量,D相当于阻尼比。质量大、阻尼小,系统就会低频振荡;质量小、阻尼大,恢复快但抗扰动能力差。
我调试的经验是先把D固定,从1增加到50,观察频率恢复曲线的超调量,找到超调量在10%左右的D;再固定D调H,使频率变化率在可接受范围。这两个参数反复迭代,一般半小时能出比较满意的结果。这里面还有个容易被忽略的点:功率测量低通滤波器的截止频率也会影响等效阻尼,滤波器太慢,相当于在反馈回路里加了延迟,会让系统变得更容易振荡。
5.3 仿真速度慢、代数环和数值不收敛
仿真速度慢是电力电子模型的常态,10kHz开关频率下,固定步长解算器步长至少要1e-6秒,仿真1.5秒物理时间需要跑将近一个小时的都有。我的建议是前期调参数用平均模型,把IGBT换成平均值模型,开关频率的纹波看不见,但VSG低频特性完全一样,步长可以放宽到1e-4秒,一分钟内就能跑完一次。控制方案定型后再换回开关模型出最终波形。
代数环是另一个高频问题。VSG内部,功率计算出来之后立刻用于计算参考电压,参考电压又反过来影响功率,中间没有延迟的话Simulink就会报代数环。解决方法是功率信号经过低通滤波器后已经带了一阶惯性,但有些路径还是会形成代数环,这时候在反馈回路加一个Memory模块或者离散延时,破坏直通即可。注意延迟时间不能太大,否则影响控制相位。
5.4 PLL锁相不稳
预同步依赖PLL,PLL给出的相位不准,预同步就无从谈起。电网电压谐波或者畸变较大的情况下,SRF-PLL会带进波动,锁相结果也不干净。仿真里电网电压是理想源,一般没事,但如果接的非线性负载造成电压畸变,就要在PLL的Park变换输出上加低通滤波,或者改用DSOGI-PLL,工程里这类增强型PLL更稳。
6. 实操心得与后续扩展
我最初搭这套模型时走了不少弯路,最大的体会是不要想着一次把切换全做好。先搭一个最简的VSG离网模型,纯电阻负载能稳住了,再加并网,并网稳态能跑了,最后才做预同步和切换逻辑。每加一块就验证一块,模块之间的问题就不会纠缠在一起。
另一条经验是关于“无缝”的理解。真正意义上的无缝,核心不在断路器动作那一刻的时序有多精确,而在于控制器的状态连续性。离转并之前做充分的预同步,并转离之后不要重置任何积分器,参考电压的逻辑不要突变,只是改变外部断路器的状态,让VSG自己依靠功率平衡去适应。这就像两个人一起走路,强行换人是容易摔倒的,但如果另一个人提前并排、调整步幅和节奏,脏活就发生在不知不觉中。
这套模型后续可以扩展的方向不少。加上孤岛检测模块,用电压幅值和频率的变化率判断是否脱网,自动触发并转离,就能做成真正的离网并网自动切换仿真。进一步还可以把单台VSG扩展到两台VSG并联,用来研究微网内多机功率分配。界层再往外走,就是控制器硬件在环测试了,把控制算法部署到实际控制器里,仿真主电路部分留在实时仿真机里,这就离工程落地不远了。如果你也打算搭这个模型,我建议从最朴素的三相逆变器模型开始,一步步往VSG上叠加控制,别一上来就套完整的大模型,后面出了问题会非常难排查。