
做电力电子仿真的朋友这两年基本绕不开MMC。模块化多电平换流器MMC这个名字在柔性直流输电、新能源并网、电机驱动里出现频率越来越高尤其是MMC-HVDC几乎成了研究生课题和工程项目的标配。我最初接触这个方向时最大的感受是原理图看着不复杂就是三相桥臂各串一堆子模块但真的在MATLAB/Simulink里从零搭一套双端MMC-HVDC系统能一周跑通已经算顺利了。踩坑的地方很多网上资料又偏理论能直接照着做、还能跑出正确波形的教程并不多。这篇文章就是我自己的实践总结。我会从为什么选MMC-HVDC讲起再带你算清关键参数然后给出一套完整的Simulink建模思路最后把我的报错记录和排查方法整理成速查表。适合刚接触柔性直流仿真、正在做毕业设计或者准备做工程预研的读者也适合想快速了解MMC控制逻辑的工程师。内容偏实操纯公式推导不会展开太多但每一步都有计算逻辑和建模顺序照着做能少走不少弯路。1. 为什么选择MMC-HVDC从两电平到模块化多电平的技术跃迁1.1 两电平VSC的工程瓶颈柔性直流输电的核心是电压源换流器VSC但最早的两电平VSC在高压大容量场景下并不好使。两电平换流器每个桥臂需要大量IGBT直接串联串联器件的动态均压问题极其麻烦。为了保证波形质量两电平换流器必须工作在较高的开关频率下损耗大、电磁干扰严重交流侧还要加体积庞大的滤波器。更麻烦的是直流故障穿越。两电平VSC的直流侧一旦短路故障电流上升极快且没有天然的限流能力业内当时只能用直流断路器硬切成本极高。这些瓶颈让两电平VSC长期停留在中低压配电领域很难跨入高压输电。1.2 MMC的结构设计与“模块化”魔力MMC的出现把这些问题绕开了。它的基本结构是三相六桥臂每个桥臂由一个电抗器和N个子模块串联而成。子模块最常用的是半桥结构两个IGBT、两个续流二极管和一个悬浮电容。通过控制上下管子的导通和关断子模块可以输出电容电压或零电平这就是“投入”和“切除”两种工作状态。所有桥臂都闭锁时则进入第三态“闭锁”用于启动预充电和故障保护。“模块化”三个字的关键在于每个子模块的电容是悬浮的不需要外部独立电源子模块之间通过桥臂电感自然实现能量均衡。换流器通过阶梯波逼近正弦电压开关频率可以压得很低波形质量却比两电平好得多。用N1电平去逼近正弦波电平数越多谐波越小甚至可以省掉交流滤波器。另外模块冗余也更容易实现个别子模块故障可以直接旁路系统可靠性明显提升。1.3 为什么Simulink是研究MMC-HVDC的主流工具从我个人的体会看MATLAB/Simulink做MMC-HVDC仿真有几个不可替代的优势。第一Simscape Electrical元件库里有现成的IGBT、电容、电抗器、变压器和PWM发生器不用自己写底层器件模型。第二控制系统的搭建非常直观坐标变换、PI调节器、PLL锁相环这些模块直接拖过来连线就行很适合先快速验证控制算法。第三Simulink在工业界和学术界的使用率都很高很多论文里的控制框图几乎可以直接搬到模型里对照文献复现结果很方便。当然它也有缺点——模型一旦搭得太大仿真速度会让人崩溃这点我会在第5章专门讲怎么优化。2. 建模前的数学准备先算清楚参数再画模型2.1 一个可复刻的参考算例我建议刚开始不要一上来就照搬论文里的几百电平模型那个仿真速度会让你怀疑人生。先做一个中等规模的验证模型跑通逻辑后再扩展。这里给出一套我常用的参考算例交流系统额定线电压10kV直流侧电压±10kV即极间20kV额定功率10MW基波频率50Hz每相桥臂子模块数N10。子模块电容电压额定值就是直流电压除以子模块数即20kV/102kV。有些读者可能觉得10个子模块太少了波形不够“柔”。但你要理解N10对验证控制算法、观察环流特性和启动过程完全够用。模型里每个子模块都是完整开关模型10个模块已经意味着单桥臂有10个IGBT对三相六桥臂一共60个IGBT对仿真负担已经不轻了。等逻辑全部验证完再考虑把N增加到21或者101做更贴近工程的验证。2.2 子模块电容与桥臂电感的取值逻辑子模块电容是MMC最核心的储能元件它的取值直接影响电容电压波动率。太小的电容会导致电压波动过大影响输出波形和子模块安全太大的电容则成本高、体积大动态响应也变慢。工程上一般把电容电压波动率δ控制在5%~10%。简化估算电容容值可以使用如下经验公式C ≈ P / (3 × N × ω × δ × Uc²)其中P为系统额定功率WN为每臂子模块数ω为基波角频率rad/sδ为允许的电容电压波动率Uc为子模块电容电压额定值V。代入刚才的算例P10×10⁶WN10ω2π×50≈314rad/sδ0.1Uc2000V得到C≈10⁷/(3×10×314×0.1×4×10⁶)≈0.00265F也就是2650μF。实际取3300μF比较常见留点裕量同时让波动比理论值更小一点。桥臂电感的取值主要看两个维度抑制环流和限制故障电流上升率。工程经验值通常是0.1~0.15p.u.。直流侧基准阻抗Zb Udc²/(2P)代入Udc20kV、P10MWZb20Ω。若取0.1p.u.桥臂电抗为2Ω对应电感L2/314≈6.4mH。我一般取5~8mH既有效抑制二倍频环流又不会把动态响应拖得太慢。表参考算例关键参数汇总参数数值说明交流线电压10 kVRMS50 Hz直流电压±10 kV极对极20 kV额定功率10 MW双端潮流可反转每臂子模块数N10用于快速验证子模块电容电压2 kV直流电压/N子模块电容3300 μF波动率约8%桥臂电感6 mH约0.1 p.u.载波频率1 kHz用于载波移相调制2.3 子模块开关状态与电容电压波动半桥子模块的三种工作状态必须理解透。投入状态上管导通、下管关断电流从电容正极流入时给电容充电从负极流入时电容放电输出端电压为电容电压。切除状态上管关断、下管导通电容被旁路输出端电压接近0。闭锁状态两个管子都关断电流只能通过二极管续流这个状态在启动预充电和故障保护时尤其重要。电容电压波动不是杂乱无章的它包含基频和二倍频分量其中二倍频分量是桥臂环流的直接推手。电容电压的波动除了导致输出电压偏差还会通过子模块调制过程在桥臂内部形成二倍频环流这个环流不经过交流侧和直流侧只在三相桥臂之间流动却会增大损耗和器件应力。所以后面控制系统里必须加环流抑制环节。3. Simulink模型搭建分层结构与控制环实现3.1 顶层模型布局与端口设计Simulink模型我强烈建议按模块化思路搭别把所有东西塞在一个大画布里。顶层模型至少分三块区域送端换流站、直流线路、受端换流站。送端交流系统用理想电压源串阻抗模拟受端交流系统根据控制目标决定是接电压源还是接负载。如果只验证功率传输受端接一个较大的RL负载也可以但要想看到稳定的受端交流电压波形建议还是接带内阻的交流电源让受端换流器工作在定交流电压控制模式。直流线路建议用集中参数π模型不要用分布参数输电线路模型。分布参数模型在电磁暂态仿真中需要更小的仿真步长整个系统跑起来会慢很多。对于短距离背靠背模型直接用RC串联滤波模拟直流线路阻抗就够用。3.2 子模块封装与触发脉冲分配在Simulink里子模块可以用Subsystem封装里面放两个IGBT/Diode半桥开关、一个电容、一个电压测量端口和一个脉冲输入端口。封装后从外部看就是一个“黑盒”引脚包括输入脉冲、电容电压输出和主电路连接端口。封装的好处是模型整洁也方便统一修改子模块参数。触发脉冲的分配是这个模型里最容易出错的地方。MMC需要的不是简单的PWM波而是要保证每个子模块电容电压平衡。常见做法是载波移相PWM配合电容电压排序算法先通过调制波与各子模块的三角载波比较得到该桥臂需要投入的子模块数再根据当前电容电压排序结果决定具体投入哪几个子模块。电容电压最低的优先投入充电最高的优先切除放电这样就能把能量均衡到各个模块。3.3 调制策略载波移相与最近电平逼近怎么选子模块数量少的时候优先用载波移相PWMPS-PWM。每个子模块分配一个相位互差360°/N的三角载波用同一个正弦调制波与N个载波比较输出N路脉冲。这个方法的优点是等效开关频率高、波形谐波小适合N≤24的仿真模型。缺点是N大了以后载波太多同步和排序计算开销大。子模块数量多的时候工程上更多用最近电平逼近NLM。它直接根据调制波幅值与电平阶梯的差值四舍五入到最近的整数电平再根据电容电压排序确定哪些子模块投入。NLM实现简单开关频率低但电平级数少时谐波较大。对于仿真模型我建议N≤20就用PS-PWMN50再考虑NLM这样可以兼顾速度和波形质量。3.4 控制系统外环功率/电压、内环电流与环流抑制双端MMC-HVDC的控制系统是典型的级联结构。送端换流器通常工作在定直流电压和定无功功率模式受端换流器工作在定有功功率和定无功功率模式也可以让受端定交流电压这样它能给无源网络供电。外环控制器输出内环电流参考值内环在dq旋转坐标系下用PI控制器调节有功电流和无功电流输出调制电压指令。电流内环是控制系统的核心闭环。Park变换时需要锁相环PLL锁定交流电压相位pll角度一旦对不齐整个电压电流关系就全乱了仿真基本必发散。此外为了抑制桥臂间二倍频环流通常还要加一个环流抑制控制器CCSC。做法是在内环控制之外单独提取桥臂电流中的二倍频分量在二倍频负序dq坐标系下用PI调节器生成补偿电压叠加到调制波上能明显降低环流幅值。4. 实操记录双端MMC-HVDC从零到跑通的全流程4.1 先搭送端单端模型带电阻负载验证第一次搭模型不要直接上双端。我建议先搭单端MMC整流器交流侧接三相电压源直流侧接一个大电阻负载。这样只需要调内环电流和外环直流电压控制不用考虑两个换流器之间的功率配合问题。具体操作顺序第一步在Simulink中新建模型用Simscape Electrical元件库拖入三相电压源、变压器、MMC主电路和负载。第二步封装子模块并复制成完整的六桥臂结构注意桥臂电感的连接方向要一致。第三步写PWM脉冲生成逻辑——这里可以用S-Function或者MATLAB Function模块做电容电压排序也可以用自定义函数模块实现。第四步加入PLL和dq坐标系下的内环控制器。第五步设置仿真时间0.1s先用定步长离散求解器步长推荐20μs或者10μs跑一下看电容电压是否稳定。实测下来单端模型顺利跑通的时间大约需要两三周主要时间花在bug排查上。跑通标准是交流电流接近正弦电容电压稳定在2kV附近且波动范围不超过±10%直流电压稳定在20kV。4.2 在单端模型基础上扩展双端系统单端跑通以后把直流电阻负载替换成直流线路和受端MMC。受端一开始不投入控制先让所有IGBT闭锁只通过续流二极管完成不控整流给受端子模块电容预充电。预充电完成后再发解锁信号让受端控制器开始工作。这个过程和实际工程的启动逻辑一致仿真里也必须按这个时序来否则受端子模块电容没有初始电荷一解锁就过流。双端模型的控制目标需要重新规划。我给的算例里送端控制直流电压为20kV受端控制有功功率为5MW方向从送端流向受端。为了测试功率反转能力可以在仿真过程中改变有功参考值比如0.3s把功率指令从5MW改为-3MW观察两端直流电压和交流电流是否都能平稳过渡。这个动态响应过程是柔性直流输电的核心亮点也是论文里最常用的展示结果之一。4.3 启动流程与解锁时序MMC的启动流程比我一开始想象的讲究得多。直接给IGBT发脉冲启动子模块电容没电冲击电流会大得直接让仿真卡死。正确的顺序是先让交流断路器合闸所有子模块处于闭锁状态利用二极管整流桥给电容充电这个过程叫不控整流预充电。等电容电压充到额定值的70%~80%左右再解锁IGBT让调制和控制系统接管。仿真里实现这个时序很简单用一个Step模块控制解锁信号0~0.05s为0闭锁0.05s之后为1解锁。注意预充电阶段要限制交流侧的冲击电流可以在交流侧串联一个软启动电阻仿真里设置0.1s后电阻切除既简单又能看到明显的限流效果。这个细节虽然不是必须的但能让你更深入理解实际工程的启动逻辑。4.4 波形验收指标模型跑通不代表结果正确我通常会盯几个关键指标。第一交流电流波形和THD稳态时THD应该在3%~5%以下如果THD过高先检查调制策略和载波频率。第二子模块电容电压每臂10个子模块的电容电压在稳态时应该大致相等波动幅度在±8%左右如果某个电容电压持续偏离说明排序算法或者触发脉冲有问题。第三环流幅值桥臂电流中包含的交流基频分量和直流分量是正常的但二倍频环流不能太大一般要求环流峰值小于桥臂电流峰值的10%~20%如果超了检查环流抑制控制器是否生效。第四直流电压送端控制的直流电压稳态误差要小于1%动态波动小于5%。表稳态验收参考表指标参考标准对应控制环节交流电流THD5%调制策略、内环电流子模块电容电压波动±10%以内电容电压排序桥臂二倍频环流桥臂电流峰值20%环流抑制控制器直流电压稳态误差1%定直流电压外环功率阶跃响应时间50~200ms外环PI参数5. 常见问题与排查技巧实录5.1 仿真发散、电流瞬间爆炸这个是我见过最多的问题几乎每次新搭模型都会遇到。最常见的原因有三个。第一个是控制极性接反了电流反馈符号或者Park变换角度不对导致负反馈变成正反馈。第二个是仿真步长太大定步长超过50μs以后高频PWM信号容易被采样失真导致控制不稳定。第三个是启动时序不对子模块电容没预充电就解锁IGBT冲击电流直接把仿真数值打飞。排查思路先降低步长到5μs试跑把控制器输出增益大幅调小确认系统在“弱控制”下不跑飞再逐个检查Park变换的角度方向和PI输出极性。如果还不收敛就断开调制环节直接用一个小幅值的正弦调制波验证主电路本身是否正确。5.2 电容电压不平衡所有子模块都用同一个调制波为什么电容电压会漂移关键在于哪个子模块被投入是由排序算法决定的排序算法一旦没在每一个开关周期内及时更新或者采样延迟太长就会出现某些模块持续充电、某些模块持续放电最后电压拉开差距。解决办法是保证电容电压采样和排序计算在同一个中断周期内完成。另外如果用了定步长求解器步长必须大于排序算法的计算耗时否则实际执行顺序会乱套。我的一个实用技巧是仿真初期允许电容电压波动大一点先把排序算法跑起来等电压进入波动范围后再把控制环切入。这种“分步上电”的调试方法能极大减少排查时间。5.3 仿真速度慢到怀疑人生完整开关模型跑双端MMC-HVDC速度慢是必然的。N10、每臂10个模块意味着模型中有大量开关器件Simulink每步都要做开关导通状态判断速度自然上不去。优化方向有三个。第一个是减少不必要的模块数用N6或N10验证控制逻辑不要一开始就上N101。第二个是用平均模型替代开关模型在Simulink里用受控电压源和受控电流源模拟桥臂的输出特性不用具体IGBT器件仿真速度能提升一个数量级适合长时间动态分析和控制参数整定。第三个是关闭不必要的波形记录和示波器尤其是采样率非常高的记录模块非常拖慢仿真。把关键数据用To Workspace模块存下来仿真结束后再画图比在线示波器省很多时间。5.4 PLL失锁导致整个系统失控这是双端模型最令我头疼的问题之一。受端换流器需要PLL锁定交流母线电压相位但交流系统一旦出现扰动或者功率反转PLL可能短暂失锁进而导致调制电压相位错乱电流内环彻底失控。解决办法是给PLL控制器适当降低带宽别让它对高频干扰太灵敏同时确保PLL的PI参数和内环电流控制器的时间常数错开避免两个环路互相影响。6. MMC-HVDC仿真的真正价值与扩展方向6.1 从仿真到工程柔性直流的核心应用场景MMC-HVDC之所以受重视是因为它解决了传统直流输电适应场景窄的痛点。传统电网换相换流器LCC-HVDC依赖交流系统提供换相电压遇到弱交流系统或者无源网络就会“罢工”。MMC-HVDC是电压源型换流器可以独立控制有功和无功功率甚至能给孤立负荷供电这让它在海上风电送出、城市电网互联、孤岛供电等场景里非常有优势。很多高校和科研院所的研究生课题都围绕这个方向展开企业招聘时也更看重有MMC建模和控制经验的候选人。你在Simulink里跑通的这套模型本质上和工程里的控制保护逻辑是相通的区别只是工程上子模块数量更多、控制器多了一层冗余设计。把仿真吃透后面看工程文档会从容很多。6.2 后续可以扩展的方向这套双端模型跑通以后可以做的扩展方向很多。加交流侧故障模拟比如三相短路、单相接地观察MMC的故障响应和低电压穿越能力。加直流侧故障模拟研究半桥MMC在直流短路情况下的表现这会引出直流断路器或者全桥子模块等更深入的话题。把双端扩展成三端或者四端就是多端柔性直流输电模型这是目前电网领域比较热门的方向也可以用来研究不同换流站之间的功率协调控制策略。我个人习惯的做法是每换一个研究点就保留一个模型版本。比如“MMC_Base_v1”是基础双端模型“MMC_ACFault_v2”是加了交流故障发生器的版本“MMC_MTDC_v3”是多端版本。这样即使后面把模型改坏了也能快速回退到稳定版本。最后再分享一个小心得如果你也是第一次搭MMC模型千万别急着追求“仿真结果和论文截图一模一样”。先用一个最简单的工况把整个链路跑通哪怕波形不太漂亮只要逻辑正确后面优化起来就很快。仿真这件事最怕的不是不会而是卡在某个bug里不知道往哪走。这套模型跑通了你对MMC工作原理的理解、对Simulink建模调试的能力都会有实实在在的提升后面再去做控制策略优化心态会完全不一样。