MMC柔性直流输电Simulink仿真:N=6开环模型搭建与载波移相PWM实现
2026/9/10 11:05:29 网站建设 项目流程

做柔性直流输电相关的仿真,MMC(模块化多电平换流器)是绕不开的一个坎。这两年陆陆续续帮实验室几个师弟看过MMC的Simulink模型,发现大家第一次搭的时候基本都会卡在几个相同的地方:子模块电容电压不均衡、载波移相的角度算错、桥臂电抗参数选得离谱导致环流爆炸。这篇就以N=6的开环MMC仿真为例,把整个建模、参数设计、调制实现和排错过程完整过一遍,希望能让后来的人少走点弯路。

先说清楚N=6是什么概念。MMC每个桥臂由N个子模块(SM)串联而成,N=6意味着每个桥臂有6个半桥子模块,对应输出7电平的相电压波形。这个规模在工程上算很小的验证级配置,但对于学习MMC的工作原理、验证调制算法、观察电容电压波动规律来说完全够用,而且仿真速度比N=20以上的模型快得多,特别适合拿来跑通整套思路。

1. MMC仿真为什么值得自己完整搭一遍

很多人会问,现在Matlab/Simulink自带的电力电子库和示例模型里不是有MMC的现成模块吗?直接拖出来用不就行了?确实,Simulink里有一个MMC库模块,也可以用Full-Bridge MMC之类的示例,但你要真用过就会发现,直接用现成模块会留下两个麻烦。

第一,现成模块的封装层级很深,参数配置界面里的项非常多,直流侧电压、子模块电容、桥臂电抗、损耗参数、IGBT导通压降等等一整套东西堆在一起。对于只想验证某个控制算法的人来说,这个封装反而成了障碍,因为你看不到每个子模块内部到底是怎么工作的,一旦波形不对,很难定位问题是出在拓扑接线还是控制逻辑。第二,现成模块往往用的是平均值模型或者简化模型,和你要做的详细开关模型在动态特性上有差异,研究谐波特性、开关频率相关问题时就不够用。

所以我的建议是:至少完整手搭一次N=6的基于IGBT开关管的MMC模型。这个过程能让你把MMC的拓扑连接关系、子模块工作状态、电容电压波动机制、调制信号生成逻辑全部理清楚。N=6的好处在于,每个桥臂只有6个子模块,模型复杂度适中,仿真速度也能接受——我用普通的办公笔记本,步长设在10微秒,跑0.5秒的仿真大约几分钟就能跑完,调试起来非常方便。

从原理层面看,MMC和传统的两电平VSC有本质区别。两电平换流器靠PWM直接生成高压脉冲,每个桥臂只有一个开关管位置,电压谐波全靠滤波器和高的开关频率来抑制。MMC则是把很多个子模块串联起来,每个子模块就是一个小的半桥电路(两个IGBT加一个电容),通过控制子模块投入或切除的数量,让桥臂电压阶梯式地逼近正弦波。子模块数量越多,电平数越多,波形越接近正弦,谐波含量越小。N=6时是7电平,波形已经能看出明显的阶梯形状,但谐波已经比两电平好太多了。

开环控制是另一个值得理解的定位。开环的意思是不做电压电流反馈闭环,直接给定调制信号去控制开关管,输出波形完全由调制策略和主电路参数决定。开环仿真的意义主要有两个:一是验证调制算法的正确性,看载波移相PWM或者最近电平逼近生成的阶梯波是否合理;二是观察主电路参数对波形的影响,比如电容大小对电压波动的影响、桥臂电抗对环流的抑制效果。这些观察都是在闭环设计之前必须做的基础工作——你总得先确认开环模型本身能正常工作,再去加闭环控制才有意义。

2. MMC工作原理与N=6子模块配置详解

2.1 主电路拓扑与子模块工作状态

MMC的三相主电路拓扑是:每相有上下两个桥臂,每个桥臂由N=6个子模块和一个桥臂电抗器L串联构成。上下桥臂的连接点就是该相的交流输出端。6个桥臂的结构完全对称,这也是MMC模块化设计的核心优势——大规模生产时只需制造标准化的子模块单元,然后串联堆叠即可。

