☰
MMC开环仿真入门:N=6模块化多电平换流器Simulink建模与波形判读
2026/10/10 4:08:44 网站建设 项目流程

做MMC仿真的人,第一部能把“子模块运作起来”的模型通常不是复杂闭环,而是一个能把每一层电平都看得很清楚的开环模型。模块化多电平换流器(MMC)的Simulink仿真,圈内一直有个不成文的共识:第一个模型尽量做开环,把N=6这个规模塞进Simulink里跑,是成本最低、收益也最直接的一步——不涉及电流内环,不需要排序均压,但MMC最核心的那条物理链路,电容电压建立、桥臂电流分配、载波移相调制出的阶梯波形,全都能看得明明白白。

这篇文章写给刚接触MMC的电力电子研究生,也写给想从两电平拓扑转过来的工程师。全文以N=6开环模型为主线,从参数设计讲到Simulink建模细节,再到调试图纸的波形判读,最后是一堆我自己踩过的大大小小的坑。你跟着走一遍,最后手里会有一个可复现的N=6开环MMC仿真工程,往后做N=12、做闭环、做环流抑制,都能在这个底子上继续长。

1. 整体设计思路:为什么首选N=6开环模型

1.1 N=6这个规模意味着什么

MMC一个桥臂的子模块数N,直接决定了输出电压的阶梯数。实际高压直流输电工程里,单个桥臂动辄几百个半桥子模块,那是为了在几百千伏直流侧输出接近正弦的电压波形。但N=6是一个很微妙的刻度:它小到能在普通电脑上跑完仿真,大到足以体现MMC的“模块化+多电平”本质。

N=6的相电压输出一共是7个电平,线电压则是13个电平。用载波移相调制时,每个子模块的开关频率如果是1000Hz,从外部看整个桥臂的等效开关频率是6000Hz。这个倍数关系体现的正是MMC的“等效高频、器件低频”特性——用低压小模块堆出高压大容量,同时不让单个开关器件承受太高频率。对初学者来说,N=6是第一次能亲手摸到“电平数=子模块数+1”这个结论的规模。

整个模型包含36个子模块,三相互不相连的物理结构让六个桥臂的独立控制从这里就开始变得具体。比起模拟一个N=200的工程级模型,N=6能让你把每个电容、每个IGBT开关信号都拉出来看波形,这种“把整个链路摊开看”的价值,在工程级仿真里根本做不到。

1.2 开环仿真最大的红利:控制链路短,物理特性直接暴露

开环的意思是,不把输出电压或电流反馈回调制波。调制波就是一组固定的三相正弦,加上直流母线电压一半的偏置,然后除以子模块总电压归一化,直接生成门极信号。控制链路短,就意味着变量少;变量少,你才能把注意力放在MMC本体的物理行为上。

更实际的一点是:开环模型跑出来的波形,能帮你验证“调制逻辑本身是否正确”。如果连开环下输出都乱七八糟,加闭环只会让问题更隐蔽。我做过的几个MMC项目里,有同学一上来就参考论文搭闭环,电容电压不平衡、环流发散、模型跑不动,三个问题叠在一起根本查不出源头。后来退回开环,三天之内就把调制和主电路的问题全部定位清楚了。

所以这个仿真项目的定位很清晰:它不是最终控制器,而是一个“基准模型”。后面你要加电容电压均衡算法,加二倍频环流抑制,甚至升级成N=12,逻辑上都是在开环模型上做增量。开环模型把主电路、调制、测量这三层基础设施先固定住,后续所有控制算法的验证都有了参照系。

1.3 整体技术路线一览

整个搭建过程我建议分成四步走。第一步根据直流侧电压和功率等级定主电路参数:子模块电压、电容容值、桥臂电抗,这是整个模型的物理骨架。第二步在Simulink里搭建子模块,封装成带门极输入和电容电压输出的标准单元。第三步把子模块串成桥臂,加上桥臂电抗,组成三相六桥臂全桥结构。第四步生成PS-SPWM调制信号,接好门极,跑起来读波形。

