很多人第一次碰模块化多电平换流器时,习惯性想直接上个几十个子模块的闭环带载仿真,结果被一堆问题淹没。我自己走过的路恰恰相反——先做一个N=6的三相开环仿真,把主电路参数、调制策略、Simulink里的开关模型和信号接口全部理顺,再谈下一步。这个项目表面看只是搭个模型,实际上它逼着你想清楚直流侧电压怎么分配到36个子模块、桥臂电抗按什么原则取、6路载波相位怎么错、上桥臂调制波和下桥臂为什么必须互补,这些细节一旦漏掉,开环波形根本调不出来。这篇文章就把N=6开环MMC仿真从参数计算到Simulink整体实现完整拆一遍。适合正在做课程设计、毕业设计,或者刚进入柔性直流、中压变频驱动方向,想尽快建立MMC仿真环境的人。
1. 为什么先做N=6开环仿真:项目定位与核心价值
1.1 开环仿真解决的核心问题
很多人会把“开环”理解成没有控制信号,这是误区。开环MMC仿真仍然要有完整的PWM调制信号,所谓开环,指的是不给电容电压做闭环均衡、不给环流做闭环抑制、不引入任何反馈调节,直接给一组固定的三相正弦调制波,让主电路自己跑起来。
这样做有一个非常实际的好处:如果开环都跑不稳,闭环问题就更难定位。电容电压均衡控制、环流抑制控制器一旦加上去,波形异常时你可能得花大量时间判断到底是主电路参数错了,还是控制器参数错了。而开环环境下,调制波、载波、主电路参数三者之间的关系是确定的,波形是否符合理论值一眼就能看出问题。
我之所以强调这一点,是因为很多初学者在开环阶段就直接把电容电压均衡和环流抑制全部搭进去,最后电容电压还是发散了,排查了半天发现是桥臂电抗太小、电容初始电压没设。所以开环仿真真正的使命,是先用最简结构验证主电路参数设计和调制策略的正确性。这个阶段跑通了,后面每加一层控制,你都清楚它在你已经验证过的底子上做了什么改变。
1.2 N=6是入门的黄金配置
N指的是每个桥臂串联的子模块数量。MMC一个相单元有上下两个桥臂,三相一共6个桥臂,所以N=6时整机子模块总数是6×6=36个。这个规模在Simulink里属于“能跑得动、又足够看出规律”的状态。
N取太小,比如2或4,子模块数太少,输出电压电平数只有3到5个,波形离正弦差得远,调制策略的效果也不明显,而且电容电压波动很大,容易误导你对参数正确性的判断。N取太大,比如20甚至40,虽然波形更细腻,但仿真速度会明显变慢,调试周期拉长,参数计算也繁琐,不适合作为第一次搭建MMC模型的起点。
N=6时,每个相单元相对直流母线中点能输出7种电平,交流相电压呈现清晰的阶梯波,已经能看出正弦轮廓。同时36个子模块在开关模型下也还扛得住,我的经验是载波频率2kHz、仿真0.6秒,普通台式机几分钟内能跑完,调试效率高。这个配置在很多教材、课程设计和论文里都作为典型算例,资料容易参考,非常适合作入门起点。
2. 主电路参数计算:从直流侧到桥臂的定量推导
2.1 电压分配与子模块电容参考电压
MMC的子模块电容参考电压理论上就是直流母线电压除以每个桥臂的子模块数。以我仿真时常用的直流母线电压Vdc=400V为例,N=6时:
Vc_ref = Vdc / N = 400 / 6 ≈ 66.7V
这个公式是整个主电路参数设计的锚点。为什么电容电压基本被Vdc/N锁定?因为稳态下一个桥臂投入的子模块数在0到N之间变化,当全部投入时,串联电容总电压必须顶得住直流母线电压,所以理想情况下每个电容电压就是Vdc/N。
这个值直接决定器件选型和电容容量设计。如果你用的IGBT耐压只有100V,而你把直流母线电压调到800V,单个子模块电容电压就是133V,接近甚至超过器件耐压极限。仿真中不一定立刻报错,但波形容易出现振荡。很多初学者忽略这个基本关系,把Vdc设置得很高、N又小,导致电容电压波动率巨大,这就是典型的参数设计错误。
另外,直流母线建议用两个Vdc/2的电源串联,并把中点引出作为参考地。这样后续观察交流侧相电压对中点电平时,可以直观看到±3Vc_ref之间共7个电平的阶梯波,和理论推导能对上。
2.2 桥臂电抗怎么取:两条原则一次讲清
桥臂电抗是MMC里非常关键的无源元件,它同时承担两个职责:一是抑制桥臂内部的环流和开关纹波,二是限制故障时的电流上升率。工程上一般按标幺值0.1到0.15来选取,指的是工频下桥臂电抗的阻抗值占系统基值阻抗的10%到15%。
具体计算流程,我以一个设计功率10kVA、交流线电压有效值200V的三相系统为例。每相电压基值:
V_base = 200 / √3 ≈ 115.5V
相电流基值:
I_base = 10000 / (√3 × 200) ≈ 28.9A
基值阻抗:
Z_base = V_base / I_base ≈ 4Ω
取0.1p.u.时,桥臂电抗的工频阻抗X_arm约为0.4Ω,对应电感:
L_arm = X_arm / (2π×50) ≈ 0.4 / 314 ≈ 1.27mH
如果取0.15p.u.,X_arm约0.6Ω,对应电感约1.91mH。所以理论计算范围大概在1.3到1.9mH之间。
我的实际习惯是仿真里取偏大一点的值,比如2到3mH。原因很现实:开环仿真没有环流抑制,桥臂电抗稍微大一些可以有效压低二倍频环流,让波形更干净。代价是系统的动态响应变慢,但开环验证阶段我们更关心稳态波形。另外,桥臂电抗的压降会影响实际输出电压幅值,调制比留一点裕量就能补偿掉这部分的压降影响。
需要注意,桥臂电抗在模型中的连接位置建议按工程惯例:上桥臂电抗串联在直流母线上端与交流输出节点之间,下桥臂电抗串联在交流输出节点与直流母线负极之间。这样的好处是环流和纹波同时被两个电抗抑制,而且交流输出点的参考关系很清晰。
2.3 子模块电容容量:从储能常数算到毫法
子模块电容的取值直接决定电容电压纹波。电容越大纹波越小,但大电容意味着成本和体积都上去,所以工程上有一种常用的估算方法——按储能常数来选。
储能常数的含义是:整个换流器所有子模块电容储存的总能量与系统额定功率之比。MMC工程上一般取30到40kJ/MVA,也就是每1kVA额定功率对应30到40焦耳储能。对10kVA、40kJ/MVA的配置:
总储能 = 40 J/kVA × 10 kVA = 400J
而总储能又可以由电容参数表示。整机有36个子模块,每个子模块储能是0.5×C×Vc_ref²,所以:
总储能 = 36 × 0.5 × C × Vc_ref² = 18 × C × 66.7²
把400J代入:
C = 400 / (18 × 4448.9) ≈ 0.005F = 5mF
这个结果和文献中类似容量MMC的子模块电容值很接近。仿真里取4.7mF到5mF都可以,我个人习惯先取5mF,跑起来如果电容电压纹波低于预期,再往小了调;如果纹波超过5%,就往大了调。记住一个方向:纹波偏大就加大电容,别一上来就怀疑调制策略。
系统主电路参数可以汇总成下面这张表,后面所有仿真设置都以它为准:
| 参数 | 数值 | 说明 |
|---|---|---|
| 直流母线电压Vdc | 400V | 两个200V电源串联 |
| 子模块数N | 6 | 每桥臂 |
| 子模块电容参考电压 | 66.7V | Vdc/N |
| 子模块电容Csm | 5mF | 按40kJ/MVA估算 |
| 桥臂电抗Larm | 3mH | 取略大于理论下限 |
| 载波频率fc | 2kHz | 初学可从1kHz开始 |
| 调制比m | 0.85 | 输出相电压峰值约170V |
| 负载电阻R | 4Ω | 三相星形对称负载 |
| 负载电感L | 2mH | 平滑电流纹波 |
3. 调制策略选择与Simulink实现方案
3.1 为什么N=6优先选载波移相PWM
MMC的调制方式有好几种:最近电平逼近、载波层叠PWM、载波移相PWM。N=6这个场景,我最推荐载波移相PWM。
最近电平逼近的原理是把正弦调制波量化成离散电平,子模块数越多电平越细腻。但N=6时只有7个电平,量化误差非常大,输出波形谐波含量高,看起来阶梯感特别强。它适合N达到几十甚至上百的场合,比如柔性直流输电里单桥臂子模块数动辄200个以上,那时用NLM很合适。放在N=6的小模型里,波形丑且调试参考意义不大。
载波移相PWM的思路是:N个子模块各用一路三角载波,把这N路载波在相位上均匀错开360/N度,再用同一路正弦调制波去和每一路载波比较,生成各子模块的开关脉冲。这样做的直接效果是,各子模块的开关动作在时间上均匀错开,桥臂等效开关频率变成N×fc。对N=6、fc=2kHz来说,等效开关频率就是12kHz,输出波形谐波显著降低。
有一点必须提醒:等效开关频率高并不代表IGBT真的在按12kHz工作,每个子模块的功率器件实际开关频率仍然是2kHz。这个区别在做损耗评估时很容易搞错,但在数字仿真里一般不影响波形结果。载波移相PWM在中等子模块数场合的波形质量和实现复杂度之间取得了很好的平衡,所以N=6用它最合适。
3.2 载波相位差与上下桥臂互补的关系
载波移相PWM的实现细节中,最容易出错的就是载波相位排列和上下桥臂调制波的关系。我先把最核心的数学关系说清楚。
同一个相单元里,上桥臂和下桥臂的投入子模块总数必须恒等于N,这是MMC能正常工作的前提。为什么会这样?因为在理想情况下,直流母线电压Vdc=N×Vc_ref,如果某时刻上桥臂投入k个子模块、输出电压为k×Vc_ref,那么为了保证直流母线不被短路,下桥臂必须正好投入N-k个子模块,两端电压总和才刚好是Vdc。
想让上下桥臂互补,最直接的做法是对调制波做对称处理。上桥臂调制波取:
m_up = 0.5 - 0.5×m×sin(ωt)
下桥臂调制波取:
m_low = 0.5 + 0.5×m×sin(ωt)
这两个量都落在0到1之间,和载波幅值0到1匹配。无论sin(ωt)取什么值,m_up + m_low始终等于1,这意味着任意时刻上桥臂投入子模块数加下桥臂投入子模块数正好等于N,交流输出电压就能连续跟踪参考。
载波相位差的计算也简单。N=6、载波频率fc=2kHz时,六路三角载波依次错开的相位是60度,对应时间差:
T_shift = 1 / (N × fc) = 1 / (6 × 2000) ≈ 83.3μs
在Simulink里如果用Transport Delay模块给某一路载波做延迟,延时就是k×83.3μs,k从0到5。如果用自带PWM发生器,只需要在参数里设置每路子模块的载波相位角度0、60、120、180、240、300度即可。
很多人的模型输出电平数不对,十有八九是这里出了问题:要么六路载波相位没有均匀错开,要么上下桥臂调制波不是互补关系。我调试时习惯先单独观察一个桥臂的6路调制信号和载波信号,确认每个比较器输出的脉冲周期和占空比正确,再去连主电路。
3.3 开关信号的生成与子模块封装思路
在Simulink里实现载波移相PWM,有两条路线。
第一条是用Simscape Electrical自带的PWM Generator模块,它内部可以直接设置载波频率、载波相位偏移、调制波和载波幅值,输出脉冲宽度调制波。这条路线省事,适合快速验证。缺点是你对内部细节的控制能力弱,而且要理解它的输出逻辑,否则调参时容易一头雾水。
第二条是手动搭建,虽然麻烦,但对理解原理帮助很大。我建议至少第一次做的时候用这种方式。具体做法是:用Repeating Sequence模块生成频率为fc的三角载波,输出序列设置为0到1再到0;六路载波用六个Repeating Sequence实例,或者一个模块配合多个Transport Delay实现不同相位延时;调制波用Sine Wave模块加0.5偏置得到m_up和m_low;然后用Relational Operator模块做比较,当调制波大于载波时输出1,否则输出0。
子模块本身建议封装成Subsystem,好处是主电路图不会变成蜘蛛网。一个半桥子模块内部包含两个带反并联二极管的IGBT和一个直流电容。两个IGBT的驱动信号设计为互补逻辑:投入时上管开通下管关断,电容接入;旁路时上管关断下管开通,电容被短接。封装时注意子模块的进出线是Simscape Electrical物理端子,不能用普通Simulink端口代替,否则会报电气网络连接错误。
4. Simulink建模实操:主电路、控制与求解器配置
4.1 开关模型还是平均模型:先想清楚再动手
MMC建模有两种基本路线:开关模型和平均模型。开关模型把所有IGBT和二极管都搭出来,能精确反映PWM开关动态,仿真结果有真实的电压电流纹波,但计算量大:36个子模块意味着72个功率器件同时参与仿真,步长设置不合适很容易变慢甚至发散。
平均模型则用受控电压源代替整个桥臂,把36个电容的储能行为等效成集中状态变量,仿真速度快很多,适合长时间动态过程研究,比如有功功率阶跃、直流故障穿越。但平均模型看不到每个子模块的电容电压差异,也看不到PWM纹波。
对于N=6开环验证这个目标,我的建议是直接上开关模型。原因很简单:N=6的全开关模型在2kHz载波频率下仿真速度还能接受,而且开环仿真的核心目的之一就是观察真实调制波和PWM的效果,平均模型反而丢了这部分信息。等你把主电路和开环调制全部验证完,再考虑做一个平均模型用于后续长时仿真,两条路线互补。
4.2 主电路搭建:三十六个子模块的级联方案
主电路的搭建顺序我建议按“先单桥臂、后三相、再负载”的模块化方式推进,避免一次性搭完无从下手。
第一步,在Simulink里拖出IGBT、二极管、电容,搭成一个半桥子模块。输入信号保留一路门极控制信号,输出用Simscape Electrical端子引出子模块的P端和N端,封装成名为SM的子系统。设置电容初始电压为66.7V,这一步非常关键,如果初始电压为0,开环启动瞬间会产生很大的充电冲击电流,模型很容易发散。
第二步,复制这个SM子系统,组成一个桥臂。每个桥臂串联6个SM,方向一致,从上到下依次是SM1到SM6。注意串联时前一个SM的N端接后一个SM的P端,不能接反。然后把一个3mH的电感串联在桥臂末端,作为桥臂电抗。
第三步,把6个桥臂组合成三相。每相的上桥臂电抗末端接交流输出节点A,下桥臂也从同一节点开始,向直流母线负极方向连接。三相输出节点分别命名为A、B、C,接星形三相负载。
第四步,直流侧用两个200V电压源串联,中点接地或接参考节点。这里建议给电压源加一个较小的内阻,比如0.01Ω,可以避免纯电压源直接接电容带来的数值振荡。
第五步,加一个Powergui模块并设置为离散仿真模式。这个模块是Simscape电力电子系统仿真的必备组件,没有它,很多电气网络的分析模式无法正确启动。
4.3 控制器信号生成与接口转换
调制波和载波比较产生的PWM信号是Simulink的布尔量或double量,而Simscape Electrical里的IGBT门极输入是物理信号端口,两者之间需要信号转换。在新版Simulink里,很多PWM模块可以直接输出Simulink兼容信号,但在手动建模时,最好在门极驱动前加一个Simulink-PS Converter模块,把0/1逻辑转成门极电压信号,避免版本差异带来的类型不匹配报错。
信号连接上,我的做法是用Goto和From标签代替长线连接。比如上桥臂A相的6个SM,分别对应6路PWM信号,标签命名成PA_SM1到PA_SM6,这样在子模块内部通过From模块取对应的标签,主电路图保持干净,排查信号时也能直观看到哪个子模块接收哪一路脉冲。
调制波生成部分,三相正弦波相位依次相差120度,角频率2π×50,每相分别生成m_up和m_low两路调制波。比较器的输出端如果直接连Goto标签,注意把输出数据类型转成double,避免布尔量在传递过程中出现类型不兼容。我调试中发现,很多人用了Repeating Sequence生成三角载波,但忘记把载波初始相位设置为0或按错位顺序排,结果脉冲波形完全对不上。
4.4 求解器、仿真步长与初始条件
仿真配置是整个模型能否稳定运行的最后一道关卡。我的推荐设置是:固定步长离散求解器,步长5e-6秒,仿真时间0.6秒。如果发现电流波形毛刺明显,把步长缩到1e-6秒;如果仿真速度太慢,可以先把载波频率降到1kHz再调。核心原则是每个载波周期内至少要有几十个采样点,2kHz载波对应500μs周期,5e-6步长就是100个点,足够覆盖PWM边沿。
Powergui里把仿真类型设置为Discrete,采样时间与Simulink步长保持一致。电容初始电压、桥臂电抗、调制波相位这些初始条件在仿真开始时的顺序也很重要。如果直接用0.6秒作为仿真时长,前0.1秒会看到明显的启动暂态,后半段才是稳态波形。为了节省时间,可以先把仿真时长设为0.15秒观察启动,确认没有发散后,再拉到0.6秒看完整稳态。
另外,子模块电容最好加一个很小的等效串联电阻,比如0.01Ω。这个电阻在原理图上可有可无,但在数字仿真里能有效抑制电容电压的数值振荡,尤其当你用固定步长离散求解器时,这个小电阻能明显减少模型在开关瞬间出现高频数值振荡的风险。
5. 开环结果怎么判断:波形验证与常见问题排查
5.1 开环结果应该长什么样:三组关键波形
开环仿真跑完,先别急着调参数,按顺序看三组波形。
第一组是交流侧相电压对直流母线中点的波形。理论上N=6时应该看到7个电平的阶梯波,电平间隔约66.7V,从约-200V到约+200V。正弦调制波通过载波比较后映射到这7个电平上,波形整体轮廓是正弦。如果电平数明显少于7,或者某个电平长时间不出现,首先检查载波相位差和上下桥臂调制波互补性,这是最可能出错的两个点。
第二组是交流侧负载电流。带10kVA负载时,相电流峰值大约28.9×√2≈41A,波形应接近正弦。稍微有一点开关纹波是正常的,但如果纹波像锯齿一样大,检查桥臂电抗和负载电感是否偏小,或者载波频率太低。如果电流有明显的直流偏置,重点关注上桥臂和下桥臂调制波是否完全对称,很小的直流分量会导致电流偏置。
第三组是任意一个子模块的电容电压。理想情况下应该在66.7V附近小幅波动,纹波幅度与电容容值、输出功率成反比。5mF电容在10kVA负载下纹波峰峰值大约3到5V,占比5%左右。如果纹波远大于这个值,说明电容容量偏小;如果看到某几个子模块电压明显偏离其他子模块,检查这路PWM信号是否接错位置,或者载波相位是否有误。
5.2 环流、二倍频波动与启动暂态
开环仿真中还有一个容易被误判为故障的现象:桥臂电流中含有明显的二倍频环流分量。这是MMC的固有特性,不是模型错误。由于上、下桥臂的瞬时功率不完全平衡,桥臂电流会在上、下桥臂之间形成环流,频率以二倍基波为主。开环不采取环流抑制时,这个分量会比闭环时明显,桥臂电流波形看起来像正弦上叠加了一个二倍频波动。
判断方法是看同一相上桥臂电流和下桥臂电流之和。如果两者之和是一个在0附近波动的交流分量,说明环流确实存在;如果这个和还有明显的直流分量,那反而是模型出了问题,比如直流母线电压或调制波存在不对称。环流的存在会让IGBT电流峰值略大,但对开环验证来说不必过度担心,合理范围的桥臂电抗就能把它控制在可接受水平。
启动暂态也要留意。开环启动瞬间,电容电压从初始的66.7V开始,经过几个工频周期后会稳定到平衡状态。这个过程中电流会有一定冲击,如果冲击大到数值发散,多半是电容初始电压设置被忽略了。正常启动时,前0.1秒电流幅值会有轻微振荡,然后迅速收敛。如果你发现电流振荡一直不衰减,甚至越来越大,优先检查桥臂电抗是否太小,其次检查负载是否过重、调制比是否过高,这几项是开环稳定性的主要影响因素。
5.3 常见问题速查表与调试顺序
仿真中遇到问题先别急,下面这张表基本覆盖了N=6开环MMC仿真最常见的坑:
| 现象 | 常见原因 | 解决思路 |
|---|---|---|
| 仿真几步就发散 | 电容未设初始电压、桥臂电抗偏小 | 电容初始电压设为66.7V,Larm取2到3mH |
| 相电压电平数少于7 | 载波相位差不对、上下桥臂不互补 | 检查六路载波相位0/60/120/180/240/300度 |
| 电容电压整体漂移 | 调制波直流分量不为0 | 上桥臂0.5-0.5m×sin,下桥臂0.5+0.5m×sin |
| 电流毛刺特别多 | 求解步长过大 | 步长缩到5e-6秒甚至1e-6秒 |
| 开关管报错或仿真很慢 | 门极信号类型不匹配、器件数多 | 加Simulink-PS信号转换,必要时降载波频率 |
| 输出电压幅值偏低 | 桥臂电抗压降、调制比裕量不足 | 调制比从0.8起步,观察后再调到0.85以上 |
调试顺序上,我的经验是四个步骤逐步推进。第一步,空载或带很小负载,确认相电压的7电平阶梯波和幅值正确;第二步,加额定负载,观察电流波形和电容电压纹波;第三步,改变调制比,例如从0.7到0.9,看电压幅值是否按比例变化,这一步是验证调制关系是否正确的关键;第四步,提高载波频率,看波形纹波是否改善。
我自己每次调试只改动一个变量,并且记录下来。比如想验证载波频率的影响,先把其他参数全部固定,只改fc,跑完存下波形再改下一个。很多人喜欢同时调三个参数,结果波形变了都不知道是哪个参数引起的,这种试错方式在MMC仿真里效率极低。用这种“单变量对比”的调试方式,通常一两个小时内就能把开环模型调到满意的稳态状态。
最后再分享一个小习惯:把每次仿真得到的电容电压纹波、相电压THD、环流峰值这几个数记在一个表格里。N=6这个规模改一个参数,这些指标的变化都很直观,做几组对比之后,你就能建立对MMC参数设计的直接手感。这套底子打好了,后面加上电容电压均衡和环流抑制控制,你会发现调试节奏顺畅很多。开环看似简单,它其实是整个MMC仿真链条里最值得先做扎实的一环。