每个子模块是半桥结构:两个IGBT(T1和T2)串联,反并联两个续流二极管(D1和D2),直流侧并联一个电容C。子模块有三个工作状态,分别对应不同的开关组合:

投入状态(T1导通、T2关断):此时电容被接入桥臂回路,电流给电容充电或放电,具体取决于电流方向。这个状态下子模块的输出电压等于电容电压Vc。

切除状态(T1关断、T2导通):电容被旁路,电流从T2或D2直接流过,子模块输出电压为0,电容电压保持不变。

闭锁状态(T1和T2都关断):这个状态在正常调制时不使用,只在启动预充电或故障保护时出现。电流通过D1或D2流动,电容只能充电不能放电。

理解这三个状态的关键在于:电容电压的方向永远是正的,而电流方向决定了电容是充电还是放电。所以在设计均压算法时,必须同时知道电容电压的排序和当前桥臂电流的方向,二者缺一不可。

2.2 N=6时的电平分析与桥臂电压关系

每个桥臂6个子模块,每个子模块输出要么是Vc要么是0,所以桥臂电压可以取0到6Vc之间的整数倍阶梯值,共7个电平。对三相MMC,相电压(上下桥臂中点相对直流中点)的电平数是N+1=7,线电压电平数是2N+1=13。

这里要特别注意一个看似矛盾的地方:交流输出相电压的峰值是Vdc/2,而每个桥臂6个子模块的电容电压之和是6Vc。为了让桥臂能够输出从0到Vdc的电压范围,必须满足6Vc = Vdc,即每个子模块的电容额定电压是Vdc/6。这是MMC最基础的电压约束关系:N个子模块的电容电压之和等于直流母线电压

用数学表达式来描述桥臂电压关系:对A相上桥臂,理想情况下输出电压为Vdc/2 - Va_ref(Va_ref为A相调制参考电压),下桥臂为Vdc/2 + Va_ref。也就是说,上下桥臂电压之和恒等于Vdc,交流输出电压只是上下桥臂的分压点移动而已。这个关系在仿真模型的电压验证环节非常有用——你可以通过监测上桥臂电压和下桥臂电压之和是否恒等于Vdc来判断模型是否正确。

2.3 开环控制在整个系统里的定位

开环控制意味着调制波的幅值、频率、相位都是预设值,不随负载变化而调整。在MMC的完整控制体系里,通常需要三层的控制:外环功率/电压控制、内环电流控制、底层调制和均压控制。开环仿真直接跳过前两层,只保留底层调制和均压控制,或者甚至连均压都不做,只看纯调制的效果。

这种简化能帮你把问题分离开。如果你一开始就上了双闭环,然后发现波形不对,你很难判断是电流环参数没调好、还是调制逻辑写错了。而开环仿真里唯一需要关注的动态过程就是电容电压波动和环流,问题域小得多。等你把开环跑通了,波形、电容电压波动规律都符合理论预期,再加闭环就会非常有底气。

3. 调制策略选型:为什么推荐载波移相PWM

3.1 载波移相PWM(CPS-PWM)的实现原理

MMC常用的调制策略有两类:载波移相PWM(Carrier Phase Shifted PWM,CPS-PWM)和最近电平逼近(Nearest Level Modulation,NLM)。NLM适用于子模块数量很多的场合(比如柔性直流输电工程动辄上百个子模块),因为电平数多,用最近电平逼近就足够精细。但对于N=6的研究性仿真,CPS-PWM更为合适。

CPS-PWM的核心思路:每个子模块分配一个独立的三角载波,所有载波频率相同,但相位依次错开360°/N。以N=6为例,6个载波的相位分别是0°、60°、120°、180°、240°、300°。每个子模块用自己的载波和同一个调制波比较,生成该子模块的驱动信号。

我实测下来,在Simulink里实现CPS-PWM最方便的方式是用Repeating Sequence模块生成三角载波,然后给每个子模块的载波设置不同的相位移。也可以用PWM Generator模块,但它处理多载波相移时配置起来反而啰嗦。注意:调制波的频率是工频50Hz,载波频率一般选1000Hz到2000Hz之间,频率比(载波频率/调制波频率)是20到40。载波频率太低则谐波特性差,太高则仿真速度慢、步长要相应缩小。

