
这两年我做新能源并网仿真最深的体会之一就是很多看似诡异的振荡问题最后都能归到阻抗这两个字上。有一次复现光伏逆变器低电压穿越工况电流波形突然出现28Hz左右的剧烈振荡我调了好几轮电流环PI参数都没用。最后把逆变器输出阻抗和电网侧等效阻抗画在同一个Bode图里才发现这两条曲线在28Hz附近幅值几乎交叉相位差接近180度——典型的弱电网耦合失稳。从那以后阻抗建模和扫描验证就成了我做电力电子并网研究的固定动作。这篇文章我想把这套方法完整梳理一遍覆盖三块内容常见并网逆变器两电平和三电平的阻抗建模要点、双馈风机和MMC这类复杂装备的建模差异以及用仿真做阻抗扫描验证的完整流程和踩坑经验。适合正在做新能源并网稳定性分析、变流器控制设计或者刚接触阻抗法想快速上手的工程师。我会尽量把为什么这样做讲透而不是只给结论。1. 阻抗建模到底在做什么从一次振荡排查说起1.1 为什么不用传统的特征值法我刚接触稳定性分析时默认思路是特征值法把逆变器、PLL、滤波器、线路、电网全部写成状态方程然后在运行点线性化求解状态矩阵A的特征值。这个方法理论上是完备的但工程上很难落地。首先是参数问题。一个风电场几十台风机每台变流器有电流环PI、PLL带宽、滤波器参数电网侧还有变压器、线路、SVG把这些参数全部拿到手本身就是一场灾难。而且设备厂商往往只给接口模型内部控制器细节是保密的特征值法需要把整个系统摊开这在跨单位协作时基本走不通。其次是可解释性问题。特征值法算完给你一堆特征根很多根的物理意义不直观尤其当系统有几十个振荡模态时很难快速定位是哪个环节在使坏。相比之下阻抗法只关心一个东西从某个端口看进去设备的动态阻抗是什么。这个量可以直接测量可以直接画Bode图可以让电网工程师和设备工程师用同一张图沟通。1.2 阻抗稳定判据的直觉理解阻抗法判断稳定性的核心逻辑不复杂。把变流器看作一个诺顿或戴维南等效源输出阻抗是Z_dev(s)电网侧从公共连接点看进去的等效阻抗是Z_g(s)。在整个闭环回路里稳定性取决于Z_dev(s)Z_g(s)的零点是否都在左半平面。等价地可以看Z_g(s)/Z_dev(s)这个回比函数是否满足奈奎斯特判据。我通常直接用Bode图判断如果Z_dev和Z_g的幅值曲线在某频段相交同时该频段的相位差接近180度那就说明可能存在负阻尼或低阻尼模态需要干预。这个判断方法虽然不如完整奈奎斯特曲线严谨但工程上足够快尤其在扫频验证阶段能快速锁定风险频段。1.3 为什么逆变器、双馈风机、MMC要分开讨论阻抗建模的难点在于不同设备的内部动态差异非常大。普通两电平逆变器主要是控制环和滤波器模型相对简单三电平NPC逆变器多了中点电位动态双馈风机有绕线异步电机转子侧和定子侧通过转差率强耦合MMC有几十上百个子模块电容和桥臂环流内部自由度远超普通变流器。这些差异会在端口阻抗曲线上留下明显特征建模时如果处理不好扫频验证就永远对不上。所以下面分开讲。2. 逆变器阻抗建模两电平与三电平的差异没有想象中大2.1 逆变器阻抗建模的基本框架逆变器阻抗建模本质上做的事情是在工作点附近给电压加一个微小扰动看电流如何响应把这个响应关系写成2x2的导纳或阻抗矩阵。三相系统在dq同步旋转坐标系下电压电流扰动的关系是[ΔV_d] [Z_dd(s) Z_dq(s)] [ΔI_d] [ΔV_q] [Z_qd(s) Z_qq(s)] [ΔI_q]其中Z_dd(s)和Z_qq(s)是自阻抗Z_dq(s)和Z_qd(s)是耦合阻抗。PLL的存在会让这两个耦合项变得很重要尤其是当PLL带宽和电流环带宽接近时耦合项会显著影响稳定裕度。我建模时的标准流程是这样的写出主电路方程包括滤波电感、电容、电网电压、变流器输出电压变换到dq坐标系。写出控制器方程包括电流内环PI、电压外环如果有、PLL动态、前馈解耦项。把PLL输出的相位扰动也当成状态变量因为它会改变Park变换的旋转角度。将上述方程在稳定运行点做小信号线性化消去中间变量最后得到端口阻抗或导纳矩阵。这个流程可以用手推但更高效的办法是先在Simulink里搭好平均模型用线性化工具直接提取状态矩阵再转换成阻抗矩阵。手推适合理解物理机制仿真线性化适合实际工程验证。两者我建议都做后面讲扫描验证时会看到为什么理论阻抗和扫描结果需要互相印证。2.2 两电平逆变器时序与死区对阻抗的间接影响两电平逆变器每相只有一个桥臂上下两个开关管互补导通。以A相为例T1导通时输出端接到直流正母线输出电压为Vdc/2相对直流中点T2导通时输出端接到直流负母线输出电压为-Vdc/2。这就是两电平这个名字的由来——相电压只有两个电平。时序上要注意的是死区时间。为了防止上下管直通必须在T1关断和T2导通之间插入一小段死区典型值1到3微秒。死区会让实际输出电压相对调制波产生偏差等价于在输出回路里注入了一个方波扰动电压。这个扰动在阻抗模型里的直接影响不大但如果死区太大会导致低频谐波增加和相位偏移扫频验证时和理论模型出现小幅偏差。我在仿真模型里通常把死区设置为1.5微秒左右如果扫频结果和理论阻抗在高频段有系统性偏差会先检查死区设置。两电平逆变器的阻抗特征在低频段主要由电流环带宽和PLL带宽决定在中频段由滤波器谐振点决定在高频段由开关延时和采样延时决定。特别是在LCL滤波器情况下谐振峰附近阻抗幅值会有明显陡升和电网阻抗交叉时容易产生谐波振荡这是设计时必须重点关注的频段。2.3 三电平NPC逆变器硬件差异和控制复杂度三电平NPC逆变器每相多了一对钳位二极管和两个额外的开关管。单相结构是四个开关管T1~T4串联中点通过D1、D2接到直流母线电容中点。它的相电压有三个电平T1和T2同时导通时输出Vdc/2T2和T3导通时输出0通过钳位二极管接中点T3和T4导通时输出-Vdc/2。从硬件成本看三电平确实更贵。IGBT数量翻倍还需要钳位二极管驱动电路也更复杂。但贵得有道理每个开关管承受的电压应力只有两电平的一半所以可以用耐压等级更低的器件输出谐波含量明显降低THD可以做到比两电平低40%到50%滤波电感体积和成本能省回来一部分。还有一个工程上很实用的优势——电压变化率dv/dt更小对电机绝缘和电缆的应力更友好。从阻抗建模的角度看三电平和两电平的平均模型层面的端口阻抗几乎一致。差异主要集中在三部分一是中点电位动态。NPC逆变器的中点电流会导致直流侧上下电容电压不平衡这个动态会通过调制波影响输出电压属于一个额外的状态变量。在阻抗模型中如果直流侧是理想电压源且中点电位控制很好这部分影响可以忽略但如果直流侧有较大的二次纹波忽视中点动态会导致低频段阻抗计算错误。二是调制策略。三电平常用空间矢量PWM或载波移相PWM还会叠加上中点平衡控制、零序电压注入等算法。不同调制策略对低频阻抗影响不大但会影响开关频率附近的谐波分布。在做阻抗扫描验证时开关频率附近的阻抗测量值对调制方式很敏感要和理论模型对了才知道你的调制模型建得对不对。三是控制带宽。三电平逆变器经常用于中高压大容量场合开关频率相对较低通常1kHz到4kHz控制带宽做不上去。这就导致高频段的阻抗特性比两电平更快进入电感主导区扫频时要把这个频段单独标出来看。2.4 关于智能逆变器与传统逆变器阻抗的区别现在提智能逆变器的产品很多本质是在传统逆变器基础上增加了更强的通信、在线监测和自整定功能。从阻抗建模角度看多出来的算法比如主动阻尼、自适应PLL参数、阻抗重塑会改变控制器的传递函数。比如有的智能逆变器会实时检测电网阻抗并自适应调整PLL带宽。这种策略会让阻抗曲线随工作点明显变化不再是固定的一组曲线。建模时要特别小心不能把一套固定参数的模型套到自适应算法上扫频验证时也需要分多种电网短路比工况来测。3. 双馈风机阻抗建模转差率、转子绕组和双变流器耦合3.1 双馈风机为什么不能直接套用逆变器模型双馈风机的拓扑是风轮通过齿轮箱拖动绕线转子异步发电机定子绕组直接接电网转子绕组通过背靠背变流器转子侧RSC加网侧GSC接电网。这意味着电网同时通过两条路径给风机注入能量一条是定子直接相连另一条是转子经过变流器相连。这个结构和普通光伏逆变器有本质区别。普通逆变器只有一个电压源接口而双馈风机是异步电机定子回路转子变流器回路并联。定子回路的阻抗与转差率有关转子回路的阻抗受RSC控制影响两者在电气上通过磁链耦合在一起。如果只把RSC当成一个普通逆变器来建模忽略异步机的机电耦合得到的阻抗在工频附近可能差得很远。3.2 转差率对阻抗的影响转差率s(n1-n)/n1其中n1是同步转速n是转子转速。当风速变化时转差率在一个范围内变化例如从-0.3超同步到0.3次同步。转子侧电压和电流的频率是转差频率s*f1所以转子回路的等效阻抗折算到定子侧时会有一个除以s的因子。转速越低s越大转子回路阻抗的等效值越小风机对电网呈现的阻尼特性越差。这个现象在次同步频段特别突出。双馈风机在次同步频率附近可能表现出负电阻特性本质原因是异步机的转差特性加上RSC的定子电压定向控制使得功率扰动在次同步频段形成正反馈。这也是早期双馈风电场发生次同步振荡的主要机理之一。阻抗建模时如果忽略转差率变化把转速当常数在工频附近问题不大但在次同步频段会明显低估负阻尼风险。3.3 双馈风机阻抗建模的状态空间路线我给双馈风机建阻抗模型的流程如下建立异步电机的五阶或三阶模型磁链方程加运动方程坐标放在定子电压定向或定子磁链定向的旋转坐标系下。建立RSC和GSC的控制器模型。RSC通常采用转子磁链定向或定子电压定向的矢量控制内环是转子电流外环是有功/无功或转速/端电压控制GSC通常是电网电压定向控制直流母线电压和网侧无功。把直流母线电容动态、PLL动态、滤波电感动态全部纳入状态空间。在稳定运行点线性化消去内部状态变量得到从定子端口看进去的导纳矩阵再取反得到阻抗矩阵。这一步的关键是定子端口看到的是电机定子绕组RSC转子侧折算阻抗GSC并联阻抗的综合效果不是单纯某一路的阻抗。此外GSC侧的L滤波器阻抗会和高频分量叠加扫频时如果只关注低频稳定性GSC的带宽通常高于RSC在次同步频段它的贡献相对较弱可以简化但如果关心谐波谐振GSC路径就必须保留。3.4 双馈风机阻抗曲线上的典型特征双馈风机阻抗曲线上有几个标志性特征在PLL带宽附近通常5到30Hz会出现负电阻区域在转差频率对应的频段会有明显的相位跳变在GSC滤波谐振频率附近会有幅值尖峰。如果控制器的转子电流环带宽设定在50到100Hz那么在这个范围内阻抗幅值相位会有明显波动。扫频验证双馈风机模型时我特别建议多测几个运行点次同步转速、同步转速、超同步转速各取一个点。因为阻抗随转差率变化很大只测一个转速点容易得出误导性结论。4. MMC阻抗建模模块化拓扑带来的额外状态4.1 MMC为什么难建模MMC和两电平VSC最大的区别是内部自由度极高。每个桥臂有几十上百个子模块每个子模块有电容加上桥臂电抗和环流控制整个系统的状态变量数量比两电平VSC多一到两个数量级。如果用全细节模型做小信号线性化状态矩阵的规模会非常庞大而且很多子模块的动态频率相近数值上容易出现病态。从物理上看MMC的桥臂电流可以分成两部分输出到交流侧的外特性分量和在三相桥臂之间流动的环流分量。环流不直接出现在交流端口但会通过子模块电容电压波动影响输出电压所以端口阻抗里包含了环流动态的影子。这个内部动态映射到端口的现象是MMC阻抗区别于普通VSC的核心。4.2 用平均值模型做阻抗计算工程上我给MMC建阻抗模型第一步用平均值模型而不是开关模型。平均值模型把每个桥臂等效成一个受控电压源电压等于该桥臂所有子模块电容电压的平均值乘以投入系数。这样做可以保留子模块电容电压波动和环流动态但把开关高频分量抹平了。平均值模型的状态变量包括六个桥臂的电容电压波动、桥臂电流、直流侧电压、控制环状态变量。环流抑制控制器CCSC会额外增加状态。把所有这些方程线性化之后消去内部变量就能得到从交流端口看进去的阻抗。一个关键参数是桥臂等效电容。对于每个桥臂N个子模块的MMC桥臂等效电容是Csm/N子模块电容串联等效。这个值通常比普通VSC直流侧电容小得多因此MMC的阻抗在高频段的容性特征比两电平VSC更明显。4.3 谐波状态空间HSS方法的必要性平均值模型线性化会丢掉一类重要信息MMC本身是周期时变系统。子模块电容电压的基频和二倍频波动会让端口阻抗出现频率耦合效应——你在端口注入一个频率f的扰动响应里会出现f±f1、f±2f1等频率的分量。这种耦合效应在普通两电平VSC里也存在由PLL和锁相引起但在MMC里因为电容电压波动大耦合更强。如果只关注稳定性主频段忽略频率耦合误差不大。但如果要分析谐波谐振、次同步振荡和宽频振荡建议用谐波状态空间HSS方法。HSS的基本思路是把周期时变系统通过Fourier级数展开变成无穷维的定常系统然后取有限阶截断。它能把MMC内部各次谐波分量的耦合关系显式表达出来得到的阻抗矩阵不再是2x2而是(2N1)x(2N1)的扩展矩阵其中N是考虑的谐波阶数。HSS建模对数学功底要求比较高但现代电力电子研究里已经有比较成熟的工具链例如MATLAB的Control System Toolbox配Harmonic State Space工具箱。我的建议是先做平均值模型线性化的2x2阻抗再在关键频段用HSS对比验证如果工程精度要求不高2x2阻抗加上频段标记就够用了。4.4 MMC阻抗曲线的典型形态和控制参数影响MMC的端口阻抗典型形态是低频段几赫兹到几十赫兹主要由电流环、PLL和环流抑制控制器决定中频段几十赫兹到几百赫兹会出现由桥臂电感和等效电容产生的谐振峰高频段上千赫兹受子模块电容和调制策略影响。控制参数对阻抗的影响很有规律PLL带宽增大低频段负电阻区域范围扩大稳定裕度下降环流抑制控制器带宽增大中频段的谐振峰幅值下降电流环带宽增大低频段阻抗幅值减小但相位滞后加重。这些规律在扫频验证时都可以直接观察到是检验模型正确性的好抓手。5. 阻抗扫描验证的完整实操流程5.1 扫频验证的基本原理阻抗扫描验证的思路非常直白在PCC处注入一个已知频率的小扰动测量该频率点电压和电流的响应两者相除就是该频率处的阻抗。把频率从低到高扫一遍就能得到阻抗的Bode图。扰动注入有两种标准方式串联电压扰动在PCC和电网之间串入一个理想电压源源输出为基波电压小信号正弦电压。适合测量设备侧阻抗。并联电流扰动在PCC处并联一个理想电流源输出为基波电流小信号正弦电流。适合测量电网侧阻抗因为电流源对电网运行点影响小。我建议做仿真验证时交流和直流侧分别都要扫。交流侧用正序单频扰动直流侧用共模电压扰动。后者对MMC这类带直流电容的设备特别重要。5.2 仿真设置和步骤一次完整的扫频验证步骤大致如下搭建电磁暂态仿真模型PSCAD/Simulink/Matlab均可保证运行点准确。运行点包括交流母线电压幅值、有功功率、无功功率、直流电压。双馈风机还要加转速和风速。把系统先运行到稳定状态。风电和光伏模型一般需要1到2秒的启动过渡时间。在PCC处插入扰动源。我用的是串联理想电压源基波电压设为0只输出扰动分数ΔV Asin(2πf_p*t)A取额定电压幅值的1%到3%。设定扫频序列。频率范围从1Hz到5000Hz按对数间隔取30到60个频点。频点太密仿真时间很长太疏会漏掉谐振尖峰经验值是每十倍频程取8到12个点。在每个频点等扰动注入后的暂态衰减完通常3到5个扰动周期再开始记录数据。记录长度至少包含10个扰动周期便于FFT分辨。对记录的电压和电流做FFT提取扰动频率f_p处的幅值和相位。计算Z(f_p)V_f_p/I_f_p得到该频点的阻抗复数值。换下一个频点循环直到扫完所有频点。对三相系统还涉及正负序分离。三相平衡情况下注入正序扰动并提取正序响应得到正序阻抗注入负序扰动得到负序阻抗。实现上可以在三相中注入三相对称正弦正序或两相相位互换负序然后对三相电压电流做对称分量变换。5.3 关键参数参考表我把常用仿真扫频参数整理如下可以直接复用参数建议取值说明扫频范围1Hz~5000Hz关注次同步振荡时下限降到0.1Hz扫频点数30~60点对数分布每十倍频程8~12点扰动幅值额定电压幅值的1%~3%太大会非线性太小会被噪声淹没记录时长至少10个扰动周期越长FFT越精确仿真步长2~5微秒电磁暂态模型要求FFT窗函数Hanning窗减少频谱泄漏运行点至少测3个功率等级20%、60%、100%额定功率5.4 扫频脚本示例下面是一个用MATLAB控制Simulink模型做扫频的伪代码框架核心思路是用sim命令批量跑不同频点然后自动提取FFT结果freqs logspace(0, log10(5000), 50); % 1Hz~5000Hz Z_results zeros(length(freqs), 1); for k 1:length(freqs) fp freqs(k); % 设置扰动源频率 set_param(mymodel/PerturbationSource, Frequency, num2str(fp)); % 运行仿真记录PCC电压电流到工作区 simOut sim(mymodel, StopTime, num2str(3 20/fp)); v simOut.get(v_pcc); i simOut.get(i_pcc); % 去除前几个周期的暂态 fs 1/simOut.tout(2); n_start round(3 / simOut.tout(2)); v v(n_start:end); i i(n_start:end); % FFT提取 Vf fft(v .* hann(length(v))); If fft(i .* hann(length(i))); idx round(fp / fs * length(v)) 1; Z_results(k) Vf(idx) / If(idx); end figure; subplot(2,1,1); semilogx(freqs, 20*log10(abs(Z_results))); subplot(2,1,2); semilogx(freqs, angle(Z_results)*180/pi);这里有个细节FFT索引要把基波滤掉因为基波分量远大于扰动分量会在频谱上淹没邻近频点。通常先对信号做带通滤波或减去基波分量再做FFT。我在脚本里用的是加窗后直接取目标频点只要目标频点和基波频率不冲突结果也能用。6. 扫频验证中的典型坑与排查经验6.1 FFT频谱泄漏和相位不准扫频验证最容易翻车的环节是FFT。如果记录时长的整数倍不匹配扰动频率周期FFT会泄漏频谱导致目标频点幅值偏低、相位偏移。解决方法是加Hanning窗并且尽量保证记录时长是扰动周期的整数倍。实际中我常用记录20个扰动周期这个规则配合Hanning窗实测下来幅值误差可以控制在1%以内。6.2 扰动幅值太小没信号太大非线性扰动幅值这个参数很微妙。太小了仿真里的数值噪声和开关纹波会淹没扰动信号高频段尤其明显太大了变流器进入非线性区限幅器、PLL的非线性都会出来测出来的阻抗不再是小信号阻抗。我通常先做一次预扫看看目标频点电压电流的信噪比如果FFT幅值比背景噪声高两个数量级这个幅值就是合适的。对于不同功率等级建议扰动幅值按比例调整。6.3 运行点漂移长仿真带来的隐患每个频点仿真时长不一低频段频点比如1Hz需要跑几十秒才能记录到足够的扰动周期。这么长的仿真时间里风速、光照或控制器的积分器可能会让运行点慢慢漂移导致测得的阻抗对应的是多个运行点的混合结果。解决办法是把扰动源和运行点设定做成闭环比如用可控电流源维持PCC功率恒定或者把外部输入风速、光照设为常数并检查仿真结束时和起始时功率偏差在1%以内。6.4 离散化步长和开关延时对高频段的影响仿真步长会直接影响高频段阻抗的精度。电磁暂态模型步长一般取5微秒对应的奈奎斯特频率是100kHz远高于我们关心的扫频上限5kHz理论上够用。但要注意变流器控制器的采样延时——数字控制通常一拍延时加零阶保持会在高频段增加一个等效相位滞后。这个延时在理论阻抗模型里如果没有建模扫频结果在高频段会有明显的相位偏差。检查方法是把理论模型中的采样延时从1.5拍改成1.0拍看高频段曲线是否匹配。6.5 正负序分离时的常见错误正序和负序的扫频扰动需要分开注入。有些初学者只做正序扫频然后把三相平衡条件下的正序阻抗当成全部阻抗忽略了负序阻抗在电网不对称故障时的重要性。实际操作中负序阻抗要单独注入负序扰动来测。还有一种错误是把频率正负号搞反——负序扰动在abc坐标系下是b相滞后c相如果搞反了提取出来的相位会差180度。6.6 MMC模型扫频太慢均值模型和全细节模型的配合MMC全细节模型仿真速度很慢几十个子模块加高频调制一个频点可能要跑很久。我的做法是第一次扫频用平均值模型跑速度快能快速锁定谐振频率和危险频段然后在谐振尖峰附近用全细节模型做精细化扫频验证均值模型的结论。这样既保证效率又保证精度。如果要对散射现象做研究HSS模型可以代替全细节模型完成大部分频点验证。6.7 理论模型和扫描结果对不上的排查顺序我的经验是当理论阻抗和扫描结果对不上时按这个顺序排查先看低频段1~50Hz。对不上基本是PLL模型问题检查PLL带宽、阻尼比和相位扰动是否完整建模。再看中频段50~500Hz。对不上大概率是电流环PI参数、采样延时或前馈增益的问题。再看高频段500Hz以上。对不上优先查滤波器参数、离散化步长和调制策略。如果全频段都有系统性偏差回头检查运行点是否一致特别是无功出力是否相同。我遇到最多的情况是理论模型忘了包含PLL的相位扰动对Park变换的影响导致低频段相位差20到30度这个偏差在稳定性判据里已经足以改变结论。7. 从阻抗曲线到稳定性判据完整的分析闭环扫描验证得到阻抗曲线后下一步是把理论模型和扫描结果叠在一起看。如果两者在关注频段内幅值差小于3dB、相位差小于10度这个阻抗模型就可以拿去用了。然后让设备阻抗和电网阻抗做奈奎斯特判据或者简单看Bode图交叉点确定稳定裕度。在实际项目中我会用这套流程做参数敏感性扫描把PLL带宽、电流环带宽、滤波器参数各自上下调20%看阻抗曲线变化方向判断哪个参数对稳定性影响最大。这个信息比单纯给结论有用得多因为控制器厂商拿到后能直接做参数优化。我个人做这套东西最大的体会是阻抗建模和扫描验证必须当成一个整体工程来做。先搭好扫频脚本和阻抗提取工具再去推理论模型——不然理论模型算完发现仿真口径不一致返工成本很高。扫频脚本本身花不了多少时间但能让你后续每个模型、每个参数、每个运行点都能快速出曲线这是效率最高的路径。最后再分享一个小技巧给所有阻抗曲线加上运行点和控制参数的标签再存档。半年后回看你的阻抗数据时一张带着完整工况信息的曲线比一张光秃秃的Bode图有价值得多。这也是我从几次曲线对不上、翻记录才发现参数不一致的经历里总结出来的教训。