
第一次把虚拟同步机控制VSG从论文搬到Simulink仿真里时我做的是和下垂控制的负载阶跃对比实验。到现在还记得Scope上出现的那条曲线负载突增之后频率没有像下垂控制那样立刻跌到一个新的稳态而是带着阻尼慢慢下滑中间甚至有一点回摆最后才稳定下来。那一刻我才真正意识到虚拟同步机不是在“控制”逆变器而是在让逆变器变成一台看不见的同步发电机。这篇内容主要围绕虚拟同步机控制、下垂控制、Simulink仿真和电力电子仿真展开适合刚接触VSG、被惯量和阻尼这些词绕晕的初学者也适合已经搭过一些逆变器模型但总是调发散的同学。我不会放仿真模型文件下载但会把主电路怎么搭、有功环无功环怎么接、参数怎么设、调试时先查哪里尽量讲到可以照着复现的程度。1. 为什么逆变器控制器要学着“转起来”下垂控制到VSG的动机1.1 下垂控制确实把“并联均流”解决了下垂控制是分布式发电里最常见的控制策略之一它的核心逻辑很直接检测逆变器输出的有功功率P和无功功率Q用它去微调逆变器的频率和电压幅值。有功P增大时频率往下调无功Q增大时电压幅值往下调这就是常说的P-f下垂和Q-V下垂。这种控制没有通信线只需要本地的电压电流信息就能让多台逆变器并联工作功率自动分配。离网微电网里用下垂控制做组网工程上很成熟。Simulink仿真里搭下垂控制也比较简单关键就是一条线性下垂曲线和一个由P计算f、由Q计算E的控制器再加上电压电流双闭环基本就能跑起来。不过下垂控制解决的是稳态功率分配问题它不怎么管动态过程中的频率变化形态。很多电力电子背景的同学最初都有一种直觉频率响应快点难道不好吗不好。在真正的电力系统里频率过快变化会让保护误动作也会让其他发电设备承受不必要的机械应力。1.2 同步机里的“惯性”到底承担了什么要理解虚拟同步机先要知道传统同步发电机为什么天生就有惯性支撑能力。同步机有真实的转子转子在旋转时储存动能。当系统里出现功率缺额时发电机输出的有功会瞬间大于原动机输入的机械功率这部分差额从哪里来从转子动能里来。转子因此减速系统频率变化。因为有这个惯性过程频率不会瞬间突变。等效惯性时间常数H越大系统抵抗频率变化率的能力越强。电力系统里通常用ROCOF频率变化率来评估这种能力。发生同样的功率扰动时新系统的等效惯量如果只有原来的一半频率下降的速度就可能快到让低频减载装置直接动作。逆变器本身没有旋转部件直流侧电容里储存的能量跟同步机转子动能相比很小而且电容能量不能无序释放。如果大量用下垂控制的逆变器替代同步机系统等效惯量会快速下降。频率跌得快这个问题靠下垂曲线是救不回来的因为下垂只是一个静态映射它没有“惯性状态量”。1.3 VSG不是一套固定算法而是一类“外特性”虚拟同步机控制也常被写成VSG控制广义上就是让逆变器在端口外特性上模仿同步发电机。行业内具体实现非常多有叫VSG的有叫VSMVirtual Synchronous Machine的也有叫Synchronverter的学术上还经常会区分电流控制型VSG和电压控制型VSG。不管叫法怎么变核心动作基本一样在控制环里加入同步发电机的转子摇摆方程让频率或相角变成一个由功率不平衡驱动的状态量而不是直接由下垂表查出来的结果。这样当有功突变时逆变器的频率会表现出类似转子运动的变化趋势也就是存在惯性。从控制结构看VSG多数还保留着下垂控制的外环思想稳态下它仍然遵循P-f和Q-V的关系。你可以把VSG理解成在下垂控制外面叠了一层运动方程让静态外特性变成了带惯性的动态外特性。这也是为什么很多做仿真的人会把下垂控制和VSG放在一起对比本质上是在看“有没有惯性”对系统动态的影响。2. 摇摆方程里的J和D到底在模拟什么虚拟同步机参数的物理锚点2.1 把同步机转子方程搬到控制代码里VSG控制的数学核心是转子摇摆方程。建Simulink模型时我习惯先用标幺值形式表达[ 2H \frac{d\omega_{\mathrm{pu}}}{dt} P_{\mathrm{set,pu}} - P_{\mathrm{e,pu}} - D_{\mathrm{pu}}\Delta\omega_{\mathrm{pu}} ]这里面H是等效惯性时间常数单位是秒(\omega_{\mathrm{pu}})是虚拟角速度的标幺值(P_{\mathrm{set,pu}})是给定的有功功率参考(P_{\mathrm{e,pu}})是从逆变器输出侧测到的有功功率D是阻尼或调差系数(\Delta\omega_{\mathrm{pu}})是角频率偏差。把这个方程在Simulink里实现的时候右侧先算出一个功率不平衡量再经过增益1/(2H)积分一次得到虚拟角速度角速度继续积分得到虚拟相位。这个相位不会直接拿去变频器里触发开关而是替代传统控制中的锁相环角度用来做Park变换以及生成调制波的相位参考。这意味着逆变器的输出电压相位不是由外部电网锁出来的而是由VSG自己“摇”出来的。这就是电压控制型VSG基本的grid-forming特征。很多人在建模时容易忽略一点VSG内部这个角速度只是一个状态变量它可以高于或低于50Hz对应的同步角速度只要系统在动态过程中这个量就会有阻尼振荡的趋势。2.2 J和D分别负责什么为什么不能孤立地调很多初学者把H和D当成两个完全独立的旋钮其实它们的位置在同一个方程里动态和稳态互相牵制。H主要影响惯性动态。H越大相当于虚拟飞轮转动惯量越大同样的功率缺额下角速度变化率越小频率曲线会变得更圆滑。但H不是越大越好过大的H会让整个频率恢复过程被拉得很长一旦系统阻尼不够功率振荡的周期也会变得很长。在实际模型里J或H如果设置到数量级不合理Scope里甚至能看到频率像荡秋千一样来回摆半天不停下来。D在方程里既起阻尼作用也决定稳态频率偏差。如果D增大频率偏差被负反馈拉回来的能力更强相同负载扰动下最终的频率偏差会更小振荡衰减也会更快。但D不能随意往大调因为稳态时D和(P_{\mathrm{set,pu}}-P_{\mathrm{e,pu}})之间是强耦合的。D太大会让功率-频率这条线变得过陡多台逆变器并联时很小的测量误差就会导致比较大的有功分配误差环流问题随之而来。说个比较接地气的比喻H像飞轮的重量D像轴承摩擦加调速器的综合效果。飞轮重转起来惯性大转速不容易突变摩擦大能量消耗快转速波动容易停下来。但如果摩擦太大每次调速都要靠牺牲稳态转速偏差来实现系统又会变得太“硬”。2.3 无功-电压环也需要点“励磁惯性”只看有功环和频率还不能叫完整的虚拟同步机。同步发电机还有励磁系统励磁电流决定内电势大小内电势和系统电压的差值加上电抗决定了无功功率的交换。VSG要模拟同步机外特性就必须有一个无功-电压外环。简化之后无功环通常可以写成类似这种关系[ E E_0 n_Q \left(Q_{\mathrm{ref}} - Q_e \right) ]E是虚拟内电势幅值E0是空载电势Q_ref是无功参考Q_e是实测无功n_Q是无功下垂系数。为了让动态更接近励磁系统我通常还会在E的通道上加一阶惯性环节或者做变化率限幅相当于模拟励磁绕组的电磁惯性。这个环节虽然不像转子方程那么常被提到但对电压动态和系统阻尼同样有影响。不少调好的VSG模型一旦去掉无功环惯性电压波形会出现一种很“软”的持续抖动。在实际Simulink建模中有功环和无功环输出的虚拟相位、虚拟内电势幅值会合成为一个三相电压参考指令再送到电压电流双闭环。必要的时候还会在参考电压上减去虚拟阻抗的压降让系统输出阻抗更接近感性以便和无功下垂控制规律匹配。3. Simulink搭建一套可运行的VSG仿真拓扑、信号流与参数初始化3.1 主电路拓扑与仿真边界条件主电路我用的是最常见的三相两电平电压源型逆变器结构直流侧用理想直流源给一个800V左右的电压逆变器交流侧接LC滤波器再通过一个断路器连接到交流负载或者可编程三相电压源。这个结构既有离网型微电网的边界也能模拟并网型应用。做VSG仿真时我强烈建议把主电路先简化不要一开始就接传动系统、变压器、电缆这些复杂组件。先跑通理想直流源加LC滤波器加RLC负载的模型把VSG自洽性验证完再去增加变压器、并网开关等内容。模型越庞大控制发散后要排查的变量就越多很多问题根本不是VSG本身造成的。有两种仿真建模方式可以选。如果想要比较准确看PWM谐波和滤波器设计用带开关管的详细模型配合Simulink里的PWM发生器如果只想研究惯量、阻尼和功率动态用平均模型就够了。我在前期调J和D时一般用平均模型因为开关纹波会叠加到功率测量值上必须在功率环前加低通滤波器而低通滤波器本身又会掩盖一些真实动态特征。平均模型把这个问题绕开了方便观察VSG的机电暂态部分。3.2 控制信号流的搭建顺序控制部分我建议按照这样的顺序搭不容易漏接第一步测量滤波电容侧的三相电压和逆变器侧电感电流。计算瞬时功率三相静止坐标下可以直接用线电压和相电流算有功和无功如果用旋转坐标系则要注意Park变换是等幅值还是等功率变换。等幅值变换下功率表达式通常写成(P 1.5(v_d i_d v_q i_q))无功部分的正负号要看你把q轴定义在滞后还是超前方向仿真里需要先用已知的阻性负载验证功率极性。第二步把有功功率与有功参考相减通过摇摆方程求出虚拟角速度(\omega)和相位(\theta)。Simulink里可以先用积分器把角速度积分成相位但运行时间长之后相位数值会很大建议对2π取余之后再送给正弦余弦函数否则角度精度会慢慢劣化这点很容易被忽略。第三步把无功功率和无功参考一起送进无功-电压环计算出虚拟内电势幅值E。把E和刚才的(\theta)整合成一个三相参考电压我一般会在abc坐标下直接生成三个正弦量(E\sin(\theta), E\sin(\theta-2\pi/3), E\sin(\theta2\pi/3))也有人喜欢在dq坐标里生成d轴分量和q轴分量本质相同。第四步将参考电压送到电压外环电压外环输出作为电流内环的参考值电流内环输出经过坐标反变换后进入PWM调制。电压外环一般用PI控制器带宽要放在VSG功率环之上、开关频率之下。这样VSG的功率外环看上去才像一个“慢悠悠的调速器”而不是直接跟电流环争夺响应速度。建模型时建议把控制算法中的每个信号都标好单位和标幺值。我最开始直接在功率环里用有名值计算每次调参数都要现场换算单位后来把算法内部全改成标幺值只有测量和输出环节做基准折算模型一下子清爽很多。3.3 一个能跑通的参考参数表以下是一组我在20kW离网负载阶跃仿真里用过的参数控制部分是离散模型仿真步长1微秒到2微秒PWM载波10kHz。不需要照抄但可以把这个表当成一个初始参照系。参数数值直流母线电压750V额定功率20kW电网相电压有效值220V幅值311V额定频率50Hz滤波电感L2mH滤波电感寄生电阻R0.1Ω滤波电容C30μF逆变器开关频率10kHz等效惯性时间常数H1.5s阻尼/调差系数D50标幺值约对应1Hz满功率调差无功下垂系数0.001 V/var 附近滤波电感2mH滤波电容30μF时LC谐振频率大约是650Hz这个频率明显高于电压环和电流环带宽不会和VSG功率环的几十赫兹动态混在一起。如果谐振频率离控制带宽太近功率波形里容易出现一个与惯量无关的尖峰后面调试那部分会再展开说。3.4 模型初始化时最容易踩的坑Simulink里VSG模型初始化有四个地方比较容易出问题。第一个是功率测量环节的滤波时间常数。瞬时功率在开关模型下有很强的二倍频甚至更高次纹波不加滤波的话功率环输入端会收到很多毛刺但这些毛刺可能导致有功环出现高频抖动。加滤波时又要注意时间常数不能太大否则等于人为引入了一个低通惯性会把VSG本身的频率动态掩盖掉。我一般先用平均模型确定