3.2 为什么开环阶段用CPS-PWM优于NLM

CPS-PWM在开环仿真中的优势有几个。第一,每个子模块的开关频率均衡(都是载波频率),电容电压的自然波动特性更直观,方便你观察均压效果。NLM则是每个控制周期根据电压排序结果决定哪些子模块投入,开关频率不均匀,分析起来更复杂。第二,CPS-PWM的等效开关频率是N倍的载波频率,波形谐波特性好,频谱分析时能看到明显的谐波抵消效果,这对理解MMC为什么谐波小很有帮助。第三,CPS-PWM的占空比是连续变化的,输出阶梯波的宽度和位置都有明确的解析关系,便于理论验证。

NLM这边也不是不能用,它在N=6时输出7电平,控制逻辑就是根据调制波幅值判断当前应该投入几个子模块。但NLM对电容电压均衡的要求更高,每个控制周期都要做排序和选择,如果电压波动大,会出现频繁投切、开关次数暴涨的问题。N=6这种小规模模型本来就没必要用NLM,等以后做N=20以上的模型再用也不迟。

3.3 电容电压排序均压的必要性

开环CPS-PWM遇到的一个核心问题是:电容电压会自然发散。原因是每个子模块的载波相位不同,投入时间不同,导致各电容的充放电量不一致。如果不加均压控制,长时间运行后各电容电压会出现明显偏差,严重时某些子模块电容电压过高,威胁器件安全。

解决办法是排序均压算法,思路很简单:

  1. 每个控制周期(我一般用工频周期的1/20,或者直接用载波周期),采集6个(同桥臂)子模块的电容电压;
  2. 对电容电压排序,得到电压从低到高的序列;
  3. 判断当前桥臂电流方向。如果电流方向使电容充电,则优先投入电压低的子模块;如果电流方向使电容放电,则优先投入电压高的子模块;
  4. 结合CPS-PWM已经生成的开关信号,在需要投入的子模块中选择符合上述优先级的组合。

这里有一个细节值得注意:排序均压和CPS-PWM的开关信号之间需要协调,否则会冲突。我的做法是重新分配投入信号:先按排序结果确定当前时刻需要投入多少个子模块(由调制波决定的电平数),再从排序后的子模块列表中按优先级选择。这样既保持了载波移相的阶梯逼近效果,又实现了均压。

理论上均压算法需要在每个开关周期执行一次,对N=6的小规模模型来说计算负担很低,跑起来毫无压力。

4. Simulink建模全流程:从零到跑通

4.1 模型顶层架构规划

在动手搭模型之前,先把整体架构规划好,避免后面改起来痛苦。我把模型分成四个层级:

主电路层:三相MMC主拓扑,包含6个桥臂,每个桥臂6个子模块(封装成子系统)、一个桥臂电抗器、交流侧负载、直流侧电源。

调制层:生成6组载波信号和3相调制波信号,输出6路(每相)PWM脉冲信号。

控制层:放置排序均压算法,输入各子模块电容电压和桥臂电流,输出调整后的开关信号。

观测层:用Scope记录关键波形——三相交流电压电流、桥臂电流、子模块电容电压、环流、调制波和载波。

Simulink模型里最忌讳的就是一大坨原件堆在一起,建议从上到下按信号流方向布局:直流电源在最上端,往下是MMC主电路,再往下是调制和控制部分。层次化的好处是排查问题时能快速定位。

4.2 子模块的搭建与封装

子模块是最小的重复单元,建议花15分钟认真把它搭好并封装成Subsystem,后面复制粘贴6×6=36个(6个桥臂×6个子模块)时会省很多事。

子模块内部结构:

  • 两个IGBT/Diode模块(Simscape Electrical里是IGBT/Diode,或者用MOSFET代替也行,低电压仿真中特性差异可忽略)串联;
  • 电容C并联在两个IGBT组成的桥臂两端;
  • 中间点作为子模块的两个输出端子之一,另一端是电容的负极(同一桥臂串联的公共端);
  • 给电容的电压测量端口留出来——这是均压算法需要的关键反馈信号。

