☰
弱电网下跟网逆变器小干扰稳定性分析与Simulink优化
2026/10/24 3:01:51 网站建设 项目流程

做并网逆变器仿真的人,应该都见过这种场景:一台跟网型逆变器接在理想电压源上,怎么调参数都不会振荡;可一接到带线路阻抗的弱电网里,波形就开始出现十几赫兹的低频摆动。这不是简单的参数整定问题,而是典型的跟网型逆变器小干扰稳定性失稳。我在用Simulink复现和研究这个现象时,把状态空间建模、特征值分析和控制策略优化完整走了一遍,这篇就来整理这条链路。文章会从物理机理讲起,落到Simulink里的具体操作,最后给出优化前后的验证对比,做并网控制研究或者正在处理弱电网振荡问题的工程师都能直接用上。

1. 弱电网下跟网逆变器为什么容易发生小干扰失稳:负阻尼的物理根源

1.1 电流源属性与锁相环的“相位跟随”逻辑

跟网型逆变器和构网型逆变器最本质的区别在于,它没有自主建压能力。它必须通过锁相环(PLL)实时检测并网点电压的相位,然后让输出电流严格跟在这个相位后面。说得形象一点,跟网型逆变器就是一个“踩着别人节拍走路”的电流源:PLL是它的眼睛,电流环是它的腿。

在强电网下,并网点电压基本由无穷大母线决定,PLL测量到的相位干净稳定,电流环怎么整定问题都不大。但并网逆变器面对的现实工况往往是长线路、弱电网,这时电网等效阻抗Zg显著增大,PLL看到的相位就“不干净”了。问题就从这里开始。

这个“不干净”不是噪声,而是由逆变器自身输出电流反作用于并网点电压造成的。电网阻抗越大,这种反作用越强,最终形成一条从PLL到电流环再到电网阻抗的正反馈通路。这也是跟网型逆变器小干扰稳定性研究的核心命题:不是单个控制器不行,而是控制器与外部阻抗之间的动态交互出了问题。

1.2 电网阻抗引入的正反馈:从“阻尼”到“负阻尼”

弱电网下,并网点电压的矢量关系可以写成一个非常直观的表达式:

U_pcc = U_g + (Rg + jXg) · I

也就是说,逆变器输出电流I一旦波动,PCC电压的相位和幅值都会跟着波动。PLL把这个波动的相位当成“真实电网相位”去跟踪,跟踪结果又会改变逆变器输出电压,从而继续影响PCC电压。这就像人站在浮板上:水面本身是静止的,但他每次调整重心,浮板都会晃动,他又根据浮板的晃动继续调整重心,最后越晃越厉害。

在小信号分析里,这种交互会在特定频段折算成一个“负电阻”项。负电阻意味着能量不是被消耗掉,而是被持续注入振荡回路,振荡就会自发增长。工程现场看到的功率低频摆动、母线电压波动,本质上都是这条负阻尼回路在起作用。

用dq坐标下的简化方程可以看得更清楚。设线路电阻和电抗分别为Rg、Xg,电流扰动为Δid、Δiq,PCC电压q轴扰动近似为:

Δu_pcc_q ≈ Rg·Δiq − Xg·Δid

PLL的输入恰恰就是这个Δu_pcc_q。而Δid、Δiq本身又受PLL角度扰动的影响,于是整个环路里出现了一条正反馈通道。当电网电抗Xg增大到一定程度,这条通道的增益超过临界值,系统就失去小干扰稳定。

1.3 短路比SCR:量化电网强弱的实用标尺

工程上通常用短路比SCR来定量描述电网强弱:

SCR = S_sc / S_n ≈ Ug² / (Zg · S_n)

SCR高,说明电网阻抗小、电压支撑能力强;SCR低,说明电网阻抗大、电压支撑能力弱。工程习惯上把SCR大于10视为强电网,3到10之间算中等强度,低于3往往就是振荡事故的高发区。