这四步对应下面四节内容,每一步都有可以直接抄作业的参数和操作。我尽量把手上的参数表、模块封装方式和波形判读方法都写出来,你把模型搭到哪一步遇到了问题,也能回头对照。

2. 主电路参数设计:电压匹配、电容选型与桥臂电抗

2.1 直流母线与子模块电压的匹配关系

MMC最基础的电压约束是直流母线电压Vdc等于N个子模块电压之和。开环仿真里,一般取每个半桥子模块的额定电容电压Vc相等,所以有Vdc=N×Vc。我手头这个N=6模型取直流侧400V,算下来每个子模块额定电压就是66.7V。

这个电压等级有什么好处?安全、容易理解,而且交流侧峰值电压大约是Vdc/2=200V。三相调制波峰值由调制度m决定,m取值范围0到1,工程上稳态常取0.85到0.95。取m=0.9时,交流输出相电压峰值就是180V,三相负载可以是简单的三相电阻或阻感负载。比起动辄几百kV的工程参数,400V低压模型更接近实验室样机,仿真里的每一个电压点你都能直观对应。

电压匹配的细节要特别注意一点:桥臂投入的子模块总和是恒定的N。上桥臂多投入一个子模块,下桥臂就必须少投入一个。这个约束条件是后面设计调制信号的核心,也是判断你的MMC模型逻辑对不对的第一条依据。如果仿真里某个时刻上下桥臂投入总数不等于6,说明门极信号生成有误,输出波形一定会畸变。

2.2 子模块电容容量怎么定

子模块电容的取值很敏感。太小,电容电压波动大,波形难看;太大,仿真速度明显变慢,而且电容电压建立时间被拉长。文献里通常用能量法来选:整个换流器中36个子模块的总储能与系统传输容量保持一定比例,工程上这个比例常见为30kJ/MVA到40kJ/MVA。

如果是教学级仿真,我给你一个更直观的路径。先设定允许的电容电压波动率,开环不看均压,波动率可以放粗到±10%。再结合桥臂电流中基频分量的积分式,最终落到每个子模块电容储能大约在20J到50J这个区间。我实际取值时,用一个额定66.7V电容、约3mF的容值,折合每个子模块储能6.7J,看起来比工程比例小不少,但在这个功率等级的小模型里是合理的。

如果你做出来的电容电压波动太大,就把电容加大;如果仿真半天电压都稳不下来,就减小电容。调试时可以按20%的步长去调容值,不要一次调一个数量级。初始化方面,强烈建议把6个桥臂所有子模块电容的初始电压都设为66.7V。开环模型下这个初值相当于给系统一个明确的起点,能省掉前面一大段漫长的自建压过程。

2.3 桥臂电抗:抑制环流的第一道闸门

桥臂电抗在MMC里有两个作用。一个是限制上下桥臂之间循环流动的二倍频环流;另一个是故障时限制电流上升速度。桥臂电抗的取值没有一个绝对精确的公式,工程惯用“短路阻抗百分比”的思路,取换流器交流侧等效基值阻抗的0.1到0.15倍。

基值阻抗可以用Vdc²/(2×S)来估算,S是换流器额定容量。按直流侧400V、额定容量约2kVA、基波角频率314rad/s来算,基值阻抗约0.085H,乘0.15得到约13mH。我取整到12mH。

这个电抗值直观反映在波形上就是桥臂电流里的二倍频纹波大小。电抗太小,桥臂电流会明显“长毛”;电抗太大,电流变化慢,动态响应迟钝。开环仿真里电抗的取值还会影响你看到的环流波形幅度,所以它也是后面验证环流问题时最方便动刀的参数。先把12mH给上,后面如果你想观察环流对L_arm的敏感度,改一次参数重跑,对比两条桥臂电流波形,效果非常直观。

3. Simulink建模实操:模块化封装与桥臂拼接

3.1 子模块模型选型:从理想开关到元件级

Simulink里建半桥子模块有三种常见做法:用IGBT和二极管元件搭详细模型、用理想开关模拟导通、用受控电压源做平均值模型。N=6总共36个子模块,如果每个都用完整IGBT模型,仿真速度会慢到让人怀疑人生,尤其是你要跑0.2秒的波形。我建议第一步先用理想开关方案,通信开销小,还能保留PWM的电平台阶。

