最近在研究电能质量治理的时候,我把目光放到了背对背MMC(模块化多电平换流器)上。之前我用Simulink分别搭过SVC、SVG这类传统补偿装置模型,多少都觉得有些局限——要么响应速度不够快,要么波形质量差点意思,要么没法同时兼顾无功补偿和谐波治理。后来尝试用背对背MMC搭建了一套电力质量调节系统仿真模型,发现它对电压支撑、功率解耦控制、谐波改善的效果都相当不错。这篇文章就从系统原理、控制分层、Simulink建模到调试经验,把完整思路整理出来。
如果你是电力电子、电力系统方向的学生或者工程技术人员,正在做相关课题但苦于网上关于MMC仿真的参考资料太零散,那这篇内容应该能帮你省下不少摸索时间。我会把每个环节为什么这么做、参数怎么来、波形里看到什么算正常,都尽量讲透。
1. 为什么拿背对背MMC做电力质量调节:它解决了什么痛点
1.1 传统补偿装置的缺陷让我决定换方案
在决定用MMC之前,我对几种常见的电能质量治理手段都做过仿真对比。先说SVC(静止无功补偿器),它的核心是晶闸管控制的电抗器和电容器组,能够动态补偿无功,但晶闸管换相过程中会向系统注入特征次谐波,而且面对快速的电压跌落响应速度偏慢。SVG(静止无功发生器)用的是电压源型变流器,响应速度快了不少,但大多数工程上用的是两电平或三电平结构,开关频率高、损耗大,要并网还得配较大的滤波器。
还有一个容易被忽略的问题:上述装置本质上都是单端补偿设备,只能挂在网络的某一个节点去治理本地电能质量,没有办法在系统层面实现"两侧隔离+功率双向转移"。而背对背MMC天生就是双端结构,相当于把两个MMC换流器背靠背通过直流母线连接起来,既能在两端分别做无功补偿和电压支撑,又能控制有功功率从一端流向另一端,还能把一侧的电压扰动、谐波污染隔离开,不让它传播到另一侧去。这对新能源并网、孤岛供电、敏感负荷供电这样的场景非常关键。
1.2 MMC本身的波形优势不可替代
再单独说MMC的结构。它的核心思想是把很多个半桥子模块(每个子模块就是一个IGBT半桥加一个直流电容)串联起来构成一个桥臂,每个相单元上下两个桥臂再加一个桥臂电抗器。通过控制子模块电容的投入和切出,桥臂电压呈现台阶状波形,子模块数量越多,波形越接近正弦。这个特性带来的直接好处就是:输出电压谐波含量低,几乎不需要传统两电平变流器那么大的交流滤波器;而且每个子模块单独承受低电压,器件应力小、模块化程度高、冗余性好,工程上维护也方便。
所以从系统角度看,背对背MMC把"高质量波形"和"双端解耦控制"两个优势叠加在了一起,作为电力质量调节系统来研究,再合适不过。
1.3 我用的拓扑结构和仿真目标
我搭建的系统是三相背对背MMC-HVDC模型,结构上分为四个部分:送端交流系统、整流侧MMC换流站、直流母线、逆变侧MMC换流站和受端交流系统。整流侧MMC的主要任务是维持直流母线电压恒定并控制送端有功功率,逆变侧MMC则负责受端的无功补偿、交流电压支撑以及有功功率的受控输出。整体目标是在Simulink仿真环境中,让这套双端系统在稳态和动态工况下都能表现出理想的电能质量调节特性。
2. 控制系统的分层架构:从顶层功率目标到子模块电容电压
2.1 三层控制结构是MMC仿真的核心主线
背对背MMC的控制逻辑不能一股脑全放在一起,工程上通常把它分成三个层级,每一层只关注自己那一块的带宽和动态特性。
系统级控制(最外层):处理交流电压、有功功率、无功功率、直流电压这些慢变量,输出内环电流参考值。在我这个模型中,整流侧的外环是定直流电压控制加定无功功率控制,逆变侧的外环是定有功功率控制和定无功功率控制。
换流器级控制(内环):在dq旋转坐标系下对三相电流做解耦控制,响应速度快于外环一个数量级以上。内环PI输出的就是换流器交流侧参考电压。
调制与子模块级控制(最底层):把内环生成的参考电压通过调制策略转换成每个子模块的投切信号,并保证各子模块电容电压均衡。这里需要使用载波移相调制或者最近电平逼近配合排序算法。
层的带宽设计要遵守"内快外慢"原则。如果你做仿真发现直流电压在动态过程里振荡甚至发散,大概率就是外环PI带宽太高或者内环跟踪速度不够,导致内外环发生交互。这个原则到后面我在调试部分还会再提到。
2.2 dq旋转坐标系下的电流解耦控制
MMC的交流侧数学模型,在三相对称系统中,用Park变换把abc三相变成一个旋转的dq坐标系,其电压方程为:
$$v_d = -(R + Ls)i_d + \omega L i_q + e_d$$ $$v_q = -(R + Ls)i_q - \omega L i_d + e_q$$
这里R和L是交流侧等效电阻和电感,e是电网电压,v是换流器输出电压。从方程中可以看出,d轴和q轴电流通过交叉项以及电网电压耦合在一起,所以内环控制要引入解耦补偿项:
$$v_d^{*} = -(k_p + \frac{k_i}{s})(i_d^{*} - i_d) + \omega L i_q + e_d$$ $$v_q^{*} = -(k_p + \frac{k_i}{s})(i_q^{*} - i_q) - \omega L i_d + e_q$$
在Simulink里实现这个控制律很方便,用比例积分控制器加前馈项就行。关键是要在内部先经过PLL(锁相环)锁定电网电压相位,给Park变换提供角度。PLL在Simulink中直接用Three-Phase PLL模块即可,但如果仿真步长比较差,PLL锁定可能变慢,建议在PLL输出处加一个小时间常数的一阶低通滤波。
2.3 环流抑制:MMC独有的一课
MMC区别于两电平VSC的一个显著问题是桥臂环流。三相桥臂之间存在一个二倍频负序环流分量,它会增大桥臂电流有效值、提高开关器件损耗,并在电容电压中引起二倍频波动。如果不加控制,仿真里你会看到桥臂电流波形明显畸变,电容电压纹波也比理论值大很多。
抑制环流的标准做法是在abc坐标下检测上下桥臂电流之和的一半(即环流分量),提取二倍频负序分量,然后将其变换到一个以二倍频反向旋转的dq坐标系下,用PI控制器输出一个叠加到调制波上的补偿电压。我的模型中直接加了一个独立的环流抑制模块,输入三相环流,输出补偿电压,叠加到内环输出的参考电压上。实测启用环流抑制后,桥臂电流中的二倍频分量幅值可以压到原来的20%以下。
2.4 子模块电容电压均衡与预处理
再往下一层是子模块级控制。载波移相PWM方案下,每个子模块都有自己的三角载波,调制波一样,但载波相位错开。理论上只要各子模块的载波相位均匀错开,且每个子模块的导通时间统计平均相同,电容电压就能自然均衡。但仿真中由于开关状态不完全对称,电容电压会有漂移。我用的方法是在每个载波周期内动态调整各子模块的调制波幅值,让电容电压高的子模块少被投入(少充电),电压低的子模块多投入(多充电)。这个逻辑用MATLAB Function模块写很顺手,排序后配合载波移相生成PWM信号,整套控制闭环就完整了。
3. Simulink模型搭建全过程:从子模块到双端系统
3.1 搭建前先确定仿真环境和库
我用的是MATLAB R2021b版本,电气元件全部从Simscape Electrical库(早期版本叫SimPowerSystems)获取。Simscape Electrical的库模块在不同版本里位置有些差异,但核心模块基本都在。建议在搭建前先用powerlib打开库浏览器,把需要的模块拖进模型,提前确认一遍。
仿真类型建议采用离散仿真,Powergui模块的参数里选择离散模式,样本时间设置为5微秒(后面会讲到为什么,如果想跑得更快,可以取10微秒,但精度会下降)。连续仿真在MMC这种大量开关器件的模型里会非常慢,而且数值振荡风险高。
3.2 半桥子模块怎么搭
MMC的基本单元是半桥子模块,我推荐自己用Universal Bridge或者用离散IGBT模块搭建,而不是直接用现成的封装。因为你需要把子模块的电容电压引出来参与均衡控制,封装模块往往不便于引出内部状态。
我用两个Igbt/Diode模块加一个直流电容器串联成半桥结构,电容上并联一个较大的放电电阻来模拟实际子模块的静态损耗,同时方便电容初始电压设置。子模块有两个输出:上管触发信号和电容电压测量信号。通过Bus Creator打包引出。这样一个子模块搭建好之后,封装成Subsystem,里面的IGBT参数用默认即可,但要注意缓冲电阻Rsnubber的设定,若电容值太大,仿真容易发散,我习惯设成1e5欧姆以上。
子模块的电容参数不能乱取,一般按MMC设计经验公式计算:
$$C = \frac{2 N S}{3 m \omega V_{dc}^2 \varepsilon}$$
其中N为每桥臂子模块个数,S为单端换流站容量,m为调制比,ω是工频角频率,Vdc是直流母线电压,ε是允许的电容电压纹波率(通常取5%到10%)。如果你的系统设计指标是每桥臂8个子模块、容量10MVA、直流电压20kV、调制比0.9,纹波率取8%,算出来电容大约在2到4毫法左右。实际仿真中我加大到5mF,电容电压波动更小,但充电过程会稍微慢一些。
3.3 桥臂和三相MMC组装
每相由一个上桥臂和一个下桥臂串联组成,每个桥臂由N个子模块串联后与一个桥臂电抗器串联。桥臂电抗器的作用一是抑制环流,二是限制故障电流上升率。经验值一般取0.1 p.u.左右,按系统容量和电压折算成实际电感值。以我的模型为例,单端容量10MVA、交流侧线电压10kV,折算下来桥臂电感约在3到5mH之间。电感取大了控制响应慢,取小了环流抑制效果差。
三相MMC装好后,直流侧上下母线分别相连,形成双端系统的公共直流母线。从整理过的背对背结构看,就是两个三相MMC换流站共用同一条直流链路,母线之间可以放一个几百微法的直流支撑电容,但由于MMC子模块电容本身提供了足够的储能,这个支撑电容可用可不用。我保留了一个小电容来滤波高频分量。
3.4 交流系统与变压器模型
两端交流系统用Three-Phase Source模块即可,电压幅值按你设定的系统电压设置。为了模拟实际电网的阻抗,在电源和换流站之间串联一个RL支路。换流变压器我采用的连接方式是Yg_D,即阀侧三角形接线。这个细节很重要,三角形接线可以为零序电流提供通路,防止MMC侧产生零序环流。变压器漏抗一般取0.1 p.u.,这个值也影响到内环PI参数的整定。
3.5 控制系统在Simulink中的落地
控制系统的顶层框图和主电路分开,用From/Goto或者Bus方式传信号。整流侧的控制结构如下:
- 采集三相交流电压和电流,经过Three-Phase PLL得到电压相位theta。
- 对电压电流做abc_to_dq0变换,得到dq分量。
- 外环:直流电压参考Udc_ref与实测Udc比较,通过PI生成d轴电流参考id_ref;无功功率参考Q_ref与实测Q比较,通过PI生成q轴电流参考iq_ref。
- 内环:id_ref和iq_ref分别与实测id、iq比较,通过两个PI控制器并叠加解耦项和电压前馈,得到vd和vq。
- vd、vq经过dq0_to_abc变换回三相调制波,再送给调制模块。
逆变侧结构基本对称,只是外环改为定有功功率和定无功功率。需要特别注意的是:逆变侧PLL参考的角度来自受端电网,两边是独立锁定相位的,因为背对背系统本来就是两个独立交流系统通过直流母线联系,不需要频率同步。这让我一开始也踩过坑,如果你把整流侧的相位拿给逆变侧用,模型直接跑飞。
离散PI控制器的参数整定,我实际用下来这套内模控制的整定公式非常可靠:带宽取200到300Hz,PI参数与桥臂电抗、等效电阻相关,做灵敏度试验后发现按公式计算的值偏差10%到20%内都能稳定。
3.6 调制与均衡策略实现细节
我使用的是载波移相PWM,每个桥臂N个子模块,生成N个相位依次差360/N度的三角载波,频率设为1kHz。调制波是内环输出的参考电压除以直流母线电压得到的归一化标幺值。每个子模块的PWM比较结果加上电容电压均衡修正后,作为IGBT的触发脉冲。
电容电压均衡我用了一个巧妙一点的实现:把每个桥臂内N个子模块的电容电压按大小排序,将本次需要投入的子模块数目标记为k,然后按"电容电压最低的优先投入"原则分派触发信号;在调度上,每隔一个工频周期轮换一次子模块编号来保证统计均衡。这个逻辑用MATLAB Function模块写排序和选择算法即可,不用S-Function,代码量也不大。
4. 仿真运行与结果分析:如何判断模型是否正常工作
4.1 稳态工况怎么看
模型跑起来后,第一件事就是看交流侧电压电流波形和直流母线电压。正常情况是:整流侧直流电压稳定在设定值20kV附近,纹波不超过1%;两端交流电流三相对称,正弦度良好;子模块电容电压都在2.5kV±8%范围内波动。若电容电压偏差超过10%,检查均衡算法或者调制策略,很大概率是排序逻辑里子模块投入数算错了。
桥臂电流观察也很有用。启用环流抑制后,桥臂电流除了基波分量外,基本看不到明显的二倍频纹波。如果环流波形还有明显的100Hz成分,说明环流抑制的PI参数没调好,或者桥臂电感取值过小。还有一个技巧:把同一个桥臂所有子模块电容电压叠加在一起和桥臂电压波形对比,可以直观验证子模块投切数是否合理。
4.2 动态响应怎么考核
电力质量调节系统最看重的是动态特性,我在模型中分别做了两类实验:
一类是无功阶跃:受端无功参考值从0Mvar突增到6Mvar,观察受端交流电压的支撑情况。理想的响应是受端电压几乎没有跌落,无功输出在100到200毫秒内跟上参考值,而送端系统基本不受影响,这正好体现了背对背结构的解耦优势。实测中如果受端电压跌落明显,先看内环q轴电流响应够不够快,再检查外环无功控制器的带宽。
另一类是有功传输突变:送端有功指令从2MW跳到8MW,观察直流母线电压动态。直流电压会出现小幅跌落(因为是功率突然加大),但应该在200ms内恢复,超调量不超过5%。如果直流电压跌落过大,说明整流侧定直流电压外环响应太慢;如果出现振荡,说明外环和电容电压波动发生了交互,需要降低外环带宽或增加阻尼。
4.3 谐波分析验证波形质量
Simulink的Powergui模块提供了FFT分析工具,可以直接分析电流波形各次谐波含量。稳态工况下,我测的交流侧电流THD在1.5%到3%之间,主要谐波是三倍频附近的奇数次谐波和边带谐波,这与载波频率设定有关。对比同容量两电平VSC动辄5%以上的THD水平,MMC的波形质量优势一目了然。如果你需要更低的THD,提高载波频率或者增加子模块个数,二选一,但仿真速度会受影响。
5. 调试中踩过的坑与排查思路
5.1 子模块电容电压初始冲击
第一次把模型跑起来时,直流母线电压一直建立不起来,子模块电容电压从0开始充电时电流冲击巨大,还把IGBT的仿真模型搞出了数值过压。后来我在每个子模块电容的初始电压上直接设置为Vdc/N,也就是让所有子模块在启动瞬间就有额定电压,同时把直流母线电容设为预充状态。启动瞬间的冲击电流得到有效抑制,系统也更快进入稳态。
5.2 直流电压出现振荡
在做有功功率动态响应测试时,直流母线电压出现了明显的等幅振荡,频率大概在几十赫兹。排查过程是先用测试信号堵塞各部分观察:单独测整流侧,外环PI输出很正常;单独测逆变侧,也没问题。后来定位到是整流侧定直流电压外环和逆变侧定功率外环在带宽接近时发生了交互。解决方法是把整流侧外环带宽降到20Hz左右,逆变侧功率环带宽更低一些,使两端动态特性拉开时间尺度,振荡立刻消失。
5.3 仿真速度慢到无法忍受
最开始我的模型是每桥臂20个子模块,双端一共120个子模块,每个子模块两个IGBT,离散仿真步长1e-6秒。结果仿真一秒的工况需要跑两个小时,根本没法调试。后来我做了几件事:把子模块数量降到每桥臂8个(不仅速度提升,波形质量也足够说明问题);把仿真步长放宽到5e-5秒;再把IGBT的开关损耗计算关掉,使用理想的开关逻辑。这样综合下来,仿真速度快了二十倍以上,而且由于调制策略不变,控制特性基本保持一致。
还有一个技巧是给仿真模型设置"初始化脚本",用MATLAB脚本把所有的参数(子模块电容、桥臂电感、PI参数、载波频率等)在仿真前统一算好并写入工作区。这样每次修改参数不用去模型里翻各个模块,直接在脚本里改,调试效率提升明显。
5.4 代数环报错
Simulink在搭建控制系统时如果信号回路里存在"瞬时反馈",会报代数环错误。MMC控制中容易触发代数环的地方是:内环电流反馈经过PI控制器、再经过解耦项,反馈回电流采样,如果PI控制器没有离散化或者延迟节拍,就可能形成代数环。解决方法是让PI控制器使用离散类型而非连续类型,并在电流采样后加一个一拍的延迟(Unit Delay模块),模拟数字控制器的采样保持效应。这个改动也符合实际DSP控制器的时序逻辑,仿真和硬件实现更接近。
6. 选型经验与后续可以扩展的方向
6.1 载波移相PWM与最近电平逼近的取舍
我在模型里用的是载波移相PWM,因为它实现直观、均压逻辑简单,适合子模块数量不太多的场景。但如果你研究的是实际工程中大容量、甚至上百个子模块的MMC,强烈建议研究最近电平逼近(NLM)配合排序均压法。NLM在每个控制周期计算需要投入的子模块数,通过桥臂电流方向判断电容充放电状态,再配合电容电压排序决定具体投切哪些子模块,计算量几乎不随子模块数增长,而且更容易处理桥臂故障冗余。Simulink里实现也不难,核心就是取整函数和排序算法,我在仿真中也测试过,效果不错。
6.2 如果想进一步研究电力质量调节能力
这个模型还有两个方向很值得扩展。第一是增加有源滤波功能:在受端MMC的控制中,对负载电流做谐波提取(比如用dq变换提取5、7次谐波),把这些谐波作为附加电流参考叠加到内环,让MMC同时承担有源滤波器角色。这个功能做出来,MMC就不只是补偿无功,还能主动治理非线性负载产生的谐波。第二是故障穿越场景:模拟受端交流系统发生电压跌落或不对称故障,观察背对背系统对故障的隔离能力,以及送端系统能否保持稳定输送功率。这两个扩展对实际工程应用都有很强的参考价值。
6.3 最后分享一个实用小技巧
在Simulink中跑这种大型离散模型时,Scope直接显示波形会拖慢仿真速度。可以尽量把关键信号用To Workspace输出,仿真结束后用MATLAB绘图函数统一绘图。另外,模型里大量使用Goto/From标签比直接连线更清晰,尤其在双端系统这样信号很多的场景,但要注意命名规范,否则信号对不上排查起来非常痛苦。
根据我自己的使用感受,背对背MMC作为电力质量调节系统的仿真难点不在主电路,而在控制分层的逻辑清晰度和参数整定上。把"外环-内环-调制-电容均压-环流抑制"这几个环节按上面说的顺序一层层搭好、逐级验收,整套系统自然能稳定运行。