1. 先搞清楚:弱电网、LCL、VSC三个词放在一起意味着什么
调了这么多年并网逆变器,最怕的不是硬件炸管,而是那种眼看波形正常、功率也上去了,突然某个晚上电流开始打摆子的工况。后来才明白,这种低频振荡绝大多数不是控制参数乱调出来的,而是弱电网下LCL型电压源变换器与电网阻抗相互作用产生的次同步/超同步谐振。今天把验证过的方法摊开聊:弱电网下LCL-VSC阻抗建模、基于Nyquist判据的稳定性验证,以及整套Simulink仿真实现流程。这篇内容适合正在用阻抗法排查并网振荡、或者刚接触VSC稳定性分析的人,如果你已经会用伯德图看增益裕度,那阅读起来会非常顺手。
1.1 LCL滤波器的天然谐振点
LCL滤波器由逆变器侧电感L1、滤波电容Cf和网侧电感L2组成,相比单L滤波器,它的高频衰减特性更好,所以大功率并网逆变器几乎都用LCL。但代价是引入了一个不受控的谐振峰,频率约为:
f_res = 1 / (2π sqrt(L1 L2 Cf / (L1 + L2)))
这个公式在并网逆变器设计中会反复出现。比如一套50kW、线电压380V的系统,取L1=1.5mH、L2=1.0mH、Cf=30uF,算出来谐振频率大概在1.2kHz左右。设计时通常要求谐振频率避开电流环带宽和开关频率,一般取开关频率的1/10到1/5。
问题是,工程上写到“LCL参数按标准设计好了,谐振频率也躲开了”,却忘了并网点的电网阻抗不是零。弱电网下,电网等效电感Lg会在网侧电感L2外面再串一个电感,LCL的等效结构从三阶变成四阶,谐振频率会被拉低,阻尼特性也变了。更麻烦的是,这个被拉低的谐振峰一旦和锁相环、电流环的频段搭上,就可能不再是简单的LCL谐振,而是可控性变差带来的负电阻失稳。
很多人第一次碰到次/超同步谐振时,会下意识认为是滤波参数不对,反复调LCL阻尼电阻。实际上滤波参数只是把问题“搬了个位置”,真正失稳的根源经常在PLL动态和弱电网阻抗的交互上。
1.2 次同步和超同步谐振是怎么被“逼”出来的
根据我调试的真实工况,最典型的场景是电网短路比SCR偏低,大概在2到3之间。此时电网阻抗已经很大,如果VSC的PLL带宽设置得比较激进,当并网点电压发生微小扰动时,PLL输出的相位会跟着抖。这个相位扰动会让dq坐标系下的电流指令在真实坐标系里产生一个额外的耦合分量。
这个耦合分量的等效阻抗在某个频率范围内会呈现负实部,也就是“负电阻”。负电阻意味着能量不是被消耗,而是被注入到振荡回路里。只要这个负阻区间的频率与电网电感、LCL电容构成的谐振频率重合,系统就会形成闭环负阻尼振荡。
电网基波是50Hz时,振荡频率往往是成对出现的:一个低于50Hz的次同步分量,一个高于50Hz的超同步分量。比如工程录波里常见的30Hz和70Hz、40Hz和60Hz。很多人只关注次同步那一半,其实超同步频段同样携带能量,两者在dq坐标下互为镜像,分析时不能只看单频点。
我后来养成的习惯是,先做全频段阻抗扫描,再回到时域看FFT,确认这两个分量是否同时出现。只盯着某一个频率做伯德图,很容易漏掉另一侧的失稳模态。
2. 阻抗建模:把时域控制问题变成频域网络问题
2.1 为什么放弃状态空间而选阻抗法
LCL-VSC并网系统如果写状态空间方程,状态量至少包括L1电流、L2电流、Cf电压、PLL内部状态、电流环积分器、直流电压动态,一套模型轻松超过10个状态。再加上弱电网阻抗本身也是动态,矩阵维数一高,什么零点、极点、参与因子都变得很难直观解读。
阻抗法换了个思路:把VSC整体看成从PCC看进去的一个复频域阻抗Zvsc(s),电网则是一个阻抗源Zg(s)。两个网络串联后,稳定性只需要研究Zg(s)+Zvsc(s)的最小相位特性。这样不仅模型尺寸小,而且物理意义清楚,某个频段是感性还是容性、是正阻还是负阻,一眼就能看出来。
更关键的是,阻抗法可以打通“解析模型”和“仿真测量”之间的鸿沟。解析模型用来推导机理,Simulink扫频用来验证参数变化,两者在Nyquist图上应该对得上。对不上的地方,往往就是建模漏掉的那部分,比如数字控制延迟、PLL前置滤波、采样保持效应。
2.2 从控制结构到VSC输出阻抗的基本推导
在dq同步旋转坐标系下,不计PLL动态时,若电流环带宽足够高,VSC可以近似看成受控电流源,输出阻抗理论上接近无穷大。但实际系统里,采样延迟、PWM滞后和PLL都会让“受控电流源”出现有限的并联阻抗。
PLL的影响是最有意思的。假设PCC电压有一个小扰动,PLL会把这个扰动识别成相位变化,导致内部dq坐标系和真实电网dq坐标系之间出现角度偏差。电流指令虽然在控制器的dq坐标里没变,但投影到真实坐标后,会产生一个与PCC电压扰动同频的电流响应。这个响应折算成导纳,在次同步频段往往是负实部。
如果只写理想电流环模型,Zvsc(s)里根本看不到负阻项。必须把小信号PLL传递函数T_pll(s)和工作点电流I0耦合进去。常见推导里,阻抗表达式分母会出现类似1 - T_pll(s) * G(s) * I0这样的项,它在低频段模值小于1,特定频率下相位翻转,对应的实部就会变负。这也是为什么同一套逆变器,在强电网下跑得很稳,换到弱电网就振荡。
2.3 LCL端口阻抗怎么合成
从PCC看进去,VSC的端口阻抗并不直接等于逆变器电流环的闭环阻抗,而是LCL整个网络的输入阻抗。电网侧电感L2在最外面,然后是Cf并联支路,再往里是L1和受控电压源组成的逆变器支路。
简化表达式可以写成:
Z_pcc(s) = sL2 + ( (sL1 + R1 + Z_cont(s)) ∥ (1/(sCf)) )
其中Z_cont(s)是逆变器侧受控电压源的等效内阻,包含电流环增益和PLL耦合项。这个式子里,Cf支路的影响在谐振频率附近变得非常显著;而PLL带来的负阻项主要通过Z_cont(s)进入网络,尤其在次同步频段,Cf容抗还很大,负阻项不会被短路掉。
做Simulink阻抗测量时,我测到的就是Z_pcc(s),不是L1支路单独阻抗。对比解析模型时要把这个端口合成关系处理好,否则高频段数据和理论对不上。
3. Nyquist判据验证:比单纯看阻尼比更直观
3.1 返回比怎么构造
把VSC看成负载阻抗Zvsc,电网看成理想电压源Vs串联Zg。并网电流可以写成:
I(s) = Vs(s) / (Zg(s) + Zvsc(s))
系统特征方程是Zg(s)+Zvsc(s)=0。两边除以Zvsc(s),得到:
1 + Zg(s) / Zvsc(s) = 0
所以开环传递函数取L(s)=Zg(s)/Zvsc(s),画它的奈奎斯特曲线,看是否包围-1点。这个做法在电力电子交流侧稳定性分析里非常常见,但要注意,这不是随便套用的。前提是Zg和Zvsc本身不能带有右半平面极点,或者至少要知道右半平面极点数P,才能正确判断“不包围”是否等价于稳定。
工程里我习惯先用解析模型确认Zg和Zvsc都是最小相位系统,再用扫频数据画奈奎斯特图。如果扫频曲线在-1点附近绕来绕去,就用iso在图上输出包围圈数,不要靠肉眼猜。
3.2 广义奈奎斯特与dq耦合
严格来说,三相平衡系统在dq坐标系下是双输入双输出,正序和负序之间存在耦合。PLL动态越强,耦合越明显。若只画单回路L(s)=Zg(s)/Zvsc(s),在某些边界工况可能误判稳定。
这时候需要用广义奈奎斯特判据,计算闭环返回比矩阵的特征轨迹。特征值可以近似用复矢量法求出,结果是一条或多条曲线,它们是否包围(-1,0)决定系统稳定性。Simulink扫频时,如果扫了正序和负序两组阻抗,就可以组装出二乘二导纳矩阵,再做特征轨迹验证。
对于初学者,我的建议是先用正序单回路扫一遍,找出失稳趋势;如果发现临界工况周围裕度很小,再上广义奈奎斯特做精确判断。不要一上来就追求完整MIMO模型,阻抗法的优势本来就在于“用最小的模型找最大的问题”。
3.3 奈奎斯特曲线怎么读
很多文章只告诉你“不包围-1就稳定”,但实际曲线往往是一大圈扫过负实轴,离-1点有一段距离。这时要看的是:
- 曲线是否从负实轴穿过去,而不是绕回原点;
- 穿越点是否在-1左侧;
- 曲线靠近-1点时的频率,是否正好对应时域FFT里的次/超同步峰。
经验值是,曲线离-1点越近,阻尼越弱,时域波形衰减越慢。如果曲线已经包住-1点,系统通常表现为等幅振荡或发散振荡,振荡频率就是曲线穿越负实轴附近的角频率。上面说的30Hz和70Hz成对出现,在奈奎斯特图上往往会看到两个不同的穿越频段。
4. Simulink仿真实现:从模型搭建到奈奎斯特判据验证
4.1 仿真模型整体结构和参数设计
Simulink里做这套研究,我建议先用平均值模型,不要一上来就搞IGBT开关模型。平均值模型用受控电压源替代桥臂,模型运行速度快,扫频几十个频点也不至于跑半天。阻抗趋势验证通过之后,再挑失稳参数点搭一个详细开关模型,看时域波形和FFT。
我常用的一组参数如下。
| 参数 | 数值 | 说明 |
|---|---|---|
| 额定功率 | 50 kW | 并网有功 |
| 电网线电压 | 380 V / 50 Hz | PCC额定电压 |
| 直流母线电压 | 750 V | 平均值模型给定 |
| L1 | 1.5 mH | 逆变器侧滤波电感 |
| L2 | 1.0 mH | 网侧滤波电感 |
| Cf | 30 uF | 滤波电容 |
| 开关频率 | 10 kHz | 详细模型使用 |
| 控制频率 | 10 kHz | 电流环/PLL采样 |
| LCL谐振频率 | 约1.2 kHz | 计算值 |
电网阻抗按短路比SCR折算。以50kW、380V为例,阻抗基值为:
Z_base = 380^2 / 50000 = 2.888 Ω
每个短路比对应的电网阻抗如下。
| SCR | Zg(Ω) | Lg(mH) | Rg(Ω) |
|---|---|---|---|
| 10 | 0.2888 | 0.92 | 0.0289 |
| 5 | 0.5776 | 1.84 | 0.0578 |
| 2.5 | 1.1552 | 3.68 | 0.1155 |
| 1.6 | 1.8050 | 5.75 | 0.1805 |
Rg按X/R=10取值。弱电网重点研究SCR=2.5和1.6两档,强电网用SCR=10作为对照。
4.2 用频率扫频法测量VSC输出阻抗
在Simulink里测量VSC阻抗,最直观的方法是PCC处串联一个小信号电压扰动源。扰动源设置成单频正弦,扰动幅值取电网电压峰值2%到5%,从1Hz扫到2000Hz。每扫一个频率,都要等系统进入稳态,然后提取该频率下的电压和电流复幅值,两者相除就是该频点阻抗。
我实际用过的操作流程是:
- 搭建好平均值模型,把电网阻抗设为固定值;
- 在PCC与电网阻抗之间串联一个可控电压源,输入为sin(2πf_inj t);
- 基波源正常运行,等到第50ms后开始记录数据;
- 取最后一个基波整数倍周期的电压电流数据;
- 用单频DFT提取扰动频率下的复数值;
- 每个频率重复一次仿真,或者用循环批量改参数。
核心代码大致是下面这种写法:
f_list = 1:0.5:2000; Z_meas = zeros(size(f_list)); for k = 1:length(f_list) f_inj = f_list(k); set_param('lcl_vsc_scan/Injection', 'Frequency', num2str(f_inj)); sim('lcl_vsc_scan'); t = logsout.get('vpcc').Values.Time; v = logsout.get('vpcc').Values.Data; i = logsout.get('ipcc').Values.Data; idx = t > (t(end) - 0.1); % 取稳态段 Vf = 2/length(v(idx)) * sum(v(idx) .* exp(-1j*2*pi*f_inj*t(idx))); If = 2/length(i(idx)) * sum(i(idx) .* exp(-1j*2*pi*f_inj*t(idx))); Z_meas(k) = Vf / If; end扫频得到的是端口阻抗,需要通过三相电压电流构造成正序复矢量。三相平衡系统里,把abc变换到αβ,再用vα+jvβ做单频DFT,能直接得到正序阻抗。如果要做负序,注入反向旋转的三相扰动即可。
4.3 从扫频数据到Nyquist图
扫频数据是离散频点上的复数数组,不能直接丢给nyquist函数,需要包装成frd对象。假设Zg是解析计算的电网阻抗,Zvsc是扫频得到的VSC阻抗,开环返回比是:
L(jω) = Zg(jω) / Zvsc(jω)
MATLAB里画奈奎斯特图可以这样写:
w = 2*pi*f_list; Zg = Rg + 1j*w*Lg; L_open = Zg ./ Z_meas; sys = frd(L_open, w); nyquist(sys); grid on;功率上要注意,frd对象默认只包含正频率,nyquist会自动补全负频率镜像。因此不需要手工扩充数组。若曲线在-1点附近穿越,可以用allmargin(sys)查看增益裕度,但奈奎斯特包围圈数还是要看nyquist输出的环绕信息。
4.4 时域对比验证与FFT特征
阻抗判据只能说明稳定性趋势,最终还是要回到时域看一眼波形。同一个Simulink模型,去掉扫频扰动源,直接让电网阻抗和VSC闭环运行。把SCR设为2.5,PLL带宽取50Hz左右,并网电流会出现明显的“拍振”。对电流做FFT,频谱里通常同时出现两个峰,一个在次同步频率,一个在超同步频率。
下面是一个典型的对照结果。
| 工况 | SCR | PLL带宽 | 电流波形 | FFT主要频率 |
|---|---|---|---|---|
| 强电网 | 10 | 50 Hz | 平稳 | 50Hz及少量开关谐波 |
| 弱电网 | 2.5 | 50 Hz | 包络波动 | 30Hz、70Hz |
| 弱电网 | 2.5 | 20 Hz | 平稳 | 50Hz |
| 弱电网 | 1.6 | 50 Hz | 发散 | 25Hz、75Hz |
这个表格我实际复现过多次,很能说明问题:PLL带宽低一些,弱电网下也稳定;PLL带宽一高,负阻区就压下来了。做参数化研究时,可以批量修改SCR和PLL带宽,记录每组参数下的Nyquist曲线穿越情况和FFT峰值,两者对上,结论就非常扎实。
5. 工程中常见的坑与排查技巧
5.1 扫频结果毛刺多的主要原因
扫频开始前,最容易被忽略的是FFT窗口长度。如果取的数据长度不是扰动频率整数倍周期,DFT结果会受频谱泄漏影响,阻抗曲线就会在某个频点突然跳变。我通常强制取最后一个完整基波周期数的倍数,比如0.1秒就是5个基波周期,如果扫频频率不是50Hz整数倍,0.1秒对它可能是整数个周期,也可能不是。因此更稳妥的做法是记录时间戳,用最小二乘拟合提取幅值和相位,而不是简单截窗。
另一个坑是扰动幅值。注入幅值太大,PLL会进入非线性区,扫出来的负阻频段失真;注入太小,电流信号淹没在噪声里。实用范围是电网电压峰值的2%到5%,弱电网下PCC电压扰动已经被放大,可以再往低取。
5.2 奈奎斯特判据误判的几个注意点
用扫频数据画奈奎斯特图时,最怕把“曲线绕远路”误当成“不包围-1”。如果扫频范围只到某个有限频率,曲线末端没有闭合,奈奎斯特判据严格来说不完整。因此扫描上限至少要到LCL谐振频率的3倍以上,最好覆盖开关频率的一半;低频段从1Hz开始就够用,次同步问题都在几十赫兹附近。
还要检查Zvsc在扫频频段内是否存在右半平面零点。若振动形态接近负阻,阻抗在某些频率可能表现出非最小相位特性,开环L(s)的右半平面极点数P就不是0。这时直接用图形判断会出错,建议用闭环特征方程配合极点求解确认。
5.3 PLL带宽、SCR与失稳形态的关系
现场调参数时,我总结出几条规律,可以当快速判断依据:
| 调节方向 | 对次同步/超同步的影响 | 原因 |
|---|---|---|
| 降低PLL带宽 | 失稳风险下降 | 相位扰动变小,负阻区减弱 |
| 增大SCR | 稳定性变好 | 电网阻抗减小,返回比幅值下降 |
| 增大电流环带宽 | 超同步风险可能上升 | 控制带宽接近LCL谐振峰 |
| 增加滤波电容 | 谐振频率降低 | 负阻区更可能与LCL峰重叠 |
如果现场条件允许,优先降PLL带宽,代价是动态响应变慢,但转换稳定性改善非常明显。另一种做法是加入附加阻尼控制,比如在电流环指令上叠加次同步频段的阻尼支路,但参数设计要基于阻抗模型来做,不能盲调。
我自己的习惯是先在解析阻抗模型上用奈奎斯特扫描一遍参数区间,再用Simulink扫频抽检几个拐点,省时间又不至于漏掉边界。最后提醒一句,做稳定性验证时一定把SRF-PLL完整建模进去,很多“明明稳定”的模型就是因为这里被简化掉,才低估了负阻尼风险。