理想开关方案的核心是:每个半桥子模块用一个受控电压源串联一个理想开关来实现投入和旁路。门极信号为1时,子模块输出电压等于电容电压Vc;信号为0时,输出电压为0。电容仍用真实电容元件,电容电压的波动特性完全保留。这样做出来的模型,波形细节足够用于验证调制逻辑,速度又在可接受范围内。想研究IGBT损耗或器件应力时,再单独挑一个桥臂换成元件级模型,其他桥臂保持理想模型,这属于后续扩展的玩法。

封装子模块时,我习惯把物理端口做成P和N两个电气口,控制端口做成Gate输入,还要把电容电压引出来方便观测。整个模块用Subsystem打包,里面就是三条线:电容、受控电压源、理想开关。对外接口固定下来之后,桥臂里不管串多少个模块,接线方式都是一样的。

3.2 为什么把载波移相作为N=6的默认调制方式

MMC的调制策略里,SPWM家族最常用。载波层叠(POD/PD)和载波移相(PS-SPWM)在N=6的规模下都跑得动,但我默认推荐PS-SPWM。原因是它的子模块投入机会严格平均。6个子模块的载波相位互相错开60度,每个子模块在基波周期里的平均开通时间相近,电容电压在开环下自然维持平衡程度更好。层叠调制虽然实现简单,但开环下某些子模块导通时间偏长,电容电压很容易偏掉,对“不做均压”的我们来说太不友好了。

PS-SPWM的具体做法是:每个桥臂有一个共同的调制波,桥臂内每个子模块各自使用一个三角载波,相邻载波相位差360°/N,也就是60°。调制波在0到1之间变化,与载波比较,大于载波则子模块投入。这里有一点容易搞错,我专门强调一下——上桥臂和下桥臂的调制波是不同的。

上桥臂调制波d_up=Vdc/2−v_phase,下桥臂调制波d_down=Vdc/2+v_phase,两者再各自除以N×Vc做归一化。这样处理,任意时刻上下桥臂投入子模块数之和近似等于N。这正是MMC必须满足的电压约束。很多第一次搭MMC的人习惯给上下桥臂送同一个调制波,结果输出电压直接变成0或者出现严重畸变,问题就在这。

3.3 桥臂组装与三相六桥臂拼接

子模块封装完成之后,往上搭桥臂就简单多了。一个桥臂内部是6个子模块首尾串联,然后在这个支路末端串入桥臂电抗L_arm。我建议每个桥臂单独建一个Subsystem,内部把6个子模块的Gate信号做成一个6维向量输入,这样顶层布线非常干净。

三相MMC的拓扑结构是对称的:A、B、C三相各有一个上桥臂和一个下桥臂,总共六个桥臂。上桥臂的一端接直流正极,下桥臂的一端接直流负极,上下桥臂连接处作为交流输出点。六个桥臂电抗的另一端,分别就是三个交流输出端。直流侧加一个理想直流源,我用400V,正负极间接一个平波大电容,数值取2mF就够用。

接好之后你数一下模型里的器件规模:每相12个子模块,三相36个子模块,再算上电抗、直流电容、负载,规模其实不算大。如果仿真还是慢,优先去查是不是用了元件级IGBT模型,再查示波器是不是开了太多全波形刷新。Simulink里有时慢的原因不是求解器,而是Scope窗口在持续刷新高分辨率波形。

3.4 开环调制信号的生成逻辑

调制信号生成部分,我建议在Simulink里用最直白的方式搭:六个三角波发生器,初始相位依次差60度,作为六个子模块各自的载波。三角波频率取1000Hz,幅度0到1。调制波是三相正弦发生器,频率50Hz,幅值按调制度m=0.9生成,再送到上、下桥臂的调制波处理环节。