我做过一个典型的单机2MW平均模型,把SCR从10逐渐降到2,未做任何优化时,大约在SCR低于3.2时就会有一对共轭特征值越过虚轴,时域波形同步出现约10Hz的振荡。这个现象很有代表性:稳定与否的本质,就是PLL、电流环和电网阻抗三者构成的闭环系统是否在某个频段出现了负阻尼。

2. 状态空间建模是分析的地基:从dq坐标系方程到Simulink模型

2.1 单机无穷大系统的模型结构与状态变量选取

小干扰稳定性分析的数学基础,是把非线性模型在稳态工况点附近线性化,得到标准状态空间形式:

ΔẊ = AΔX + BΔU
ΔY = CΔX + DΔU

A矩阵的特征值决定小干扰稳定性。因此第一步不是急着搭仿真,而是先把模型结构定清楚。

最经典也最实用的是单机无穷大系统:一台跟网型逆变器,采用L型滤波,经电网阻抗Zg接到理想电压源。这个模型足以覆盖弱电网失稳的核心机理,后续扩展到LCL滤波、多机并联也只是增加状态变量个数,分析思路完全一样。

状态变量至少要包含六类:

  • 滤波电感电流id、iq
  • PLL输出角度θp和角频率ωp
  • PLL中PI控制器的积分器状态x_pll
  • 电流环PI控制器的积分器状态x_cd、x_cq
  • 直流电压外环或功率外环的积分器状态x_outer
  • 如果采用LCL滤波器,还要加上电容电压和第二个电感电流

每个环节的微分方程都要写成关于状态变量的显式形式。比如电流环在dq坐标系下的微分方程:

Lf · d(id)/dt = vd − u_pcc_d − Rf·id + ω·Lf·iq

其中u_pcc_d/q本身又是其他状态变量的函数。PCC电压由电网阻抗方程决定:

u_pcc_d = u_g_d + Rg·id − Xg·iq
u_pcc_q = u_g_q + Xg·id + Rg·iq

把两组方程联立起来,就得到了包含电网阻抗和控制环路的完整状态方程。注意这里Xg项和Rg项的符号不能搞错,否则特征值轨迹会整体偏移,后面所有结论都不可信。

2.2 SRF-PLL的小信号模型推导要点

同步旋转坐标系锁相环(SRF-PLL)是跟网型逆变器最常用的相位检测方案。它的闭环传递函数可以写成:

G_pll(s) = (k_p_pll·s + k_i_pll) / (s² + k_p_pll·s + k_i_pll)

其中自然频率ω_n = √k_i_pll,阻尼比ζ = k_p_pll / (2√k_i_pll)。这个二阶模型已经足够用于小干扰分析。

在状态空间里,PLL的动态要写成两个微分方程:

d(Δθ)/dt = Δω_pll
d(Δω_pll)/dt = −k_i_pll·Δu_pcc_q − k_p_pll·d(Δu_pcc_q)/dt

第二个方程里出现了导数项,实际在Simulink中通常把PLL控制器拆成两个积分器状态,用PI模块内部状态直接建模,避免构造纯微分环节。

最关键的一步,是把Δu_pcc_q展开成id、iq、θ和电网电压扰动的线性组合。这一步一旦漏项,特征值分析会得到完全错误的模态结果。很多文献里给出的“PLL弱网失稳模态”,本质上就是这组方程中电网阻抗耦合项的贡献。

2.3 Simulink中搭建模型的两种路线:平均模型与开关模型

我在这类分析里通常做两版模型,强烈建议你也同时维护这两版。

第一版是Simulink中的电力电子Simscape模块库详细开关模型。IGBT、PWM、死区都在,波形最真实;但缺陷也很明显:linmod线性化时,开关器件的非线性会引入大量高频谐波状态,线性化结果很“脏”,特征值分析基本没法直接用。

