MMC级联H桥仿真实战:双闭环控制与Simulink建模仿真拆解
2026/9/7 22:38:22 网站建设 项目流程

前阵子做一个固态变压器的预研方案,主电路拓扑绕不开MMC(模块化多电平换流器)和级联H桥(CHB)。翻论文的时候,10篇里有8篇都画出电压电流双闭环控制框图,但真到了自己搭Simulink模型,各种问题就冒出来了:子模块电容电压不均压、载波移相相位搞错、PI参数一上电就发散……这篇文章想用我实际跑通的一套仿真模型,把MMC级联H桥仿真图从主电路到双闭环控制完整拆开讲一遍。内容偏实操,原理部分只讲够用的深度,主要是把“这张仿真图到底是怎么一步步搭起来的、每个模块在干什么、波形异常时该往哪查”讲透。

适合正在做电力电子仿真、准备写相关论文或者刚接手中高压变流器项目的同学。你不需要一开始就懂多深的数学,但看完至少要能动手搭出一版能跑的模型,而不是停留在“原理图都认识、仿真一跑就崩”的状态。

1. 为什么MMC级联H桥值得仿真?先说清应用边界

1.1 MMC与级联H桥的拓扑血缘

MMC和级联H桥都属于模块化多电平变流器家族,最基本的思路都是用低压功率器件拼接出中高压输出,避开直接串联IGBT带来的动态均压难题。MMC的样子你应该不陌生:每一相分上、下两个桥臂,每个桥臂由N个子模块串联,再串一个桥臂电抗器。子模块通常是半桥结构(两个IGBT加一个电容),通过投入或切除电容来输出电压。

级联H桥则更直观:每相由N个H桥单元直接串联,每个H桥单元有一个独立的直流电容(或者接电池、光伏组件),单元输出只有正、负、零三个电平,N个单元叠加后就能输出2N+1个电平的阶梯波。它的优势是无需公共直流母线,非常适配固态变压器、中高压变频器、SVG这类需要多路独立直流源的场景。

这两个拓扑在仿真里经常出现在同一个项目里,比如三相级联H桥做PWM整流器给后级DAB供电,或者MMC做直流输电换流站。搞懂一套电压电流双闭环控制,基本可以通吃两类拓扑,因为控制器盯的是公共直流电压和交流电流,并非某个具体开关管。

1.2 为什么双闭环在模块化拓扑里格外重要

单台两电平变流器的电压电流双闭环已经很成熟了,但到了MMC和CHB这里,控制器的输出不再是直接驱动某个开关管,而是生成一个调制波送给PWM发生模块。PWM模块要负责产生多路载波,还要考虑各模块之间的电容电压平衡。这意味着双闭环只是“外衣”,里面还有载波移相和均压逻辑。

从仿真角度讲,模块化拓扑状态量成倍增加,比如5个级联单元、3相就有15个直流电容电压,加上输出电感电流,整个仿真模型的刚性和耦合程度比两电平高很多。这也是很多新手把论文里的控制框图抄到Simulink里后第一个遇到的坎:为什么别人波形那么干净,我的模型一加闭环就发散?答案往往不在PI参数,而在仿真模型的离散化步长、初值设定和均压策略这些“看不见的地方”。

所以,仿真这件事不只是在验证“控制策略能不能用”,更是在帮你提前暴露主电路参数设计和控制器实现之间的矛盾。下面几个部分就是围绕这套思路展开的。

2. 仿真前必懂的主电路模型与数学关系

2.1 级联H桥单相模型的电压合成关系

先拿单相级联H桥讲最基础的数学模型。假设每相有N个H桥单元串联,第i个单元的直流电容电压是Vdci,输出电压是vi(t),其中vi(t)只有三个状态:+Vdci(T1、T4导通)、0(T1、T2导通或T3、T4导通)、-Vdci(T2、T3导通)。那么该相交流侧输出电压为:

v_o(t) = v1(t) + v2(t) + ... + vN(t)

如果各单元电容电压均衡,都等于Vdc,则v_o(t)的总电平数等于2N+1,范围是[-NVdc, +NVdc]。N越大,电平数越多,阶梯波越逼近正弦波,滤波电感可以做得越小,这是级联结构最核心的优势。仿真里要查看的输出电压波形,本质上就是在验证这个合成关系是否正确。

再结合交流侧电感L和电网电压vg,写出单相的微分方程:

