MMC柔性直流输电Simulink仿真:从模型搭建到调试全攻略
2026/9/13 4:54:38 网站建设 项目流程

MMC仿真我前前后后折腾了快两个学期,从最开始连子模块的电容怎么预充电都搞不明白,到后来能稳定跑通两端双端系统的功率反转,这中间的坑基本都踩了个遍。如果你正在做或者正准备做MMC柔性直流输电的Simulink仿真,这篇内容应该能帮你少走不少弯路。不仅包含模型搭建的具体操作思路,还涉及参数的整定原则、仿真发散的处理办法、以及毕业设计报告和文献整理的经验,力求把完整流程说清楚。

1. MMC柔性直流输电系统的核心结构与建模思路

1.1 MMC到底在干什么

MMC,全称是Modular Multilevel Converter,模块化多电平换流器。它在柔性直流输电系统里的角色,简单讲就是一侧把交流电整成直流电送出去,另一侧把直流电逆变成交流电受进来,功率可以双向流动,而且能独立控制有功和无功,这是传统电网换相换流器很难做到的。之所以叫“模块化”,是因为它不像传统两电平或三电平换流器那样靠功率器件直接串联来承受高电压,而是通过几十上百个完全相同的子模块(SM)堆叠成桥臂来实现的。

每个SM本质上就是个半桥结构,由一个电容和两个IGBT及反并联二极管构成。控制系统决定电容是被切入电路还是被旁路,从而叠加出阶梯波来逼近正弦波。子模块数越多,电平数越多,谐波含量就越低,波形质量越好。在实际工程里,一个桥臂可能有200多个子模块,仿真里为了速度和复杂性平衡,一般取4到20个不等。这个选择直接决定了仿真时间、波形质量以及你是否能复现出“电容均压”和“环流抑制”这些经典问题。

这里有一个关键认知:MMC的电容电压平衡非常依赖排序算法,这是它的“灵魂”之一。每个SM电容电压各不相同,在投入和切出的瞬间必须根据方向选择合适的子模块来投切,否则电容电压会飘得没法看,波形也一定发散。这部分在Simulink里实现时要特别注意,很多人上来就栽在这儿。

1.2 两端柔性直流系统的整体架构

所谓“两端”,就是整流端和逆变端各接一台MMC换流器,中间通过直流线路(通常是电缆或架空线,仿真里用集中参数或分布参数线路模型)把它们连起来。整流端控制直流电压和吸收交流有功,逆变端控制有功传输或直流电流,两端都支持向交流系统提供无功支撑。

从结构上来讲,两端系统比单端系统麻烦的地方在于启动逻辑和功率协调。单端只要站内自己就能启动,双端必须有先后的配合,一般策略是:整流站先以定直流电压控制启动,给直流母线建立电压,然后逆变站再以定有功功率控制启动,开始传输功率。顺序乱了,系统就会被过电流或过电压打崩。

交流侧还需要连接变压器和等效交流电源。变压器通常需要采用Yd接法来隔离零序分量,容量和短路阻抗的取值直接影响系统启动时的冲击电流和稳态波形质量。这块在仿真里容易忽略,很多初学的人直接用理想电源接MMC,导致交流侧电流波形奇怪,还找不到原因。

1.3 仿真选型:为什么要用Simulink

做电力电子和电力系统仿真,可选的工具不少:PSCAD、MATLAB/Simulink、PLECS、甚至RTDS这种实时仿真平台。PSCAD在传统高压直流仿真里是行业标准,但对于毕业设计和想深入理解控制算法的同学来说,Simulink有它不可替代的优势。

Simulink的图形化建模方式对状态机、控制环路和调制策略的表达非常直接。你可以把功率电路、控制电路、调制模块、均压算法分开搭建,每一个环节都可以单独调试,可视化程度很高。更重要的是,Simulink的MATLAB脚本接口让你可以批量跑参数扫描,这对毕业设计里“某某参数对系统性能影响”这种课题非常方便。