第二版是受控源平均模型:把三相全桥看成一个增益为Kpwm的受控电压源,直流侧看成受控电流源,开关函数用平均值代替。控制逻辑和详细模型完全一致,但模型是连续时不变的,适合做线性化和特征值分析。

我的习惯是:平均模型用于控制参数整定和特征值轨迹分析,详细模型用于时域验证。如果两者在主导振荡频率和阻尼趋势上一致,说明分析结果是可信的;如果偏差很大,优先检查平均模型的开关函数增益和直流侧等效电阻设置是否正确。

3. 用特征值工具链定位振荡模态:从状态矩阵到参与因子

3.1 从linmod到特征值:最快拿到A矩阵

平均模型搭建好并成功运行在额定工况后,调用linmod提取线性化模型只需要两行代码:

[A, B, C, D] = linmod('gfl_inverter_avg'); ev = eig(A);

注意,调用linmod之前一定要让模型处于正确的稳态操作点。模型里任何一处常数初值设置错误,都会直接污染A矩阵。实际操作中,我通常先让模型以固定指令运行到稳定,再用运行结束的状态作为初始条件,最后才调用linmod。

linmod对输入输出接口不敏感,即使没有明确的控制输入,也能返回闭环系统的A矩阵。但如果想同时分析某个输入通道的影响,比如电网电压幅值阶跃对输出功率的响应,最好在模型里显式添加Inport和Outport,这样得到的B、C、D矩阵才有物理意义。

3.2 特征值、阻尼比和参与因子的判读方法

得到特征值后,我习惯按实部排序,优先看最靠近虚轴的共轭对。每个共轭对可以换算成工程上更直观的振荡频率和阻尼比:

f = |Im(λ)| / (2π)
ζ = −Re(λ) / |λ|

举一组典型的未优化参数,某单机模型中曾得到如下结果:

模态特征值λ频率f阻尼比ζ主要参与状态
PLL弱网模态1.2 ± j61.89.8 Hz−0.019θ_pll、ω_pll、iq
电流环模态−85.6 ± j793126 Hz0.107id、iq、x_cd
外环模态−0.8 ± j1.90.3 Hz0.40x_outer、θ_pll

第一行特征值实部为正,系统已经小干扰失稳。这里最值得关注的是第一个模态:频率9.8Hz,阻尼比为负,主导状态集中在PLL和q轴电流。这说明振荡是PLL与弱电网阻抗交互引发的,而不是电流环本身的问题。

判定哪个状态参与模态,要用参与因子。计算公式:

P_ki = v_ki · w_ik

其中v_ki是第i个模态右特征向量的第k个元素,w_ik是左特征向量的对应元素。MATLAB里我通常这样算:

[V, D, W] = eig(A); P = abs(V .* conj(W)); P = P ./ sum(P, 1); % 按模态归一化,方便比较

如果PLL弱网模态中θ_pll和iq的参与因子明显高于其他状态,基本可以锁定振荡是由PLL和弱电网阻抗交互主导。这直接决定了第4章优化策略的聚焦方向。

3.3 SCR扫描时的特征值轨迹与操作点重初始化

参数扫描是最容易翻车的地方。扫描SCR时,如果只改电网阻抗增益而不重新计算稳态操作点,A矩阵是在非平衡点上取的切平面,特征值结果毫无意义。

正确做法是每次改变Zg后,先重新求平衡操作点,再做线性化:

SCR_list = 1:0.25:12; for k = 1:length(SCR_list) Zg = 1 / SCR_list(k); set_param('gfl_inverter_avg/Zg_R', 'Gain', num2str(0.1 * Zg)); set_param('gfl_inverter_avg/Zg_X', 'Gain', num2str(0.995 * Zg)); % 关键一步:重新求稳态操作点,再用该操作点初值做线性化 op = findop('gfl_inverter_avg', linopt); set_param('gfl_inverter_avg', 'InitialState', mat2str(op.States.x)); [A, B, C, D] = linmod('gfl_inverter_avg'); ev = eig(A); real_part(k) = max(real(ev)); end