生成三相调制波时,一个重要技巧是把“相电压参考值”到“桥臂调制波”的换算放在同一个Subsystem里完成。输入是三相正弦v_phase,输出是六路桥臂归一化调制波。换算公式上面已经写过:上桥臂用0.5−v_phase/(N×Vc),下桥臂用0.5+v_phase/(N×Vc)。这一步千万别在主电路之外单独乱算,封装好了,后面无论是换调制度还是改电压等级,都只动一个地方。

为了和一帧一帧的三角波对齐,你可以用MATLAB脚本预先把相位定好。下面是简单示意,直接在初始化脚本里给6个载波模块赋初相:

N = 6; fc = 1000; % 载波频率 Hz phase_deg = 0:360/N:360*(N-1)/N; % 载波相位差60度

这块脚本只负责把相位算出来,Simulink里三角波的相位参数可以直接引用这些变量。跑之前记得把载波模块的采样时间设置成与模型一致,否则离散步长不对齐,波形上会出现莫名其妙的毛刺。

4. 仿真运行与波形判读:从参数设置到调试图纸

4.1 求解器和仿真时间怎么设

运行这个模型,求解器设置是第一步也是最容易翻车的一步。如果模型中用了我前面推荐的“理想开关+受控电压源”方案,可以在Simulink里直接选离散求解器,步长固定在1e-5到2e-5秒之间。但是如果你保留任何功率电子开关的连续模型,就得使用ode23tb或ode15s这类变步长刚性求解器,最大步长建议限制在5e-5秒,否则开关动作时刻捕捉不到,波形会出现非物理的尖峰。

仿真时长我推荐0.2到0.4秒。开环模型里电容的建立过程通常在若干基波周期内完成,0.2秒相当于10个50Hz基波周期,足够观察到稳态波形。再长不是不行,但开环电容电压的缓慢漂移会逐渐显现,反而让你误以为模型有问题。要看稳态,0.2秒已经够清楚。

还有一个小习惯:把示波器改成“保留最后一次仿真数据”,或者干脆用To Workspace把波形存进工作区,再统一用plot命令画图。这样减少Scope实时渲染的开销,N=6跑多组参数对比时会明显感觉到效率差异。

4.2 输出电压波形怎么读

仿真跑起来后,第一个看的就是交流侧相电压和线电压。N=6开环模型输出的是典型阶梯波:相电压对直流中性点一共7个电平,线电压13个电平。每个电平的台阶高度就是子模块电容电压,66.7V乘以调制度,再与正弦调制波互相夹出这些台阶。看到波形以后,对照有没有丢失电平:如果某个台阶高度明显矮了一截,说明对应子模块的电容器电压低于额定值,要么是初值没设好,要么是某一路门极信号没有正常交替。

相电流波形理论上应该是干净正弦,因为桥臂电抗和负载电感会把阶梯电压的高频分量滤掉。如果相电流波形扭曲,优先检查是不是负载参数不对称,或者直流侧电容太小导致母线电压脉动过大。开环系统里直流母线电压纹波会直接耦合到调制波归一化过程中,这个问题经常被忽略。

如果要量化分析谐波,可以用FFT工具对相电压做频谱。N=6时最低谐波群集中在等效开关频率6000Hz附近,这和理论结论应该对得上。如果你看到低频处冒出一大堆边带,说明载波与调制波的相位关系不对,回查每一步Module的载波初相角度。

4.3 电容电压和桥臂电流的判读

第二个必看的观测点是子模块电容电压。在没有任何均压算法的开环模型里,电容电压不应被解读为“长期稳定”,而是看它在数个基波周期内围绕66.7V上下波动的幅度。波动率控制在±10%以内就是正常。如果你看到某个桥臂第一号子模块的电压一路飙升,其他模块一路下跌,不用怀疑自己的主电路接错了——这是载波相位分配不均匀加开环无均压的典型表现,可以先调载波初相,看是否缓解。

桥臂电流是另一个信息量很大的观测点。一个桥臂的电流等于相电流的一半加上直流分量的叠加,环流则表现为上下桥臂电流的共模成分。你可以用这个式子现场观测环流:从上下桥臂电流和里减去直流母线电流的三分之一,剩下的就是桥臂间环流。开环模型下,二倍频环流一定是存在的,波形上表现为桥臂电流明显“胖了一圈”。这是MMC的固有特性,不是你模型错了。想改善环流,第一手段就是前面桥臂电抗那节说的调L_arm,但仅在开环下能压缩幅度,无法消除。

