双端MMC-HVDC系统Simulink仿真:从建模到调试全解析

发布时间:2026/10/5 3:56:40
双端MMC-HVDC系统Simulink仿真:从建模到调试全解析 做柔性直流输电仿真的人迟早会跟MMC-HVDC正面相遇。这块内容网上讲理论的很多但真正把Simulink实操过程讲透的很少。这次我把自己搭的一套双端MMC-HVDC系统完整整理出来从拓扑结构、控制策略、参数计算到故障排查把关键步骤和踩过的坑都写清楚希望能给正在做毕业设计、课题预研或者刚接触柔性直流输电的工程师们省点时间。我会尽量把每个环节的“为什么”也讲明白而不只是甩一张模型图。这套仿真系统解决的问题很清晰把三相交流电能通过模块化多电平换流器送到直流线路再在另一端逆变成交流实现两个交流电网之间的功率传输。整个系统由送端换流站、直流输电线路、受端换流站三部分组成在Simulink里可以完整复现“整流-直流传输-逆变”全流程。适合电力电子和电力系统方向的研究生、刚入行的直流输电工程师以及需要快速搭建可改参数的仿真平台来验证控制算法的人。1. 项目概述双端MMC-HVDC到底在做什么1.1 系统整体架构与核心思路双端MMC-HVDC系统字面上就是“两个换流站一段直流线路”。送端换流站把交流电整流成直流电受端换流站再把直流电逆变成交流电。如果两个换流站放在同一个地点共用直流母线那叫背靠背BTB结构如果中间隔着几百公里的直流线路就是真正的直流输电系统。我这次做的是后者因为直流线路本身会引入线路电容和电感动态特性和背靠背有明显区别更贴近实际工程。在选择拓扑时我对比过两电平VSC和MMC。两电平VSC每个桥臂只有一个阀组靠高频PWM输出正弦电压开关频率高、损耗大、dv/dt应力高而且单个器件承受全电压扩容困难。MMC则是把换流器拆成几十上百个子模块串联每个子模块是一个微缩的“小换流单元”通过控制各子模块投入/切除来叠加出近似正弦波的阶梯电压。这种方式有三个明显优势一是电平数足够多时波形畸变很小甚至不需要交流滤波器二是各子模块分摊开关损耗IGBT可以在很低的开关频率下工作三是模块化结构天然支持冗余故障子模块可以旁路或替换系统可用性大幅提高。在控制架构上双端系统必须明确“谁支撑直流电压”。我采用的方案是送端换流站使用定直流电压定无功控制负责把直流母线电压稳定在额定值附近受端换流站使用定有功功率定无功控制负责按调度指令传输功率。两端都通过锁相环PLL跟踪各自交流电网相位建立dq同步旋转坐标系然后在dq坐标系下做解耦控制。这个分工对系统的稳定性至关重要如果两端都定功率而没有一端管电压直流电压就会随时间漂移最后触发保护。1.2 仿真规模的选择缩比模型是现实选择实际工程的MMC比如±320kV直流系统每桥臂子模块数可以到200甚至300个。如果直接在Simulink里搭建完整规模的详细开关模型一个桥臂300个子模块六个桥臂就是1800个IGBT加1800个电容普通电脑根本跑不动仿真1秒可能要跑几个小时。我在项目里采用的方案是“等标幺值缩比”保持桥臂电抗的标幺值、子模块电容的时间常数标幺值和实际工程一致但把子模块数从200缩到24额定直流电压按比例降低。这个缩比思路非常重要它是整个仿真能不能落地的前提。缩比模型的优势在于控制策略的调参结果在标幺值维度上可以映射回真实系统论文和工程报告里可以明确写“采用了缩比等效模型”审稿人和工程评审也都认可。具体的缩比参数我会在第四章详细给出。这里先记住一个原则仿真的目的是验证控制策略而不是精确复现每颗IGBT的开关过程在模型保真度和计算速度之间必须做折中。2. 换流器建模原理与Simulink实现2.1 半桥子模块的工作原理MMC最基本的组成单元是半桥子模块HBSM它由一个直流电容、两个IGBT管和两个反并联二极管组成。子模块有三个工作状态投入状态上管导通、下管关断时输出电压等于电容电压同时根据桥臂电流方向给电容充电或放电切除状态上管关断、下管导通时输出电压为0电容电压保持不变闭锁状态两个管子都关断主要在启动预充电和故障保护时使用电流通过二极管流通。理解投入和切除对电容的影响是后续写均压算法的前提。桥臂电流为正时投入子模块电容被充电电压上升桥臂电流为负时投入子模块电容放电电压下降。而切除子模块时无论电流方向如何电容电压都不会变。由于每个子模块电容不断在充放电如果不加控制同一桥臂内各子模块电压会逐渐发散差距越来越大最终导致部分模块过压或欠压。所以电容电压均衡控制是MMC控制里不可省的一环。在Simulink里搭子模块我建议两种方式结合使用。第一种是用Simscape Electrical元件库搭详细开关模型适合做器件级应力分析和故障特性研究。第二种是用受控电压源加逻辑判断搭建平均值模型根据控制信号和桥臂电流方向直接输出电容电压或0。平均值模型仿真速度快非常多而且对于控制策略验证来说它和详细模型的表现基本一致。我最后选的是平均值模型因为要做长时间动态仿真详细模型太耗时。搭建时需要注意一个细节子模块封装的输入端口包括控制信号投入/切除、桥臂电流用于判断充放电方向输出端口则是电容电压。电容电压的计算用一个积分器实现积分的输入是电容电流和电容容量的比值。电容电流等于桥臂电流乘以投入信号方向根据电流实际流向定义。封装完成后可以把所有子模块电容电压汇总成一个矩阵方便后续做排序均压。2.2 三相六桥臂拓扑的搭建要点MMC完整拓扑是三相六桥臂每个桥臂由N个子模块串联后再加一个桥臂电抗器组成。A相上桥臂的顶端接直流正极母线下桥臂的底端接直流负极母线上下桥臂的连接点作为该相交流输出端。B相和C相完全对称。在Simulink里我先把单个子模块封装成子系统然后复制出6×N个按照桥臂顺序排列好再用一条母线把同桥臂的子模块串联起来。每条桥臂的串联顺序不影响结果但连线必须小心。我在这块踩过一个非常隐蔽的坑子模块的电气方向安装反了结果电容电压充不起来直流母线电压只有正常值的一半。排查了很久最后是逐个检查子模块内部二极管的阳极和阴极方向才发现问题的。用Simscape元件库时IGBT模块翻转后电气连接点变了很容易出现这种方向性错误。所以在搭完模型后建议先跑几毫秒的空载测试看电容电压是否均匀上升能快速暴露方向问题。桥臂电抗器必须保留不能省。它的作用有三个抑制三相桥臂间的二倍频环流、限制直流故障时的电流上升率、配合子模块电容完成能量交换。如果桥臂电抗太小环流会非常剧烈桥臂电流畸变严重如果太大电流内环的响应速度会变慢。经验取值是0.1到0.15标幺值具体计算在第四章给出。2.3 模型复杂度与仿真速度的平衡仿真规模是MMC建模绕不开的痛点。我在项目里分了三个档位来应对不同需求原理验证档子模块数N1020适合验证控制逻辑和启动时序研究档N50左右适合做环流抑制、功率阶跃、故障穿越等课题精度和速度平衡得最好全规模档N200以上一般需要配合实时仿真器或者用FPGA做硬件在环纯CPU跑详细模型不现实。我最终使用的是N24的缩比模型配合等标幺值参数缩放所有控制策略在标幺值空间上都能对应到实际工程。一个很实用的技巧是把模型里所有参数都放在一个.m脚本里用变量名控制Simulink模块参数而不是在模块里硬编码数值。这样想从24个子模块切换到50个子模块只需要改脚本里的N模型无需改动。这个习惯为我节省了大量重复劳动时间也避免了很多因为改参数遗漏而导致的错误。3. 控制策略双端系统的核心设计3.1 站级控制器的分层架构与dq解耦控制MMC-HVDC的控制系统通常是分层的顶层是站级控制定直流电压、定有功、定无功、定交流电压等中间层是桥臂级控制环流抑制底层是器件级控制调制和电容电压均衡。Simulink建模时我会把这三层分别做成独立的子系统方便单独调试和替换。如果这三层代码混在一起出问题时定位成本非常高。站级控制我采用经典的双闭环结构。外环根据控制目标生成电流内环的参考值比如定直流电压控制的外环把直流电压参考值和实测值的差值送给PI控制器输出d轴电流参考id_ref定无功控制的外环输出q轴电流参考iq_ref。内环则在dq坐标系下对id和iq做PI控制输出调制电压的d轴和q轴分量再经过Park反变换得到三相调制波送到底层调制模块。这里有一个很多人初次搭建时会犯的错误内环输出的调制电压经过Park反变换后得到的是换流器侧的调制波而不是直接发给子模块的开关信号。调制波还要经过底层调制策略NLM或CPS-PWM换算成各子模块的投入信号。如果直接把内环输出当成开关信号系统会完全发散。我在第一次联调时就犯过这个错误后来把每一层的信号类型和数据流理顺才解决。PLL锁相环是dq解耦控制的前提。PLL跟踪交流电网的相位角Park变换和反变换都用这个角度。如果PLL角度不准确dq轴上的电压电流分量就会有误差控制器输出的相位会偏移导致功率跟踪失败。在Simulink里可以用Simscape Electrical自带的PLL模块也可以用C语言实现的PLL算法搭一个。仿真中PLL的PI参数一般取Kp20100、Ki10003000以50Hz为例带宽在1050Hz之间既要能快速锁定相位又要能滤除电网电压的扰动。3.2 环流抑制的原理与PI参数整定环流是MMC区别于其他换流器的一个特殊问题。由于三相桥臂共用直流母线三相之间的瞬时功率不平衡会在桥臂内部感生环流主要成分是负序二倍频分量即100Hz在50Hz系统中。环流不经过外电路但它会增大桥臂电流有效值、增加损耗、加剧子模块电容电压波动严重时还会导致桥臂电流畸变。所以控制策略里必须有环流抑制环节。最经典的环流抑制方案是把三相环流分量变换到负序旋转坐标系中旋转角速度为-2ω得到环流的d2和q2分量然后用两个PI控制器分别把d2和q2控制在零附近。PI输出经过坐标反变换后得到补偿电压叠加到三相桥臂电压参考上。这个思路和电机控制里的谐波抑制非常像只是旋转坐标系的速度是负两倍基频。环流抑制PI参数的整定我在项目里用了这样一组初值负序dq坐标下Kp取0.30.5Ki取1020控制周期和主控制器保持一致50μs。如果环流残留仍然较大优先增大Kp而不是Ki因为二倍频抑制本质是对误差的快速修正动态响应主要靠比例项。调试时可以打开桥臂电流的FFT分析窗口重点观察100Hz分量的幅值。我实测的数据是不抑制时二倍频分量约占桥臂基波电流的20%以上抑制后可以降到2%以内效果非常明显。3.3 调制策略的选择NLM与CPS-PWM调制策略解决的是“同一桥臂N个子模块中哪些投入、哪些切除”的问题。我对比了最近电平逼近NLM和载波移相PWMCPS-PWM两种方案。NLM的做法是每个控制周期计算该桥臂当前需要投入的子模块数量然后根据电容电压均衡排序算法选出具体哪几个子模块投入。当桥臂电流为充电方向时优先投入电容电压最低的那些模块当桥臂电流为放电方向时优先投入电容电压最高的模块。这样可以在不增加额外PWM的情况下同时完成电容电压均衡。NLM的优势是开关频率极低、算法简单、适合子模块数量多的场合N30劣势是子模块数量少时波形台阶比较粗糙。CPS-PWM则是为每个子模块分配一路相位错开的三角载波与公共的正弦调制波比较生成驱动信号。它的优势是等效开关频率高、波形质量好在子模块数量少时也能获得较好的谐波特性劣势是实现复杂需要N路载波信号而且每路载波的相位错开角度要精确。我在项目中最终选了NLM作为主方案。原因是N24时NLM的等效电平数已经足够谐波能满足要求而且排序均压算法本来就需要逐周期计算和NLM天然结合紧密。如果你要做的是小规模验证N15且对波形质量敏感可以尝试CPS-PWM。排序频率也很关键一般取控制周期的一半左右过高会增加开关次数过低会导致电压均衡跟不上。我用的是20kHz控制频率下每2个控制周期排序一次效果稳定。4. 仿真参数设计、配置与调试过程4.1 参数计算从系统容量到子模块参数参数设计是仿真能否收敛的第一步。我以本项目为例给出完整的设计链。系统额定容量取200MVA交流侧线电压220kV直流电压±160kV即320kV双极交流频率50Hz。子模块数N的确定实际工程每桥臂子模块数NUdc/Uc即直流母线电压除以单个子模块额定电容电压。取Uc1.6kV时N200在仿真缩比模型里我取N24则子模块电容电压参考值Uc_ref320kV/24≈13.3kV。子模块额定电压不能超过IGBT的耐压范围通常在1.52.5kV之间缩比模型的13.3kV是仿真值不涉及器件选型。桥臂电抗的确定规范推荐0.10.15 p.u.。基准阻抗ZbUdc²/(2P)320000²/(2×200×10⁶)256Ω。取0.1p.u.时Larm25.6Ω按50Hz折算电感值Larm25.6/(2π×50)≈81.5mH。这个数值能有效抑制环流同时内环响应速度也在可接受范围。子模块电容的确定工程上用储能时间常数来选要求电容储能和系统容量之比约为40kJ/MVA。换算公式是C_sub2×W0×S/(N×Uc²)类似的经验式。在N24、Uc13.3kV、W040kJ/MVA、S200MVA的条件下估算C_sub≈50006000μF。电容取小了电压纹波会超标取大了成本和体积上升。仿真时可以先用5500μF作为初值再根据电容电压纹波波形微调目标是把纹波控制在5%以内。4.2 求解器与仿真步长的选择Simulink仿真MMC系统求解器和步长的选择对结果影响巨大。我前几次用默认的变步长连续求解器结果每一步都被压到微秒级跑0.1秒仿真都要等半天而且数值振荡问题也多。后来改用定步长离散求解器步长设为50μs仿真速度提升了接近一个数量级。具体设置是控制系统和调制系统用离散模式采样周期Ts50μs对应20kHz电气主回路使用Simscape Electrical的局部求解器同样选择离散化选项步长与控制系统一致。这种配置下仿真可以兼顾精度和速度。如果使用NLM调制控制周期直接决定调制的分辨率50μs是合适的起点。如果使用CPS-PWM且载波频率设在1kHz左右控制周期可以放宽到100μs。需要强调的是控制周期不能随意改。控制周期太长电流环带宽不足电流跟踪会出现滞后和相位偏移波形失真控制周期太短仿真时间成倍增加。50μs是基于20kHz采样率的经典选择大部分论文里使用的也是这个量级。4.3 双端联调的启动时序与直流电压建立双端MMC-HVDC的启动过程比单端复杂很多我第一版模型就是启动顺序不对导致系统一启动就过流跳闸。正确的三步启动时序如下第一步所有子模块闭锁交流侧通过限流电阻或交流断路器给子模块电容充电。二极管整流效应会把电容电压充到交流线电压峰值的一半左右这个阶段叫不控预充电。第二步电容电压到达一定水平后解锁换流器投入控制策略。注意要先启动送端的定直流电压控制让直流电压参考值按斜坡从当前值爬升到额定值不能给阶跃参考。第三步直流电压稳定后让受端功率参考值从零斜坡增加到目标值。我在仿真里给功率斜坡时间设置了0.5秒波形非常干净。如果直接给满功率阶跃冲击电流会到额定值的两倍以上可能触发保护逻辑。启动时用的限流电阻我用一个带时序的断路器模拟充电完成后旁路掉。时序顺序上我的经验是先解锁、稳定几个周期、再旁路电阻这样切换时的冲击最小。4.4 结果验证与波形分析仿真跑通后需要对照性能指标来验证系统是否达标。我重点检查这几个值直流母线电压稳态误差小于1%有功功率跟踪稳态误差小于1%交流侧电流THD小于3%子模块电容电压纹波小于5%环流二倍频分量幅值小于桥臂基波电流的2%。所有指标都在Simulink的Scope和FFT工具里直接看数据稳定后可导出到MATLAB工作区进一步处理。调试中我发现送端和受端的动态响应有明显差异。定直流电压端的电压环带宽不能调得太高否则直流电压容易振荡定功率端的功率环则可以稍微激进一点。一个常见现象是功率阶跃后直流电压出现5%10%的暂态超调这是正常的只要衰减时间在几十毫秒内都不用管。但如果超调超过15%或者振荡衰减不掉就要回头检查外环PI参数和直流线路模型是否匹配。直流线路用π型电路等效时线路电容会引入LC谐振参数的取值直接影响动态响应。5. 常见问题与排查技巧实录5.1 问题速查表我把自己在项目里实际遇到的问题整理成了一张速查表方便你对号入座。现象可能原因检查方法解决方案仿真一开始就发散变量无穷大子模块方向接反、桥臂电抗过小、控制器符号错误查看桥臂电压和电容电压波形逐个检查子模块内部方向桥臂电抗不得低于0.05 p.u.复核控制器符号直流电压建立不起来预充电时序错误、均压算法失效、PLL未锁定观察子模块电容电压和PLL输出角度严格按照闭锁充电-解锁-斜坡升压顺序检查排序算法方向逻辑环流振荡明显桥臂电抗过小、环流抑制PI参数不合适对桥臂电流做FFT看100Hz分量幅值桥臂电抗调到0.1 p.u.以上环流抑制Kp优先增大子模块电容电压发散电容值过小、排序频率太低、排序算法方向反了查看六桥臂电容电压矩阵波形按40kJ/MVA选电容排序频率提到控制周期的1/2双端功率无法跟踪两端控制分工冲突、功率参考方向定义不对查看直流电压和实际功率波形确认送端定直流电压、受端定功率统一功率参考方向5.2 三个容易忽略的坑第一个坑是简化直流线路。有人为了省事用纯电阻代替直流线路结果双端系统的电压和功率耦合关系完全失真。直流线路应该用π型或T型电路等效参数按线路长度和单位长度电阻、电感、电容计算。线路电容对电压源换流器的动态行为影响很大尤其是长线路的电容效应会和桥臂电抗形成LC振荡影响控制器的稳定性。第二个坑是控制环中过量的延迟模块。Simulink模型里如果控制回路中放了很多Memory或Unit Delay会引入数个采样周期的相位延迟严重时电流环失稳。尤其是Park变换和反变换之间如果角度信号有一个周期的延迟dq轴的耦合项就补偿不准。解决方法是把控制回路整理成纯组合逻辑加一个整体采样保持让延迟固定为一个控制周期标准且可控。第三个坑是标幺值基准混乱。双端系统里两端控制器使用的基值如果不一致比如一端用交流容量200MVA做基值另一端用直流功率参考相同但忘了乘基值系数控制器输出就会差一个常数倍系统工作点偏移。我后来把所有控制器内部信号统一化为标幺值在接口处用基值倍数做转换问题彻底解决。5.3 调试顺序的建议给一个我自己反复验证过的调试顺序单端开路调试只跑送端直流侧接电阻负载→ 单端闭环调试加上定直流电压控制→ 双端连接直流线路接上受端先空载→ 受端功率逐步加载斜坡参考值。每到一个阶段就导出波形确认状态稳定后再进入下一步。不要一上来就双端满功率运行出了问题根本定位不到是哪一侧。另外把关键中间变量用Logging功能记录下来非常重要。内环输出的调制电压dq轴分量、环流抑制输出、各桥臂投入子模块数、PLL角度这些量用Data Inspector查看能比最终输出波形提供更多诊断信息。比如外环PI输出限幅饱和、调制波畸变、环流补偿方向反了所有这些都能从中间变量上直接看出来。回到参数脚本的话题。我强烈建议把整个系统的参数都集中到一个.m文件里Simulink模型通过工作区变量引用这些参数。换系统容量、换子模块数、换直流电压等级只需要改脚本里的几个数字模型结构完全不用动。我在这个项目里就是用这个脚本从24子模块缩比模型切换到50子模块研究档只花了十分钟而且没有引入任何新的接线错误。最后再说一个实际操作中养成的习惯保存仿真结果时把功率阶跃、直流电压阶跃、无功阶跃等不同工况分别命名保存波形对比和论文出图都方便得多。做一个能长期复用的参数化仿真平台比每次都从头搭模型省下的时间远超你写脚本的那点功夫。