双端MMC-HVDC仿真建模全流程:参数设计到Simulink联调排错
2026/9/9 13:43:29 网站建设 项目流程

做双端MMC-HVDC仿真这几年,我踩过最多的坑不是拓扑画错,而是模型搭完了一运行就发散,或者波形难看、功率传不过去、直流电压建立不起来。MATLAB/Simulink里做MMC(模块化多电平换流器)和柔性直流输电系统仿真,真正难的不是找一份模型,而是搞清楚这个模型该怎么搭、参数怎么定、控制器怎么和主电路咬合,以及出问题时怎么定位。这篇文章不打算复述课本上的MMC工作原理,而是从实际建模的角度,把一套双端MMC-HVDC系统在Simulink里从参数设计到联调排错的完整链路讲一遍,给正要上手做柔性直流仿真的研究生和工程师一条可以"照着走"的路径。

1. 动手搭模型之前,先把三件事想明白

很多人在Simulink里建MMC模型,第一个动作就是打开模块库找IGBT、二极管、电容,然后一顿拖拽封装。这个思路不能说错,但往往会在仿真速度和精度之间把自己绕进去。我建议在动鼠标之前,先回答三个问题。

1.1 你要研究的是系统级问题还是器件级问题

MMC-HVDC的仿真模型从详细程度上分,大致有完整开关模型、戴维南等效模型、平均值模型三类。它们之间的取舍直接决定了你这篇博文或者课题能跑到什么程度。

完整开关模型就是把每个半桥子模块里的两个IGBT、两个二极管、一个电容全部用Simscape Electrical元件搭出来。三相六桥臂,每桥臂假设20个子模块,那就是240个子模块、960个开关管。这种模型的好处是能真实反映开关过程、电容电压波动、换流机理,但代价是仿真速度惨不忍睹。我曾经用4核机器跑一个带有详细开关模型的双端系统,1秒仿真时间跑了快两个小时。适合只做单端、每桥臂子模块数不超过10个、仿真时长在100ms以内的场景。

戴维南等效模型是目前学术界和工程界主流。它的思路是把一个桥臂上一串子模块等效成一个可变电压源串联一个可变电阻,每次仿真步长内根据开关状态和电容电压更新等效参数。这种做法能大幅提升仿真速度,同时保留子模块电容电压的动态特性,是目前做MMC控制器设计、故障分析最常用的折衷方案。Simulink里实现戴维南等效需要自己写求解逻辑,稍微有点门槛,但很多开源模型都是基于这个思路。

平均值模型则是把MMC看成可控电压源,忽略子模块内部开关细节,只保留桥臂电流和电容电压的宏观动态。MATLAB较新版本里自带的"Average Modular Multilevel Converter"模块就是这个思路。系统级研究——比如双端功率传输特性、直流电压控制、交流侧故障穿越——用平均值模型完全够用,仿真速度可以做到接近实时。

所以最稳的路径是先搭平均值模型把整个双端系统的控制逻辑跑通,确认参数和控制参数合理之后,再针对需要研究的具体问题切换成更精细的模型。别一上来就追求极致精细。

1.2 子模块拓扑决定你能做什么实验

MMC的子模块类型里最常见的是半桥(Half-Bridge),两个开关管一个电容,输出0或Uc两种电平。半桥简单、损耗低,但直流侧故障时没有反向电压能力,很难实现直流故障清除。全桥(Full-Bridge)可以输出-Uc、0、+Uc三种电平,具备直流故障自清除能力,但器件数量翻倍。混合型则是在同一个换流器里混合使用半桥和全桥子模块,兼顾成本和故障穿越能力。

这个选择必须在建模前定下来,因为它在主电路层面决定了你的HVDC系统能做什么故障实验。如果只是想学习基本的功率传输,半桥就够了;如果后续要做直流线路极间短路和故障清除,那全桥或者混合型是必要的。Simulink里把这些子模块都封装成子系统,切换时改封装内部结构即可。

1.3 单端、双端还是多端,对模型结构影响巨大