提示:SCR扫描时,每次改变电网阻抗后都必须重新求平衡操作点再做线性化,否则特征值轨迹会和时域仿真对不上。

把每个SCR下的最大特征值实部连成一条轨迹,能清楚看到:SCR降低时,PLL弱网模态先向左侧稳定区移动,随后掉头向右,最后越过虚轴进入右半平面。这个“掉头”的临界点就是系统的失稳边界。优化控制策略的目标,就是把这个临界SCR压到尽可能低。

4. 控制策略优化的三个方向:锁相环、虚拟阻抗与电压前馈

4.1 锁相环参数自适应:让PLL在弱电网下“迟钝”一点

既然失稳模态由PLL主导,最直接的方式就是把PLL带宽降下来。带宽降低后,PLL对PCC电压相位扰动的放大作用减弱,负阻尼效应随之减小。代价是动态响应变慢,严重弱电网下还可能暂态失锁。

因此工程上不做固定低带宽,而是做成自适应:在线估算电网阻抗和SCR,弱电网时自动降带宽,强电网时恢复高带宽。Simulink里用1D Lookup Table就可以实现,输入是估计的SCR值,输出是PLL的自然频率和阻尼比。

典型参数示例:

SCR区间自然频率ω_n阻尼比ζ对应PLL闭环带宽(约)
>102π×15 rad/s0.7约22 Hz
3~102π×8 rad/s0.7约12 Hz
<32π×5 rad/s0.5约6 Hz

具体的比例积分系数按公式换算即可:

k_p_pll = 2ζω_n
k_i_pll = ω_n²

注意:PLL参数切换不要用阶跃,建议对参数变化率做限幅,否则切换瞬间会引入新的扰动模式。我在仿真里用Rate Limiter限制k_p和k_i的变化速率,时间常数取0.05~0.2s,效果比较理想。

4.2 虚拟阻抗/虚拟电阻:给电流环外加阻尼

第二个方向是从阻抗重塑切入。逆变器的输出阻抗由滤波电感、电流环和PLL动态共同决定。控制上可以对输出阻抗进行“编程”,等效串入一个虚拟阻抗Zv = Rv + sLv。

虚拟电阻Rv的作用很清楚:在振荡电流通路中增加能耗,直接把振荡能量耗散掉。虚拟电抗Lv可以改变与电网电感的谐振关系。实现上通常不是真的去求微分,而是在dq轴指令电压上叠加:

Δv_d_ref = −Rv·id + ω·Lv·iq
Δv_q_ref = −Rv·iq − ω·Lv·id

这样稳态时也能保持期望的阻抗特性。但Rv取值过大时,额定电流下会产生明显额外压降,影响无功能力和输出电压范围。我一般把Rv整定在0.1~0.3 pu之间,先给一组初值,再看特征值轨迹微调。

为了避免虚拟电阻在基波和谐波下都生效导致波形畸变,更精细的做法是只让虚拟电阻在振荡频段起作用:用带通滤波器提取id/iq中的振荡分量,仅对这部分分量施加Rv反馈。这在仿真和工程里都更稳妥,也是我做弱电网优化时的首选方案。

4.3 电网电压前馈:在控制回路里“屏蔽”外部扰动

第三个方向是电网电压前馈。基本原理很朴素:电流环每次都要靠反馈去抵消PCC电压扰动,而PCC电压扰动恰恰来自PLL和电流的耦合。如果在调制指令中加入一个大小等于PCC电压的前馈项,电流环就不需要花费很大的控制增益去抑制这个扰动,PLL的动态就很难激起电流环的持续响应。

Simulink实现方式:测量PCC电压u_pcc_d/q,乘以系数K_ff后叠加到电流环输出的调制指令上,再经过PWM。理想情况下前馈系数取1,但全通前馈会把PCC电压的高频分量和测量噪声直接送进调制波,所以实际要加低通滤波或陷波,截止频率取电流环带宽的0.5到1倍,同时要考虑数字控制一拍延迟的补偿。