L * di/dt = v_o(t) - vg(t)

这里L是并网电抗器或变压器等效漏感,i是交流电流。这个方程是电流内环设计的起点:只要控制v_o(t)的基波幅值和相位,就能控制电流的大小和方向。

2.2 MMC子模块的工作状态与电容充放电

MMC的分析比CHB稍微绕一点,因为每个子模块的输出不是正负对称的,半桥子模块只能输出0或Vc两种状态(忽略闭锁状态),交流侧电压靠上下桥臂的差模分量形成。以A相为例,上桥臂电压vu、下桥臂电压vl,交流输出端电压va可以表示为:

va = (vl - vu) / 2 - (L_arm/2) * (d(iu - il)/dt)

大概意思是:交流输出靠上下桥臂电压之差来控制,而直流侧电流等于上下桥臂电流之和,产生环流。仿真模型里,如果不主动控制环流,上下桥臂电容电压会出现2倍频波动,导致输出波形畸变。在纯双闭环仿真中,桥臂电抗器能抑制一部分环流,但如果你想复现“电容电压都在同一水平”的干净图,必须引入环流抑制或子模块均压算法。

子模块电容充放电规律也很重要:当子模块投入时,桥臂电流流入电容就会充电,流出就会放电。排序均压算法的本质,就是根据桥臂电流方向实时决定“哪些电容电压低的模块优先投入充电”或相反。仿真里的核心代码用不到太复杂的数学,一个sort就能搞定,但采样延时和排序频率会直接影响均压效果。

2.3 三相系统的d-q旋转坐标方程

电压电流双闭环通常是在d-q旋转坐标系下实现的。以级联H桥PWM整流器为例,忽略电阻,三相电感电流的d-q方程可以写成:

L * did/dt = vgd - vod + ω * L * iq

L * diq/dt = vgq - voq - ω * L * id

这里的vgd、vgq是电网电压的d-q分量,vod、voq是变流器输出电压的d-q分量,ω是电网角频率。注意d、q轴之间存在耦合项ωLiq和-ωLid,这也是电流环里必须加前馈解耦的原因。仿真搭建时,直接在这两个方程的基础上加PI控制器,就可以得到“电压外环给定id、电流内环输出调制波”的标准结构。

这一小节看起来像课本内容,但实际仿真时非常关键:如果你在Simulink里直接搭三相静止坐标系下的PI控制,正弦跟踪会有稳态误差,所以必须用d-q变换。同时d-q变换的锁相环相位必须准确,否则id和iq分量搞混,控制方向就错了。后面讲仿真模型的时候会再回到这一点。

3. 电压电流双闭环控制策略的工程化设计

3.1 外环电压环与内环电流环的任务划分

双闭环的分工很清晰:外环一般是直流电压环(PWM整流器场景)或者无功功率/有功功率环(STATCOM/逆变器场景),它的输出是内环电流的参考值;内环是电流环,负责快速跟踪电流指令,输出调制波。外环比内环慢得多,两者带宽相差5到10倍。

以级联H桥PWM整流器为例:

  • 外环:采样直流母线电压Vdc,和参考值Vdc_ref比较,经过PI控制器,输出有功电流指令id_ref。为了控制单位功率因数,iq_ref通常设为0。
  • 内环:采样三相交流电流,经过d-q变换得到id和iq,分别和id_ref、iq_ref比较,经过PI控制器,再加上解耦项和电网电压前馈,得到vod_ref和voq_ref。
  • 反Park变换得到三相调制波,送给CPS-PWM模块生成各H桥单元开关信号。

改成MMC场景时,差别在于外环盯的是子模块电容电压平均值(或者直流母线电压),内环电流环结构几乎一样。所以,你只要把一套双闭环调明白了,换个拓扑以后只改主电路和PWM模块就行,控制框架基本不用推翻。

3.2 前馈解耦与PI参数整定

电流环PI控制器的输出不要直接当作调制波,一定要加解耦项和电网电压前馈。以d轴为例:

vod_ref = PI(id_err) + ω * L * iq + vgd

其中PI(id_err)就是d轴电流误差经过PI后的输出,ωLiq是抵消q轴耦合的前馈,vgd是电网电压前馈,用于抵消外部扰动。如果不加这两项,动态过程中d轴和q轴会相互干扰,电流波形会出现明显的抖振。