双端MMC-HVDC系统意味着有两个换流站,一个通常运行在整流工况,一个运行在逆变工况,中间用直流线路连接。建模时两个站的主电路结构基本一样,但控制系统分工不同。我需要提醒的是,很多初学者把两个站的控制器完全做成一样,这是错的。单端系统只需要一个换流站考虑对交流系统的控制,双端系统则必须考虑两端控制器之间的配合——谁来定直流电压、谁来定有功功率、无功功率又要怎么分配——这会在后面专门展开。

现在把这三个问题想清楚,再去选模型、写封装,后面调试的时间会少一半。

2. 桥臂参数与主电路设计:这些数字不是拍脑袋定的

MMC主电路里最核心的参数是子模块电容、桥臂电感和交流侧连接阻抗。这三个参数决定了功率传输能力、电容电压波动范围和环流特性。我在第一次设计MMC参数时犯过的错是直接抄某篇论文的参数,结果完全不适配自己的电压电流等级。实际上这些参数是有标准设计流程的。

2.1 子模块电容:先定储能常数,再反算电容值

子模块电容承担着吸收桥臂电流波动能量的作用。电容选得小,电压波动大,输出电压波形质量差,甚至会烧毁功率器件;选得大了浪费体积和成本。工程规范里通常用储能常数H来衡量MMC的电容储能规模,定义为换流器总储能与额定容量之比:

H = W_total / S_N

其中W_total是整个换流器所有子模块电容储能的总和,S_N是额定视在功率。对于MMC-HVDC,H一般取30~40 kJ/MVA。这个值比两电平VSC(通常2~5 kJ/MVA)高一个数量级,因为MMC的电容器件分散到几十上百个子模块里,单个子模块电容的储能利用率很低。

有了H就能算每子模块电容:

W_total = N_total × 0.5 × C × Uc²

C = 2 × H × S_N / (N_total × Uc²)

给一个我在仿真里常用的小规模算例:额定功率10MW,直流极间电压20kV(±10kV),每桥臂子模块数N=20,那么单相两桥臂共40个子模块,三相总共120个子模块,每个子模块额定电压约1kV。取H=35kJ/MVA,S_N=10MVA,计算可得:

C = 2 × 35000 × 10e6 / (120 × 1000²) ≈ 5833μF

取整选6000μF,也就是6mF。在Simulink里按这个值预置,再把波动范围拉出来看,如果电容电压纹波超过正负10%,就适当加大电容值重跑。

2.2 桥臂电感:兼顾环流抑制和故障电流限制

桥臂电感是MMC中非常微妙的一个元件。它的作用主要有三个:抑制桥臂间的二倍频环流、限制直流侧故障时的电流上升率、以及滤除高频开关纹波。电感选小了环流压不住,选大了会降低系统动态响应并且增加成本。

工程上桥臂电感的取值一般用标幺值表示,常见范围是0.05~0.15 p.u.。换算方法是用交流侧基波阻抗作为基准值。三相系统里,基准阻抗Z_base = U_LL² / S_N,其中U_LL是交流侧线电压有效值。接着L_arm = k × Z_base / (2πf),k是标幺系数。

还是用上面那个10MW的例子,交流线电压10kV,Z_base = 10kV² / 10MVA = 10Ω,取k=0.1,工频50Hz下:

L_arm = 0.1 × 10 / 314 ≈ 3.18mH

在仿真里我会从3mH起步,观察桥臂电流的二倍频分量和故障情况下的电流上升速度,再微调到4~5mH。实际调的时候发现电感和环流抑制的深度几乎是线性的关系,但电感过大会让内环电流控制的响应变慢,注意别被"环流抑制得越狠越好"带偏。

2.3 交流侧连接变压器和相位电抗

MMC通常通过升压变压器接入高压交流电网,变压器漏抗加上额外的相位电抗,共同构成了换流器与交流系统之间的连接阻抗。这个阻抗既影响无功功率调节范围,也影响内环电流控制的解耦效果。

Simulink里建变压器时我推荐直接用三相双绕组变压器模块,把漏抗标幺值设为0.1~0.15 p.u.,额定容量选1.1倍换流器额定容量。相位电抗可以合并进变压器漏抗建模,也可以单独再串一个三相互感。在平均值模型里,变压器可以简化成理想变压器串R-L阻抗,省掉励磁支路,速度更快且对控制设计影响不大。

