
这两年做并网变流器稳定性分析尤其是储能、微电网、构网型变流器这一块绕不开一个话题VSG虚拟同步机。做VSG控制的人通常都会遇到一个很头痛的场景——空载测试没问题、带电阻负载没问题结果一接到含线路阻抗的模拟电网上低频功率开始“打摆子”从2Hz到十几Hz不等电流、有功功率呈现出一种缓慢发散或持续振荡的形态。拿示波器一抓波形不像谐振更像一台同步机在功率振荡。彼时很多人第一反应是去调PI参数或者加大阻尼但是调了半天时域波形还是来回飘。后来我才发现这种低频振荡的根子在“VSG输出阻抗”和“电网阻抗”之间的交互上而能把这件事讲明白的工具就是序阻抗扫频。本文要聊的内容就围绕一个实操项目展开在MATLAB/Simulink里搭建带电压电流双闭环的VSG并网模型通过时域扫频施加小幅扰动提取正序/负序阻抗曲线再结合阻抗比判据判断振荡风险并反过来指导控制参数调整。整个过程适合正在做新能源并网、构网型变流器、微电网仿真的工程师或者写论文需要稳定性分析支撑的研究生。文章会尽量把“为什么这么扫”“扫完怎么判稳”“参数怎么调回去”这几个环节讲透让你看完之后能直接在自己的Simulink工程里复现而不是只得到一张漂亮的阻抗图却不知道下一步该怎么用。1. 先把概念理清VSG、序阻抗扫频和稳定性之间的逻辑链条1.1 VSG的本质是给变流器装了一个“虚拟转子”虚拟同步发电机这个概念本质上就是把同步发电机的转子运动方程、一次调频特性、无功电压特性搬进逆变器的控制算法里。外特性上看VSG不再像传统的PQ并网逆变器那样呈现“电流源”特性而更像一个带惯性的电压源电网频率跌落它能靠着虚拟转子释放动能负载变化它能自动调整输出功率。控制核心通常包含三部分有功-频率环JdΔω/dt P_ref - P_e - D_p(ω - ω_g)其中J是虚拟惯量D_p是阻尼系数这个环节模拟了同步机的摇摆方程无功-电压环E E_0 D_q*(Q_ref - Q)模拟同步机的励磁调节电压电流双闭环在VSG输出的电压参考值后面用电压外环稳住电容电压电流内环快速跟踪电感电流最终输出SPWM波。这套控制的好处是显而易见的——系统有了惯量支撑频率变化率被抑制微电网的稳定性体验比传统下垂控制好很多。但坏处也随之而来引入虚拟转子之后功率环的动态带宽一般只有几赫兹到十几赫兹这个低频段恰恰和电网阻抗容易形成交互。换句话说VSG控制本质上是把同步机的“次同步振荡风险”也一起搬进了电力电子系统。这也是为什么我需要用阻抗扫频去看它的频率特性而不是只看时域波形拍脑袋。1.2 为什么用“序阻抗”而不是普通的三相阻抗很多同学入门做阻抗分析时会有一个疑问我用三相电路直接测电压除以电流不行吗为什么要分正序、负序搞出正序阻抗和负序阻抗两个量原因在于三相系统的不对称性和控制环节的频率耦合特性。电力系统中的扰动可以分解为正序、负序、零序分量。并网变流器在三相平衡时正序电流和负序电流在控制路径上的传递特性完全不同正序扰动会经过功率环、电压环、电流环的相互耦合阻抗曲线反映了VSG整体的“电压源控制环路”特性负序扰动则更多受滤波器参数、负序抑制策略、数字控制延时影响。如果你只测“三相阻抗”的合成值会把正负序分量混在一起就像用一支麦克风录交响乐却分不清小提琴和长笛的位置后续判稳自然不准确。具体到扫频操作上正序阻抗的扫法是注入一组正序旋转扰动比如Δi_a I_psin(ω_pt)b相滞后120度c相超前120度负序阻抗则反过来让三相扰动的相序反转。从数学上看正序扰动在同步旋转坐标系下对应正频率分量负序扰动对应负频率分量两者天然解耦。对于VSG这种没有PLL自同步的控制结构正序阻抗基本决定了功率振荡、次同步振荡的风险而负序阻抗则决定了不对称故障或者说电网不平横时的表现。工程上如果只看一个量优先看正序阻抗但论文和并网评估通常两个都要扫。1.3 为什么要在时域里做阻抗扫频阻抗是频域概念但工程上做阻抗扫频绝大多数不是在简化的小信号解析模型里推公式而是在时域仿真平台里“实测”出来。原因很简单Simulink里搭建的控制系统包含了限幅、延时、饱和、坐标变换、PWM调制等大量非线性环节很难用一个简单的状态空间矩阵写清楚。时域仿真则把这些环节原封不动地保留了下来我在仿真里加一个已知频率的小扰动测出响应电压和电流再用FFT提取幅值和相位就能得到这个频率点上的阻抗。这和真实实验室里用频率响应分析仪测阻抗的原理一模一样区别只是把示波器换成了Scope模块。所以“时域下扫频”并不是一个矛盾的词它实际上是阻抗分析的最高效工程路径时域仿真负责“测”阻抗曲线和频域判据负责“判”。两者结合就能绕开复杂的解析建模直接得到面向实际控制器的阻抗特性。2. 控制核心电压电流双闭环到底在阻抗曲线上搞了什么名堂2.1 电流内环高频段的阻抗整形我最早接触双闭环时一直以为电流环的作用只是“让电流跟得上指令”直到做了阻抗扫频才意识到电流内环实际上在重新塑造变流器的输出阻抗。一个未加控制的逆变器从交流侧看进去就是一个滤波电感感性相位接近90度。加上电流内环以后控制器会主动响应电流变化电感上因为电流波动产生的电压压降会被环路补偿掉一部分从外部看这个感抗被“有源阻尼”等效减小了。电流环的比例增益越大高频段阻抗幅值就越低相位越往0度靠。这就带来一个很关键的设计约束电流内环的带宽不能无限抬高。开关频率10kHz的VSC电流环截止频率一般取在800Hz到2kHz之间既要保证对LC谐振峰有足够的阻尼又要避开采样保持和数字控制延时带来的相位滞后。我在项目里习惯把电流环带宽设计在1kHz左右对应的比例积分参数通过传统“零点-极点对消期望截止频率反推”来初算然后到仿真里微调。值得注意的是电流环的相位滞后在高频段逐渐加大大约到了开关频率的十分之一以上数字控制一拍延时的作用就会变得很明显扫频曲线上能看到相位明显下滑这是正常现象不代表模型有bug。2.2 电压外环中低频段的阻抗重塑电压外环的作用是稳住变流器出口的电容电压让VSG真正呈现出电压源的外特性。它把电容电压当成被控对象控制器输出作为电流内环的指令。从阻抗角度看电压环是一个“主动电压调节器”当外部扰动导致电压波动时电压环会驱动电流环去抵消这个波动等效于降低了电压源的内阻。但电压环同样是一把双刃剑。闭环调节总是有响应速度上限的在电压环带宽以内的频率点它能积极抑制扰动阻抗幅值被压低一旦超过电压环带宽控制器的调节作用跟着衰减阻抗特性又会回到由滤波器主导的状态。在这个“可控”到“不可控”的过渡频段输出电压会对扰动产生一个相位超前或滞后的响应如果设计参数不合适阻抗幅相曲线就可能在某个频率附近出现相位接近180度的情况这在物理上等效于一个负电阻正好是振荡放大器最喜欢出现的频段。正因为此在进行VSG阻抗扫频的时候中频段往往是整个曲线最“难看”的地方也是最值得仔细看的地方。低频段功率环主导、高频段滤波器主导只有中频段同时受到电压环、电流环、数字延时三个因素影响稍不留神就会埋下失稳隐患。2.3 参数设计的“带宽分离原则”做VSG双闭环参数设计时我一直遵循一个原则三个环路的带宽要拉开不能糊在一起。具体来说功率环带宽最低几赫兹量级电压外环居中100到500Hz电流内环最高1kHz左右。每相邻两级之间按5到10倍分离目的就是让三个控制环节在频率域上各管一段互不“打架”。如果电压环带宽和电流环带宽靠得太近两者的相位滞后会叠加阻抗曲线在交界处会变得非常尖锐非常容易造成窄带负阻区。这里给一组我常用的、能在仿真里直接跑的示例参数单位是标幺值额定容量10kVA线电压380V直流母线750VLC滤波电感Lf2mH、滤波电容Cf20uF开关频率10kHz。控制参数取J0.4、D_p20、D_q2000电压环PI为K_vp0.3、K_vi80电流环PI为K_ip20、K_ii500。这套参数对应的电压环带宽大约在200Hz上下电流环带宽约1kHz三条环路之间保持了足够的频带分离。实际到具体项目里参数当然要按电网强度和容量折算但先把这个结构跑通再根据阻抗曲线去微调会比直接套公式稳得多。3. 时域阻抗扫频的实现方案3.1 扰动源的两种接法在Simulink里给系统加扰动原理上等价于实验室里的频率响应分析仪。最常用的方式是在并网点PCC并联一个受控电流源给它输入一个可设定频率的正弦信号相当于向系统注入一个小电流扰动。然后测量并网点的电压和主电路电流用FFT提取出扰动频率分量的比值便得到该频率点上的输出阻抗。这种并联电流扰动法的好处是不需要改变主电路结构只要在PCC节点挂一个受控电流源模块控制信号由外部正弦发生器给出仿真自动化做起来非常方便。另一种方式是串联电压扰动源在理想电网和被测设备之间串入一个小电压源注入电压扰动测量电流响应。串联扰动更适合测量输入阻抗或者在研究电网阻抗变化对系统影响的时候用。我的经验是VSG并网稳定性分析优先用并联电流扰动法因为我们要评估的阻抗本质上是“从变流器端口看进去的等效阻抗”正好对应电压扰动与电流扰动的比值。扰动幅值要控制好一般取额定电流幅值的3%到5%左右。太小了FFT提取信噪比差太大了会触发控制器的限幅环节扫出来的阻抗就不代表那个线性化工作点了。这几个百分比看上去是经验值其实背后是折中VSG功率环是强非线性环节扰动过大会让虚拟转子功率产生明显的二倍频项干扰FFT结果扰动过小则数值计算误差占据主导阻抗幅值相位都会抖动。3.2 扫频点的设计和信号预处理扫频范围的设定取决于你要分析的振荡风险频段。电网低频振荡、次同步振荡一般落在1到50Hz所以我通常从1Hz开始扫往高扫到1000Hz甚至2000Hz。频率点不是均匀分布而是按对数均匀取比如每十倍频程取25到40个点低频段还要额外加密因为大部分稳定性问题都藏在功率环带宽附近的几赫兹到几十赫兹。每个频率点的仿真流程非常固定先让系统在无扰动情况下运行到稳定在t1时刻切入该频率的小扰动等待两到三个扰动周期让瞬态过渡结束然后采集电压电流波形。采集时长至少要包含不少于10个扰动周期低频1Hz扰动的话一个频点就要跑10秒以上的仿真。我通常把采样率设为20kHzFFT窗口取整数个扰动周期再用Hanning窗抑制频谱泄漏。这里有一个新手容易踩的坑千万不要在扰动切入瞬间就开始取数。VSG的功率环响应速度慢低频扰动切入后输出电压电流要经过一两百毫秒甚至更久才能进入稳态周期如果采样窗口包含了这段暂态FFT出来的幅值和相位都会有偏差。我在脚本里会直接丢弃扰动启动后的前两个周期从第三个周期开始采集实践下来提取的阻抗曲线平滑很多。3.3 正序和负序阻抗分别怎么扫正序阻抗的扫法相对直观。三相注入的正序扰动写成时域表达式就是a相正弦、b相滞后120度、c相超前120度然后同时加在受控电流源上。测量侧同理取三相电压电流波形做对称分量变换得到正序电压和正序电流再在频域上提取扰动频率点的分量。如果只看正序还有一种更省事的做法直接在dq坐标系里做小信号扰动。把扰动信号加到d轴电流指令上测量dq坐标系下的电压和电流响应再映射回静止坐标系。这种方法实现快但需要格外小心频率映射关系——dq域里的频率和静止坐标系中的频率差一个基波分量处理不当很容易把FFT提取频率弄错。我在项目里更推荐直接做三相FFT加对称分量提取虽然计算量稍大但物理意义清晰不容易出符号错误。负序阻抗的扫法和正序几乎一样只是把三相扰动源改成反相序。扫负序的时候要注意观察控制系统里是否包含负序抑制环节如果有负序阻抗曲线会因负序电流环的作用出现明显的相位整形如果VSG控制里只有正序电压电流双闭环而没有额外的负序控制那么负序阻抗在高频段基本就是LC滤波器的自然特性。很多时候负序扫一遍只是为了补齐并网评估的材料真正要盯的振荡隐患还是正序阻抗。4. 时域稳定性判断怎么把扫出来的曲线用起来4.1 阻抗比判据的正确打开方式扫出一堆阻抗曲线只是第一步难点在于怎么判断系统稳不稳。目前工程上最常用的分析方式是阻抗比判据。把并网系统从PCC处劈成两半一半是VSG输出阻抗记为Z_o另一半是电网等效阻抗记为Z_g。两个阻抗串联在一起回路增益其实就是Z_g/Z_o。只要这个比值对应的奈奎斯特曲线不绕过-1点系统就是小信号稳定的实际工程里更习惯直接看两条伯德曲线的交点。画图的时候我把扫出来的输出阻抗幅相曲线和电网电感形成的Z_gjωL_g曲线叠加在一起。两条幅值曲线相交的频率点就是系统潜在的振荡频率候选点。在这个交点上看相位差如果VSG阻抗相位和电网阻抗相位之差接近180度系统就几乎没有稳定裕度差值越小稳定裕度越大。一个具体案例假设电网短路比不高等效电感L_g1mH这在10kVA等级算比较弱的电网了。如果扫出来VSG阻抗在40Hz附近相位是-145度而电感阻抗相位是90度相位差235度换算到Z_g/Z_o上就是55度相位差理论上还能稳定但裕度已经不大。一旦控制参数老化或电网结构变化导致VSG相位再往下掉20度系统就会在这个频率附近开始振荡。4.2 时域验证仿真波形怎么和阻抗曲线对上频域判据说“可能会振荡”还不够我习惯再回到时域做一个交叉验证把扫频发现的风险频率作为扰动频率重新注入一个小扰动观察系统是否发散。如果阻抗分析判断这个频率点相位裕度不足那么时域扰动的响应就会呈现一种“低幅值持续增长”的特征振荡频率基本落在阻抗交点附近而不是整数次谐波那种特定频率。我在一次调参过程中印象很深初始参数下扫频发现输出阻抗在22Hz附近和电网阻抗的交点处相位差已经有172度按理说接近临界但还没越过-1点。时域注入22Hz扰动后电流波形确实没有立刻发散但包络呈现出非常缓慢的增大趋势大概每过10个周期幅值涨5%典型的小信号不稳定前兆。随后我把虚拟惯量J从2降低到0.8阻尼D_p从10提高到30重新扫频22Hz处的相位马上回落到了150度左右时域里同样注入22Hz扰动幅值就是收敛的。这个过程给我留下了一个很深的印象阻抗曲线上的那几度相位差在时域里可能就决定了一个几百毫秒内发散还是收敛。4.3 稳定性的感性理解负阻区间到底在哪阻抗相频特性里最需要警惕的是相位穿越±180度所对应的“负电阻”频段。对串联系统来说如果某个频率点上VSG输出阻抗呈现负实部意味着该频率下变流器不是消耗能量而是注入能量正好和回路里的正电阻形成抵消一旦负阻超过正阻振荡就维持住了。在VSG的扫频曲线上低频段的负阻通常来源于功率环。虚拟惯量J过大时功率环响应过慢有功调节在低频段会形成一个相位滞后的“类容性”区域极容易和电网感抗形成共振。阻尼系数D_p则负责在这个频段提供正向电阻D_p越大低频段阻抗曲线越往正实部方向走。这也是为什么我说调VSG参数不能只看时域波形时域振荡发生了再调J和D_p属于亡羊补牢提前看阻抗曲线的负阻频段位置可以直接预判参数变化的方向和幅度。5. 建模仿真如何搭一个能复现的VSG双闭环扫频平台5.1 顶层架构和模型精度选择整个仿真平台可以分成五大块主电路、VSG控制、扰动注入、数据采集、自动化扫频脚本。主电路从直流电压源开始经过三相桥、LC滤波器接PCCPCC再经过电网阻抗连到理想电网。直流侧用理想电压源代替就行我们关注的是交流侧阻抗特性没必要加电池模型增加复杂度。模型精度选择上我强烈建议第一版用平均值模型而不是详细开关模型。所谓平均值模型就是用受控电压源代替三相桥臂调制波直接放大到直流母线电压的增益倍数不生成PWM脉冲。这样做扫频速度能快一个数量级以上而且小信号阻抗提取受开关谐波影响小。很多人担心平均值模型“不够真实”实际上做阻抗扫频和中低频稳定性分析平均值模型和开关模型在1kHz以内差异非常小因为我们要提取的是扰动频率的基波分量SPWM载波频率附近的分量本来就该被滤波器滤掉对结果影响可以忽略。5.2 控制子系统搭建的几个关键细节控制子系统内部最需要注意的就是相位生成和坐标变换。VSG没有PLL它的旋转坐标系相位θ由虚拟转子运动方程积分得到。三相电压电流反馈值通过这个θ做Park变换得到dq分量电压外环输出d轴和q轴电流指令电流内环输出d轴和q轴调制电压再经过反Park变换生成三相调制波。整个过程环环相扣任何一个坐标变换的符号弄反扫出来的阻抗相位就直接翻转180度而且时域波形还未必看得出来因为在闭环里控制器会自行调整。另外一个容易被轻视的模块是预同步和并网合闸逻辑。直接让VSG带着初始相位去并网会产生巨大冲击电流仿真一样会崩。我在模型里加了预同步环节先让VSG工作在离网模式调节虚拟角频率让输出电压相位跟踪电网相位跟踪完成后才闭合并网开关。这个过程对扫频本身不是必须的但会影响模型的初始化质量初始化不好会延长每个频点的稳定时间低频段尤其明显。数字控制延时也需要单独考虑。如果目标是复现样机控制器的行为推荐在调制波输出前加一个离散的Z^-1延时模块模拟DSP一拍计算延时。会带来额外的相位滞后高频段尤其明显。做负序阻抗扫频时这个延时对负序分量的影响往往比正序更大所以若关心高频段和负序特性建议加上只关心低频次同步振荡可以不加节省调试精力。5.3 自动化扫频脚本的编写人工在Simulink里改频率、点运行、导出数据一套扫下来几十上百个频点工作量太大所以脚本化是必须的。我通常用MATLAB脚本配合sim命令来做循环核心逻辑如下% 定义扫频点对数均匀分布 f_list logspace(log10(1), log10(2000), 40); Z_results zeros(length(f_list), 1); Z_phase zeros(length(f_list), 1); for k 1:length(f_list) fk f_list(k); % 设置扰动频率 set_param(vsg_impedance/DisturbanceFreq, Value, num2str(fk)); T_stop max(10, 20/fk); % 确保低频也采够周期 % 运行仿真 simOut sim(vsg_impedance, StopTime, num2str(T_stop)); % 提取扰动启动后的电压电流 v_a simOut.v_a.Data; i_a simOut.i_a.Data; t simOut.tout; % 去掉扰动前段暂态只保留后段稳态 idx t (T_stop * 0.4); % 调用自写的FFT提取函数 [Vmag, Vphase] extract_fft_amp_phase(v_a(idx), t(idx), fk); [Imag, Iphase] extract_fft_amp_phase(i_a(idx), t(idx), fk); Zmag Vmag / Imag; Zangle Vphase - Iphase; Z_results(k) Zmag; Z_phase(k) Zangle; endextract_fft_amp_phase函数的核心是判断采样的点数里包含整数个扰动周期然后用FFT取对应频点的幅值和相位。这个函数写起来不难但条件是采样率必须固定Simulink里尽量用定步长求解器比如定步长1e-5秒采样模块直接拿到t和信号避免变步长带来的非均匀采样否则后续FFT处理会让人很抓狂。6. 调参实录我踩过的坑和一些实用心得6.1 低频段扫出来的阻抗曲线乱跳我第一次扫1到5Hz频段时阻抗曲线堪称“灾难现场”幅值相位上下乱跳根本没法用。排查了半天才发现问题不在算法而在扰动幅值。VSG的功率环在低频下对有功扰动非常敏感哪怕扰动电流只有额定值的3%虚拟转子的功率和角度也会产生很大的波动导致工作点发生了明显偏移阻抗自然不再是“小信号”的阻抗。解决思路有两个一是把低频段的扰动幅值再降低从3%降到1.5%甚至1%二是把J和D_p临时加大一点让功率环在扫频时更“稳”。第二个方法只能用于确认趋势要分析原始参数的低频特性还是得用第一种方法。后面我还给扫频脚本加了一个“频点自适应扰动幅值”的逻辑频率低于5Hz用1%5到50Hz用2%50Hz以上用5%。效果立竿见影低频曲线平滑了很多。6.2 阻抗曲线和理论对不上先查参考方向有一次扫出来的阻抗相位整体偏移了180度理论上该感性的频段扫出了容性该容性的扫出了感性所有形态都反过来了。我先是怀疑控制参数不对折腾了半天最后才发现是Simulink里电流测量模块的参考方向反了。变流器输出端口的电流方向到底是“流出逆变器为正”还是“流入逆变器为正”直接决定了算出来的阻抗是Z还是-Z的一个重要问题。解决这个问题有一个很实用的自检方法把控制环断开或者把VSG改成纯开环电压源只保留LC滤波器然后扫一次频。开环LC滤波器的阻抗特性非常明确低频段感性、高频段容性、谐振点附近幅值有峰。如果扫出来的结果和这个判断对不上方向一定有问题。这个自检动作我后来一直保留着每搭一个新模型先做开环扫频确认方向再做闭环扫频能省好几天的排查时间。6.3 仿真扫一次要好几个小时怎么提速时域扫频最大的痛点就是慢。扫到1Hz的频点时一个点要跑20秒以上的仿真即便用定步长1e-5秒一次仿真也要200万个步长。加上带宽分析的40个频点串行跑下来真的可能跑一个通宵。提速我用了三个办法。第一把模型切成平均值模型砍掉PWM模块带来的极小步长需求这一步提速最明显差不多能快三到五倍。第二用parfor并行循环把互不干扰的频点分散到多核上跑8核机器直接按6到8倍加速。第三低频段不必每个点都跑满可以先跑一个粗扫比如每十倍频程15个点找到相位接近危险区的位置之后再在窄带范围内加密单频点精确验证。这套组合拳下来完整扫频从过夜缩短到一个多小时完全在可接受范围内。6.4 哪些参数对阻抗曲线最敏感做了大量扫频对比之后我总结出一张“参数-阻抗特性”的对照表对后续调参非常管用参数主要影响频段阻抗曲线表现稳定性调节方向虚拟惯量J低频1-10HzJ越大低频相位滞后越强负阻区间越宽减小J可降低频相位滞后加快功率响应阻尼系数D_p低频1-10Hz提供正向电阻改善低频阻尼增大D_p可提升相位裕度电压环K_vp中频50-500Hz增益过高会制造窄带相位尖峰适当降低避免中频负阻区电流环带宽高频500Hz带宽过大会放大数字延时影响保留裕度不宜过高电网等效L_g全频段幅值曲线抬升交点频率左移属于外部条件需通过控制参数适配这套表看起来简单实战价值很高。比如你发现是30Hz附近的振荡直接去改J和D_p大概率有效如果是100Hz附近振荡就要回头审视电压外环的PI参数动J和D_p反而可能没有效果。阻抗扫频的一大价值正在于此它能告诉你振荡到底是什么频段、由哪个环路贡献的而不是让你在参数空间里盲调。最后再分享一个经验扫频这件事最忌讳扫完画完图就打包走人。阻抗曲线是控制器的“体检报告”每次改完参数花几分钟重新扫一次关键频段能看到改动是让系统更稳还是更脆。我带项目时一直要求组员把扫频脚本留着凡是改控制参数必须附上扫频曲线这比写十页理论推导更能说明问题。如果你正在做VSG相关的并网分析建议现在就搭一个简单的均值模型从1Hz到100Hz先扫几个点感受一下曲线跟控制参数的联动比光看公式直观得多。