另外,Simulink里既有基于Simscape Electrical的物理模型,也有基于数学等式的平均模型。如果你只是为了验证控制算法,平均模型能快几个数量级。如果你要看到真实的IGBT开关过程、电容充放电细节、谐波分布,那就得用详细开关模型。这两者的选择直接决定你仿真能不能在可接受时间内跑完,这个权衡会在后面的实操部分详细展开。

2. 核心模块模型搭建:从SM电容到桥臂控制

2.1 SM子模块模型:最简单的“开关+电容”

在Simulink里搭MMC,最底层的就是子模块模型。子模块的详细模型可以基于Simscape Electrical里的IGBT和二极管来搭,也可以使用理想的受控电压源和开关逻辑来简化,前者更真实,后者更快速。对于刚起步的人,我的建议是先搭理想开关模型,把整体逻辑跑通,再考虑要不要换更精细的器件模型。

子模块的两种状态分别是“投入”和“切除”。投入时电容被连接到桥臂电流通路中,切除时电容被旁路。如果你没有用自带IGBT模型,而是用受控电压源表示电容和理想开关表示IGBT,那就需要在每个仿真步长内判断开关状态并计算电容电压的变化。这里简单实现可以用一个积分器对桥臂电流经过电容的部分做积分,再加上初始电压。关键在于:这个状态切换必须在正确的电流方向和电容电压条件下进行,否则就会出现不收敛或电压跳变。

一个桥臂的子模块数量N,每个子模块的电容值C,以及桥臂电抗L,这三个参数可以说是MMC仿真的“基本面”。电容值太大会导致电压波动小但动态响应慢,太小则电压波动超标,严重时会影响开关管应力。桥臂电抗的作用是抑制环流和限制故障电流上升率,取太小抑制不住环流,取太大则系统失去快速性,还可能引发控制震荡。

2.2 载波移相与最近电平逼近

MMC的调制策略很多,最常用的是载波移相SPWM(CPS-SPWM)和最近电平逼近(NLM)。CPS-SPWM适合子模块数不多的情况,每个子模块的载波相位错开一个固定角度,输出等效开关频率高,波形质量好。NLM则适合子模块数很多的情况,直接根据参考电压计算出应该投入几个子模块,计算量小,但电平数量少的时候谐波会比较明显。

对于毕业设计,我强烈建议从CPS-SPWM入手。因为它需要你理解载波移相角度的概念(360°/N),还方便你观察每个子模块电容电压的波动情况。同时,CPS-SPWM生成的触发脉冲比较规律,方便后面接入均压控制。

NLM实现起来相对更简单一些,大概是:

N_on = round(v_ref / V_c_nom)

然后根据桥臂电流方向决定给电容电压最低还是最高的子模块充电或者放电。但这需要先进的排序算法做支撑,反而不如CPS-SPWM直观。

我在自己做的时候用了CPS-SPWM+排序均压的组合,效果很好,子模块电容电压波动控制在5%以内。

2.3 环流抑制:必须要做的一个环节

MMC相间环流这个问题,属于“不做不知道,一跑就跳脚”的那种。因为三个相单元并联在直流母线上,而各相桥臂电压不可能完全一致,这就会在三个相单元内部产生二倍频环流。这个环流不经过交流侧,会在桥臂和子模块里循环流动,导致桥臂电流畸变、损耗增加、电容电压波动加剧。

环流抑制最常见的做法是加入一个二倍频负序旋转坐标系下的PI控制器,也即所谓的“二倍频环流抑制器(CCSC)”。这个控制器的输入是三相桥臂电流,经过坐标变换提取出二倍频分量,然后用PI调节器输出一个修正电压叠加到调制波上。

在Simulink里实现这个并不复杂,关键是坐标变换的频率必须严格锁定在2倍基频。实际调试时你会发现,比例和积分参数如果选得不好,非但压不住环流,反而可能引发振荡。所以一般建议先把比例系数从小到大慢慢调,观察桥臂电流的谐波含量,等环流明显减小后再微调积分系数。