再来讲PI整定。很多项目不用太精确的模型,直接用频带法估算就够了:

  • 电流环带宽fc取开关频率的1/10到1/20。以载波移相PWM等效开关频率10kHz为例,电流环带宽取1k~2kHz。
  • 把被控对象近似成一阶惯性环节,电流环PI参数按Kp ≈ L * ωc、Ki ≈ R * ωc计算(ωc = 2πfc)。这里的L是交流侧电感,R是回路等效电阻。
  • 外环电压响应要慢,电压环带宽取电流环的1/5到1/10。电压环PI可以按Kp = C * ωv / 2、Ki = ωv^2 * C / 2之类的经验式初评,再微调。

我自己的习惯是先给一组保守的小增益,让系统稳定跑起来,再逐步加大比例和积分。不要一开始就按论文里的参数填,因为主电路参数、采样周期、仿真步长一变,最优PI值差很远。电流内环发散的时候,优先把Kp砍半,积分先不动,看波形是否恢复稳定,这样能快速定位是比例增益太大还是积分饱和。

3.3 载波移相PWM与模块均压的协同

CPS-PWM是级联H桥和MMC仿真里最常用的调制方法。以每相N个单元为例,每个单元都用频率相同、幅值相同的三角载波,相邻载波之间相位差为180°/N(单极倍频或者双极性调制的具体规则略有差异)。调制波和每个载波比较后生成对应单元的PWM脉冲。

这样做的好处是:虽然每个开关管只工作在1kHz左右,但输出合成波形的等效开关频率变成了2N倍,滤波要求大幅降低。仿真里查看输出电压频谱时,会看到谐波主要分布在2N*fs附近,而不是fs附近,这就是CPS-PWM生效的标志。

均压控制要跟上。级联H桥场景,各单元直流电容相互独立,光靠CPS-PWM各单元功率天然均衡性还不够,仿真里常用两种手段:一是给每个单元额外叠加一个微小的均压修正量,二是定期对单元进行轮换(旋转占位)。MMC场景更直接,用排序法:每个控制周期测所有子模块电容电压,结合桥臂电流方向排序,决定哪几个模块投入、哪几个切除。排序法代码简单,但会带来较高的开关频率,仿真中要设置合理的排序控制周期,比如2~5倍的开关频率。顺序写反、方向判断错了,波形会立刻乱给你看,这也是仿真相较于理论分析最有价值的地方。

4. 仿真模型怎么搭?参数与模块选型细节

4.1 模型总体结构与仿真环境

仿真平台建议直接用MATLAB/Simulink,电力电子库用Simscape Electrical的Specialized Power Systems,控制部分用普通Simulink模块搭,不做自定义状态方程。原因很简单:Specialized Power Systems自带IGBT/二极管和变流器桥臂,能省去大量编写器件级方程的时间,数值稳定性也更好。如果你所在单位有PLECS或者Saber也完全可以,但下文以MATLAB/R2023b为参照。

模型的顶层结构分四块:

  1. 三相电网电源 + 并网电感L(或变压器)
  2. 主电路:MMC或级联H桥桥臂
  3. 控制子系统:采样、坐标变换、双闭环、均压
  4. 调制与脉冲分配:CPS-PWM载波比较、开关信号路由

建议把控制部分独立封装成Subsystem,脉冲分配单独封装,主电路单独封装,三层之间只留信号线。这样排查问题的时候可以分段断开:比如先只跑主电路加开环调制波,确认电平数正确,再接闭环。

4.2 一组可以直接抄的参数

给一组适合用来验证双闭环效果的仿真参数,以三相级联H桥PWM整流器为例:

参数数值说明
交流侧线电压有效值10 kV三相50Hz
额定功率2 MVA后续接DAB负载
每相级联单元数N5输出11电平
单元直流电压参考值2000 V每单元独立
直流电容10 mF决定电压环动态
并网电感L3 mH约0.19 pu
开关频率fs1 kHz等效10kHz
电流环带宽1.5 kHz初始估算
电压环带宽150 Hz外环慢
仿真步长2e-5 s离散固定步长

如果按这个参数搭,电流环PI初始值可以用Kp = Lωc、Ki = Rωc估算,R在线路电阻0.05Ω左右,ωc=2π*1500,算出来Kp在28左右、Ki约470,实际模型里因为标幺化问题可能要缩到很小,建议先全系统用标幺值(pu)建模,PI参数数量级更统一,不易出错。电压环Kp先取0.5、Ki取20左右,跑通了再加倍。