封装时设置三个外部端口:正极输出、负极输出、控制信号输入(PWM)。在封装参数里把电容值、IGBT参数作为可调参数暴露出来,方便后期批量修改。

我有一个建议:把电容电压测量信号单独引到顶层,用Goto/From模块传递到控制层,而不是在子模块内部接Scope。信号线少、模型清爽,而且数据采集统一在顶层处理,不容易漏接。

4.3 主电路接线与桥臂电抗器

主电路的连接关系依次是:直流正母线 → 上桥臂6个子模块串联 → 桥臂电抗器 → 交流输出点 → 桥臂电抗器 → 下桥臂6个子模块串联 → 直流负母线。上桥臂各子模块之间首尾串联,每个子模块的正极接前一个子模块的负极,以此类推。

桥臂电抗器的参数选择是有讲究的。工程上桥臂电抗有两个作用:一是抑制桥臂环流和故障时的冲击电流;二是参与控制换流器的功率传输能力。在仿真模型里桥臂电抗偏小会导致环流幅值很大,偏大则交流电压损失增大。开环仿真中桥臂电抗经验值一般取0.1到0.15 p.u.。

具体怎么算p.u.值?以我的模型参数为例:直流电压Vdc=10kV,额定功率P=2MW,交流输出电压有效值约为Vdc/2/√2≈3.54kV,额定电流I= P/(√3×3.54kV)≈326A。阻抗基值Zb = Vll²/P ≈ (6.13kV)²/2MW ≈18.8Ω。取0.12 p.u.则L= 0.12×18.8/(2π×50)≈7.2mH。这是教科书式的算法,但在开环仿真中不必太较真,取一个量级合理的值即可,比如5mH到10mH之间都行。重点是让环流周期和幅值看起来合理,而不是追求精确匹配工程规格。

4.4 载波移相信号生成

载波生成用Simulink的Repeating Sequence模块。参数设置:

  • 时间向量:[0 1/(2×fc) 1/fc],幅值向量:[0 1 0](或者[0 1 1 0]对应[0 1/(2fc) 1/fc 3/(2fc)],都行,只要峰值是1);
  • 载波频率fc取1000Hz;
  • 相位移:每个子模块的载波信号经过一个Transport Delay(时间延迟=相位/(360×fc))或者直接针对Repeating Sequence的采样时间做处理。

更简洁的做法是用Relational Operator比较调制波和载波,输出逻辑信号1/0直接给IGBT。这里注意Simscape Electrical的IGBT门极信号一般需要物理信号转换,加一个Simulink-PS Converter或者直接给IGBT模块的G端连Simulink逻辑信号(新版Simulink支持)。

调制波信号:三相正弦波,频率50Hz,幅值由调制比决定。调制比m的范围在0到1之间,开环仿真一般取0.85到0.95。幅值为m,频率50Hz。每相调制波连到该相6个子模块的6个比较器上,每个比较器对应不同相位的载波。

4.5 排序均压算法的S-Function实现

排序均压算法的实现方式有两种:一种是用Simulink标准模块搭出来(用Sort模块配合Multiport Switch),另一种是写MATLAB Function或S-Function。N=6的规模不大,但逻辑上排序+优先级选择还是用代码实现清晰得多,我用的是MATLAB Function模块。

核心代码逻辑大致是:

function y = voltageBalance(vc, iarm, pulse, N) % vc:当前桥臂N个子模块电容电压(向量) % iarm:当前桥臂电流(标量) % pulse:CPS-PWM输出的原始脉冲信号(向量) % 返回值y:调整后的开关信号(向量) % 根据电流方向确定排序优先级 if iarm >= 0 % 电流为正,电容充电,优先投入电压低的 [~, idx] = sort(vc, 'ascend'); else % 电流为负,电容放电,优先投入电压高的 [~, idx] = sort(vc, 'descend'); end % 原始脉冲中为1的个数就是当前需要投入的子模块数 n_need = sum(pulse > 0.5); % 按优先级选择n_need个子模块投入 y = zeros(N, 1); for k = 1:n_need y(idx(k)) = 1; end