前馈的局限性也要清楚:它只能在前馈有效带宽内起作用,对几Hz到几十Hz的PLL弱网模态改善明显,但对电流环带宽外的谐振问题帮助有限。所以实际策略往往是三者组合拳:前馈负责解耦,虚拟阻抗负责阻尼,PLL带宽自适应负责从源头上降低负阻尼增益。

4.4 三种策略的适用边界与选型原则

三种策略各有边界,我习惯用下面这张表做方案选型:

优化策略主要作用频段最主要的收益需要注意的成本与副作用
PLL带宽自适应几Hz~几十Hz直接削弱负阻尼根源动态响应变慢,暂态失锁风险上升
虚拟电阻/虚拟阻抗几十Hz~数百Hz增强电气阻尼、重塑输出阻抗Rv过大影响稳态电压,Lv过大改变谐振频率
电网电压前馈电流环带宽内解耦PCC电压扰动全通前馈噪声大,数字延迟需补偿

选型原则:失稳模态由PLL主导时,优先考虑PLL带宽自适应和电压前馈;失稳模态由电流环与LCL/电网谐振主导时,优先考虑虚拟阻抗;通常两个或以上组合使用,效果比单打独斗好得多。

5. 从根轨迹到波形验证:优化方案在Simulink中的效果对比

5.1 仿真工况与参数设定

为完整展示优化效果,我采用下面的设置:

系统参数数值
额定功率2 MW
交流电压690 V
基波频率50 Hz
开关频率10 kHz
滤波电感Lf0.3 mH
滤波电阻Rf0.01 Ω
直流侧电压1100 V
电网阻抗范围SCR从10降到1.8
电网R/X比0.1

控制参数按三种优化策略分别配置,优化前后使用同一套初始条件和电网阻抗时序,保证对比只反映控制策略差异,不掺入工况切换的影响。

5.2 失稳时的时域现象与特征值频率对应关系

先做未优化的基线工况。让SCR在1s内从10线性降低到2,注意这里用斜坡而不是阶跃,否则操作点突变带来的纯暂态响应会掩盖小干扰特征。

观察逆变器输出有功功率波形:当SCR越过3左右时,波形开始出现等幅振荡,频率大约9.8Hz;继续降到3以下,振荡幅值按指数增长,最终导致保护动作。

这里的9.8Hz和第3章特征值表里PLL弱网模态的虚部完全对应,这是小干扰分析最有说服力的地方。做强校验时,对有功波形做FFT,主峰频率会直接落在特征值预测的频率上:

Fs = 5000; P0 = active_power - mean(active_power); X = fft(P0); f_axis = (0:length(X)-1) / length(X) * Fs; [~, idx] = max(abs(X(1:floor(end/2)))); f_peak = f_axis(idx); % 理论上等于 Im(lambda)/(2*pi)

5.3 优化后波形与阻尼比提升的量化结果

把第4章的三种策略同时投入,保持同样的SCR斜坡。实测结果:SCR降到1.8时系统仍然稳定,主导模态特征值从优化前的1.2±j61.8变为−9.8±j59.0,阻尼比从−0.019提升到0.16以上,已经满足工程上“弱阻尼不算稳定”的验收标准。

时域上,扰动后的有功功率不再是等幅振荡,而是按照e^{σt}的包络衰减。衰减时间常数约为1/|σ|,优化后σ=−9.8,对应时间常数约0.1s,0.5s内振荡幅值已经衰减到初始的0.7%以下。

设计时如果想要更直观的指标,可以这样定:保证振荡在0.5s内衰减到可接受水平,主导特征值实部绝对值至少要大于2。我习惯把目标定得更严一点,实部绝对值大于5,对应振荡在0.4s内明显收敛。

5.4 在线调参时需要观察的关键波形

