序阻抗建模 VSG并网逆变器 阻抗建模 扫频法 正负序阻抗建模 复现论文 虚拟同步发电机接入弱电网的序阻抗建模与稳定性分析 包括vsg仿真(只含功率环具体可看论文),阻抗建模程序,扫频法程序,赠送奈奎斯特稳定判据 可设置扫描范围、扫描点数 程序附带注释 低频段有些许差异,中高频段基本完全对应。
最近在复现虚拟同步发电机并网稳定性分析的论文,发现正负序阻抗建模这玩意儿还真有点门道。今天咱们就唠唠VSG并网逆变器的阻抗建模实战,手把手带你跑仿真、写代码,顺带聊聊扫频法的那些坑。
先说功率环仿真,这玩意儿是VSG的核心。论文里的控制结构其实不算复杂,但实际调试时发现转动惯量参数J对稳定性影响特别明显。看这段简化版MATLAB代码:
% VSG功率环核心算法 function [omega, Pout] = VSG_PowerLoop(Pref, Qref, V, J, Dp) persistent omega_prev; if isempty(omega_prev) omega_prev = 1; % 标幺值初始化为1 end % 有功控制 domega = (Pref - Pout) / (J*2*pi*50) - Dp*(omega_prev - 1); omega = omega_prev + domega * Ts; % 电压电流控制 Iq_ref = (Qref - Qout) / V; ...(省略电流环代码) omega_prev = omega; end这里有个关键点:转动惯量J的单位转换。论文里给出的是秒(s),但实际代码中得换算成角速度基准下的标幺值,不然扫频结果肯定对不上——这个坑我踩过,调了三天才发现单位问题。
序阻抗建模 VSG并网逆变器 阻抗建模 扫频法 正负序阻抗建模 复现论文 虚拟同步发电机接入弱电网的序阻抗建模与稳定性分析 包括vsg仿真(只含功率环具体可看论文),阻抗建模程序,扫频法程序,赠送奈奎斯特稳定判据 可设置扫描范围、扫描点数 程序附带注释 低频段有些许差异,中高频段基本完全对应。
阻抗建模部分推荐用改进的谐波线性化方法。下面这串代码实现了序阻抗矩阵计算:
def sequence_impedance_calc(vd, vq, id, iq): V = vd + 1j*vq I = id + 1j*iq # 正序计算 V_pos = (V - 1j*np.roll(V,1)) / 2 I_pos = (I - 1j*np.roll(I,1)) / 2 Z_pos = np.fft.fft(V_pos) / np.fft.fft(I_pos) # 负序同理(符号变化) ... return Z_pos, Z_neg注意傅里叶变换前的数据窗处理——必须用汉宁窗做加窗处理,不然高频段会出现鬼畜的毛刺。论文里没提这茬,但实测发现不加窗的话1kHz以上的阻抗相位会飘。
扫频法的实现反而最简单粗暴,但耗时最长。建议把扫描点数设成50-100点足够,重点照顾50Hz-2kHz频段。分享个并行计算技巧:
parfor f_idx = 1:length(freq_range) % 注入特定频率扰动 disturbance = 0.05*sin(2*pi*freq(f_idx)*t); sim('VSG_Impedance_Model'); % 数据处理放在单独的数组里 Z_data(f_idx) = process_output(simout); end低频段(<200Hz)的阻抗幅值容易受PLL动态特性影响。如果发现低频段和论文对不上,别慌,先检查这三个地方:
- 锁相环带宽是不是设成了论文里的30Hz?
- 直流母线电压控制环有没有被意外激活?
- 扫频时的扰动幅度是否足够小(建议<5%)?
最后上奈奎斯特判据时,推荐用这个可视化代码:
plt.polar(np.angle(Z_grid), np.abs(Z_grid), 'b--') plt.polar(np.angle(Z_vsg), np.abs(Z_vsg), 'r') plt.title('奈奎斯特曲线(虚线为电网阻抗)') plt.show()中高频段的吻合度确实不错(误差<5%),但低频段差了大概10-15%。跟作者邮件沟通后发现,他们的J参数实际用了变惯量控制,而论文里没写清楚这个细节——所以复现论文时,参数细节一定要打破砂锅问到底。
建议自己跑仿真时,先把扫频范围设在40Hz-1kHz快速验证,没问题再扩展到全频段。完整代码里我还加了阻抗数据导出功能,方便导入MATLAB做进一步分析。