3. 调制、均压和环流抑制:Simulink里怎么落地

主电路参数定好之后,接下来就是怎么"驱动"这个换流器。MMC的调制和均压算法比两电平VSC复杂得多,这部分也是整个模型里最容易写错的地方。

3.1 最近电平逼近(NLM)的实现

NLM的原理非常直观:每个桥臂有N个子模块,输出电压要尽可能逼近正弦调制波,就在每个控制周期里决定投入多少个子模块、切除多少个子模块。投入个数 n_on 通过下面的映射得到:

n_on = round((U_ref / Uc_dc) + N/2)

其中U_ref是该桥臂的参考电压,Uc_dc是子模块电容电压的额定值。这个式子实现起来就几行代码,但Simulink里真正要处理的是排序均压逻辑。

在详细开关模型里,每个控制周期必须知道"投入哪几个子模块"而不是只知道投入几个。标准算法是:先检测桥臂电流方向,电流为正(给电容充电)时投入电压最低的n_on个子模块;电流为负(电容放电)时投入电压最高的n_on个子模块。这样能让各电容电压保持均衡。

我写了一个简化的MATLAB Function代码片段,放在Simulink的MATLAB Function模块里做每桥臂的均压选择,核心逻辑是这样:

function [gate, idx] = nlm_selection(Vc, i_arm, U_ref, N) % Vc: 每子模块电容电压向量 (Nx1) % i_arm: 桥臂电流,正方向为充电方向 % U_ref: 桥臂调制电压参考值 Uc_rated = 1000; % 子模块额定电压,根据设计修改 n_on = max(0, min(N, round(U_ref / Uc_rated + N / 2))); % 排序索引 [~, idx_sorted] = sort(Vc, 'ascend'); % 电压从低到高 if i_arm >= 0 % 充电时投入电压最低的n_on个 idx = idx_sorted(1:n_on); else % 放电时投入电压最高的n_on个,即排序后最后面n_on个 idx = idx_sorted(N-n_on+1:N); end gate = zeros(N,1); gate(idx) = 1;

这个函数的输出gate是每个子模块的触发信号。需要注意的是实际工程里为了避免每次切换都换一组子模块导致开关频率过高,会引入滞环或者保持因子,但学习模型里先跑通这个逻辑就够了。

3.2 载波移相SPWM作为备选

NLM适合子模块数较多的场景(N≥20),子模块数不多时还可以用载波移相SPWM(CPS-PWM)。实现思路是生成N个频率相同、相位依次错开2π/N的三角载波,每个子模块的调制波都是同一个正弦波(对于半桥),将调制波与各自的三角载波做比较得到触发信号。CPS-PWM的优势是每个子模块开关频率固定、损耗均衡,缺点是子模块数多时载波同步和PWM脉冲分配比较复杂。

在Simulink里实现CPS-PWM,可以用一个子系统封装N个比较器,载波发生器用离散脉冲发生器或者自定义S-Function。我个人的建议是:如果是学习MMC原理、做实验验证,N≤10时用CPS-PWM更好观察调制细节;如果是做HVDC系统级仿真、子模块数多,直接用NLM,代码短、逻辑清晰、仿真速度快。

3.3 环流抑制器不是可选项

MMC三相之间由于桥臂电压不完全相等,会产生二倍频负序环流,这个环流在三相桥臂之间流动,不经过交流侧和直流侧,只会增加桥臂电流有效值和损耗。在平均值模型里,如果忽略桥臂内部动态,环流可能不明显,但只要切到详细模型或者戴维南模型,环流立刻显现,波形上桥臂电流会出现明显的二倍频波动。

环流抑制的思路是把桥臂电流分解成三相共模分量,然后在二倍频负序旋转坐标系(-2ω)下做PI控制,输出补偿电压叠加到桥臂电压参考上。为了简化,也可以使用准谐振控制器(PR)直接对二倍频分量进行抑制。在Simulink里我用的是后者,实现简单,不需要额外的坐标变换:先从桥臂电流里提取环流分量(一相上下桥臂电流之和的一半),减去直流分量,得到二倍频交流量,送入PR控制器,输出加在上下桥臂电压参考上,符号相反。

