模块化多电平变流器/MMC/的VSG控制/虚拟同步发电机控制/MATLAB--Simulink仿真模型 5电平三相MMC,采用VSG控制。 受端接可编辑三相交流源,直流侧接无穷大电源提供调频能量。 设置频率波动和电压波动的扰动,可以验证VSG控制的调频调压效果

最近在搞MMC的VSG控制仿真,发现这玩意儿调起来真是酸爽。今天咱们就拿5电平三相MMC开刀,用MATLAB-Simulink搭个能抗频率电压波动的VSG系统。先说重点:这套系统直流侧直接怼了个理想电源当能量池,交流侧接的可编程三相源能随便改参数造故障,方便咱们验证VSG的调节能力。

先看主电路结构(图1)。MMC每个桥臂4个子模块,上下桥臂各两个,电容电压均衡策略直接用的最近电平逼近。重点是这个VSG控制模块------它得模拟同步发电机的机械特性。核心代码部分长这样:
matlab
function [E_ref, theta] = VSG_Controller(P_set, Q_set, V_meas, f_meas)
persistent J D Kp_V Kq_f;
if isempty(J)
J = 0.2; % 虚拟转动惯量
D = 5; % 阻尼系数
Kp_V = 0.05; % 电压调节系数
Kq_f = 0.8; % 频率调节系数
end
% 有功-频率下垂
delta_f = (P_set - P_meas)/Kq_f;
omega = 2*pi*(50 + delta_f) - D*(omega - 2*pi*f_meas)/J;
% 无功-电压下垂
E_ref = V_set + (Q_set - Q_meas)*Kp_V;
theta = cumsum(omega)*Ts; % 相位积分
end
这段代码实现了VSG的核心算法,J和D这两个参数直接决定系统惯性。J值调太小的话系统响应快但容易震荡,D值太大虽然稳定却会导致调节速度变慢,建议先按同步发电机典型参数试,再微调。

仿真里设置了两个狠活儿:1秒时给交流源突然加5Hz频率扰动,1.5秒时甩20%电压跌落。看波形的时候重点盯住PCC点的电压和频率曲线(图2)。没VSG的时候系统直接崩了,有VSG的情况下频率在0.3秒内拉回50Hz,电压恢复时间大概0.5秒------这说明转动惯量参数起作用了。

子模块电容电压均衡是个容易翻车的地方。这里用了排序法均压,代码里有个骚操作:把子模块投切状态和电容电压打包成结构体,用冒泡排序搞定。虽然算法简单,但实测在5电平下完全够用:
matlab
function [SM_States] = Balance_SM(SM_Voltages, I_arm)
[~, index] = sort([SM_Voltages], 'descend');
if I_arm > 0
SM_States = index(1:ceil(numel(index)/2)); % 上桥臂投入
else
SM_States = index(end-floor(numel(index)/2)+1:end); % 下桥臂投入
end
end
这个排序逻辑妙在同时考虑了电流方向和电压均衡。实际跑起来电容电压波动控制在±3%以内,比那些花里胡哨的预测算法也不差。
最后说个坑:Simulink的变步长求解器在MMC仿真里容易炸。建议固定步长50us,用ode3算法。仿真跑完后别急着关,用Workspace里的数据画个三维相图(图3),能直观看到VSG在功率振荡时的阻尼效果------那些螺旋收敛的轨迹线就是阻尼系数D在发力。
这套模型文件我扔GitHub了,需要调试的兄弟注意两点:1. 别动步长;2. 改VSG参数时记得J和D要配对调。下次咱们聊聊怎么把这个VSG控制移植到FPGA上跑实时仿真。