调试并网变流器的时候,我最怕看到一种波形:功率还没拉满,并网点电压和电流里突然冒出一对“镜像”频率——比如工频 50Hz 旁边蹦出 25Hz 和 75Hz,幅值相当、一起长一起落。设备没有报任何硬件故障,但电压畸变和功率摇摆已经让系统没法继续升功率。这种场景在 SCR 较低的弱电网里尤其常见,而且常规的谐波补偿、增加阻尼往往压不住。
这类问题在学术和工程上叫次同步/超同步谐振,本质不是电网或负载单独造成的,而是变流器的控制回路、LCL 滤波器、电网阻抗三者耦合后,在某个频段形成了负阻尼。要真正搞清“为什么振荡、哪个参数在控制振荡、怎么验证对策”,最完整的链路就是给 LCL-VSC 建立 d-q 轴小信号阻抗模型,用 Nyquist 判据和阻抗比判断稳定性,再在 Simulink 里通过扫频阻抗测量和时域仿真做交叉验证。
这篇文章把这条链路完整走一遍,包括建模要点、判据使用细节、扫频仿真的实施步骤和我踩过的坑。适合正在做新能源并网稳定性研究的电力电子研究生,以及实际调并网设备的工程师。
1. 弱电网下 LCL-VSC 为什么容易失稳:从振荡现象到物理本质
1.1 弱电网到底“弱”在哪
弱电网的常用量化指标是短路比 SCR,等于并网点三相短路容量除以变流器额定容量。SCR 大于 10 通常可以看成强电网,5 到 10 之间属于中等强度,小于 3 就是比较典型的弱电网,实际工程里小于 2 的项目也能遇到。
SCR 低对应的是并网点背后的等效阻抗大,而且输电网阻抗基本是感性的。带来的直接后果是:并网电流一旦变化,PCC 电压的幅值和相位都会明显跟着动。强电网下可以近似把 PCC 当成理想电压源,弱电网下这个假设直接失效,变流器控制里所有“假设电网是刚性的”设计都会出问题。很多人一开始不理解为什么同样一台变流器在实验室电网模拟器上调试得好好的,一到现场并网点就振荡,根源往往就在这里。
1.2 振荡现场长什么样
某次项目调试,变流器额定功率下想升到 60% 负载,结果并网点电流 THD 从 2% 一路飙到 15% 以上,功率计读数来回摆。把电流波形做 FFT,基波旁边整整齐齐立着两根谱线,一个在 25Hz 附近,一个在 75Hz 附近,两边幅值几乎一样。当时先怀疑是电网背景谐波,换了输入源,问题依旧;又调了电流环的 PI 参数,结果只是把振荡频率挪了个位置,没有消除。
后来才意识到,这个现象不能用“谐波源”的视角看,得把变流器当成一个动态阻抗去看。那两根谱线其实是一个振荡模式的两种表现,它们成对出现这件事本身就泄漏了控制回路耦合的信息。
1.3 失稳本质:控制回路在特定频段变成“负电阻”
把 VSC 和电网放在频域里看,每个频率下都能算出变流器端口等效阻抗的实部和虚部。正常情况下实部是正的,扰动作用在上面会被消耗;但在某些频段,由于电流环、PLL 和数字延时的共同作用,等效阻抗实部可能变成负值。负实部意味着变流器在这个频率下不是消耗能量,而是向系统注入与扰动同相的能量。
这就像给一个弹簧阻尼系统接了一个“负阻尼器”,扰动一来不但不衰减反而越晃越大。电网阻抗越大,这个负阻尼区间的危害越明显。所以弱电网下的次/超同步谐振,本质就是“电网外阻抗 + LCL 谐振特性 + 变流器控制等效负阻抗”在某个频点满足了相位条件,形成闭环振荡。这一章的结论是后面所有建模工作的出发点:如果不把 VSC 的端口阻抗建出来,振荡就始终是一个“看似谐波、但怎么滤也滤不掉”的黑箱问题。
2. LCL-VSC 阻抗建模:从三相时域电路到 d-q 轴二端口等效
2.1 为什么阻抗模型比状态空间模型更适合
研究稳定性有两种主流思路。一种是列写整个系统(电网+LCL+控制器)的状态方程,求特征根;另一种是把 VSC 从端口上等效成一个阻抗(或导纳),然后和电网阻抗构成一个反馈环路,用奈奎斯特类判据判断。
状态方程法理论上最精确,但有个实际问题:控制器里 PLL、数字延时、限幅等环节会让状态空间表达式变得很庞大,而且只要控制结构一变就得重新推导。阻抗法的思路更接近“黑箱测阻抗”:我可以把变流器当成一个二端口网络,用电路理论里的戴维南/诺顿等效去描述它,在端口上扫频测量就能得到模型,不需要知道内部所有细节。
所以工程上普遍用诺顿等效:VSC 端口等效为理想电流源 I_s(s) 并联一个阻抗 Z_vsc(s)。电网侧是戴维南等效:理想电压源 V_g(s) 串联阻抗 Z_g(s)。两个模型往并网点一接,就是一个标准的电流源并联阻抗与电压源串联阻抗的电路,稳定性分析就变成了两个阻抗的交互问题。
2.2 d-q 轴模型由哪几块拼出来
LCL-VSC 的阻抗模型不是单纯把 L1、L2、Cf 串并联起来那么简单,控制回路会“生成”额外的虚拟阻抗。完整的 d-q 轴阻抗模型至少包含四个部分。
第一是 LCL 滤波器本身的物理阻抗,这部分只取决于电感电容参数;第二是电流内环,它通过 PI 控制器改变调制电压,等于给端口并联或串联了一个由控制器传递函数决定的阻抗;第三是 PLL,电网电压相位扰动会改变 Park 变换的角度,进而改变调制电压的相位,这部分效应在小信号下表现为阻抗矩阵的非对角元素;第四是数字控制延时,通常近似为一拍延时 e^{-sTs},它主要影响较高频段的相位特性。
在同步旋转坐标系下,由于 d 轴和 q 轴之间有耦合,变流器阻抗要写成二阶矩阵:
Z_vsc(s) = [ Zdd(s) Zdq(s) ] [ Zqd(s) Zqq(s) ]对角线元素 Zdd、Zqq 是常规的 d/q 轴自阻抗,非对角的 Zdq、Zqd 表示 d 轴和 q 轴之间的交叉耦合。实际计算中会发现:忽略 PLL 时,这个矩阵接近对角占优;一旦把 PLL 的动态加进来,非对角元素会明显增大,次同步频段的负阻特性也主要由这些耦合项贡献。
2.3 推导流程、常见简化与适用边界
建模的大致流程是:先在稳态工作点做小信号线性化,把开关平均值模型替换成连续平均模型;然后分别对电流控制、PLL 和延时做小信号传递函数;再把它们代入端口电压和电流的关系式,解出阻抗矩阵。严格推导下来是一堆代数方程,手动算非常容易出错,我当时是用符号计算工具推导并化简的,然后再把符号表达式转成 MATLAB 函数用于扫频对比。
阻抗模型是有适用边界的。它基于连续平均模型,意味着只能描述远低于开关频率的动态;对于次同步/超同步这种几十赫兹的振荡完全够用,但别指望它预测开关频率附近的特性。另外建模时通常假设直流母线电压恒定、忽略死区和饱和。死区会在低频引入额外的非线性阻抗,如果要研究很精确的振荡门槛,这些细节需要考虑;但如果目标是定性判断“什么参数会导致失稳、振荡频率大致在哪里”,简化模型的预测已经足够准。
3. Nyquist 判据验证:把阻抗比画出来,看曲线离 (-1, j0) 有多远
3.1 判据的数学基础与符号约定
把诺顿等效的 VSC 和戴维南等效的电网接到同一端点上,并网电流可以写成:
I_g(s) = Z_vsc(s) / (Z_g(s) + Z_vsc(s)) · I_s(s) - 1 / (Z_g(s) + Z_vsc(s)) · V_g(s)
闭环稳定性取决于特征方程 1 + Z_g(s)/Z_vsc(s) = 0 的根是否都在左半平面。于是可以定义环路增益 T(s) = Z_g(s) / Z_vsc(s),对 T(s) 用 Nyquist 判据:T(s) 的 Nyquist 曲线逆时针包围 (-1, j0) 的圈数等于其在右半平面的开环极点数时闭环稳定,正常工程里主要看曲线是否绕过 (-1, j0)。
提示:如果变流器阻抗模型自身包含右半平面极点,例如某些无源阻尼设计不当的控制器,Nyquist 判据还要把开环极点数算进去,不能只看曲线是否绕过 (-1, j0)。
注意一点:阻抗比的方向不要搞反。这里 T(s)=Zg/Zvsc 对应的是“VSC 诺顿电流源作为输入、并网电流作为输出”的闭环结构。有些文献习惯定义成 Zvsc/Zg,两者是倒数关系,Nyquist 曲线相位差 180°,判据形式也要相应调整。我建议在代码里统一用 Zg/Zvsc,并且把符号约定写在注释里,不然两周后回来看脚本自己都会懵。
3.2 实操流程:先 Bode 后 Nyquist
我一般先画 T(s) 的 Bode 图,把幅值过 0dB 的频率点全部找出来,看每个点的相位是否接近 -180°;然后再画 Nyquist 图看整体的包围趋势。Bode 图给的是频段直觉,Nyquist 给的是严格结论。
具体到弱电网场景,当 SCR 从高到低变化时,Zg 的幅值整体变大,T(s) 的幅值曲线会往上抬,0dB 交点数量可能不变,但某些交点的相位会逐渐逼近乃至越过 -180°。在 Nyquist 图上对应的表现就是曲线不断向 (-1, j0) 靠近,第一次接触的时候就是稳定边界。
判断稳定裕度时,我会同时看两个指标:一个是相位裕度,即 Nyquist 曲线穿越单位圆处的相位与 -180° 的距离;另一个是幅值裕度,即曲线穿越负实轴处到 (-1, j0) 的距离。弱电网下工程上通常要求相位裕度不小于 30°,低于这个值虽然理论上稳定,但参数稍有漂移就会落入振荡区。
3.3 别踩的坑:d-q 阻抗与正负序阻抗、矩阵特征轨迹
对于 d-q 轴阻抗矩阵,严格而稳妥的做法是画特征轨迹:计算矩阵 L(s) = Zg(s) · Zvsc^{-1}(s),在每个频率点求两个特征值,分别画它们的 Nyquist 曲线,任一条绕过 (-1, j0) 就代表存在失稳模式。这个做法虽然计算量大一点点,但在 MIMO 模型里比只盯着 Zdd、Zqq 要可靠得多。
还有一个容易踩的坑:d-q 阻抗和正负序阻抗之间的符号关系。三相系统的静止坐标正负序分量,经过同步旋转坐标变换后,在 d-q 域表现为一个正频率分量和一个负频率分量。所以在 d-q 域扫频或理论计算时,频率要扫到负值区间,例如从 -100Hz 到 +100Hz,不能只扫正频率。如果拿正负序阻抗的测试结果,直接套用 d-q 域的 T(s)=Zg/Zvsc 判据形式,两者的频率符号和相角方向约定不一样,很容易得出相反的结论。
4. 次/超同步谐振的定位与参数关联:哪些“旋钮”在控制振荡
4.1 两根谱线成对出现的机理
在 d-q 旋转坐标系里注入一个频率为 f_p 的小扰动,经 Park 逆变换回到三相静止坐标时,会同时产生 f0+f_p 和 |f0-f_p| 两个分量。反过来说,如果 d-q 域出现 f_p=+25Hz 的振荡模式,回到静止坐标后,就会同时产生 f0+f_p=75Hz 的超同步分量和 f0-f_p=25Hz 的次同步分量。
所以前面提到的“25Hz 和 75Hz 成对出现”不是两个独立的振荡源,而是同一个 d-q 域模式的两个投影。这个关系也提醒我:时域 FFT 里只要看到一个次同步峰,就应该去找对称位置的超同步峰;如果只有一个峰,多半是背景谐波而不是系统失稳。
4.2 在阻抗曲线上锁定谐振频段
定位谐振频段的方法是看 T(s)=Zg/Zvsc 的幅值和相位。在 Bode 图上,幅值 0dB 是幅值平衡点,如果该点的相位接近 -180°,就满足闭环振荡条件。最危险的频率点通常落在三个区域:一个和 PLL 带宽相关的低频带,一个和电流环动态相关的中频带,还有一个和 LCL 谐振峰相关的高频带。
弱电网下最常见的是第一类:PLL 带宽在几十赫兹,电网阻抗增大后,Zg 幅值抬升,T(s) 的 0dB 交点往低频移动,正好撞上 PLL 带来的负阻频段,于是出现 20-40Hz 左右的次同步振荡。如果振荡主频更高一些,比如接近 LCL 谐振频率,那多半是电流环和滤波器之间的耦合问题。
4.3 参数敏感性:动哪个参数最有效
我把几个关键参数对稳定性的影响整理成一个对照表:
| 参数 | 增大后的影响 | 主要失效频段 |
|---|---|---|
| 电网电感 Lg(SCR 降低) | Zg 幅值抬升,0dB 交点向低频移动,更容易撞上负阻区 | 次同步 |
| PLL 带宽 | 负阻频段加宽、负阻峰值加深 | 次同步为主 |
| 电流环带宽 | 中高频段相位裕度下降,可能激发 LCL 谐振 | 超同步/LCL 谐振频率 |
| 数字控制延时 | 高频段相位滞后加重 | 超同步为主 |
| LCL 阻尼电阻 | 谐振峰值降低,但低频负阻影响不大 | LCL 谐振附近 |
这个表在工程里的指导意义是:遇到次同步振荡先怀疑 PLL 和电网阻抗,不要一上来就调电流环;遇到超同步或接近 LCL 谐振频率的振荡,再考虑电流环带宽和阻尼问题。
4.4 有针对性的调整方向
如果 Nyquist 判据显示振荡由 PLL 相关负阻主导,比较有效的做法是降低 PLL 带宽,让负阻区收缩到更低的频率,远离 T(s) 的 0dB 交点;或者增加电网电压前馈,减小 PLL 相位扰动对调制电压的影响。如果问题出在 LCL 谐振耦合,可以增大无源阻尼电阻,或者改用有源阻尼算法,代价是效率或控制复杂度上升。
最忌讳的是只看振荡频率去乱调参数。我之前见过一个项目,次同步振荡发生后先把电流环带宽翻了一倍,结果振荡频率确实变了,但系统在另一个频点又产生新的不稳定。正确流程是先做阻抗模型,锁定负阻区和 0dB 交点的关系,再决定动哪个旋钮。
5. Simulink 仿真复现全流程:从扫频测阻抗到时域互相验证
5.1 仿真模型怎么搭
搭建 Simulink 模型时,我建议分成底层主电路和控制两部分。主电路包括三相电压源、可调的电网 RL、LCL 滤波器和 VSC 开关桥,直流侧用理想直流电压源,省去直流母线动态干扰。控制部分包括 PLL、Park 变换、d-q 轴电流 PI、SVPWM 或 SPWM。载波频率建议取 5kHz 以上,仿真步长固定为 1e-5 秒,用开关级模型而不是平均值模型。
一套典型参数可以是:额定功率 10kW,线电压 380V/50Hz,L1、L2 各取 1.5mH,Cf 取 10μF,直流电压 700V。电网电感按 SCR 需求换算:380V、10kW 对应的基准阻抗约 14.44Ω,SCR=10 时 Lg 约 4.6mH,SCR=2 时 Lg 约 23mH。所有参数集中放在一个 MATLAB 脚本里定义,Simulink 模型全部通过变量引用,不要直接在模块里填数字。
5.2 扫频阻抗测量细节
阻抗扫频的核心思想是在端口处注入一个已知频率的小扰动,测量同频的电压、电流响应,从而算出该频率下的阻抗。具体到 d-q 轴模型,要得到完整的 2×2 阻抗矩阵,需要分别在 d 轴和 q 轴各注入一次电压扰动,并同时测 d/q 两轴电流响应。
单次扫频流程如下:先让系统稳定运行在额定工作点,等待直流电压、PLL、电流环全部进入稳态;然后向 d 轴电压指令叠加一个小幅正弦扰动;等暂态衰减后,取最后一个完整扰动周期,用单频 DFT 提取 PCC 电压和并网电流在该频率的幅值、相位。
d 轴注入时,测量 d/q 轴电流响应得到导纳矩阵第一列;q 轴注入时得到第二列;最后对导纳矩阵求逆得到阻抗矩阵 Z_vsc。扰动频率建议从 -100Hz 扫到 +100Hz,步长 1Hz 左右,在预计谐振频率附近加密到 0.5Hz。单点扰动幅值取额定电压幅值的 1% 到 3% 比较合适,太小会被开关纹波淹没,太大会触发控制器限幅。
每个频率点仿真前都要留出足够的暂态时间,我通常让系统先运行 0.5 秒再开始取数,然后取最后 10 个扰动周期做 DFT。采样数据要保证是整数个周期,否则会有频谱泄漏。DFT 提取可以写成这样:
% 单频DFT提取(取最后一个完整扰动周期) fp = 25; % 当前扰动频率,单位Hz fs = 100e3; % 采样率 N = round(fs / fp); % 一个扰动周期的采样点数 t_win = t(end-N+1:end); sig = data(end-N+1:end, :); X = 2 / N * sum(sig .* exp(-1j * 2 * pi * fp * t_win'), 1);提示:每个频点先跑 0.5 秒暂态,取最后 10 个扰动周期做 DFT,并确认窗口长度是整数个周期,否则幅值和相位都会偏。
5.3 稳定与失稳的对照实验
为了验证 Nyquist 判据的结论,我做了两组仿真对照。第一组 SCR=10,理论模型显示稳定裕度充足;时域里把功率从 0 缓慢升到额定,PCC 电压和电流全程平稳,FFT 中除了基波只有少量背景谐波。第二组把 SCR 调到 2,理论模型显示 T(s) 的 Nyquist 曲线已经逼近甚至绕过 (-1, j0);时域里功率升到某一档后,电流开始出现固定频率的等幅振荡,FFT 频谱清晰地出现次同步和超同步两根峰。
把两组仿真时域 FFT 的振荡频率和理论模型预测的临界频率对比,误差一般在 3% 以内。这一步很有价值:它证明阻抗建模和 Nyquist 判据不只是一堆公式自洽,而是真实反映非线性开关模型的行为。
5.4 理论曲线与扫频曲线的对比方法
我更推荐的做法是把理论阻抗表达式和扫频测量结果画在同一张 Bode 图上。两者吻合的部分说明模型可信,偏差大的频段通常就是简化假设失效的地方,比如接近 LCL 谐振频率或者扰动幅值过大进入非线性区。
如果扫频结果在某个频段始终和理论曲线对不上,先别急着怀疑公式,先检查扫频程序本身:用一组纯 RL 电路做同样的扫频流程,验证测出来的阻抗是否等于 R + jωL。这一步能快速区分是建模问题还是测量程序问题。
6. 仿真与理论对不上时的排查思路与个人体会
6.1 三种最常见的“对不上”
第一种是低频段扫频结果和理论曲线相差很大。低频段对应的扰动周期很长,仿真要跑到稳定需要很久,如果还没进入稳态就开始取数,电压电流的相位就不准。解决方法是在单频 DFT 前后取两个相邻周期窗做一致性检查,偏差大就继续延长暂态时间。
第二种是 Nyquist 判据说稳定,时域仿真却振荡。这时候要检查是不是只拿阻抗矩阵的对角元素做了判据。d-q 轴的耦合项在弱电网下可能很大,忽略 Zdq、Zqd 会低估失稳风险。改用特征轨迹判据后,问题往往就消失了。
第三种是理论临界频率和时域振荡频率接近但不完全一致,而且每次仿真的起始阶段都有一小段剧烈暂态。这通常不是理论错误,而是模型初始化问题:PLL 初值、PWM 载波相位、控制器积分器初值没设好,导致仿真开始瞬间有冲击,把系统推进了非线性区。尽量让变流器从空载缓启动,别一上来就带功率运行。
6.2 我的排查顺序
遇到对不上的情况,我按四步排查:先检查稳态工作点,包括直流电压、输出功率、电流 d/q 分量是否和理论设定一致;再校验扫频程序,用纯 RL 电路验证测阻抗的幅值和相位;接着检查 Nyquist 判据的细节,确认是用完整矩阵还是对角近似;最后才是调整仿真模型细节,比如固定步长、PWM 采样方式、死区设置。
这套顺序让我少走很多弯路。特别是第二步,纯 RL 电路验证几乎能排除一半的“假理论偏差”,因为扫频程序的符号、FFT 窗口、相位参考一旦有错误,在 VSC 模型里很难凭肉眼发现,但在纯 RL 电路里一眼就能看出来。
6.3 实操体会与建议
我的体会是,阻抗建模这个方向真正花时间的地方不是公式推导,而是保持“理论、扫频、时域”三者的一致性。强烈建议做一个参数脚本统一驱动所有环节,建模脚本、扫频脚本、时域仿真模型共用同一个参数文件,这样改一个参数,三个环节同步更新,不会出现理论用的是 SCR=2 的阻抗,时域模型还是 SCR=5 的尴尬。
还有一个细节值得记下来:d-q 阻抗矩阵在弱电网下非对角元素非常大,不要一开始就做“忽略耦合项”的简化。先把完整模型跑通,再用耦合项的幅值大小决定能不能简化,比反过来从简化模型开始补耦合要省时间。
另外,扫频测量里的扰动幅值强烈建议从小到大试一档。幅值取 1% 时信号可能被开关纹波干扰,取 5% 时又可能触发电流限幅。务实做法是同一频点用三档幅值各测一次,结果稳定一致才记录,不一致就说明该频点已经进入非线性区,数据要用更小的幅值重测。
最后说一句我自己的感受:弱电网下的稳定性问题,最迷惑人的地方就是振荡频率不会正好等于滤波器谐振频率,而是躲在控制回路和电网阻抗共同造出来的某个频带里。阻抗模型的价值就在这里——它把这种隐蔽的耦合关系变成一条可以扫出来的 Nyquist 曲线,仿真验证只是把这条曲线翻译回时域的电流波形。把这个链路走通之后,再遇到类似振荡,你会有一种“看得见”的感觉,而不是反复试参数碰运气。