2.4 控制策略:功率外环+电流内环

两端MMC系统的核心控制策略基本都采用双闭环结构:外环控制(功率或直流电压)加内环电流控制。整流侧外环给定直流电压参考值和无功功率参考值,逆变侧外环给定有功功率参考值和无功功率参考值。内环则都采用电流解耦控制,输出电压参考值送调制环节。

电流内环的PI参数整定需要结合桥臂电感和等效电阻来算。从工程经验上讲,电流内环带宽一般取基频的5到10倍,比例系数Ki可以粗略按Ki = L * ω_bandwidth,积分系数Kp = Ki * R/L来试算,然后再微调。实际在Simulink里你可以直接采用试凑法,但得知道试凑的起点怎么来,不然就是在碰运气。

此外,还要注意坐标变换的theta角来自锁相环(PLL)。PLL的设计也很关键,PLL调的太快容易在启动阶段出现震荡,太慢则会导致相位跟踪滞后,影响功率控制精度。我用的PLL参数是根据交流系统的强/弱程度做了折中,强系统下可以适当加快跟踪速度,弱系统下就得特别谨慎。

3. 完整仿真系统的搭建流程与调试要点

3.1 从方案到模型:搭建前的准备工作

任何仿真项目,动手打开Simulink之前,最好先把整体框架画一遍。我个人的习惯是先用Visio或直接手画一个结构框图,把以下内容明确出来:

  • 交流电源和变压器的参数,如线电压有效值、频率、短路阻抗百分比;
  • 换流器的桥臂参数,包括子模块数、电容值、桥臂电抗;
  • 直流线路是采用集中参数模型还是分布参数线路模型,线路电阻、电感、电容值;
  • 控制器参数、PLL参数、调制方式、载波频率;
  • 仿真时长、求解器类型、步长设定。

这个准备工作做得好,能省下大量的调试时间。很多同学上来就乱搭,模型里到处都是警告和代数环错误,根本分不清是哪里的问题。

在Simulink里搭建时,建议采用分模块建模的方式。把功率电路模块、调制模块、均压模块、控制器模块分开放置。每一级模块都有明确的输入输出接口,便于独立调试。我习惯用Bus对象来统一管理信号,这样模型层次清晰,调试的时候用Scope查看信号也不容易搞混。

3.2 仿真模型参数计算

以一个两端MMC-HVDC系统的典型参数为例。

假设交流系统线电压有效值U_s=110kV,频率f=50Hz,直流母线电压U_dc=±100kV(即200kV极间电压),额定功率P=200MW。每个桥臂子模块数取N=10,那么每个子模块的额定电容电压约为U_dc/N=20kV,子模块电容取C=2mF左右。桥臂电抗L一般取0.1pu到0.15pu,折合到欧姆值需要根据系统基准值计算。

具体例子,基准功率S_base=200MVA,基准电压U_base=200kV(直流侧),那么基准阻抗Z_base=U_base²/S_base=200k²/200M=200Ω。桥臂电抗为0.1pu就是20Ω,再折算50Hz下的电感值,L=20/(2π×50)=0.0637H,大约63.7mH。

这些数值是仿真的基础,但不是说算完就完事。实际调试中,我还对这个参数做了多次调整。尤其是在子模块电容的取值上,如果电容取得太小,电容电压波动会变得非常大,可能超过10%,这会直接导致波形畸变。如果取得太大,动态响应又变慢。最后我取2mF,既满足了电压波动约束,又没有让仿真时间明显拉长。

3.3 从空载到负载:如何一步一步启动

这张图是很多初学者根本没想到的问题:MMC不是一上来就能带满载的。你直接把功率参考值设置为200MW,然后按运行,大概率看到“Simulation stopped due to an error”或者波形直接发散。

