
前阵子做一个固态变压器的预研方案主电路拓扑绕不开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个单元叠加后就能输出2N1个电平的阶梯波。它的优势是无需公共直流母线非常适配固态变压器、中高压变频器、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)只有三个状态VdciT1、T4导通、0T1、T2导通或T3、T4导通、-VdciT2、T3导通。那么该相交流侧输出电压为v_o(t) v1(t) v2(t) ... vN(t)如果各单元电容电压均衡都等于Vdc则v_o(t)的总电平数等于2N1范围是[-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 * iqL * 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为参照。模型的顶层结构分四块三相电网电源 并网电感L或变压器主电路MMC或级联H桥桥臂控制子系统采样、坐标变换、双闭环、均压调制与脉冲分配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Ω左右ωc2π*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工作空间用powerguiSimscape Electrical自带的FFT工具或者直接写命令算总谐波畸变率THD和频谱分布。典型结果是谐波频谱中主导谐波集中在2N*fs附近也就是10kHz附近低频段5、7、11、13次谐波都非常小。如果FFT图显示频谱里有明显的2.5kHz或5kHz谐波群说明等效开关频率没有抬升到预期水平可能是载波移相角度没有起作用或者各单元输出波形存在错位。对于MMC的仿真还可以看桥臂电流中的环流分量FFT图上会有2倍频分量100Hz如果做环流抑制控制这个分量应明显下降。这部分在仿真模型里加一个“环流瞬时值 (iuil)/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饱和导致的发散问题。仿真的价值不在于把论文里的框图复现出来而是让你在一次次发散和定位中真正理解控制器的带宽分配、调制移相、均压排序这些“看不见的设计”。希望这篇拆解能让你少走几步弯路先跑起来再慢慢深挖。