这个控制器调起来有个技巧:PR谐振频率要精确设在100Hz(二倍工频),同时带宽不能太宽,否则会抑制掉基波附近的正常分量。仿真里可以先断开环流抑制器,观察桥臂电流的畸变,再合上,对比效果,能很直观地理解这个环节在干嘛。

4. 控制系统分层搭建与双端联调排错

主电路和控制器的关系就像发动机和变速箱,单看任何一个都转不起来。双端MMC-HVDC的控制器通常分三层:最外层是系统级功率控制,中间是MSC内环电流控制,最内层是调制与均压。这一节讲清楚层与层之间怎么衔接,以及双端联合调试到底按什么顺序做。

4.1 外环控制器:定功率、定直流电压和无功分配

外环控制器的任务是计算出内环电流指令值。在dq旋转坐标系下,有功电流id决定有功功率,无功电流iq决定无功功率。一个换流站的典型外环结构包括一条有功类控制通道和一条无功类控制通道。

有功类控制有几种模式:定有功功率、定直流电压、定频率(用于孤岛供电)。无功类控制有定无功功率、定交流电压。双端系统里必须有一个站采用定直流电压模式来维持直流网络的电压稳定,另一个站采用定有功功率模式来传输功率。这是最基本的"一个定电压、一个定功率"组合。

在Simulink里,外环控制器我用PI调节器实现。定电压站的PI输入是Udc_ref和Udc_meas之差,输出是id_ref;定功率站的PI输入是P_ref和P_meas之差,输出同样id_ref。无功通道输入是Q_ref与Q_meas之差,输出iq_ref。PI参数可以先按对称最优法估算,然后通过试凑微调——我之前总是追求一上来就整定完美,后来发现MMC这种高阶系统,最佳路径是先让仿真跑起来,再根据阶跃响应去微调PI参数。

4.2 内环电流解耦控制:不能照搬两电平VSC的参数

内环控制器的作用是让测量电流快速跟踪外环给出的电流指令。dq轴下的电压方程为:

U_d = U_gd - ωL·i_q + K_p(idd_ref - i_d) + K_i∫(idd_ref - i_d)dt

U_q = U_gq + ωL·i_d + K_p(iq_ref - i_q) + K_i∫(iq_ref - i_q)dt

其中ωL·i_q和ωL·i_d是d轴和q轴之间的耦合项,必须通过前馈解耦。很多人直接把两电平VSC的内环PI参数拿过来用,结果发现动态响应要么震荡要么慢吞吞。原因是MMC的等效时间常数比两电平VSC大得多,桥臂电感和子模块电容的动态特性让系统阶数更高。建议把内环的PI带宽设置在两电平VSC的一半左右起步,再逐步加快。

我常用的整定思路:内环PI的积分时间常数Ti取桥臂电感和等效电阻的比值L_arm/R_arm,比例系数Kp取带宽ω_bw乘以L_arm。ω_bw从100rad/s开始,观察电流响应,逐步加到300~500rad/s。

4.3 启动流程:别一上来就解锁触发脉冲

这是我在仿真中踩过最多次的坑。直接给MMC发触发脉冲的后果是:子模块电容电压还没建立,电容吸收大电流,仿真直接发散或者过流保护跳闸。正确的启动顺序是先在闭锁状态下给换流器充电。

闭锁状态下,交流系统通过子模块的反并联二极管给电容充电,这本质上是不控整流过程。电容电压逐渐上升并稳定在交流线电压峰值附近。需要等待一段时间(仿真时间上可能是0.1~0.3s),等电容电压建立起来后,再解锁触发脉冲,让换流器进入可控状态。在Simulink里实现起来很简单:给门极信号加一个"Enable"开关,用一个Step块或者定时器控制解锁时间。

双端系统的启动顺序还要更讲究。正确的流程是先让定直流电压站(整流站)从交流系统充电并解锁,建立直流电压,然后直流线路充电,再让定功率站(逆变站)通过直流侧或自身交流侧充电,最后解锁逆变站并设定功率指令。如果两端同时解锁,直流线路的充电电流可能超出预期。

4.4 双端联调的完整排错链路

