VSG+MMC+NLM:受端换流站构网型控制与工程实践 📅 发布时间:2026/9/15 0:20:20 👁 浏览次数: 做受端换流站这几年我最大的感触就是锁相环那套跟网型控制用到弱网和无源负荷场景真的会一步一步被现实教做人。这一版项目我把控制策略整体换成了虚拟同步机VSG主电路用的是完全自己搭的模块化多电平换流器MMC调制策略选了最近电平逼近NLM目标场景就是受端换流站。标题里的缩写拆开看很直白VSG是虚拟同步机MMC是模块化多电平换流器NLM是最近电平逼近调制SM就是MMC里的子模块。这几个词凑在一起做柔性直流和新能源并网的人应该不陌生但真正把它们从算法到主电路完整打通、在受端场景里跑稳定中间踩的坑远比想象中多。这篇文章我不打算讲教科书式原理而是把这几个月从仿真到样机的完整思路、关键参数计算和调试中遇到的实际问题梳理一遍给后面做类似项目的人一个可以直接参考的底稿。1. 从跟网到构网受端换流站为什么必须要换控制思路不少人觉得受端换流站和送端换流站的区别不就是功率方向反了一下控制上把参考值取反就行。实际真不是这样。受端换流站在直流输电系统中扮演的是逆变侧角色把直流功率送到交流系统。如果受端交流系统很强短路比高那用传统跟网型控制确实没什么问题可一旦受端是弱交流系统短路比低到2以下甚至只带本地负荷锁相环首先就开始乱。我在项目前期试过两版跟网型方案一版是经典的双闭环加PLL另一版是PLL前加滤波优化的改进型。仿真在短路比3的时候还像模像样降到1.5左右就开始暴露问题——PLL检测到的电网相位在系统扰动时出现明显抖动相位一抖电流内环的dq轴分量跟着抖直流功率波动直接反映到交流电压上严重时能激发持续的功率振荡。后面分析本质原因也很清楚跟网型控制的锁相环节假设交流系统是一个足够强的电压源弱网下这个假设不成立你越是努力去锁一个不稳定的相位系统越不稳。VSG走的是另一条路。它不依赖PLL去锁定外部电网相位而是通过模拟同步发电机的转子运动方程自己产生一个相位和频率。换句话说换流器在交流侧表现出的特性更像一台真实的同步发电机有惯性、有阻尼电压和频率由自己建立。对于受端换流站来说这意味着哪怕对端是弱网甚至无源网络只要直流侧有能量输入它就能撑起一个稳定的交流电压。MMC在这里也不是随便选的。受端如果带无源负荷或弱负荷对电能质量要求往往比较高。两电平VSC输出需要大型滤波器动态响应时滤波器还可能和弱网阻抗发生谐振MMC通过多个子模块电平叠加输出波形逼近正弦本身谐波就很小配合NLM还能把开关频率压得非常低。从系统层面看VSG负责构网MMC负责高质量执行这个组合对受端换流站来说确实是一对很好的搭档。2. MMC主电路与NLM调制先搞清楚子模块和最近电平是怎么回事2.1 SM子模块到底是什么很多人第一次接触MMC都会问SM是什么。SM是Sub-Module的缩写也就是子模块它是MMC最小的功率单元。最常用的是半桥子模块结构上由一个直流电容和两个IGBT带反并联二极管组成。半桥SM的工作状态说白了就是两种上管导通下管关断时模块端口输出电容电压Vc这时候叫投入下管导通上管关断时模块端口输出0叫切除。另外还有闭锁状态两个管子都关断一般用于启动预充电或故障保护。全桥SM能输出负电平但成本和损耗高常规受端逆变场景半桥就够了。每个桥臂由N个SM串联起来再加上一个桥臂电抗器。三相一共六个桥臂上下桥臂构成一个相单元。交流侧的输出电压就是通过控制每个桥臂投入多少个子模块来合成的。2.2 NLM的取整逻辑NLM最近电平逼近的原理非常朴素既然每个SM只输出Vc或者0那某个桥臂需要的电压参考值除以单个模块电压再取最近的整数就是当前应该投入的SM数量。以上桥臂为例设直流母线电压为Vdc交流相电压参考值对直流虚拟中点为v_ref那么上桥臂电压参考就是v_p_ref Vdc/2 - v_ref需要投入的SM数量n_on round(v_p_ref / Vc)其中Vc是子模块电容电压的平均值。得到n_on之后在均压排序算法里选出对应数量的SM投入即可。下桥臂同理v_n_ref Vdc/2 v_ref。N从几到几十不等电平数就是N1线电压电平数可以达到2N1。电平数越多逼近正弦波的台阶越细谐波越小。2.3 电容电压均衡排序NLM的灵魂NLM本身只是一个选几个模块投入的逻辑真正麻烦的是选哪几个。因为每个SM的电容量和损耗不可能完全一致如果一直投入固定几个模块有的电容电压会越充越高有的越来越低最终损坏器件。均压排序的标准做法是每个控制周期采样所有SM的电容电压按大小排序再根据当前桥臂电流方向决定投入优先级。桥臂电流给模块电容充电时优先投入电压较低的模块桥臂电流给电容放电时优先投入电压较高的模块。这个逻辑一句话就能讲完但工程上有几个细节值得注意。第一排序周期不能太长也不能太短。太短模块开关频率过高开关损耗变大还会让IGBT的温升压力很大太长电容电压均衡效果变差。我在这套系统里把排序控制周期设在100微秒也就是10kHzN12的样机上模块平均等效开关频率只有几百赫兹到1kHz左右比两电平PWM动辄几kHz到十几kHz的开关频率低很多。第二纯排序会造成不必要的额外开关动作。一个模块上一周期投入这周期切除下周期又投入开关次数被白白浪费。工程上可以在排序结果上叠加一个保持因子优先保留上一周期已经投入的模块除非电压偏差真的到了必须轮换的程度。这个优化对降低开关频率、减少发热非常有效。2.4 桥臂电抗与环流的关系MMC桥臂电抗不是随便选的它承担着抑制桥臂间环流和限制故障电流上升率的任务。三相上下桥臂之间由于瞬时功率不平衡会产生以二倍频为主的环流流过桥臂但不出现在交流侧增加损耗还会让电容电压波动变大。桥臂电抗越大环流抑制能力越强但电抗大了动态响应变慢、成本体积也上去。工程上一般取0.1pu左右后面参数计算部分我会给具体数字。对比项NLM载波移相PWM载波需求不需要需要N组相位错开的三角载波计算量排序为主随N复杂度约O(NlogN)调制波比较为主实现简单均压策略天然通过排序实现需额外配合均压控制等效开关频率低适合N较大场景高适合N较小场景输出谐波电平数多时很低电平切换处有明显台阶谐波集中在载波倍数附近频谱规律我这套系统里N取12线电压已经25个电平NLM的优势非常明显。如果N只有2到4那用载波移相PWM反而更省事这是选型时要先想清楚的事。3. VSG核心算法转子方程、下垂特性与受端运行模式3.1 有功-频率通道的虚拟转子方程VSG的核心是转子运动方程。真实同步发电机的转子有转动惯量机械功率和电磁功率的不平衡会导致转速变化而转速就是电网频率。VSG在算法里把这个过程用方程复现出来J * dω/dt P_ref/ω0 - P_e/ω0 - D*(ω - ω0) dθ/dt ωJ是虚拟转动惯量D是虚拟阻尼系数P_ref是有功功率参考值P_e是实测电磁功率ω0是额定角频率θ是VSG输出电压的相位。这个方程的意义在于当外部负荷突然增加时P_e瞬间大于P_refdω/dt变成负值输出频率下降但因为有惯量J频率不会像跟网型控制那样瞬间跳变而是平滑过渡。D则提供阻尼抑制频率振荡。θ通过积分得到替代了PLL的功能这就是VSG不需要强锁相环节的根本原因。功率计算上我直接取瞬时功率再低通滤波。三相采样电压和电流算瞬时功率P_e、Q_e注意滤波时间常数要和虚拟惯量配合滤波太深会让惯量效果失真太浅功率纹波会影响转速波形。3.2 无功-电压通道无功-电压通道比有功部分简单。VSG参考电压幅值E通过无功下垂得到E E0 k_q*(Q_ref - Q_e)E0是额定电压幅值k_q是下垂系数。Q_e是无功功率实测值当系统需要更多无功时电压幅值会适当下调模拟同步发电机的励磁调节特性。在并网模式下这个通道用于支撑电压和分配无功在孤岛带无源负荷模式下我更倾向于固定E0因为无源负荷没有频率调节能力电压幅值需要保持稳定但可以加一个很弱的无功下垂来避免无功过冲。3.3 受端换流站为什么需要运行模式切换这一节是受端场景最容易踩坑的地方我单独拿出来说。VSG本身的转子方程并不区分并网还是孤岛但受端换流站实际运行时有功参考P_ref的来源必须根据场景切换。如果系统是双端直流输电送端整流站负责定直流电压那受端VSG的P_ref可以直接来自功率调度甚至固定为一个设定值。但如果受端需要自己维持直流电压比如对端是定功率控制那么受端VSG的P_ref就不能固定需要由直流电压外环的PI控制器输出。直流电压偏高说明输入功率大于输出就要增加P_ref或者调整频率让负荷吸收更多功率。孤岛模式下又是另一套逻辑。受端带无源网络时没有大电网给它提供频率参考频率必须由VSG自己顶住所以P-f下垂特性在这个模式下反而是有害的——频率该稳在50Hz就必须稳在50Hz。我的做法是并网运行时用P-f下垂孤岛运行时把下垂环节旁路掉改为固定频率保留虚拟惯量和阻尼让直流输入功率通过转子方程自动平衡到负荷功率上。这个模式切换在算法里其实就是一个开关量加逻辑判断但很多人会忽视。如果直接在孤岛模式下沿用P-f下垂负荷稍一波动频率就飘严重时VSG会失去同步整个受端系统垮掉。4. 从VSG到MMC的完整控制链路调制波是怎么一步步生成的4.1 控制层级和信号走向VSG算法生成的输出是三相参考电压e_a、e_b、e_c波形为正弦频率幅值都由转子方程和无功下垂决定。这个电压参考不能直接拿去触发MMC中间还需要经过电压电流双闭环和桥臂分配。我在这套系统里的信号走向是直流电压/功率管理层 → VSG转子方程无功下垂生成E和θ → 三相参考电压e_abc → dq坐标系下的电压外环PI → dq坐标系下的电流内环PI → 三相调制波v_ref → 桥臂电压分配上桥臂Vdc/2 - v_ref下桥臂Vdc/2 v_ref → NLM取整得到每个桥臂投入SM数量 → 均压排序选出具体SM → 触发脉冲链路很长但每一级的功能边界很清晰。VSG管电压源特性电压电流双闭环管动态响应和限流NLM管电平合成和均压。4.2 电压电流双闭环为什么要保留有些人会觉得VSG已经是电压源了直接把参考电压送到NLM就行不用再接电压电流内环。这种想法在理想模型里可能没问题但实际系统里不行。原因有三个一是桥臂电抗和线路阻抗会带来压降没有闭环修正的话负荷端的电压精度没法保证二是电流内环可以限制故障和过载电流没有它VSG在短路瞬间会直接把IGBT打穿三是电压电流环可以把VSG和MMC主电路之间的动态特性解耦让惯量参数和电气参数各管各的调试时更省心。电压外环带宽我取在100到300Hz左右电流内环带宽取1到2kHz。PI参数用传统的频域整定法先根据桥臂电感和等效电阻算电流环再根据交流侧滤波电容和等效阻抗算电压环实测效果够用。4.3 二倍频环流抑制的实现MMC运行起来必然产生二倍频环流这点在上面提过。如果不管它桥臂电流会明显畸变电容电压波动加剧损耗增加。环流抑制的常规做法是在静止坐标下用二倍频PR控制器或者在负序二倍频旋转坐标下用PI控制器。我这版用的是负序二倍频旋转坐标系方案。采样每相桥臂电流算出环流分量i_cir (i_upper i_lower)/2变换到二倍频负序dq坐标系用PI控制器把d轴和q轴分量压到0输出补偿电压叠加到该相的上下桥臂参考波上。要注意补偿电压必须限幅一般限制在额定电压的5%以内否则会干扰NLM的正常电平分配。4.4 关键参数计算示例下面给一组我这版验证平台的实际参数以及参数怎么来的。平台是低压小功率样机额定容量10kVA三相线电压380V直流侧700V每桥臂12个SM。子模块电容电压额定值就是700/12约58.3V。子模块电容容量按允许电压波动5%来设计经验公式C_sm S_N / (3 * N * ω * Vc * ΔVc) C_sm 10000 / (3 * 12 * 314 * 58.3 * 2.9) ≈ 5.2mF其中ΔVc是允许的电容电压波动绝对值58.3V的5%约2.9V。工程上我取5mF留一点裕量也不至于电容体积太大。桥臂电感按0.1pu取。容量基准值10kVA线电压380V阻抗基准值就是380^2/1000014.44Ω电感基准值在50Hz下等于14.44/(2π×50)≈46mH0.1pu就是4.6mH实际选5mH。虚拟惯量J按惯性时间常数3秒来取H J*ω0^2/(2*S_N) J 2*S_N*H/ω0^2 2*10000*3/314^2 ≈ 0.61kg·m²阻尼系数D我最后是通过扫参定的。J确定后D太小系统欠阻尼有功阶跃后频率要振荡好几个周期D太大系统响应迟钝负荷突变时频率恢复很慢。对这台10kVA的样机D在50到300之间都能稳定但动态品质差别很大我最终取120对应的有功阶跃响应超调比较小恢复时间也短。参数数值说明额定容量10kVA低压验证样机交流线电压380V / 50Hz三相直流母线700V对应调制比约0.95桥臂SM数N12线电压25电平SM电容电压58.3V允许波动±5%SM电容5mF按波动公式计算桥臂电感5mH0.1pu虚拟惯量J0.61kg·m²H≈3s虚拟阻尼D120扫参确定排序控制周期100μs10kHz5. 仿真和样机联调中踩过的几个关键坑5.1 NLM临界点抖动问题NLM用round取整在电平切换的临界点会出现一种很讨厌的现象调制波在某个电平附近轻微波动时取整结果会在两个相邻整数之间来回跳导致某个SM反复投切。表现到波形上是桥臂电流出现高频毛刺IGBT开关频率变高发热严重。这个问题的本质是取整函数没有滞回特性。我加了一个小的滞回窗口来解决原理类似比较器的滞回比较只有当参考电压越过当前电平阈值的上下边界时才允许n_on变化到相邻值否则保持当前值。滞回窗口不能太大一般取0.3到0.5倍Vc太大会引入额外的波形台阶误差。加上之后临界抖动基本消失电流毛刺也干净了。5.2 启动阶段预充电和相位对齐MMC不能一上电就直接解锁触发脉冲。子模块电容初始电压是0直接解锁会产生巨大的冲击电流。标准流程是先通过交流侧断路器给电容预充电电流经过IGBT的反并联二极管给电容整流充电充到额定电压的60%到70%左右再解锁然后通过均压控制把电容电压拉到额定值。预充电之后还有一个容易忽略的点VSG启动时的初始相位必须和交流侧电压相位对齐。如果VSG生成的θ和外部电网相位差很大就投入等于把一个很大的电压差直接加到桥臂电感上冲击电流能直接把过流保护打起来。我的做法是启动时先让VSG处于相位跟踪模式用PLL或简单的过零检测把θ初始值锁到外部电压相位然后切换到VSG自由运行同时电压幅值用斜坡在0.2秒内从当前值爬升到额定值。5.3 排序频率和环流抑制输出限幅的配合这部分是我调了很久才发现的问题。环流抑制的输出叠加到桥臂参考电压后会改变n_on的计算结果而排序算法又是基于当前桥臂电流方向来选模块的。环流抑制输出幅度过大时模块投入数量的变化会和均压排序打架电容电压在动态过程中出现明显的分散严重时某一相模块电压偏差超过10%。排查之后定位到两点一是环流抑制PI的输出必须限幅我限制在±5%额定模块电压以内二是排序控制周期不能太快否则模块切换太频繁散热跟不上。实测下来10kHz的排序频率搭配5%限幅的环流抑制输出电容电压波动可以控制在5%以内桥臂电流THD也明显下降。5.4 虚拟惯量引发的功率振荡排查有一版参数我把J调得比较大想追求更强的惯量支撑结果在并网模式下有功阶跃后出现了频率和功率的慢速振荡振荡周期大概1.5秒幅度还越振越大。一开始以为是环流抑制的问题检查了半天发现根源是J和D的匹配关系。J增大之后转子方程的响应变慢如果阻尼D没有同步增大系统阻尼比就会降低频率和功率之间形成持续的振荡。后来我把J稳定在0.61D从80逐步扫到200最终定在120振荡问题消失。这个排查过程让我认识到VSG的J和D不是独立参数设计时必须放在一起看最好先根据惯性时间常数定J再用开环Bode图或者阶跃响应扫D不要两个参数同时乱调。6. 实测表现和后续想继续做的事最后说一下这版VSG-MMC实际跑出来的效果。稳态情况下10kW带阻感负荷交流母线电压THD在2.5%左右子模块电容电压平均值稳定在58V上下波动幅度不超过5.5%。这还是在没有额外交流滤波器的条件下NLM多电平的优势体现得很明显。负荷从5kW阶跃到10kW时频率瞬时跌落了大概0.3Hz转子方程的惯量特性让这个跌落过程是平滑的大约0.3秒内恢复整个过程没有出现功率振荡。这套系统目前还在持续迭代。下一步我打算做两件事一是把受端带无源负荷的黑启动流程完善目前启动逻辑还依赖PLL做初始相位对齐黑启动时对端没有电压这个流程需要改成完全自主建立电压二是尝试在桥臂SM数量更多、电压等级更高的仿真模型上验证NLM的扩展性排序算法在N超过30之后对控制器计算资源的压力会明显加大到时候可能需要用分组的快速排序替代全排序。如果在看这篇文章的你也在做MMC或者VSG方向我的建议很直接先花时间把NLM的均压排序逻辑吃透这是MMC的地基再上VSG算法的时候优先调好J和D的匹配别急着追求大惯量遇到奇怪波形问题先怀疑临界抖动、启动相位、环流限幅这几个高频坑基本能省下大半个月的排查时间。