光伏储能虚拟同步发电机并网控制Simulink仿真模型详解 前两年我在做一个园区微网的光伏储能仿真验证项目当时最大的困惑是光伏逆变器在电网眼里其实是个“异类”——它没有转子没有机械惯性电网频率波动时它既帮不上忙有时候还会因为自身控制策略过于灵敏而添乱。这个问题比较成熟的解法就是给逆变器装一个“虚拟的同步发电机大脑”也就是大家常说的虚拟同步发电机VSG控制。这篇文章要讲的就是一套完整的光伏储能虚拟同步发电机并网仿真模型Simulink仿真实现。我把从原理到模型搭建、从参数整定到工况设计、从波形解读到调试踩坑的完整路径摊开来说。内容主要面向正在做微网、新能源并网仿真或者刚接触VSG控制想跑通一个能用的Simulink模型的同学。读完之后你不仅能照着一行行搭出来还能搞清楚每个模块、每个参数为什么这样设。1. 先把问题说清楚光伏并网逆变器缺了哪门课1.1 传统PQ控制的两大短板现在绝大多数光伏并网逆变器商用产品里基本都是PQ控制外环算有功无功指令内环用电流PI调节器把并网电流控制在dq坐标系下逻辑简单、响应快、谐波性能也好。但PQ控制有一个天生的短板它没有惯性也没有阻尼。你把光伏逆变器并到大电网上它跟电网之间的耦合就是一个快速跟踪的电流源。电网频率瞬间跌了它根本不会像火电机组那样因为转子惯量而暂态地释放一点有功出来撑住频率它只会根据锁相环测到的频率傻傻地按给定功率输出。另一个问题是弱电网适应性差。在并网点离主网较远、线路阻抗较大的场景下PQ控制这种“锁相环电流源”的模式容易失稳。锁相环在弱网下会跟线路阻抗耦合出现振荡。有实际项目里光伏电站并网谐振、逆变器跳闸很大一部分原因就在这。1.2 VSG补齐的正是“发电机属性”虚拟同步发电机Virtual Synchronous GeneratorVSG的思路很直接用控制算法让逆变器在外部特性上表现得像一台同步发电机。你想象一下同步发电机的外特性它有转子有转动惯量所以功率波动是渐变的转速不会突变它有原动机调速器所以频率下降时会自动增加有功输出它有励磁系统所以无功增加时机端电压会有一个“调差”过程它有阻尼绕组所以跟电网之间的功率振荡会被慢慢衰减掉。VSG控制就是把这四件事用数学模型搬到逆变器的控制环里。逆变器变成一个“电网友好”的电源频率波动时能撑一下、阻尼振荡时能压一压、电压跌了能补一点无功。这就是它对比传统PQ控制核心的差异所在。1.3 为什么非要用Simulink来搭这套模型原因很朴素VSG涉及到同步电机运动方程、下垂特性、电压电流双闭环、PWM调制、光伏MPPT、储能直流母线控制这是一个多时间尺度的混合系统。从几十毫秒的电网友好响应到几百毫秒的MPPT扰动再到秒级的一次调频过程用纯数学推导很难直接看到交互影响。Simulink的优势是分层建模光伏阵列和Boost是一层储能和双向DC/DC是一层VSG控制环又是一层电网和测量在顶层。每一层都能单独调试波形直接拖出来看。另外Simulink里的Simscape Electrical模块库提供了PV Array、Battery、IGBT桥臂这些现成模型我们不用自己去写电力电子器件的微分方程可以把精力集中在VSG控制器本身。2. VSG核心算法拆解模拟一台虚拟同步机关键就这三个环2.1 有功-频率环惯性从“运动方程”里来VSG控制算法里最核心的公式就是同步发电机的转子运动方程J * dω/dt Tm - Te - Dp * (ω - ω₀)其中J是虚拟转动惯量单位kg·m²它决定了惯性大小ω是VSG虚拟角速度ω₀是额定角速度Tm是虚拟机械转矩由有功功率指令产生Tm Pref / ω₀Te是电磁转矩由实际输出的有功功率计算Te Pe / ω₀Dp是虚拟阻尼系数单位N·m·s/rad模拟阻尼绕组的效果。这个方程在Simulink里实现起来非常直观算Te、算Tm、作差、乘上1/J、积分一次得到ω再积分一次得到虚拟功角θ。这个θ特别关键它不是锁相环量出来的而是VSG自己积分出来的。逆变器输出电压的相位就由这个θ决定相当于我们自己“造”了一个转子位置。土一点理解传统PQ控制里逆变器的输出相位是锁相环去“追”电网VSG控制里逆变器自己有一个虚拟转子在转电网跟它之间有功失衡就会通过运动方程改变转速和相位从而改变输出功率。这一来一回惯性就出来了。2.2 无功-电压环模拟励磁调压同步发电机的励磁系统决定了机端电压和无功之间的关系。VSG里对应一个很简单的下垂公式E E₀ Kq * (Qref - Q)E₀是空载电动势基准Kq是无功-电压下垂系数。实际无功Q比指令Qref低时就抬高电压幅值比指令高时就压低电压幅值。这里还要加一个一阶惯性环节模拟励磁绕组的时间常数一般取几十到几百毫秒。不加的话无功响应太硬跟电网之间的电压冲击会比较明显。有了有功环输出的相位θ再加上无功环输出的电压幅值E三相参考电压就出来了Va Esin(θ)、Vb Esin(θ-120°)、Vc E*sin(θ120°)。这组三相电压作为后续电压电流双闭环的指令值。2.3 参数怎么定J、Dp、Kq的整定思路很多刚接触VSG的人第一个问题就是J到底取多少工程上习惯的做法是把J换算成惯性时间常数H。同步发电机H一般在2~10秒之间表达式是H J * ω₀² / (2 * S_base)S_base是VSG的额定容量。比如额定功率50kW、额定角频率314rad/s想取H2秒那么J 2 * H * S_base / ω₀² 2 * 2 * 50000 / (314²) ≈ 2.03 kg·m²实际调试时我会在这个值的0.5倍到2倍之间去试。J太小惯性感不明显J太大系统响应慢电网频率波动时VSG长时间不出力还会引起跟电网之间的低频振荡。Dp虚拟阻尼的整定思路更直接看有功功率的超调量和振荡衰减速度。Dp偏小功率振荡衰减慢波形会像欠阻尼的弹簧Dp偏大衰减快但稳态频率偏差增大相当于把“阻尼”变成了“硬度”。Kq无功-电压下垂就按电压偏差来定比如允许5%的电压偏差对应全额无功调节那Kq就等于0.05*E额定/Q额定。3. Simulink模型逐模块搭建光伏阵列为源VSG为控制脑3.1 整体拓扑与层级结构我用的这套模型拓扑是这样的光伏阵列 → Boost变换器 → 直流母线 → 三相逆变器 → LC滤波器 → 并网开关 → 电网 ↑ 储能电池 → 双向DC/DC直流母线电压稳定在两个环节里分工光伏侧Boost只管MPPT把光伏功率最大地抠出来储能双向DC/DC负责稳住母线电压光伏发多了就充电发少了就放电三相逆变器采用VSG控制负责把直流功率转成“同步发电机式”的交流功率送上网。Simulink里我建议直接用一个子系统封装顶层内部再分四块光伏阵列与Boost子系统储能电池与双向DC/DC子系统VSG控制子系统电网、滤波器和测量子系统。块与块之间用电气信号和Goto/From标签连接不要拉一堆交叉线后面查错会少很多痛苦。3.2 光伏与储能单元建模光伏阵列我直接用的是Simscape Electrical里的PV Array模块。模块库路径是Simscape Electrical → Specialized Power Systems → Electrical Sources。参数设置里要填一串电池参数工程上最省事的做法是只修改字符串级参数开路电压、短路电流、最大功率点电压和电流。举个例子一套峰值60kW左右的阵列可以设成参数数值开路电压Uoc636 V短路电流Isc120 A最大功率点电压Ump580 V最大功率点电流Imp108 A后面的Boost变换器用带二极管开关的升压电路开关频率设到10kHz即可MPPT控制用经典的扰动观察法PO。MPPT模块的算法不建议写在M文件中用Matlab Function调直接在Simulink里用S-Function或者Stateflow写一个小逻辑采样步长和PWM发波分开否则仿真会非常慢。储能电池用Simscape Electrical里的Battery模块选成锂离子模型额定电压650V额定容量100Ah。双向DC/DC的控制器就一个电压外环加电流内环PI参数按直流母线环带宽50Hz左右整定。注意电池的电流方向定义Simulink电池模块放电电流方向是正充电方向是负接双向DC/DC的时候方向搞反了直流母线电压会直接崩给你看。3.3 VSG控制环建模这是整套模型的核心。我把VSG控制子系统再细分成五个小的模块瞬时功率计算用abc三相电压电流算P和Q。我用dq坐标系下的公式P 1.5 * (vdid vqiq)Q 1.5 * (vqid - vdiq)。这里电压用滤波器电容电压电流用逆变器侧输出电流。虚拟转子模块实现运动方程。P_ref给定有功指令P_e反馈瞬时功率两者相减除以ω₀得到转矩偏差经过1/(Js Dp)求虚拟角频率偏差再叠加上额定角频率ω₀得到虚拟角频率ω积分得到虚拟功角θ。这里有一个细节交流器输出有功是Pe 1.5*(vdid vqiq)而运动方程中的Te Pe/ω₀不要用瞬时转矩去怼运动方程否则会有2倍频纹波干扰。无功电压模块实现E E₀ Kq*(Qref - Q)再加一阶惯性环节输出调压后的电压幅值E。电压合成用θ和E合成三相电压参考值然后做abc→dq变换得到Vd_ref和Vq_ref。这个dq变换的角位置就是θ不是锁相环的角度很多新手在这里直接用了PLL的输出结果VSG完全失去虚拟惯性的意义。电压电流双闭环电压外环用PI控制器跟踪Vd_ref和Vq_ref输出电流指令电流内环再跟实际电流作差PI调节然后加上滤波电容电压前馈和电网电压前馈输出调制电压经过dq→abc反变换之后送给PWM发波。电流内环的带宽一般设计在1~2kHz电压外环带宽在100~300Hz这个带宽关系不能反。3.4 并网开关与测量环节的接线细节并网开关我建议用Three-Phase Breaker模块不要用理想开关直接短路两块电源。预同步完成之前断开完成之后闭合。测量用Three-Phase V-I Measurement放在开关的电网侧采样三相电压电网侧用于预同步采逆变器侧电流用于功率反馈。还有一个很容易被忽略的点是三相电压源内阻。Simscape里的Three-Phase Source如果内阻设得太小VSG并网瞬间的电流尖峰会非常夸张甚至仿真直接发散。内阻按短路容量设置比如50kW系统配10kV·A短路容量的等效阻抗初始相位角对应同步电抗的功角特性这样才符合实际电网的“刚性”程度。4. 仿真工况设计与参数配置光靠搭起来不算完4.1 求解器与步长选择这是很多同学问得比较多的问题。我建议分两步走先用平均模型验证控制逻辑逆变器用受控电压源代替忽略开关细节Tustin法离散化仿真步长Ts 1e-5秒。跑一次5秒的工况几秒到十几秒就能出结果用来调试VSG的J、Dp、Kq非常高效。再用详细电气模型验证PWM效果把受控电压源换回Universal BridgePWM载波10kHz仿真模式选离散Ts 2e-6秒。这时候模型明显变慢但能看到真实的开关纹波和PWM延迟影响。有一点要注意详细模型的采样步长最好能整除PWM载波周期。10kHz载波载波周期100微秒Ts2微秒是整除的如果你图省事设成3微秒PWM比较逻辑和采样之间会混叠出完全没实际意义的谐波分量波形看起来花里胡哨其实全是数值假象。4.2 工况设计总表我设计了一套标准验证工况用来考核这套VSG模型工况设置方式考核目标功率阶跃0.5s时把P_ref从20kW阶跃到40kW惯性响应、功率超调、稳定时间光照突变1s时光照强度从1000W/m²突变到600W/m²光伏侧功率波动时母线电压稳定性负荷突增在并网节点1.5s投入20kW负荷频率跌落深度、VSG一次调频出力弱网适应性增大线路阻抗至标称值5倍重复功率阶跃VSG与PQ控制的稳定性对比并网瞬间模拟预同步后合闸冲击电流、相位对齐精度4.3 预同步并网瞬间会不会爆电流就看这一步直接让VSG带逆变器并网是比较危险的因为VSG的θ是虚拟转子自己积分出来的电网相位是锁相环测出来的两个角度不一致就相当于两个发电机并列瞬间存在功角差合闸瞬间会有很大的冲击电流严重时直接把直流母线拉崩。预同步模块的构成就一个PI调节器把电网相位θ_pll和VSG虚拟功角θ_vsg相减偏差过PI输出叠加到VSG频率给定上慢慢“推”着虚拟转子追着电网相位走。等偏差绝对值小于一个极小阈值比如0.01rad并且电压幅值差小于额定值的1%再给并网开关发合闸脉冲。这里PI要调得软一点比例增益别给太大否则预同步阶段频率波动幅度跟电网较劲半天稳不下来。5. 结果波形怎么解读惯性不是“慢”而是“稳”5.1 频率波形J的作用要从暂态曲线上看先看功率阶跃工况下的有功功率和频率曲线。如果J设得合适你会看到P从20kW阶跃到40kW时频率并不是跟着突变而是有一段平滑过渡这就是虚拟惯性在起作用。有一个判断标准供你参考开机频率变化率RoCoF。同步电机的惯量大小直接决定RoCoF高低。J越大频率变化率越小但达到稳态的时间越长J太小RoCoF大跟真实发电机特性差别就大。我自己调试时会把J调到让功率阶跃后0.1秒内的频率变化率不超过1Hz/s这个量级比较接近真实同步机的表现。5.2 功率与功角Dp影响振荡衰减的快慢把P_ref阶跃之后的功率波形单独拉出来看。你会发现在J、Dp共同作用下有功功率通常会有一次小幅超调然后逐步收敛。这个超调量的大小和衰减速度主要由Dp决定Dp偏小功率振荡衰减很慢波形像欠阻尼的钟摆可能振七八个周波才稳住Dp偏大衰减快、超调小但稳态频率偏差会比额定值差得多一点Dp合适超调大约10%两个周波内收敛到稳态值的95%。调Dp时我习惯先把J固定然后给Dp从小到大扫一遍把超调量和衰减比记录下来画一条曲线再对着要求选值。这比凭感觉试参数靠谱得多。5.3 无功与电压Kq和无功环惯性时间常数的影响在无功阶跃或者负荷突增工况下观察电压幅值曲线和无功功率曲线。正常情况下无功增加时电压会下降一点这个下降比例就由Kq决定。Kq越小电压越“硬”但无功环跟电网之间的交互也越紧张Kq越大电压跌落越多无功分担越平滑。无功环惯性时间常数一般取20~50ms。太小的话电压波形跟电网高频分量耦合整个无功响应又急又冲太大的话无功功率半天调不到目标值特别是在弱电网下电压支撑反应迟钝。5.4 和PQ控制对比的关键差异要验证VSG到底值不值最直观的方法是搭一个对照组同一套光伏储能系统把逆变器控制切换成PQ控制其他参数不变跑同一个负荷突增工况。对比结果通常非常明显PQ控制下负荷突增瞬间频率直接掉下来因为逆变器全程按指令功率输出没有额外有功支撑VSG控制下频率跌落深度更浅、变化率更慢有功功率会短暂地往上抬一点这就是虚拟惯性的“撑一把”在弱电网工况下PQ控制很可能出现电流振荡或者锁相环失锁VSG则相对稳定。这张对比图放在报告或者答辩里效果比任何文字描述都管用。6. 调试中最容易翻车的几个点6.1 dq变换的角位置基准别手滑用成锁相环这是我自己第一次搭VSG时踩得最扎实的一个坑。功率计算、电压电流双闭环这些环节dq变换的旋转角应当全部来自VSG的虚拟功角θ而不是来自锁相环测得的电网相位。一开始搞混模型也能跑出正弦波但仔细看会发现逆变器输出的功角并不是由运动方程决定的而是被锁相环强行拉死的VSG的惯性特性完全消失跟PQ控制没有本质区别。排查方法很简单在仿真中间暂停把θ_vsg和θ_pll放同一张图里看如果两者几乎完全重合且几乎无相位差说明你很可能错把PLL角度接到了VSG控制环里。正常运行时两者允许有小功角差这个差恰恰对应传输功率的大小。6.2 直流母线电压波动一根筋地加PI增益是没用的光照突变工况下母线电压经常出现比较明显的波动。很多人第一反应是去加大双向DC/DC电压环的PI增益。实际上母线电压由功率平衡决定MPPT输出功率突然变化储能电流环响应再快也需要直流电容这个“缓冲池”来吸收功率差。我的经验是先检查直流母线电容值是不是够。50kW级系统母线电容取8000~12000μF比较常见太小了电压波动直接压不住。调参顺序上先把电流内环整定好再整定电压环一层一层来。电压环带宽要比电流环低一个数量级否则两个环互相激励母线电压会持续振荡越调PI越乱。6.3 PWM延迟和仿真步长波形毛刺先别赖控制器详细模型中PWM的更新机制、器件开关时间、采样延迟都会带来固有的控制延迟。你会发现电流波形在高频段有一些毛刺或者台阶这其实是数字控制的均匀采样效应不一定是VSG算法的问题。验证方法是把采样步长缩小一个数量级重新仿真一遍如果毛刺消失说明数值分辨率问题如果毛刺还在才需要去怀疑控制参数。另外PWM调制波限幅一定要做调制深度限制在0.05到0.95之间不然深度调制下的非线性失真会污染波形让你误判为控制环不稳。6.4 并网瞬间的冲击电流预同步的PI太猛也不行预同步的PI参数要软这是我反复调了几十次才服气的。比例增益稍大虚拟功角追上电网相位时会冲过头功角在零附近来回震荡合闸时刻选不准并网瞬间看电流就是一根刺。正经的做法是让预同步PI的速度比VSG的有功环慢一点点让功角偏差平缓收敛到零可以加一个简单的滞环逻辑只有连续20个采样周期内相位差绝对值都小于阈值才允许合闸。这样能排除单一瞬间偶合上来的误判。6.5 从Simulink模型到硬件平台的差距最后提一个很多人仿真阶段不考虑、但实际项目一定会碰到的点Simulink里跑通的VSG控制器参数移植到硬件平台上基本都要重新标定一遍。最典型的偏差出现在电流内环仿真里PI参数可以压得很高几乎无延迟但硬件DSP的PWM周期、ADC采样延迟、IGBT死区时间都会给电流环增加额外的相位滞后。我建议仿真阶段就有意识地把电流环带宽限制在1kHz左右不要为了波形好看调到一个硬件根本达不到的临界稳定值不然到了实机测试那天你会发现同样的参数在样机上直接嗡嗡响。这套模型做下来最大的感受是VSG并不是一个“特殊功能”而是一整套从同步电机理论迁移过来的完整控制哲学。模型能把惯性、阻尼、调频调压都搬到逆变器里但它不是金钟罩——虚拟惯量本质上是靠储能功率支撑的没有储能光伏阵列在弱光条件下的虚拟惯量就是空中楼阁。这也是为什么这套模型一定要放到“光伏储能”系统里去验证单独拿一个逆变器上来谈VSG没有意义。