这段代码的思路很直接:先用CPS-PWM得到当前时刻应该投入的子模块数量n_need,再依据电容电压排序和电流方向决定具体投入哪几个。这样既保留了载波移相调制波形的阶梯逼近效果,又实现了电容电压均衡。

注意MATLAB Function模块在仿真步长内每步都会执行,排序算法的时间开销不小,但N=6的计算量很小,实测不会拖慢仿真。如果以后扩展到N=20以上,建议改成C-MEX S-Function或者用Hit Crossing模块做事件触发,只在需要投切的时刻执行均压算法。

4.6 仿真参数设置与数值问题

这一部分最容易被忽略,但往往决定了仿真能不能正常跑完。求解器参数设置:

  • 求解器类型Variable-step,选ode23tbode15s。电力电子仿真属于刚性系统,IGBT开关瞬间的高频特性要求数值积分器有很强的稳定性,ode45这类非刚性求解器极容易报“步长太小”的错误。
  • 相对误差:默认1e-3可能不够,我一般设为1e-4。相对误差放宽会让波形毛刺增多,太紧则仿真速度明显下降。
  • 最大步长:建议设为载波周期的1/20到1/50。如果载波频率是1000Hz,周期1ms,最大步长设为2e-5到5e-5秒。这个约束是必须的,否则求解器会跨过开关瞬间,波形失真。
  • 仿真时间:开环验证不需要太长,0.2到0.5秒足够观察到稳态波形和电容电压波动趋势。

电力电子仿真常见的数值报错是“Zero-crossing detection”相关的问题。Simulink默认会做过零检测,但当IGBT开关频率较高时会引发步长过小甚至仿真卡死的现象。我的建议是在仿真配置里把过零检测选项在某些支路关闭,只保留关键节点的过零检测。这个操作虽然看起来是细节,但实际跑模型时能节省一半以上的调试时间。

5. 参数计算与仿真结果分析

5.1 关键参数从设计到落地

为了让读者能直接照做,我给出一个我实际跑通过的完整参数表:

参数数值说明
直流母线电压 Vdc10 kV
子模块数/桥臂 N6
子模块电容额定电压1667 V(10kV/6)
子模块电容 C4 mF按时间常数30ms估算
桥臂电抗 L7 mH约0.12 p.u.
载波频率 fc1000 Hz
调制比 m0.9
交流负载纯电阻:每相8Ω对应约2MW功率
仿真步长上限20 μs

子模块电容的估算方法值得展开说一下。MMC子模块电容的设计准则是把电容电压波动限制在额定值的±5%到±10%范围内。工程上常用能量法:电容储存的能量与换流器额定功率之比(等效储能时间常数H)一般取30到40ms。对桥臂电流峰值约为交流相电流峰值的一半这个特性,可以用简化公式估算:

C = (N × S) / (3 × m × Vc² × ω × ε× N) 这类公式看起来很繁琐,实操中我更推荐直接试凑法:先取一个经验值C=3mF开始仿真,观察电容电压波动幅度,如果超过10%就加大电容,如果波动很小(小于3%)就减小电容。因为开环仿真本身不需要精确匹配工程指标,电容波动的规律性比绝对值更重要。我实测4mF时波动约6%,比较合理。

5.2 开环仿真的特征波形怎么看

模型跑通之后,重点观察以下几个关键波形:

交流输出电压波形:应该是7电平的阶梯波,台阶宽度和高度接近正弦规律。如果你看到阶梯波的台阶高度明显不均匀,说明电容电压已经发生偏移,均压算法没有正常工作。

子模块电容电压波形:N=6时同桥臂6个子模块的电容电压应该围绕1667V上下波动,波动频率是工频的2倍(100Hz),这是因为每个工频周期内电容完成两次充放电周期。波动幅度在±5%到±10%之间是正常的。如果看到电压持续上升或下降没有周期性回归,说明均压算法失效或者调制信号本身有偏移。