5. 踩坑合集:N=6开环MMC仿真的高频问题与排查实录

5.1 电容电压发散或严重不均衡

开环无均压最容易出现这个现象。我之前遇到最典型的情况是:仿真跑到0.1秒以后,电容电压波形像开花一样往外散,有的模块冲到90V,有的掉到40V。第一反应别慌,多半是载波相位分配不均匀,导致个别子模块长时间投入。排查路径是:先暂停仿真,看六个载波的初相是不是真的按60度间隔错开,再看同一个桥臂各个子模块的导通脉冲宽度是否接近。也顺便查一下调制度,m为0.95以上时,调制波接近顶点,PS-SPWM的过调制风险加大,电容电压波动会明显放大。

如果只是短时间观察稳态波形,最简单粗暴的规避方式就是把仿真时间缩到0.2秒内,同时把电容初值全设为66.7V。这不算作弊,开环模型本来就不是用来验证长期均压性能的。等以后你加排序均压算法时,才会专门去考察长期运行下电容能量平衡的问题。

5.2 桥臂电流严重畸变

如果你的桥臂电流不是“正弦基波+二倍频共模”的样子,而是出现明显的高频锯齿,问题大概率不在调制,而在于桥臂电抗取值偏小。我把桥臂电抗从12mH下调到4mH跑过一次,结果是桥臂电流整个变成高频谐波堆积的“毛毛虫”,完全看不出平滑的基波。原因很简单:桥臂电抗是抑制电流突变的主要元件,取值过小就等于放弃了对开关纹波电流的限制。

另一种情况是直流母线电容太小带来的母线电压纹波。母线电压不是理想的400V时,归一化调制波会跟着波动,输出电流就会产生低频纹波。解决办法是加大直流侧电容到2mF以上,或者在仿真理想化一点:直接在直流源两端加一个很大的理想电容。这里要舍得,母线电压不稳,后面一切波形分析都是白费。

5.3 代数环和仿真速度问题

N=6模型用受控电压源和理想开关时,很多人会在仿真一开始就撞上代数环警告。原因是受控电压源的电流测量和理想开关的状态之间存在瞬时反馈。解决方式很简单:在电容电压或电流测量的环节插入一个memory模块,或者把相关信号用单位延迟打一拍,打破瞬时直通。代价是延迟一拍会使波形有极小偏移,但对开环验证可以忽略。

仿真速度慢则要分两层来看。第一层是求解器太精细,把最大步长改到2e-5秒试试,波形精度通常足够。第二层是模型不必要地保留了大量连续元件。像我前面讲的,先把36个子模块全部用理想开关模型跑通,确认逻辑正确,再决定需不需要升级成详细模型。别一上来就把模型搭满,仿真卡住会严重打击调试积极性。

5.4 从N=6开环往后的路怎么走

开环模型的价值不在于“能用”,而在于它是一个干净的起跳板。N=6的PS-SPWM逻辑跑通后,换成N=12几乎不用改动主电路结构,只需要把子模块数量翻倍,载波数量翻倍,载波移相角改成30度,直流母线电压按N×Vc重新设定即可。每个子模块的封装和桥臂结构完全复用。

加闭环时,开环模型已经帮你把调制波生成位置、电容电压测量端口、桥臂电流测量信号都准备好了。你可以先加电容电压排序均压,让每个子模块电压在长时间内稳定;然后加二倍频环流抑制,在你的桥臂电流观测点接上陷波器或准比例谐振控制器;最后再考虑输出电流闭环。每加一个环节,都回到开环模型的波形上做参照对比,谁引入了额外波动、谁消除了波动,一眼就能看明白。

按照我个人经验,这一步一步从开环往闭环走,比直接套一个论文里的复杂控制模型要可靠得多。做仿真不是爬山,是修路;路修好了,走到下一个山头只是时间问题。这个N=6开环MMC模型,就是整个项目的第一段路基。

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

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

立即咨询