ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MMC并网仿真从建模到调参:详解载波移相、均压与环流抑制

MMC并网仿真从建模到调参:详解载波移相、均压与环流抑制 上个月帮一位做新能源方向的师弟排查MMC并网仿真发散的问题他在Simulink里搭了21电平的模块化多电平换流器电流波形前两个工频周期还算正常第三个周期开始出现明显畸变最后直接崩掉。我远程看了半个小时的模型才发现问题不在PI参数也不在锁相环而是载波移相调制时三角载波的初始相位没有按桥臂间的阶梯关系对齐。这种问题说明书上不会写教程里也基本不会提但只要你亲手搭过一次MMC并网仿真大概率会撞上类似的坑。这篇文章就把我这些年做多电平MMC逆变器Simulink仿真、并网控制和参数优化的完整思路整理出来从结构原理、建模路线、控制策略到参数整定和调试经验尽量说人话给可以直接用的操作方法和参数依据适合正在做MMC相关课题、需要搭并网仿真平台、或者在调参路上反复挣扎的同行参考。1. 为什么选择MMC做并网逆变器先从结构聊起1.1 桥臂子模块的基本单元与工作原理MMC全称是模块化多电平换流器名字里的模块化三个字是它的灵魂。整个换流器由六个桥臂组成上下两个桥臂构成一相每个桥臂由若干结构完全相同的子模块串联再串一个桥臂电抗器接到交流侧。子模块是MMC最小的功能单元最常见的半桥结构里包含一个直流电容和两个带反并联二极管的IGBT。子模块的工作状态可以用投入和切除两个词概括。当上管导通下管关断时子模块输出电压等于电容电压相当于把电容接入主电路当下管导通上管关断时子模块输出电压为零电容被旁路。通过在每个控制周期内决定桥臂中有多少个子模块处于投入状态桥臂输出电压就能呈现阶梯波子模块数量越多阶梯越细输出电压越接近正弦。这里面有两个基本约束同一时刻每个桥臂投入的子模块数量要保证直流侧电压被正确分配同时还要考虑桥臂电流方向对电容充放电的影响否则电容电压会越跑越偏。很多第一次接触MMC的人容易把它和级联H桥混淆。两者确实都属于多电平拓扑但MMC的每个桥臂是贯穿整个相单元的交流侧从上下桥臂连接点引出这种结构天然支持四象限运行也方便扩展到高压大容量场合。理解这点之后再去看并网控制就会明白为什么控制器的输出最终要分配到六个桥臂上而不是三个。1.2 和两电平、三电平相比MMC赢了什么又输了什么我在实际对比过两电平、三电平和MMC三种方案的仿真模型之后对它们的差异感受很直接。两电平逆变器结构最简单每个桥臂只有两个开关器件控制上也只需要一组互补的PWM信号但输出波形里谐波含量高需要体积可观的滤波电抗才能满足并网电流质量要求。三电平NPC结构上多了一倍器件输出波形好了不少但中点电位平衡问题跟着出现控制复杂度上了一个台阶。MMC的优势体现在几个维度。输出电平数随子模块数量线性增加波形质量天然占优并网侧的滤波需求大幅降低子模块结构完全相同工程上便于标准化生产和冗余配置某个子模块故障可以被旁路系统继续运行开关频率可以做得比较低因为波形质量靠的是电平数而不是高频开关。代价也很明显器件数量多控制系统需要处理的状态量多仿真模型的计算量远非两电平可比。以21电平为例每个桥臂20个子模块全模型共120个子模块、240个开关器件详细开关模型仿真一个工频周期就要很久。所以在决定用MMC之前要先想清楚你的研究目标到底需要MMC的哪个特性。如果只是验证并网控制算法两电平可能已经够用如果研究目标是高压大容量并网、波形质量优化、子模块故障冗余这些方向MMC就是必须的选择。1.3 在建模仿真里哪些场景真正需要用MMC从我接触到的项目来看MMC仿真最常见的应用场景集中在三类。第一类是柔性直流输电系统的并网与站间功率传输这是MMC应用最成熟的领域仿真重点通常是站级控制、功率反转、交流故障穿越等工况第二类是新能源并网特别是中高压直挂式光伏或者储能系统不需要工频变压器直接接入中压交流电网MMC在这里的价值是省掉笨重的升压变压器同时提供更好的电能质量第三类是电机驱动和电能质量治理比如中压电机变频驱动、STATCOM等。这三类场景虽然应用方向不同但仿真平台的搭建思路是相通的核心都包括主电路拓扑、调制策略、电容均压和并网/功率控制这几个模块。我建议刚开始接触的同学不要一上来就追求完全复现某个实际工程案例先把一个21电平的MMC并网模型跑通掌握各个模块的连接关系和控制信号流向再往里面加复杂的工况。2. 建模前的三条路线详细开关模型、平均值模型还是简化模型2.1 详细开关模型的搭建方式与工程量在Simulink里搭MMC详细开关模型主电路部分用的是Simscape Electrical模块库。每个子模块需要两个IGBT加反并联二极管再加上一个直流电容。六个桥臂各串一个电抗器交流侧接三相电网直流侧可以接直流电源或者用受控源模拟直流母线。搭建的方法上没有太多技巧性的东西但工作量非常实在建议用子系统封装把单个子模块封装成一个带输入输出端口的子系统然后复制多个。我搭模型的经验是分三层来组织。第一层是电气主电路层放桥臂、子模块、电抗器、电网和负载第二层是测量层把桥臂电流、电容电压、输出电压这些信号通过电压电流测量模块引出来第三层是控制层负责运行调制算法和均压算法。这样分层的最大好处是排查问题的时候能快速定位是电气层的问题还是控制层的问题。很多新手把所有模块堆在一个窗口里信号线交叉得跟蜘蛛网一样一旦仿真发散根本无从下手。详细开关模型的电气部分接入的是传统的Simscape求解器Simulink控制部分则运行离散算法。两者之间的数据交换通过测量模块和受控源完成。这种混合结构需要特别注意信号采样率和PWM开关频率的匹配问题控制周期和载波周期如果不匹配输出的调制波会出现台阶状失真。2.2 平均值模型的等效思路如果研究重点是并网控制和功率管理而不是器件开关过程完全没必要跑详细开关模型。平均值模型的核心思想是忽略子模块的开关过程用受控源来等效桥臂的电压输出能力。每个桥臂用一个受控电压源表示电压值由桥臂投入子模块数和单个电容电压均值决定子模块电容的充放电行为用一个受控电流源表示电流值由桥臂电流和投入子模块数决定。这种模型的优势极其明显。仿真速度能提升一到两个数量级而且不存在IGBT开关过程带来的数值刚性求解器更容易收敛。缺点是无法观察开关纹波、电容电压的细节波动和器件损耗。我通常的做法是先搭平均值模型调试并网控制算法确认控制参数和控制逻辑没问题之后再切换到详细开关模型做波形级验证。这比直接在详细开关模型上调参效率高得多。另外还有一类更简化的模型就是直接忽略子模块电容动态把MMC等效成受控电压源串阻抗的戴维南电路主要用在做系统级稳定性分析。这种模型在仿真软件里甚至不需要完整的拓扑结构适合算例规模特别大的场合。但做MMC本身的研究不建议用这种模型因为它把电容均压和环流这些MMC最核心的动态全部丢掉了。2.3 求解器选择与仿真步长的坑仿真跑不动的很大一部分原因出在求解器配置上。MMC详细开关模型包含大量快速开关事件如果用变步长连续求解器仿真步长会被压缩到极小值来捕捉开关动作结果就是仿真速度让人绝望。我建议的做法是在powergui模块里把仿真类型设置为离散选择固定步长步长设置为载波周期的五分之一到十分之一。例如载波频率取2000Hz载波周期是500微秒仿真步长可以取50微秒。这里有个容易被忽略的点Simscape Electrical的离散求解器要求所有电气元件都支持离散化大部分标准元件都能满足但可控电压源和测量模块要注意选择Simscape Electrical版本而不是Simulink版本。另外控制部分的采样周期不一定和电气仿真步长一致可以设置一个较大的控制周期来降低CPU负担但控制周期必须是仿真步长的整数倍否则会导致采样时刻错位。离散化之后还有一个同步问题。PWM波的生成依赖三角载波计数这个计数在离散仿真里会受步长量化影响产生轻微的载波频率偏差。对并网控制影响不大但如果你要做谐波频谱分析会发现频谱里出现一些原本不该有的边带分量这是离散化引入的数值误差不是实际的谐波。3. 并网控制dq旋转坐标系下的双闭环与调制策略3.1 锁相环、坐标变换与电流内环解耦MMC并网控制的基本框架和两电平VSC并网非常相似核心是dq旋转坐标系下的双闭环结构。电网电压通过锁相环得到同步角度三相电流被变换到dq坐标系有功电流id与电网电压d轴分量同向无功电流iq与电网电压d轴垂直。控制目标就是让id和iq跟随指令值从而实现有功和无功的独立控制。电流内环的方程从交流侧电压平衡关系出发可以写成d轴的控制电压等于电网电压d轴分量减去电阻压降和电感压降再加上一个交叉耦合项。这个耦合项是dq坐标系变换带来的如果不做解耦id的调节会扰动iq反之亦然。所以电流内环PI控制器的输出要加上耦合补偿项这是并网控制里最容易写错的环节公式里的正负号一旦搞反整个电流环就会变成正反馈仿真瞬间发散。锁相环的实现有两种常见方式。一种是直接用Simulink里的PLL模块配置简单但在电网电压畸变或不对称时动态响应不理想另一种是自己搭一个基于dq变换的锁相环把q轴电压作为误差信号输入PI控制器输出为角频率再积分得到角度。后者在MMC仿真中更常见因为MMC的应用场景多半是中高压系统对电网环境的适应性要求更高。实测中在电网电压含有5%的5次谐波时自己搭的锁相环只要加一个低通滤波就能保证角度稳定而Simulink内置PLL则需要额外调整带宽。3.2 外环功率控制与直流侧电压稳定外环的作用是根据控制目标生成电流内环的指令值。并网逆变器有两种最常见的运行模式定有功功率和无功功率控制或者定直流电压和无功功率控制。前者适用于功率给定的场合比如光伏电站按照调度指令输出功率后者适用于支撑直流母线电压的场合比如柔性直流输电的整流站。定直流电压控制外环的PI参数整定比功率控制外环更讲究一些。直流电压的动态过程由直流侧电容的充放电决定时间常数较大外环带宽要设置得比电流内环低一个数量级否则内外环之间会出现振荡。我自己的经验是电流内环带宽取500到1000rad/s时电压外环带宽取100到200rad/s比较稳妥。还有一种做法是在电压外环前馈功率指令让功率指令直接补偿电流指令这样可以加快直流电压的响应速度。在MMC模型里还有一点不同于两电平VSCDC侧电容不再是单个电容而是分布在各子模块里的电容。外环控制维持的是所有子模块电容电压总和而各子模块之间的电压均衡由均压算法负责。所以外环、内环和均压算法之间存在时间尺度上的分层外环最慢内环居中均压算法最快。这个层次关系在设计控制周期时要想清楚均压算法的执行频率通常等于载波频率内环控制周期等于载波周期外环则可以再放慢几倍。3.3 载波移相SPWM的实现细节与NLM的适用边界调制策略是MMC控制中最直接关系到波形质量的环节。对MMC来说最常用的调制方法有两种载波移相正弦脉宽调制和最近电平逼近调制。载波移相SPWM的思路是为每个桥臂的N个子模块分配N个相位依次错开的三角载波每个载波与同一个正弦调制波比较产生N路PWM信号叠加之后桥臂输出电压就是一个N1电平的阶梯波。这个方法实现简单、动态响应好、等效开关频率高在电平数不高的场合一般低于几十个非常实用。在Simulink里实现载波移相需要特别注意载波之间的相位差。每桥臂N个子模块相邻载波的相位差是360度除以N。但两个关键细节经常被忽略一是上下桥臂的载波排列关系二是三角载波的初始相位要一致否则启动瞬间会出现桥臂间的不对称冲击。我师弟那个发散问题就是在这里栽的跟头——他复制子模块之后每个载波生成模块的初始相位设置不一致导致所有载波都是从零相位开始叠加出来的波形完全错乱。最近电平逼近调制则是直接计算每个时刻需要投入多少个子模块用阶梯波去逼近正弦调制波。它的优势是开关频率低、计算量小更适合子模块数量多的高压场景。但在Simulink里做NLM时要注意均压算法和NLM是强耦合的因为NLM只决定了投入数量而不决定哪些子模块投入这个选择必须实时交给均压算法去完成。我在做选择时通常按这个标准来子模块数低于50个用载波移相SPWM高于50个用NLM中间区间看控制器的计算能力。实际做研究的话21电平或31电平的模型用载波移相SPWM已经足够而且实现起来直观方便排错也容易。4. 参数优化电容电压均衡、环流抑制与桥臂电抗整定4.1 电容电压排序均压从理论到MATLAB Function落地MMC正常运行的前提是各个子模块的电容电压保持基本一致。如果某个子模块电容电压长期偏高或者偏低会导致该子模块承受的电压应力异常严重时损坏器件。由于每个子模块的电容充电和放电的电流路径不同即使参数完全一致在实际运行中也会因为开关时刻的差异积累出电压偏差。所以均压算法是MMC控制中不可回避的环节。最经典的均压算法是排序法。每个控制周期里检测所有子模块的电容电压并排序根据桥臂电流方向决定投入策略。如果桥臂电流对电容充电就优先投入电压最低的那些子模块让它们多充电如果桥臂电流使电容放电就优先投入电压最高的那些子模块让它们多放电。这样反复调整电容电压会自动趋向一致。在Simulink里实现排序法最直接的方式是用MATLAB Function模块写一个排序函数。我贴一个简化版的思路function [gating] sorting_algorithm(vc, iarm, N) % vc: 电容电压数组 % iarm: 桥臂电流 % N: 需要投入的子模块数 [~, idx] sort(vc); % 按电压升序排列 gating zeros(size(vc)); if iarm 0 % 桥臂电流为充电方向投入电压最低的N个 gating(idx(1:N)) 1; else % 桥臂电流为放电方向投入电压最高的N个 gating(idx(end-N1:end)) 1; end end这个算法逻辑简单但每步都做全排序的计算量不小。工业实现里有很多优化手段比如减少排序频率、使用分组排序、加入保持因子减少开关动作等。仿真阶段倒不必太纠结计算量我实测在21电平模型上直接用MATLAB Function做每小时一万步的排序仿真速度还能接受。需要注意的一点是排序算法的执行频率要等于或者高于载波频率否则均压响应速度跟不上开关动作。4.2 二倍频环流的产生机理与抑制方法MMC桥臂电流里除了基频分量还包含一个二倍频的负序环流分量。这个环流的产生机理是三相桥臂的瞬时功率不是常数存在二倍频的脉动。由于上下桥臂之间有公共的直流母线这个脉动功率会在三相桥臂之间形成环流通路。环流本身不参与交流侧的功率传输但会增加桥臂电流的峰值和有效值带来额外的损耗严重时还会使桥臂电流畸变。环流抑制的思路是在控制中加入一个针对环流的闭环。检测三个桥臂的环流计算方法环流等于上下桥臂电流之和的一半再减去直流电流的三分之一将其变换到二倍频负序的dq旋转坐标系下用PI控制器把环流的d、q分量控制到零输出作为调制波的修正量叠加到桥臂电压指令上。这个方法效果好但实现相对复杂。另一个简单粗暴的方法是增大桥臂电抗物理上限制环流的幅值代价是增大电抗的体积和成本。在仿真里做环流抑制时我建议先不加入环流抑制器跑一次仿真看环流幅值有多大。如果环流小于额定电流的5%左右很多时候可以依靠桥臂电抗自然限制不必专门加抑制算法如果比例偏高再考虑加抑制环。这样能避免一上来就引入过多控制环节增加调试难度。4.3 桥臂电抗和子模块电容的参数设计经验桥臂电抗的取值直接影响环流抑制效果和电流动态响应速度。取值越大环流越小但电流响应变慢电压损失也变大。工程上常见的取值区间是0.1到0.15标幺值。以21电平、直流侧电压20000伏的模型为例额定容量对应桥臂电流大约几百安培桥臂电抗取值在几毫亨到十几毫亨之间都是合理的范围具体要根据实际容量计算。子模块电容的参数设计要满足电容电压波动约束。MMC的电容电压波动主要来自桥臂瞬时功率的脉动波动幅值与电容容量成反比。工程上一般要求电容电压波动不超过额定值的5%到10%。计算子模块电容的经验公式可以从桥臂瞬时能量的变化量推导出来最终结果是电容值与额定容量成正比、与子模块数和电容电压波动允许值成反比、与系统额定角频率成反比。我实际调试时的做法是先按工程经验取一个初始值然后跑仿真看稳态电容电压波动范围再反过来调整。这种方法虽然不够理论化但比盲算效率高。理论公式算出来的值往往偏大或偏小因为实际工况下的功率因数、调制比都会影响电压波动幅值。实测中把波动超限的部分跟理论推导对照可以加深对参数物理意义的理解。5. 调试实录那些跑起来就崩和跑不动的情况5.1 电容电压发散、电流畸变的逐项排查我整理了一份自己在调试MMC模型时固定会走的排查路线。第一步是检查功率平衡给定有功功率指令和直流侧电压是否匹配如果功率指令过大而直流电压支撑不足电容电压会持续跌落最终发散。第二步检查调制波的极性观察桥臂电压指令和实际输出电压是否符号一致极性反了会直接导致正反馈。第三步检查载波参数的一致性包括载波频率、幅值、相位尤其是各子模块载波相位差是否符合设计要求。第四步检查均压算法的触发条件触发频率太低或者方向判断错误都会让电容电压发散。每一个步骤都对应一个仿真现象。比如电容电压整体漂移但彼此之间波形形状一致多半是功率不匹配电容电压高低交替出现锯齿状波动多半是均压排序方向反了输出电流出现周期性尖峰多半是载波不同步。把现象和根因对应起来排查速度会快很多。千万不要在仿真发散时一次改三个参数那样即使跑通了也不知道是谁起的作用。5.2 仿真速度优化从仿真一晚上到半个小时详细开关模型的仿真速度问题几乎每个人都遇到过。21电平模型跑一个工频周期20毫秒在普通电脑上可能要几分钟跑稳态分析至少需要几百毫秒的数据时间成本非常高。我是从几个方向来提速的。首先是模型层面把不必要的示波器减少示波器绘图功能非常消耗资源可以用To Workspace模块把数据记录下来仿真结束再统一画图。其次是求解器层面在保证精度的前提下尽量加大固定步长把步长从50微秒提高到100微秒仿真速度能提升近一倍代价是波形细节略有损失。再次是把均压算法用C代码生成或者用MATLAB Function的内置函数优化减少不必要的类型转换。如果这些手段还不够就该考虑换平均值模型了。平均值模型和详细开关模型在控制层面的连接方式几乎一致切换成本不高但仿真速度提升非常可观。很多论文里展示的MMC并网稳态波形实际上很可能就是用平均值模型跑出来的两种模型在几十毫秒这个尺度上差别并不大。5.3 结果验证波形、THD和效率怎么看仿真跑通之后还需要验证结果是否合理。第一步看稳态波形三相电流正弦度、三相幅值是否对称、直流电压是否平稳。第二步看谐波指标用Powergui的FFT分析工具看电流THD目标一般是小于3%到5%。第三步看动态响应给有功功率指令加一个阶跃观察响应时间和超调量这对验证控制参数是否合理非常有意义。在验证谐波时需要特别注意分析窗口的问题。FFT分析要求截取整倍数个工频周期最好选取稳态阶段完整周期的数据否则频谱泄漏会严重干扰结果。另外详细开关模型的开关纹波会出现在高频段分析频带一般取到几十次谐波就够用了不要把所有高频成分全算进去那会掩盖真正的低频谐波问题。调试到最后我通常会把载波频率、子模块数、桥臂电抗和电容这几个参数做成参数化用MATLAB脚本批量跑几种工况。这样做的好处是换一组参数后不用手动改模型再重新点仿真脚本可以自动完成参数修改、运行仿真、提取数据、绘制对比曲线。对于做参数优化研究的人来说这一步几乎是必须的否则几十组参数的对比实验会让你怀疑人生。最后再分享一个我自己觉得特别有用的习惯。在模型里加一个简易的状态显示模块把桥臂电流、电容电压的最大最小值、输出功率实时显示在仪表盘上。调试的时候人不用一直盯着波形图一眼扫过去就知道模型有没有跑偏。做MMC仿真是一个反复修改、反复验证的过程能让自己快速判断当前状态是否正常的工具无论多简单都比没有强。
返回列表