有一次仿真功率怎么都提不上去,波形就是平的,我排查了半天发现是两端站的控制模式设置成了都是定功率,直流电压没有站来支撑,整个系统处于弱约束状态。后来总结出一套排查顺序,分享出来:

第一步:单站检查。断开另一端,让整流站独立带RL负载运行。确认直流电压能稳定建立,内环电流能跟踪指令,电容电压均衡。这一步通过之后再进入双端。

第二步:双端空载对接。整流站定直流电压,逆变站不控整流模式但不设功率指令。观察两个站的电容电压是否正常、直流电流是否接近零。

第三步:功率阶跃。给逆变站一个小的有功功率指令(比如10%额定),观察直流电压波动是否在允许范围、两端功率是否平衡。然后再逐步加大到50%、100%。

第四步:暂态验证。做一次功率反转(从整流到逆变切换),观察直流电压过冲和控制模式切换是否正常。再做一个交流侧电压跌落的故障测试,看换流器能否实现故障穿越。

这套流程走完,双端MMC-HVDC系统基本就稳了。我每次搭新模型都会走一遍,比直接堆大功率阶跃测试的调试效率高很多。

5. 仿真跑得动和跑得快的平衡:性能优化与数值坑

最后一个大问题是:双端MMC-HVDC模型动不动就几百上千个状态变量,Simulink跑起来又慢又容易数值发散。这一节分享我实际使用中的性能优化手段和数值稳定性经验。

5.1 仿真步长与求解器的选择

求解器的选择对MMC仿真成败影响巨大。如果是详细开关模型,必须用小步长来捕捉开关事件,推荐用离散求解器,步长取PWM载波周期的1/20~1/50。比如载波频率1kHz,步长取10~20μs,再小就纯粹是浪费算力了。

如果是平均值模型,步长可以放到50~100μs,用ode23tb或ode15s这类刚性求解器。MMC系统里有大量时间常数跨度很大的环节——开关频率kHz级别、基波50Hz、直流侧动态0.1~1s——典型的刚性系统。刚性求解器能自动调整步长,比定步长ode4高效得多。

我遇到过一种很奇怪的数值振荡现象:桥臂电流在开关时刻附近出现高频锯齿状波动,但平均值又是对的。后来发现是simulation步长太大,采样到了开关谐波。解决办法是缩小步长,或者加一个小时间常数的低通滤波做后处理,但治本还是得缩步长。

5.2 平均值模型带来的陷阱

平均值模型虽然在主电路层面大幅简化,但控制系统的接口要特别注意。平均值模型输出的电压电流是基波分量,不存在开关纹波,所以PLL锁相环的响应会显得特别好,环流抑制器甚至可能无事可做。如果后续切到详细模型,控制器参数可能需要重新整定。

其次,平均值模型里子模块电容电压的波动范围通常比详细模型偏小,因为忽略了开关离散化带来的额外纹波。如果用平均值模型做电容电压保护定值整定,需要留出更多裕量。

5.3 加速仿真的几招实用技巧

第一,尽量在离散域建模。连续求解器在MMC这种刚性系统里步长切来切去,速度极慢。把控制器、调制、测量环节全部离散化,仿真速度能提高好几倍。第二,关掉不必要的高频采样模块。Scope模块本身不影响速度,但Scope输入端的采样率如果设置过高,会造成大量不必要的数据存储。第三,使用加速模式。Simulink的加速模式(Accelerator)和快速加速模式(Rapid Accelerator)对MMC这种大规模模型提升明显,我实测过Rapid模式在平均模型上能提速3~5倍。第四,如果跑详细模型,考虑把暂时不关注的桥臂用平均值替代,只对目标桥臂保留详细模型,这种混合建模在学术论文里越来越常见。

我个人的体会是,MMC-HVDC仿真模型的价值并不在于模型本身多复杂,而在于你能不能快速迭代出可靠的运行特性。先把平均值模型跑通双端系统,再逐级往详细模型切,每切一级验证一次控制效果,这条路最省时间,也最容易定位问题。后面如果再往多端柔性直流、直流电网方向走,这个双端模型就是最基础的积木,把两端的控制逻辑和参数设计吃透了,扩展起来只是线性叠加的事。

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

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

立即咨询