桥臂电流波形:桥臂电流包含工频交流分量和环流分量。工频分量在上下桥臂之间是互补的,而环流是在上下桥臂内部循环流动的二倍频分量。开环仿真中桥臂电流的波形应该是正弦叠加一个较小的二倍频脉动,脉动幅值应该在工频分量的10%以下。如果二倍频分量很大,说明桥臂电抗值偏小。

相电流波形:对于纯电阻负载,相电流应该和相电压同相位,波形接近正弦但带有与阶梯波对应的微小纹波。

还有一个容易被忽略的观测点:上下桥臂电压之和。前面说过理想情况下上桥臂电压加下桥臂电压恒等于Vdc。如果这个和偏离Vdc,说明子模块电压出现了直流偏置异常,这往往是调制波指令和实际导通数不匹配导致的。排查思路是检查调制波的归一化基准是否正确——调制波幅值应该是相对于Vdc/2还是Vc,这里搞错会导致投入子模块数偏多或偏少。

5.3 环流现象与桥臂电抗的取值逻辑

环流是MMC特有的物理现象。由于上下桥臂同时导通,存在一条不经过交流侧的电流通路——从直流正母线经上桥臂、下桥臂回到直流负母线。这条通路上的电压源是各子模块电容电压的纹波分量(主要是二倍频分量),因此环流也以二倍频为主。

开环仿真里环流抑制器还没加,所以你会直接看到二倍频环流叠加在桥臂电流上。如果桥臂电抗取太小(比如1mH),环流可能比工频分量还大,导致桥臂电流峰值异常偏高,电容电压波动加剧。增大桥臂电抗可以抑制环流,但代价是增大交流侧电压降落和系统体积成本。在开环仿真阶段,可以做一个简单的参数扫描:把L从5mH改到10mH,观察环流幅值的变化,建立对这两个量之间制约关系的直觉。这种直觉对后续设计闭环环流抑制器非常有帮助。

6. 常见问题与排查技巧实录

6.1 高频报错与运行失败问题速查

现象可能原因排查与解决
仿真报“步长在0时刻附近持续缩小”使用了非刚性求解器(如ode45);最大步长设置过大换ode23tb或ode15s;减小最大步长到载波周期1/20以下
子模块电容电压持续升高直到发散均压算法未启用;排序代码中电流方向判断错误加排序均压;检查iarm符号与电容充放电对应关系
交流输出电压波形不是7电平阶梯载波相位移设置错误;载波数量不足6个检查6路载波相位差是否为60°;检查每个子模块是否接入了独立载波
部分子模块电容电压上升、部分下降载波与子模块之间的映射关系错乱核对每个子模块使用的载波相位编号是否与其物理位置对应
相电流波形严重畸变调制波与载波的基准不一致;调制比超限确认调制波幅值≤1;检查调制波的零点是否对准直流中点
仿真结果与理论值偏差大但无明显错误相对误差设置过宽松;电容值偏大导致动态特性变慢将相对误差收紧到1e-4;检查电容值是否合理
桥臂电流环流极大、波形杂乱桥臂电抗过小;直流侧缺少滤波增大桥臂电抗;在直流侧加串联小电感或LC滤波

我要特别强调第一行那个报错,这是新手100%会遇到的问题。默认的求解器是ode45,电力电子这种含有强烈开关动作的系统对它来说就是灾难。开关瞬间电压电流急剧变化,为了让误差在容忍范围内,求解器被迫把步长缩到纳秒级,然后陷入恶性循环——步长越小,完成一个开关周期需要的步数越多,仿真时间长得无法接受。我见过有人以为这是模型搭错了,反复检查拓扑折腾了两天,最后只是把求解器换成ode23tb就好了。所以第一步先排查求解器配置,别急着怀疑模型。

6.2 电容电压发散的深层原因与修正

电容电压发散是开环MMC里最经典的问题。如果你关掉均压算法直接跑CPS-PWM,大概几秒(仿真时间)之后就能看到各子模块电容电压开始分化,最终有的冲到2000V以上,有的跌到1300V以下。很多教材说“CPS-PWM天然具有电容电压自均衡特性”,这种说法有前提条件:它要求各子模块参数完全一致,且开关器件理想对称。实际仿真中数值误差、IGBT压降差异、电容初始值不一致都会破坏这种自均衡。

