基于Matlab/Simulink的±800kV VSC-HVDC仿真模型搭建与调试详解

📅 发布时间:2026/9/8 4:29:51
基于Matlab/Simulink的±800kV VSC-HVDC仿真模型搭建与调试详解
直接做±800kV VSC-HVDC的Matlab仿真模型在不少搞电力电子和电力系统的人眼里是一件“看起来很唬人”的事。电压等级一上去很多人第一反应是“模型这么大、参数这么多跑得动吗会不会发散控制器怎么调”我一向觉得仿真模型的核心目的不是复刻一个电网工程而是把直流输电里最关键的物理过程和控制逻辑跑明白。真到了写论文、出方案、做初步设计的时候一个能在Matlab/Simulink里稳定跑起来、波形合理、能响应功率阶跃和直流故障的VSC-HVDC模型比一堆手算公式有用得多。这篇文章就把我搭±800kV VSC-HVDC仿真模型的经验完整梳理一遍包括整体架构怎么分层、MMC子模块参数怎么定、控制器怎么设计、仿真中常见的“跑飞”问题怎么排查最后给出一套可以直接改参数用的模型骨架。内容面向已经学过电力电子、但还没完整搭过直流输电仿真的研究生和工程师也适合正在做毕业设计或预研项目、需要快速出一个可信结果的同行。看完不说能手搓一个商用级柔直工程但至少能让你从0到1搭出一个能跑、能看波形、能改控制策略的VSC-HVDC模型并且知道每个模块为什么这么设计。1. 模型层面的整体设计与方案选型1.1 为什么要用VSC-HVDC而不是常规直流LCC-HVDC先聊最基本的。LCC-HVDC用的是晶闸管电流单向换相需要交流系统提供换相电压所以它天生存在“换相失败”的问题在弱交流系统里尤其难受。VSC-HVDC用的是IGBT高压大容量场景现在用IGBT串联或MMC拓扑可以自换相能分别独立控制有功和无功还能向无源网络供电。这些优点在教科书里写得很清楚真正搭模型的时候你会更直观地感受到VSC-HVDC的控制自由度更高外环给定有功、无功内环输出dq轴电压指令整个控制链路非常清晰不像LCC那样还要考虑触发角、关断角那一堆非线性关系。而800kV这个电压等级意味着单极对地电压800kV双极就是±800kV。早期VSC-HVDC受限于IGBT耐压和损耗很难做到这么高电压后来MMC模块化多电平换流器把几百个IGBT子模块串联起来通过阶梯波逼近正弦才把VSC-HVDC推到了特高压等级。所以你在Matlab里搭800kV模型本质上用的就是MMC拓扑而不是两电平或三电平VSC。这一点先明确后面所有参数和控制都围绕MMC展开。1.2 Matlab/Simulink搭建模型的两条路线Simulink里实现MMC-HVDC常见做法有三种我分别说说利弊。第一种是详细模型Detailed ModelDM把每个子模块的IGBT、电容、旁路开关全部用元件库搭出来。这种模型最精准能看出每个子模块电容电压的波动、能模拟IGBT的开通关断细节但计算量非常大。一个换流器如果每相有几百个子模块整个系统就是几千个开关器件仿真步长必须很小跑一次阶跃响应可能几个小时都跑不完。第二种是平均值模型Average Value ModelAVM用受控电压源和受控电流源来等效换流器对外特性完全忽略子模块内部的开关过程。AVM算得最快适合做中长期动态过程或者机电暂态分析但你没法看电容电压均衡和环流抑制这些MMC特有的内部动态。第三种是介于两者之间的简化模型也是我最常用的做法把每个桥臂用一个“等效子模块”来表示即用一个大电容加一个受控电压源替代整个桥臂的级联子模块同时保留MMC的外特性桥臂电压可控、桥臂电流存在但内部子模块充放电用一个等效电容来模拟。Simulink的Simscape Electrical里就有现成的MMC模块可以直接设置子模块数、桥臂电抗、子模块电容它内部用的就是这种简化建模思路。我之前试过纯手搭详细模型也试过直接用现成模块最终稳定用的是Simscape Electrical里的MMC模型加自定义控制。为什么这样选因为800kV级别的MMC每个桥臂子模块数量动辄几百个详细模型在Matlab里根本跑不动而纯平均值模型又会丢失环流和电容电压波动这些关键信息。Simscape里那个MMC模块本质上等效但内部包含了子模块电容动态我实测下来在保持关键物理特征的同时仿真速度能比详细模型快一个数量级以上。对做控制策略研究来说这个精度完全够了。1.3 仿真整体架构双端还是单端很多初学者一上来就想搭一个完整的双端±800kV直流输电系统结果一边送电一边受电两个MMC的控制策略还要相互配合参数整定难度直接翻倍。我的建议是第一步先搭一个“单换流器-等效交流系统-直流侧电压源”的模型把单个MMC的控制策略验证清楚再扩展成双端。什么意思呢就是先让一个换流器带一个直流电压源或者一个纯电阻负载验证它的调制、电容均压、环流抑制、功率控制这四件事是不是都正常。等单端模型跑稳了再复制一套中间用直流线路连接构成双端系统。这样做的好处是每一步出问题都能精准定位不至于一开跑就发散你根本不知道是控制器写错还是两侧配合出了问题。我在实际做的时候单端验证大概花了半天双端联调又花了两天。大部分时间都耗在调PI参数和排查数值发散上所以后面第4节我会专门把调试经验拎出来讲。2. 模型关键参数设计从电压等级反推各个元件2.1 子模块数量与电容电压选择MMC最核心的设计约束就是子模块数量。先确定子模块额定电压一般取2kV到3kV之间这个取决于你选的IGBT器件耐压和冗余要求。对于±800kV系统假设子模块额定电压是2.2kV那么单个桥臂需要承载的直流电压是800kV以单极对地为例如果是对称单极结构每相上下桥臂各承担一半直流电压考虑调制比和冗余实际需要的子模块数N大约在350到400之间。我这里取一个比较标准的配置桥臂子模块数N400子模块电容电压额定值Uc2.2kV那么桥臂能支撑的最大电压就是400×2.2880kV留出了约10%的裕量足以应对调制过程中电容电压波动。记住交流侧相电压峰值和直流电压之间要满足调制关系对于MMC相电压峰值等于ma×Udc/2其中ma是调制比通常取0.85到0.9。当Udc800kV时Udc/2400kV取ma0.875则相电压峰值为350kV对应的交流线电压有效值约为350×sqrt(3)/sqrt(2)≈428kV。这个值决定了交流侧变压器和断路器的额定电压你后面搭建交流系统时直接用这个数来设定等效电源电压。2.2 桥臂电抗器和子模块电容桥臂电抗器的主要作用是抑制桥臂环流和第二、第四等偶次谐波同时限制直流侧故障时的电流上升率。工程上桥臂电抗的标幺值一般在0.1到0.3之间。我取0.15pu来算实际值。系统基准容量取1000MVA单极直流电压800kV那么直流电流基准值是1000MW/800kV1250A。交流侧基准阻抗ZbUb²/Sb这里的Ub取交流线电压有效值428kVSb1000MVA所以Zb≈(428k²)/1000M≈183Ω。桥臂电抗0.15pu对应的实际电感就是0.15×183Ω/(2π×50Hz)≈0.0874H约87mH。这个电感量级对仿真模型来说是合理的不会太大导致电流响应太慢也不会太小导致环流抑制不住。子模块电容的选择跟桥臂储能有关。MMC每个桥臂的等效储能通常要求能支撑系统额定功率几个毫秒工程上桥臂电容的等效时间常数一般在40到60ms。所谓时间常数就是电容在额定功率下从额定电压放电到0所需的时间。以桥臂为单位计算单个桥臂所有子模块电容串联后的等效电容Ceq Csm / N。如果取Csm10mFN400则Ceq25μF。桥臂储能W 0.5×Ceq×(N×Uc)² 0.5×25e-6×(880k)²≈9.68MJ。单极额定功率1000MW换算成功率和时间常数就是9.68MJ/1000MW≈9.68ms。这明显太小工程上要求40ms以上所以子模块电容需要加大。我实际取Csm30mF则Ceq75μF桥臂储能W≈29MJ时间常数约29ms接近工程下限再大一点到40mF会更稳。不过电容越大仿真中的状态变量时间常数越大仿真步长可能要适当增加收敛性反而变差。所以我最后在模型里用的是35mF折中。这里有个容易被忽略的细节MMC桥臂电容是分布式的子模块电容电压会随着桥臂电流的充放电而波动波动幅度跟电容大小成反比。电容取小了电压波动大可能导致调制比超过1出现过调制取大了系统响应变慢。你在调模型时如果看到子模块电容电压波形“抖”得厉害第一反应应该是电容值是不是太小了而不是去改PI参数。2.3 交流系统与变压器参数交流侧我习惯用理想电压源串联一个等效阻抗来模拟强交流系统短路比SCR取3到5之间。这比搭一个详细同步发电机模型要省事得多而且对控制策略验证来说已经足够。短路比5意味着系统等效阻抗标幺值为0.2pu结合前面算的Zb183Ω实际阻抗约36.6Ω电感为36.6/(2π×50)≈0.116H。如果你要模拟弱交流系统把SCR降到2阻抗增大一倍这时锁相环和功率控制会明显出现动态问题这是后话。变压器我直接用Simulink里的三相双绕组变压器连接方式采用YNd也就是网侧星形接地、阀侧三角形这样可以隔离零序分量同时为MMC提供中性点不接地的交流系统。变压器漏抗标幺值取0.1pu容量和换流器匹配也是1000MVA。变比设计很关键网侧电压就是交流系统线电压428kV阀侧电压要和MMC交流侧电压匹配。因为MMC交流侧相电压峰值350kV对应线电压有效值428kV所以变压器变比理论上接近1:1。但为了留出调节空间我通常把阀侧额定电压取低一点比如410kV这样变压器等效成一个微升压变压器给控制留一点裕量。3. 控制器设计双闭环加环流抑制一个都不能少3.1 外环功率控制和内环电流控制VSC-HVDC最经典的控制结构就是dq同步旋转坐标系下的双闭环。外环根据控制目标输出内环的电流参考值内环通过PI调节器输出换流器交流侧的电压参考值最后经过调制生成子模块投切信号。我搭模型时直接在Simulink里用数学模块搭了一个完整的控制器没有用Simscape里自带的控制库因为自己搭更容易看清每个环节的作用。外环分两种模式定有功功率控制和定直流电压控制。在双端系统里送端换流站采用定有功功率控制受端采用定直流电压控制这样直流电压由受端撑住送端只管输送功率。单端验证时我通常让换流器工作在定有功功率和定无功功率模式直流侧直接接一个理想直流电压源这样最方便验证交流侧控制是否正常。内环电流控制是核心。MMC的交流侧动态方程可以写成L·(di_d/dt) -R·i_d ωL·i_q u_d - e_d L·(di_q/dt) -R·i_q - ωL·i_d u_q - e_q其中u_d、u_q是换流器输出电压的dq分量e_d、e_q是交流系统电压的dq分量L是变压器漏感加桥臂电感的等效值如果是MMC桥臂电感对交流电流来说作用相当于两个桥臂并联所以等效电感要除以2。为了让d轴电流和q轴电流解耦控制器里要加入前馈补偿项输出电压参考值u_d_ref e_d - ωL·i_q PI_d(s)·(i_d_ref - i_d) u_q_ref e_q ωL·i_d PI_q(s)·(i_q_ref - i_q)注意符号如果按照电动机惯例电流从交流系统流向换流器那么上面的公式是对的。我在实际搭模型时经常在这里搞错符号导致内外环振荡这是很经典的调试坑后面会细说。3.2 锁相环PLL与dq坐标定位MMC必须实时跟踪交流系统电压的相位才能实现dq解耦。锁相环我用的就是教科书里标准的SRF-PLL同步参考坐标系锁相环。它的本质是让q轴电压为0用PI调节器把相位误差收敛到0。搭建时把交流系统三相电压经过Clark变换得到αβ再经过Park变换得到dq其中q轴给定为0PI输出频率偏差积分后得到相位角用这个相位角再做Park变换的参考。PLL的PI参数要拉开带宽我的经验是PLL的响应时间常数设为10ms左右比内环电流环慢比外环功率环快。如果PLL带宽太高系统容易高频振荡太低则在功率阶跃时相位追踪滞后导致有功无功耦合。一个常用的初始值是Kp50Ki2000实际根据仿真波形再微调。3.3 MMC内部的两个“隐藏”控制量电容电压均衡和环流抑制这部分是MMC和两电平VSC的最大区别也是很多仿真模型容易“画虎不成反类犬”的地方。电容电压均衡因为每个子模块的电容独立充放电如果不加控制个别的电容电压会偏离额定值最终导致调制过压或欠压。详细模型里会做排序均压即根据桥臂电流方向对子模块电容电压排序后决定投切哪个子模块。但前面说了我们用的是Simscape里简化的MMC模块它内部已经做了电容电压均衡的等效处理所以我只需要在控制器里给一个统一的电容电压均值参考具体均压由物理模块自己去实现。如果你是完全自建子模块模型那需要在每个仿真步长里做冒泡排序或快速排序这一步计算量非常大也是为什么我不建议小白自建细模型的原因。环流抑制MMC三相并联直流侧可以看作恒压源交流侧各相之间会因为桥臂电压的差异产生二倍频环流。这个环流只流经桥臂和直流侧不流向交流侧但会增加器件损耗和电容电压波动。工程上常用二倍频负序旋转坐标变换把环流分解到dq轴后用PI调节器压制。一般用准比例谐振PR控制器直接控制在两倍频处增益无穷大实现零稳态误差。我用的方法是在Simscape MMC模块里直接启用内部的环流抑制功能参数里有一个环流抑制增益我把它设为0.5实测波形里二倍频环流就被压下去了。如果你用自建模型就在控制环里加一个二倍频谐振环节谐振频率定为100Hz其余参数和普通PI类似。4. 实操过程单端模型搭建与仿真波形分析4.1 模型搭建的分步流程我自己建模型时为了让过程可控、问题可定位严格按下面的顺序来每一步都先跑通再继续往下做。第一步搭主电路。从Simscape Electrical库中拖出“MMC”模块设置桥臂子模块数量N400子模块电容Csm35mF桥臂电抗Larm87mH。MMC模块自带的桥臂等效模型参数填好。交流侧先用一个理想三相电压源替代变压器和交流系统电压幅值设为400kV线电压频率50Hz。直流侧接一个800kV直流电压源。这一步运行后只做开环测试暂不接控制器可以先用固定调制比0.8看电容电压是否正常。第二步搭测量与坐标变换。测量MMC交流侧三相电压、电流以及直流电压、直流电流经过Park变换转到dq轴。这里注意要用PLL输出的相位角做Park变换不能自己假设相位。第三步搭内环电流控制器。把d轴和q轴电流参考值先设为常数比如id_ref1.0kAiq_ref0PI输出加上前馈补偿得到调制电压的dq分量再经反Park变换得到三相调制波送入MMC模块的调制端。MMC模块内部会根据调制波和电容电压生成子模块投切信号。第四步搭外环功率控制器。在电流内环的外面再套一层功率或直流电压环。先做最简单的定有功和定无功控制测量当前有功P与有功参考Pref做差经过PI后输出id_ref无功Q与Qref做差经PI输出iq_ref。第五步验证单端模型无误后把直流电压源去掉换成直流线路和另一个MMC搭建双端闭环系统。4.2 我用的仿真参数与步长设置仿真时间我一般设5秒前1秒让系统启动在t3秒时做一次功率阶跃观察动态响应。步长设置是个关键学问Simscape模型通常用变步长ode23tb或者ode15sMaximum step size设得太大会导致波形严重失真太小则仿真速度慢得让人崩溃。我试过对于这种MMC模型Maximum step size建议设为50微秒相对容差设1e-4。如果要看IGBT开关细节那步长必须到微秒甚至纳秒级但那样跑5秒仿真基本不可能。我的目标是看控制响应和故障特性所以50微秒的步长足够。float model? Simulink里有个“离散化”工具可以把连续模型转换成离散模型但MMC模块在离散化后收敛性可能变差所以我直接用连续变步长求解器没有做离散化。这点和纯PWM整流器模型不太一样不要用固定步长去跑不然每个开关周期都要迭代很多次速度极慢。4.3 典型波形什么样才叫“正常”单端模型稳定后我习惯抓四组波形直流电压、交流三相电流、子模块电容电压、桥臂环流。直流电压应该平直在800kV附近纹波不要超过±1%否则说明电容或控制器参数有问题。交流三相电流正弦度高THD2%有功电流id和无功电流iq在阶跃后能快速跟踪参考值。子模块电容电压的平均值应该稳定在2.2kV附近波形上有小幅波动这个波动是正常的反映电容充放电过程。桥臂环流里二倍频分量应该被抑制到很小基本上是一条平滑的波形如果看到明显的100Hz正弦分量说明环流抑制没生效。我遇到过最典型的波形异常是交流电流低频振荡频率在5~10Hz左右。排查下来发现是PLL带宽和外环带宽耦合导致整个系统的阻尼变差。解决办法是把PLL的Kp从50降到20同时把外环PI的积分时间常数增大到0.1s振荡就消失了。这说明在MMC这种多环控制系统里带宽分配非常重要从外到内时间常数应该依次减小外环0.1~0.5s内环10~50msPLL5~10ms。5. 常见问题与排查技巧实录5.1 一运行就发散检查“代数环”和初始条件Simulink在运行前会做代数环检测如果控制路径里有直接的前馈而没有延迟就会形成代数环求解器可能报错或者发散。我最常遇到的是调制波从控制器出来直接送到MMC模块而MMC模块的电流测量又被用来计算功率中间没有任何状态变量打破循环。解决方法是给调制波路径加一个一阶惯性环节时间常数设1e-5s相当于一个小延迟代数环就消失了。另一个常见问题是初始条件冲突MMC子模块电容初始电压要设为额定值如果不设启动瞬间电容要从0充电会引起巨大的冲击电流导致仿真直接崩溃。我在MMC模块参数里把初始电容电压设为2.2kV×400880kV实际上模块会按单个子模块初始化并把桥臂电感初始电流设为0这样启动平稳很多。5.2 直流电压控制不住外环符号与方向反了我在双端模型调试时受端站直流电压外环的输出是id_ref但id_ref的正方向到底是从交流流向直流还是从直流流向交流不同文献定义不一样。我按电流从交流系统流入换流器的方向为正来建模那么对于整流工况id_ref为正对于逆变工况id_ref为负。如果符号反了控制器会正反馈导致直流电压发散。排查方法很简单把PI输出断开手动给一个很小的id_ref看直流电压是上升还是下降由此确定正确的极性。5.3 功率阶跃时无功波动明显前馈解耦没整明白如果外环给定有功阶跃后无功功率也跟着“抖”了一下说明内环的dq解耦不彻底。我的经验是解耦项里的ωL必须和实际模型一致很多人只把桥臂电抗算进去忽略了变压器漏抗导致解耦不完全。还有就是PLL的响应速度太慢相位误差会造成d轴和q轴分量互相窜扰。解决方法是把变压器漏抗和桥臂电抗都折算进解耦系数ωL中同时提高PLL的带宽到20Hz左右。5.4 仿真速度极慢合理牺牲精度做MMC仿真速度是绕不开的痛点。我分享几个有效的加速手段第一关闭不必要的波形记录Scope里不要接太高的采样频率。第二把MMC模块里的“Number of submodules”用一个小值比如20代替400虽然波形会变差但动态特性基本一致适合先做控制调参。等控制方案确定了再把N改回400做最终验证。第三使用Simulink的加速模式把模型编译成C代码运行我实测速度能提升3到5倍。第四对于长期期动态仿真可以考虑把MMC替换为自定义的平均值模型在Simulink里用受控源实现速度比MMC模块还要快一个数量级。我通常的做法是先用20个子模块做快速迭代再用400个子模块出最终波形两全其美。5.5 常见问题速查表现象可能原因解决办法启动瞬间电流巨大子模块电容初始电压未设置设置初始电容电压为额定值交流电流低频振荡PLL带宽过高或外环PI过慢降低PLL带宽调整外环时间常数直流电压发散外环控制方向反断开PI手动验证极性电容电压波动过大子模块电容容量不足增大Csm二倍频环流明显环流抑制未启用打开MMC模块环流抑制仿真很慢步长过小、子模块数过多增大步长减少子模块数做预调试代数环报错控制链路无延迟加一阶惯性环节打破代数环6. 模型验证与结果分析的几个角度6.1 有功无功解耦性能测试判断双闭环控制是否合格最直接的方法是分别做有功阶跃和无功阶跃观察另一条通道是否受影响。我在t3s时有功从0.6pu阶跃到1.0pu理想情况下无功应该保持恒定。实际波形里如果无功有短暂波动但能在50ms内恢复说明解耦是有效的。如果波动幅度超过5%就需要回头查解耦系数和PLL带宽。6.2 直流故障穿越仿真对于VSC-HVDC直流侧故障是最严重的工况。因为MMC子模块电容会通过故障点快速放电产生巨大的故障电流所以现在工程上大量使用半桥子模块加直流断路器或者全桥子模块来抑制故障电流。仿真里可以在模型运行到4s时在直流线路中点加一个三相短路故障模块持续100ms观察故障期间直流电压跌落速度、交流电流冲击和故障切除后系统恢复能力。我这里多说一句直流故障仿真是检验MMC模型的“试金石”。如果模型里每个子模块的电容和IGBT都详细建模故障电流的上升沿会很陡对步长要求很高用简化MMC模块做故障仿真结果会偏乐观但趋势是正确的。我建议先做故障定性和保护策略验证不要拿简化模型去算故障电流峰值那个必须有详细模型或者解析公式配合。6.3 弱交流系统适应性把系统短路比从5降到2后会明显看到原来的PI参数不再适用。典型表现是功率阶跃后出现持续振荡甚至发散。原因是弱系统下交流电压对功率波动更敏感PLL锁相可能出现失稳。改进方法包括用虚拟同步机控制替代传统PLL、在功率外环中加入交流电压反馈、提高系统阻尼。这部分内容比较多我先不做展开但你可以把模型里的SCR参数改小后再试体会一下什么叫“系统强度不够控制器再努力也白搭”。7. 后续扩展从双端到直流电网单端和双端模型跑顺后可以往多端直流、混合直流、新能源送出等方向扩展。Matlab里现有模型可以非常方便地复制MMC模块做成三端或四端直流电网每个换流站采用不同的控制模式一个定直流电压其他几个定功率或者定频率。多端系统的核心问题是直流电压控制和功率分配你可以尝试用直流电压偏差控制来实现自然功率平衡不需要站间通信。另外风电场经MMC-HVDC并网也是热点把交流系统换成永磁直驱风机机群模型就能研究次同步振荡和送端电压控制。这些都是在现有仿真模型上做的增量工作骨架不变变的是控制策略和外接模型。我个人在实际建模中的体会是不要一开始就追求“高大全”的详细模型先把一个能够在几分钟内跑完的简化模型吃透把控制环的逻辑和参数调试方法学会再去增加复杂度效率会高很多。有时候我为了调好一对PI参数会把系统简化成两个一阶惯性环节加一个纯延迟直接在Matlab脚本里做根轨迹分析拿到初值再填进Simulink模型这样能省掉大量盲目试凑的时间。最后再分享一个小技巧保存模型时一定把Matlab版本和用到的工具箱标注清楚Simscape Electrical不同版本之间的MMC模块接口差异不小我遇到过从R2020a换到R2022b后MMC模块参数名字变了导致模型无法运行的情况。给模型做一个简单的doc说明列清楚参数定义和初值来源无论是自己后续回来改还是发给别人复现都会顺畅得多。