我的启停顺序是这样的:

  1. 先把两端换流器的调制模块旁路掉,所有子模块处于闭锁状态,也就是上下管都关断;
  2. 给交流系统上电,交流电压通过二极管不控整流的方式给所有SM电容充电。你会看到每个SM电容电压慢慢上升到接近额定值。这个阶段叫“不控预充电”;
  3. 等电容电压稳定后,解除闭锁,开始触发脉冲。此时先从开环控制开始,给一个较小的调制比,让输出建立起来;
  4. 等直流电压建立并稳定后,再把控制器的外环切换为闭环控制,逐步把功率参考值升到目标值。

如果跳过了第2、3步,直接闭锁解除就上闭环,系统基本必崩。因为控制器视角里,电容电压和电流状态都是异常的,PI控制器会产生一个极大的初始控制量,瞬间把调制波推入饱和区,然后系统振荡发散。

检查系统稳定性的方法:在常数模块中给有功功率参考值设置一个阶跃变化,比如从0到0.5pu,去观察直流电压和功率响应的动态过程。正常情况应该是有超调但能回到稳态的。如果发散,优先检查PI参数和PLL的相位。

3.4 批量参数扫描与结果记录

毕业设计通常需要分析“参数对系统性能的影响”,比如考虑子模块电容值、桥臂电抗、控制参数对波形质量和稳定性的影响。这时候手动一组一组仿真再一个个记录数据,效率低到让人崩溃。

建议写一个MATLAB脚本,利用Simulink的sim命令实现批量仿真:

% 参数扫描示例 C_candidates = [1.5e-3, 2e-3, 2.5e-3]; results = struct(); for i = 1:length(C_candidates) C_val = C_candidates(i); % 设置模型参数 set_param('MMC_TwoTerminal/SM_Capacitance', 'Value', num2str(C_val)); % 运行仿真 simOut = sim('MMC_TwoTerminal', 'StopTime', '2'); % 提取关心变量 results(i).C = C_val; results(i).Vdc = simOut.vdc(end); results(i).THD = simOut.thd; end % 绘制对比图 figure; plot([results.C], [results.THD], '-o'); xlabel('Capacitance (F)'); ylabel('THD (%)');

这样跑一轮下来,所有结果都能自动保存并绘图。注意,如果模型参数比较多,仿真数据量很大,建议在Simulink里开启快速重启功能,sim配合set_param批量运行时,能节约大量重复初始化时间。

3.5 结果波形的观察与导出

仿真结果需要用Scope观察,但Scope里的波形要放到报告里,肯定不能直接截图,最好是要么把数据存到Workspace,要么用To Workspace模块。我的习惯是全部用To Workspace保存,格式选Timeseries,这样可以在MATLAB脚本里统一处理。

例如,要绘制直流电压和三相电流波形:

% 假设已经定义好变量 t, vdc, ia figure; subplot(2,1,1); plot(t, vdc/1e3, 'LineWidth', 1.5); ylabel('Vdc (kV)'); grid on; subplot(2,1,2); plot(t, ia, 'LineWidth', 1.2); ylabel('ia (kA)'); xlabel('Time (s)'); grid on;

导出图的时候,建议把字体大小、线条粗细、图例都设置好,直接保存为矢量图(如PDF或SVG格式)。

4. 仿真发散、波形畸变等常见问题的排查方案

4.1 仿真发散:先查求解器,再查控制参数

仿真发散是MMC仿真里最让人崩溃的问题之一。发散原因多种多样,但排查顺序是有章法的。

第一步,先检查求解器设置。Simulink默认的Solver是变步长ode45,这种求解器对电力电子这种有高频开关动作的系统往往不太友好。开关瞬间的变化率极大,变步长求解器会反复缩小步长,最后可能报出“Failed to solve...步长降到最小值”之类的错误。处理办法是改用定步长求解器(如ode3或ode4),步长设为开关频率对应的1/100甚至更小。举个例子,如果载波频率是2kHz,步长至少取1e-6秒,不然开关脉冲根本就不能被精确采样。