4.3 从开环到闭环的搭建顺序

我搭这种模型从来不会一步到位直接闭环,而是按下面这个顺序:

  • 第一步:先搭主电路和CPS-PWM,调制波直接给三相对称正弦,幅值给0.8。开环跑0.1s,看输出电压阶梯波、交流电流是否大致正弦。如果这个阶段波形不对,问题在主电路或PWM模块,不要动控制器。
  • 第二步:加坐标变换和锁相环,把交流电流变换到d-q域,通过Scope观察id、iq是否有直流分量。此时PLL相位差会直接体现在id、iq波动上,先解决PLL。
  • 第三步:单独调试电流内环,把id_ref设成常数(比如0.5pu),关闭电压外环,看电流是否跟踪参考值。观察电流波形是否有超调、震荡。
  • 第四步:接上电压外环,Vdc_ref斜坡上升到额定值,观察直流电容充电过程。电压外环容易产生过冲,必要时候对PI输出加限幅。
  • 第五步:接入后级负载或者功率突变,观察动态响应和电容电压均衡情况。

每步之间最好都保存一个模型版本或者至少打一个检查点,免得改乱了回不去。很多仿真发散问题,本质上是因为跨过了这五步中某一步,直接跳到最终闭环,出问题后无从排查。

5. 仿真结果逐图解析:从波形反推控制效果

5.1 稳态工况下的关键波形

仿真跑通后,重点看四类波形:

  • 输出电压v_o:应该看到清晰的11电平阶梯波,电平之间的台阶高度接近2000V,波形包络呈正弦。如果电平数少于11,说明某些单元没有投入;如果台阶高度明显不齐,说明单元电容电压不均衡。
  • 交流电流ia、ib、ic:三相对称正弦,幅值接近额定值,相位与电网电压相位一致(单位功率因数整流状态)。电流THD通常在2%到5%之间,具体取决于电感大小和等效开关频率。
  • 直流电容电压Vdc1~Vdc5:各单元电容电压在2000V上下波动,波动脉宽约几伏到几十伏,波形中存在2倍频或开关频率纹波是正常的。若各单元电压分散度超过1%,需要检查均压环和CPS-PWM载波相序。
  • d-q轴电流:稳态时id接近参考值,iq接近0,两者独立控制,不出现相互耦合的大幅波动。

我个人在看稳态波形时,习惯把调制波、三角载波和某个单元的门极信号放到同一个Scope里观察,确认CPS-PWM的载波移相角度对不对。这里很容易犯的错是把180°/N写成了360°/N,输出波形会有明显的缺陷,而且电流会带上不正常的低频谐波。

5.2 动态响应:负载突变和指令跟踪

动态仿真一般看两个场景:

第一个是负载突变:0.2s时突然把直流侧负载从100%切到50%(或者反过来)。理想响应是直流电压短暂跌落或抬升后,在几个工频周期内回到2000V,过冲控制在5%以内;id_ref随着负载变化快速调整,电流环响应比电压环快,所以id的跟踪速度要比Vdc恢复速度快。如果电压环PI太强,Vdc会出现震荡收敛;太弱,Vdc恢复时间拉长到数百毫秒。

第二个是指令阶跃:把iq_ref从0阶跃到0.2pu,模拟无功功率指令突变。观察d、q轴电流是否有解耦效果——理想的解耦是id几乎不受影响,如果id跟着大幅波动,说明解耦项符号或系数错了。这类问题在仿真里很常见,因为公式里ωL*iq这一项的正负号取决于你定义的d-q旋转方向。

5.3 FFT谐波分析与等效开关频率验证

要论证CPS-PWM的效果,FFT分析是必须做的一步。把交流电流波形导出到MATLAB工作空间,用powergui(Simscape Electrical自带的FFT工具)或者直接写命令算总谐波畸变率THD和频谱分布。

典型结果是:谐波频谱中主导谐波集中在2N*fs附近,也就是10kHz附近,低频段5、7、11、13次谐波都非常小。如果FFT图显示频谱里有明显的2.5kHz或5kHz谐波群,说明等效开关频率没有抬升到预期水平,可能是载波移相角度没有起作用,或者各单元输出波形存在错位。

