MMC整流器仿真模型 MMC模型预测控制仿真 基于Matlab/Simulink仿真平台 模型中包含环流抑制控制器 模型中添加基于排序算法的子模块均压方法 采用基于最近电平逼近NLM的调制策略 1.仿真均能正常运行,能够准确跟踪对应参考值 2.最近电平逼近调制+基于排序算法的均压策略 3.二倍频环流抑制控制 供MMC入门新学者学习参考。
最近在Matlab/Simulink里折腾MMC整流器仿真,发现这玩意儿比两电平变流器复杂不止一个量级。今天咱们就手把手拆解一个包含预测控制+环流抑制的MMC模型,给刚入坑的小伙伴们避避雷。
先从核心的最近电平逼近调制(NLM)说起。这算法本质上就是拿阶梯波去逼近正弦波,具体实现时得算每个桥臂需要投入多少子模块。在Simulink里可以用MATLAB Function模块直接写:
function n = NLM(u_ref, N) u_total = N * Vc; % 总桥臂电压 n = round(u_ref * N / u_total); % 关键的四舍五入操作 n = max(min(n, N), 0); % 防止越界 end注意这里round函数就是NLM的灵魂,把连续参考值离散化为整数电平。不过实际运行时子模块电容电压会有波动,这时候就得靠均压算法来救场了。
均压策略我用的冒泡排序法,虽然效率不是最高但胜在直观。每个控制周期对所有子模块电压排序,优先投入电压低的模块:
[~, index] = sort(cap_voltages, 'ascend'); active_modules = index(1:n_required); % 选择需要投入的模块这里有个坑要注意:排序频率不能太高,否则会引发高频振荡。我的经验是设置为载波频率的2-3倍比较合适。
MMC整流器仿真模型 MMC模型预测控制仿真 基于Matlab/Simulink仿真平台 模型中包含环流抑制控制器 模型中添加基于排序算法的子模块均压方法 采用基于最近电平逼近NLM的调制策略 1.仿真均能正常运行,能够准确跟踪对应参考值 2.最近电平逼近调制+基于排序算法的均压策略 3.二倍频环流抑制控制 供MMC入门新学者学习参考。
说到环流抑制,二倍频分量绝对是MMC的宿敌。我在电流内环里加了谐振控制器,专治各种二倍频不服:
function i_cir = CirCtrl(i_diff) Kp = 0.5; Kr = 50; w0 = 2*pi*100; % 二倍频基础频率 s = tf('s'); PR_ctrl = Kp + Kr*s/(s^2 + w0^2); % 准PR控制器 i_cir = lsim(PR_ctrl, i_diff, t); end实测发现当系统频率是50Hz时,把谐振频率设为100Hz效果拔群。不过参数整定需要耐心,Kr太大会导致震荡,太小又抑制不到位。
模型搭建有个小技巧:用Simulink的For Iterator子系统实现子模块的循环投入,配合Coder External Memory保存模块状态。这样既避免堆砌重复模块,又方便观察单个电容的电压变化。
最后给新人几点建议:
- 调试时先把直流母线电压设低点(比如±10kV),等控制逻辑跑通再升压
- 电容初始电压用随机数赋值,测试均压算法的鲁棒性
- 环流波形里出现四次谐波别慌,可能是PWM谐波耦合导致的
完整模型跑起来后,可以看到交流侧电流THD控制在2%以内,子模块电压波动小于5%,环流幅值压到额定电流的10%以下。这些指标说明各个控制环节都在正常工作,恭喜你成功驯服MMC这头"电老虎"了!