第二步,检查是否有代数环。如果模型中出现未经延时的直接反馈回路,Simulink会强制使用代数环求解器,很容易发散。处理方法是在反馈路径上加入一个Memory模块,或者把控制器中的直通路径用Rate Limiter做一下约束。

第三步,检查控制参数。如果求解器没问题是闭环控制导致的发散,那大概率是PI参数取得过大导致的振荡发散。先确认调制波是否进入饱和区,方法是在调制模块之前加一个Scope监视调制比。如果调制比一直顶在1以上,控制器输出已经饱和,肯定是参数有问题或者外环给定值不可达。

4.2 波形畸变:电容电压波动超标与谐波超标

如果是波形畸变而不是完全发散,优先检查电容电压波动。给每个SM电容电压加Scope,观察电压波动范围是否超过额定值的±5%。如果超过10%,基本认定电容取值偏小,或者均压算法没有生效。

均压算法失效最常见的表现是电容电压出现“分叉”,一部分电容电压偏高,另一部分偏低,且不收敛。这种情况几乎可以断定是排序方向搞反了。判断充电还是放电,核心看桥臂电流的方向。电流流入电容为正,电容充电,此时应该优先投入电压低的电容,电压高的优先切除。反之,电流流出电容,电容放电,电压高的优先投入。这个规则在排序代码里写反,就是灾难。

谐波超标的问题,先看载波频率和调制方式。如果用的是CPS-SPWM,载波频率太低会导致输出电流谐波大。如果用的是NLM但子模块数太少,输出波形台阶太大,谐波肯定压不下来。解决办法要么增加子模块数,要么提高载波频率,二选一。注意,子模块数增加会急剧增加仿真时长,这里要用上一节提到的平均模型或者Simulink里的离散化等效方法做提速。

4.3 仿真特别慢:你可能需要平均模型

详细开关模型的MMC仿真,速度慢是出了名的。以10个子模块每桥臂、6桥臂共60个SM为例,每个SM里又有电容、IGBT、二极管,整个系统在Simulink里的状态变量可能有几百个。使用变步长求解器,1秒的仿真时间可能要在高性能电脑上跑几个小时。

解决方案往往是采用平均模型。平均模型的基本思路是忽略IGBT的开关过程,只考虑占空比对电容电压和桥臂电压的影响。以受控电压源和受控电流源替代每个桥臂的SM组,这样状态变量大幅减少,仿真速度能提高一个数量级以上。代价是你看不到开关级别的细节,同时对调制死区、器件损耗无法建模。

如果你想在毕业设计里既保证速度又能展示波形效果,一个折中方案是:主电路用详细模型,但把每个SM里的IGBT换成理想开关,二极管全部短路,电容参数保留。这样既能看到电容充放电的节奏,又能躲开Simscape物理模型里IGBT的繁琐计算。

4.4 常见问题速查表

现象可能原因排查方法
仿真直接报错停止求解器设置不当改定步长,降低步长
电容电压分叉均压排序方向错检查桥臂电流方向与投入逻辑
直流电压建立不起来启动顺序不对先不控预充电再闭锁解锁
直流电流振荡控制器PI参数不当减小比例系数,微调积分系数
环流特别大未加环流抑制器加入二倍频环流抑制器
系统能跑但速度极慢SM数量多且用物理模型改用理想开关或平均模型
Scope里波形毛刺极高采样步长太大减小步长或提高Scope采样率
功率阶跃响应发散外环带宽超过内环降低外环PI参数

4.5 其他调试技巧

还有几个小技巧,是跑了无数遍之后总结出来的。

其中一个是把仿真数据记录下来,做离线分析。好多问题在Scope上肉眼很难看出来,但要是在离线数据里做FFT分析,问题就一目了然。

再就是给模型添加“软启动”。软启动的思想很简单,就是在控制器接入之前,把调制比从零开始一点点增大,而不是直接跳到目标值。这能有效避免启动瞬间的过流。