仿真验证阶段不要只盯功率输出。我一般会同时观察三个信号:

  • PLL输出角度与PCC电压相位误差,这是负阻尼环路的输入;
  • q轴电流iq,它是PLL弱网模态参与度最高的状态变量之一;
  • PCC电压dq分量,它反映电网阻抗上的压降动态。

优化方案投入后,能明显看到q轴电流中的振荡分量被大幅抑制,PLL相位误差里的同频分量也随之消失。这三个信号从“源”到“果”都能对上,比只看一条功率曲线可靠得多。

6. 一线实操容易踩的坑和调试建议

6.1 linmod用在开关模型上会得到“假模态”

这是新手最容易踩的坑。直接把Simulink电力电子开关模型拿出来linmod,A矩阵会出现很多高频假模态,有些特征值甚至跑到右半平面,但时域波形明明稳定。原因在于开关器件的PWM切换行为本质上是离散非线性,不适合用连续线性化近似。

我做这类分析时,只有在平均模型里才能得到干净的特征值;开关模型只用来做时域确认。如果一定要对详细模型做小干扰验证,建议先对波形数据做Prony分析或FFT提取主导振荡频率,再与平均模型的特征值对比。

6.2 扫描参数时忘记重算操作点,整个特征值轨迹都是错的

SCR扫描时,每次改变Zg,稳态电流和PCC电压都会变化。如果沿用上一次的初始状态去做linmod,线性化点并不是系统真实平衡点,A矩阵的物理意义已经不存在。

我早期在这个问题上吃过亏,画出来的特征值轨迹在低SCR区域显得“很稳定”,和时域仿真完全相反。排查后发现问题就出在操作点没有更新,改用findop重新求平衡点后,轨迹才和时域一致。强烈建议每次扫描都强制重新计算操作点,并把这一步写进扫描脚本里。

6.3 PLL初始相位和dq基准不一致

dq坐标系本身没有绝对参考方向,它完全取决于PLL锁定的角度。如果模型稳态时PLL的积分器输出角度与实际PCC电压相位不对齐,线性化后q轴小信号方程就错了,很多状态变量的含义也会错位。

检查方法很简单:模型运行到稳态后,看PLL输入端的u_pcc_q是否接近0。如果不接近,说明初始角度没有对准。先把模型跑够时间让PLL收敛,或者手动将PLL初始状态设为稳态值,再作线性化。

6.4 恒定PLL参数与自适应切换引起的新扰动

PLL参数自适应会导致系统从连续时不变系统变成切换系统。如果切换太突然,比如SCR从10瞬间降到3的瞬间把k_p和k_i直接阶跃,PLL输出角度会产生短时大扰动,可能触发限幅或保护。

建议参数切换加一阶惯性平滑,时间常数取0.05~0.2s。仿真里可以用Rate Limiter限制参数变化速率,这是一个成本极低但效果明显的做法。

6.5 求解器设置与批量扫描的效率问题

平均模型本身是连续系统,用ode45即可;如果加入参数自适应和限幅等强非线性,可以考虑ode15s或ode23t。详细开关模型建议用ode23tb,最大步长设为开关周期的1/10左右,比如10kHz开关频率下最大步长1e-5s,否则波形会失真。

批量参数扫描时,尽量关掉仿真窗口可视化,用sim在脚本中批量执行;机器有多核就用parfor并行。我一般先粗扫定位失稳区域,再在临界区域局部加密扫描,这样既省时间又不会漏掉特征值轨迹的突变点。

最后再分享一个我个人的工作习惯:每次完成一轮优化,我都会回到平均模型上重新生成特征值轨迹,而不是只满足于时域波形。因为时域波形只能告诉你是否振荡,特征值轨迹才能告诉你为什么振荡、哪个状态参与最多、留给下一轮迭代的稳定裕度还有多少。这套“建模—线性化—特征值分析—策略优化—时域验证”的闭环流程,值得在每次控制参数变动的项目里完整走一遍。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询