对于MMC的仿真,还可以看桥臂电流中的环流分量,FFT图上会有2倍频分量(100Hz),如果做环流抑制控制,这个分量应明显下降。这部分在仿真模型里加一个“环流瞬时值 = (iu+il)/2”的计算即可观察,不需要额外硬件。

6. 仿真发散与常见报错的完整排查思路

6.1 仿真发散的五类根因

仿真发散基本可以归成五类,先给出对照表,具体操作再细讲:

现象根因排查方向
波形瞬间变成NaN或±∞PI参数过大或模型代数环先降Kp,再查代数环
开关频率附近震荡电流环带宽过高、解耦项符号错验证d-q方程符号
直流电压无法稳定,持续升高/降低电压环限幅缺失或id_ref方向错查功率流向,限制幅值
波形发散前有明显的数值“毛刺”仿真步长过大或solver刚性不足减小步长,换ode23t/ode15s
初始化就报错无法启动初值冲突、模型状态不一致检查电容电压初值、PLL初始相位

6.2 一次实际发散案例的排查过程

举一个我实际遇到过的例子:级联H桥模型,双闭环一接上,0.01s内交流电流冲上100kA然后NaN。当时第一反应是PI参数太大,把Kp从30改成3,依然发散;再改成0.1,波形变成大幅低频振荡,还是不收敛。这就说明问题不是PI参数。

后来我一步步回退:把控制器输出直接给固定的正弦调制波,电流波形正常;把闭环CPS-PWM换成单相两电平PWM测试,闭环正常。问题就锁定在“闭环控制器和CPS-PWM的配合”上。打开脉冲分配逻辑才发现,Carrier的相位初始化用的是rad单位,但调制波用的模块输出的是per-unit角度,两者差了57.3倍,导致每个周期PWM相位都在乱跳。修正单位后,模型马上稳定了。

这个案例提醒我两件事:一是仿真里的单位错误很难通过报错暴露,因为系统不会提示“角度单位不对”,只会表现为波形发散;二是排查发散问题的时候,一定要按“主电路→调制→闭环”的顺序做隔离实验,不要一上来就动PI参数或改拓扑。

6.3 其他高频问题:初值、步长与运行环境

初值问题是MMC模型独有的坑。MMC的子模块电容数量多,如果所有电容初始电压都是0,启动瞬间会有巨大的充电电流,轻则波形难看,重则仿真发散。一般做法是:要么把仿真初始状态设置为“已充电完成”,要么用一个预充电电阻支路模拟实际系统的预充电过程。前者适合快速验证控制策略,后者适合做启动过程研究。

仿真步长也要注意。当前参数下使用2e-5秒的固定步长能稳定运行,但如果你把载波频率改成2kHz,或者把级联单元数增加到10,就必须重新评估步长。经验是每个PWM载波周期内至少要有20个仿真点,即步长小于1/(20*fs)。数值刚性比较大的模型,solver可以选ode23t或ode15s,但电力电子仿真优先用离散固定步长,逻辑更可控。

还有一个运行环境相关的问题值得提一下:如果系统环境中由IT管理员启用了应用控制策略(App Control/Device Guard),在无人值守批处理仿真时可能遇到“OSError: [winerror 4551] 应用程序控制策略已阻止此文件”这类报错,表现为matlab.exe或仿真脚本无法启动。这通常不是模型问题,而是工作目录下的可执行文件或脚本被执行策略拦截了。排查思路是先看Windows事件日志里AppLocker/WDAC相关记录,确认被阻断的是哪个文件,再把仿真工作目录或对应脚本加入允许名单,或者换成许可执行的目录。原则上这些操作需要系统管理员权限,不要自行关闭系统安全功能。

最后说一个很实际的小技巧:模型里所有PI控制器都建议加上输出限幅,饱和时还要做积分抗饱和处理。这个细节在课上很少讲,但仿真里特别管用。没有输出限幅的电压环,在电容预充电阶段会产生巨大的id_ref,直接把电流环打爆;加了限幅和抗饱和之后,启动过程会平稳很多。我自己在仿真里踩过好几次这个坑,后来干脆把限幅做成控制子系统的标准配置,再也没出过因为PI饱和导致的发散问题。

仿真的价值不在于把论文里的框图复现出来,而是让你在一次次发散和定位中,真正理解控制器的带宽分配、调制移相、均压排序这些“看不见的设计”。希望这篇拆解能让你少走几步弯路,先跑起来,再慢慢深挖。

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

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

立即咨询