最后就是做好模块封装。把控制部分的PI参数、PLL参数、调制参数、桥臂参数都做成mask变量,这样批量扫描参数的时候方便很多。尤其是做毕业设计,导师会反复让你试不同参数,封装成mask之后改参数就是双击一个框的事,再也不用满模型找常量块。

5. 毕业设计报告写作与文献整理的实战经验

5.1 报告结构怎么搭

很多同学模型做出来,到了写设计报告阶段就蔫了。实际上毕业设计/技术报告是有套路的,关键是逻辑链条要清晰,要让老师看到你的工作量和技术深度。

我推荐的报告结构是:

  1. 项目背景与意义:为什么要做MMC-HVDC仿真,应用场景在哪里;
  2. MMC基础原理介绍:把SM结构、桥臂结构、调制原理讲清楚,配图不能少;
  3. 控制策略设计:外环、内环、PLL、环流抑制、均压算法;
  4. 系统参数设计与建模:完整参数表格、模型模块说明;
  5. 仿真结果与分析:启动过程、稳态波形、动态响应、参数影响分析;
  6. 总结与展望。

这些章节里的配图,除了直接用Simulink截图,还可以自己用MATLAB画一些说明图,比如控制框图、开关状态图。注意,报告文字必须与仿真结果紧密结合,不能模型一个图、报告文字完全重写一套,那样看起来非常不专业。

5.2 文献资料怎么找

这一步适合在模型搭建之前就做,但很多人是模型做完了才补,导致报告里的参考文献写得非常空洞。MMC这个领域的关键文献,其实论文和知名期刊上已经积累了很多,比如德国学者R. Marquardt团队的基础文章,在国内的高电压技术、电力系统自动化这些期刊上也经常出现。

如果你英文还行,搜索时用“Modular Multilevel Converter HVDC simulation”或“MMC-HVDC control strategy”这类关键词,能捕捉到不少好材料。如果英文一般,直接在知网搜“MMC-HVDC”、“模块化多电平换流器 仿真”也是可以的,硕士论文里经常有非常详尽的理论推导和仿真。

我个人的建议是,文献不必贪多,精读5到10篇是核心,泛读20到30篇足够了。核心文献一定要细读其控制策略和参数设计部分,能复用的直接参考。写综述的时候把文献按“拓扑结构怎么发展、控制策略怎么演进、环流抑制怎么提出”分类来写,比单纯按时间顺序罗列要好得多。

5.3 仿真结果转化为报告图表

最后一步,也是实操中最重要的一步。

表达的时候,一定要分稳态和动态两部分。稳态部分重点展示直流电压、直流电流、交流侧三相电流波形,以及对应的谐波分析(可以加FFT分析图)。动态部分用功率阶跃来展示系统响应,给出响应时间和超调量。

图表质量决定印象分。我的做法是:

  • 波形图背景白色,加网格但不加太密;
  • 纵轴物理量标注清楚,单位不要少;
  • 不同曲线用不同颜色,关键点用箭头或圆圈标注;
  • 每个图下配简短说明,指导读者该看什么;
  • 参数扫描的结果用对比表格来呈现,而不是贴好几页数据。

例如,电容取不同值时的THD对比可以做成表格,这样老师在答辩时一眼就能看到你的工作量和思考深度。

写在最后

做MMC仿真这件事,最大的体会就是“不能求快”。你越想快点把模型跑出来,越容易在参数整定和启动顺序上栽跟头。不如按部就班,把不控预充电跑通,再把闭环控制一点一点加上去,每一步都验证了再往前走。整个流程走完,你对MMC的理解会比只看教材要深得多,而且“从零搭一个复杂系统再不断调试”的这个过程本身,比最后的波形更有收获。如果后面有时间,还可以在这个模型上继续做直流故障分析、环流抑制策略的改进,甚至换成三相三线或四端网格结构,越玩越有意思。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询