彻底的解决办法还是排序均压。但如果想先不加均压,观察纯CPS-PWM的自均衡能力,可以把所有子模块电容的初始电压设成完全一致,并给IGBT模块设置完全对称的参数。你会发现电压发散速度明显减慢,但依然存在。这个观察很有意义——它告诉你均压算法到底解决了什么问题,为什么工程上必须配置专门的均压控制。

排序均压的另一个容易踩的坑是采样周期不匹配。如果均压算法的执行周期远大于载波周期(比如放在1kHz的控制任务里,但载波是2kHz),那么排序结果和实际开关状态之间会有半个甚至一个载波周期的延迟,导致均压效果变差。仿真时建议均压逻辑每个仿真步长都执行一次,N=6时计算量完全可以接受。

6.3 仿真速度太慢时的优化手段

跑0.5秒仿真如果花了十几分钟,一定存在问题。优先检查这三件事:

第一,有没有意外的连续模块拖慢求解器。Simulink里某些模块(比如Transport DelayMemory)会强制求解器减小步长。我早年用Transport Delay做载波相移,仿真速度掉了近10倍。后来改用给Repeating Sequence直接设置独立相位参数的方式,速度立刻恢复了。

第二,载波频率和最大步长的平衡。载波频率从1000Hz提到2000Hz,仿真速度大约会降一半以上。开环阶段建议载波频率先用1000Hz把所有逻辑跑通,最后再根据谐波分析需求决定是否提高。

第三,示波器数据点太密。如果把Scope的采样率设置成和仿真步长一致,记录的数据量巨大,甚至可能拖垮内存。建议把Scope的采样时间手动设置为1e-4秒(10kHz采样率),人眼观察波形完全够用,仿真速度能提升不少。

6.4 从开环到闭环的过渡建议

开环模型跑通后,一个自然的后续是加闭环控制。基于这个N=6模型,我建议按这个顺序扩展:

  1. 加环流抑制器:检测桥臂电流中的二倍频分量,用PR控制器生成补偿电压叠加到调制波上,观察环流幅值下降效果;
  2. 加电压平衡外环:让各相电容电压的平均值跟踪设定值,整定PI参数,观察动态响应;
  3. 加功率外环和电流内环:实现有功无功解耦控制,这时需要引入Park变换和dq坐标系下的电流控制。

每一步扩展之前,都要先确认当前层级的仿真结果是正确的。N=6的规模适合做完整的控制算法验证,跑通了再移植到更高电平数的模型,这是比较稳妥的路径。

7. 实操总结与下一步方向

最后分享几条我做完整个N=6开环仿真后的体会。

第一,起步阶段别追求用最先进的算法。载波移相PWM加排序均压是MMC控制里最经典也最成熟的做法,先把这套组合玩明白,再去尝试模型预测控制、无差拍控制这些进阶算法会顺畅得多。我见过有师弟一上来就想上模型预测控制,结果被计算量和调参折磨得欲仙欲死,最后还是老老实实回来从基础做起。

第二,参数不要盲目抄论文。期刊论文里的参数往往服务于某个特定的验证目标,换一个工况就要做大量调整。仿真不是实验,参数改起来成本低,建议自己先按工程经验估算一组初始值,再通过参数扫描观察趋势,形成自己的判断。

第三,波形的观察比跑通更重要。很多人把模型跑通、看到正弦波形就认为大功告成了,其实MMC仿真最有价值的部分恰恰是那些“看起来不正常”的细节——电容电压波动为什么是这个频率、环流为什么滞后某个角度、阶梯波台阶宽度和调制比有什么关系。把这些规律搞明白,仿真才算真正起到了学习工具的作用。

N=6的规模虽然小,但麻雀虽小五脏俱全。把这一套流程完整走一遍,后续无论做更高电平数的MMC仿真、还是做MMC的工程应用研究,都会因为有了一个扎实的底层模型而事半功倍。

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

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

立即咨询