尧图精选

MMC子模块电容电压均压控制:原理、策略与工程实践

🕒 发布时间:2026/10/2 19:17:02 📁 来源:尧图网络
第一次在实验室调MMC样机的时候一上电就看到示波器里四路子模块电容电压像分叉的树枝一样越拉越开当场以为IGBT驱动坏了。查了一大圈才发现根本不是硬件问题——桥臂里那些子模块电容电压本来就会在你不做任何控制的时候自发发散。让它们老老实实回到参考值附近波动就是“子模块电容电压均压控制”这门手艺的核心活儿。MMC模块化多电平换流器这几年在高压直流输电、中压电机驱动、电能质量治理里用得越来越多均压控制是绕不开的一关。电网侧扰动、桥臂间环流、器件参数散差任何一点风吹草动都会反映到电容电压上电压一旦偏了轻则波形变差重则子模块直接过压炸管。这篇文章从原理拆到工程实现讲排序法、载波移相均衡这些主流策略的取舍再带上PSCAD仿真和FPGA实现里那些文档不会写的实操细节。刚接触MMC的研究生、正在做样机调试的工程师、埋头搭模型的仿真党看完应该都会有些收获。1. 先搞懂MMC的均压到底在匀什么1.1 半桥子模块的工作逻辑一个半桥子模块的结构并不复杂一个直流电容、两个IGBT、两路反并联二极管外加旁路晶闸管、电压采样回路这些周边电路。但就是这不起眼的单元构成了MMC最小的“积木块”。半桥SM只有两种工作状态上管导通时电容接入主回路子模块输出电压等于电容电压这叫“投入”下管导通时电容被切出去输出电压为零这叫“切除”。上下管互补导通绝不能同时开否则电容直接被短路IGBT炸得渣都不剩。实际死区设置得很小但这段死区本身就是后面均压误差的来源之一。桥臂电流方向决定了“投入”对电容电压的影响电流往电容充电方向流投入的子模块电容电压上升反向则下降。也就是说同一个“投入”动作在电流方向不同时效果完全相反。这就是所有均压算法都必须知道桥臂电流方向的原因——不知道电流方向就没法判断应该把电压高的模块投入还是切除。一相桥臂由上下两堆SM串联而成每堆N个输出端就能得到N1个电平的阶梯波。子模块数量越多阶梯越细越接近正弦交流侧滤波器就越小。高压直流工程里一个桥臂几十上百个模块很常见中压等级下通常十几二十个。子模块数量的差异直接决定了你会选哪种均压策略这点后面细说。1.2 电容电压为什么会自己发散很多人第一次看到电容电压曲线发散第一反应都是硬件坏了或采样错了。但就算所有硬件完全正常电容电压照样会悄悄分家。原因有几个层面器件参数散差是最基础的。同一批电容标称容值一样实际容量总有偏差IGBT通态压降、反向恢复特性也不完全一致。这些细微差别的效果叠加在能量交换上就像用两只不一样的桶挑水桶本身不漏但一趟一趟挑下来两只桶的水位差距只会越拉越大。控制层面的误差更麻烦。驱动死区时间不完全一致、PWM脉冲沿抖动、采样时刻偏差都会导致各子模块实际导通时间存在微小差异。一个周期里差零点几微秒看起来无所谓但MMC是持续运行的几十个周期、上万个周期叠下来误差就成了可观的电压偏差。还有桥臂环流的搅局。三相桥臂之间天然存在环流通路主要分量是二倍频负序环流。这股环流会在上、下桥臂以及相与相之间搬运能量直接表现为电容电压整体偏高或偏低的不均衡。所以均压和环流抑制从来不是两个独立问题只调均压不抑制环流效果一定不彻底。再往深处说电容电压本身带有与运行工况相关的固有波动。交流侧电流的基频分量、桥臂电流的二倍频分量都会在电容上叠加出波动成分。因此“均压”的目标从来不是把电容电压压成一条笔直的恒定线而是让所有子模块电压在参考值附近的波动包络保持一致。这个认知不建立起来后面调算法的时候很容易被示波器上的“正常波动”带偏方向。1.3 均压的三个层级很多人一开始就混在一起了均压问题在MMC里分三个层级控制目标和实现手段完全不一样。第一个层级是桥臂内部子模块之间的电压均衡。这是大家最常讨论的“均压控制”目标是让同一个桥臂里N个子模块的电容量保持在参考值附近彼此差距控制在合理范围。排序法、载波移相修正法都作用在这一层。第二个层级是上、下桥臂之间的能量均衡。如果某个桥臂整体能量偏高这个桥臂所有子模块的平均电容电压都会往上漂。这时候桥臂内部的排序做得再好也救不回来必须通过调整上、下桥臂调制波的共模分量或者依靠相间环流控制来搬走多余的能量。第三个层级是三相之间的能量均衡。三相参数不对称、交流侧故障都会造成三相电容电压平均值的差异同样要靠环流控制来抹平。不少初学者把这三个层级混成一锅粥指望一个均压控制器把所有问题全部解决结果怎么调都调不好。实际工程里桥臂内均压是基础桥臂间和相间均衡通常交给专门的环流抑制和能量平衡控制器。这篇文章的重点在第一个层级但你要知道它和环流控制、能量控制之间的边界在哪里。2. 主流的均压策略怎么选排序法与载波移相2.1 排序法加NLM高压大容量场景的默认答案排序法的思路直白到可以用一句话概括每个控制周期采样桥臂内所有子模块的电容电压排个序再根据桥臂电流方向决定投入电压偏低的那几个还是电压偏高的那几个。具体到实现排序法是配合最近电平逼近调制一起工作的。每个周期先由调制器算出一个桥臂需要投入的子模块数目N_on然后均压算法回答另一个问题到底投入哪几个模块。伪代码大概是这样的def sort_and_select(v_sm, i_arm, n_on): idx argsort(v_sm) # 电容电压升序排列 if i_arm 0: # 桥臂电流处于充电方向 fire idx[:n_on] # 优先投入电压低的模块 else: # 放电方向 fire idx[-n_on:] # 优先投入电压高的模块 return fire这个逻辑的本质是负反馈充电方向让低压模块多充电高压模块先歇着放电方向反过来高压模块多放电低压模块少放电。方向反了的话均压控制就变成均压破坏器收敛发散就在一念之间。实际采样的是桥臂电流方向这个方向的定义要和你调试时示波器探头的方向保持一致否则又会踩坑。排序法的好处是简单、直接、鲁棒性好。电容容值实测值差异、温度漂移、器件老化这些因素在排序法面前统统不敏感。坏处也明显排序决定了谁投入谁切除所以同一模块可能在两拍之间被快速来回切开关频率不固定损耗和温升不好控制。针对这个缺点工程上有几类标准改法。最常用的是加“保持因子”上一控制周期投入的模块在本周期尽量保持投入状态除非电容电压偏差超过设定阈值才重新洗牌。效果是主开关频率被明显压低代价是均压动态略微变慢。另外还有分组排序法先按电压档位粗略分组组内排序减少排序深度和计算量更高级的做法是在开关次数约束下做最优选择偏向研究向的内容工程上应用还不多。2.2 载波移相CPS-PWM加电压均衡修正中低压场合的灵活方案载波移相PWM的思路和排序法完全不同。排序法是“挑模块”CPS-PWM是“同时驱动所有模块靠错相提高等效开关频率”。具体做法是给每个子模块分配一个独立的三角载波这些载波相位依次错开N个模块的载波均匀分布在360度上。各模块依次投入和切除的结果是桥臂输出的等效开关频率比单个模块的开关频率高了N倍交流侧谐波状况明显改善。这一点在中压电机驱动这种对谐波敏感的场合非常吃香。但CPS-PWM有一个绕不过去的麻烦所有模块用同一个调制波时电容电压差异会通过电流积分效果逐渐放大。必须给每个模块额外加一个电压均衡修正环根据各模块电容电压与参考值的偏差对本模块的调制波进行微调。修正的方向不能搞反电容电压偏低的模块在充电期间要适当增大投入占空比放电期间则减小占空比电压偏高的模块相反。说白了就是把排序法“由电流方向决定优先投谁”的逻辑转换成了“由电流方向决定修正系数的符号”。实现上可以用简单的比例调节器也可以加积分环节提高收敛速度。选择CPS-PWM加均衡修正的场合通常是子模块数量不多的情况十几到几十个封顶。模块数量一上到上百个每个模块一套载波和修正环控制资源占用和调试复杂度会很难看还不如老老实实回排序法。2.3 策略选型对比到底是不是越复杂越好排序法和CPS-PWM哪种更好玩MMC的经常争但脱离场景谈优劣都是耍流氓。拿我自己做过和见过的系统来说策略选择基本可以按一套标准来定。排序法加NLM在高压大容量场景几乎是一统天下。原因很简单高压直流的子模块数量多到可以论百排序法不管模块数量多少逻辑复杂度只跟着N的对数走采样的容错性也好。模块之间参数散差、运行老化的影响排序法天然免疫。CPS-PWM则更适合模块数量少、对谐波要求苛刻、单模块开关频率要均等的中低压场合比如中压传动里的MMC常配合错相策略。模块数量在二三十以下时这套方案的控制负载不算大谐波效果也好。有意思的是现在不少研究在把两种思路往一起揉比如载波移相加排序修正、或者排序法里嵌载波分配。整体趋势是兼顾功率器件应力、谐波质量和均压动态。但如果你是刚开始探索我的建议特别直接先用排序法把系统跑起来。排序法能让你快速把控制框架、采样链路、调制逻辑调通理解了均压的本质再往复杂方案上走会轻松很多。3. 均压控制落地时绕不开的参数与实现细节3.1 排序周期、阈值和保持因子这三个量决定系统的“手感”很多人以为均压算法跑起来就完事了其实排序周期、电压阈值、保持因子这三个参数没调好看起来均压成功了开关损耗却高得离谱或者电压波动毛糙得不敢看。排序周期的选择需要兼顾均压效果和开关损耗。排序执行太快比如每0.1毫秒重排一次电容电压当然均衡得漂亮但每个模块几乎每个周期都在切换开关频率蹭蹭往上跑IGBT开关损耗直接拉满。排序周期放太慢比如5毫秒以上均压响应跟不上电流波动电容电压会明显发散。工程上1毫秒左右是比较常见的起点然后根据你的桥臂电感和子模块电容尺寸做细调。我在一块实验板上试过从0.1毫秒拉到2毫秒的变化均压动态肉眼可见地变松开关损耗倒是降了将近一半。电压阈值和保持因子是配套的。每次排序后如果某个模块的电压与期望值的偏差没有超过阈值保持因子会强制维持它的原投入状态避免无谓的投切。阈值一般取参考电容电压的百分之几比如额定2.5kV的模块阈值放在±50V到±120V都是合理区间。阈值设太小保持因子形同虚设设太大均压精度变差充电态模块的电压可能冲到过压保护附近。这一类参数的整定思路有个共同点不要试图一步到位。先把阈值设大、保持因子设强确认系统能稳定运行再一步步收紧阈值观察电容电压波形和开关脉冲找到那个“电压波形还能接受、开关频率又可控”的平衡点。3.2 均压环和环流抑制PI参数怎么调才不玄学均压控制在工程上往往伴随一个环流抑制器这里面的PI参数整定是大家问得最多的。关键词里“mmc环流抑制器的pi参数”反复出现说明这事确实玄学过。先说环流抑制。MMC桥臂环流的主要分量是二倍频50赫兹系统里就是100赫兹而且三相间是负序性质。对付它有两种常见做法一种是在静止坐标系下用准比例谐振控制器谐振频率对准100赫兹另一种是坐标变换到二倍频负序旋转坐标系下用PI控制器处理。工程上准PR法更直观不用额外构造坐标系参数意义也清楚。给一套我自己习惯的整定流程先把环流抑制器摘掉让系统带着环流运行记录桥臂电流里的二倍频分量幅值。然后把准PR控制器投入Kp从很小的值开始往上加比如从0.05标幺起步每加一档观察二倍频分量有没有压下去。如果到某个值后波形不再变好了甚至开始出现高频振荡说明Kp到了边界。谐振带宽一般在几赫兹到十几赫兹之间太小了怕网侧频率漂移时压不住太大了会把无关频率的噪声放大。均压环的PI参数则是另一套思路本质上是“慢环”。均压修正量不需要过快的动态响应带宽一般远低于电流环太激进了反而会和环流控制器、电流环搅在一起。有一种常见的调法误区是把均压环的PI当作普通电流环来调比例给得很大结果桥臂电流毛糙得没法看。正确的顺序是先给较小的比例系数稳住趋势再逐步加积分消稳态偏差。只要电容电压平均值最终落在参考值附近各模块之间差距又可控就算合格。3.3 FPGA和Vivado仿真里拉取子模块信号的关键细节均压算法要跑在实时控制器里FPGA是主流平台。调试过程中最痛苦的一步是看内部信号——电容电压、排序结果、当前投入状态这些都在FPGA内部又不方便拉一堆线出来这时候就得靠Vivado的调试工具链。“vivado仿真拉取子模块信号”这个热词背后是两种场景。一种是纯仿真验证里想直接观察FPGA内部的中间变量最省事的做法是用仿真testbench里的层次化引用访问到DUT内部各子模块的寄存器然后写入一个CSV文件仿真结束后用Python画电容电压曲线。另一种是板级调试时通过Vivado的ILA核抓取内部信号。把需要观察的电容电压、桥臂电流方向、排序索引、投入状态信号连到ILA探针上设置触发条件比如电容电压偏差超过阈值时触发一次然后看波形。这里有几个坑。一是采样时刻必须避开IGBT开关动作瞬间否则抓回来的电容电压全是毛刺均压算法依据这种毛刺会做出错误判断。工程里一般把采样点对准PWM载波的谷底或峰值也就是开关状态最稳定的窗口。二是电容电压是模拟量经过ADC采样后送入FPGAFPGA内部对多个模块的电压采样必须时间对齐差几十微秒在高压大电流场合都会造成排序判断失误。三是Vivado里看FPGA内部信号时钟域同步很重要跨时钟域的信号直接抓回来可能看到的就是亚稳态数据。这些细节看着琐碎但均压效果好不好往往就卡在这种地方。算法仿真里明明一切正常上到实验台就发散十有七八是采样时序和信号同步出了问题。4. 仿真验证与现场排查的实操实录4.1 PSCAD的MMC模型怎么搭又快又准PSACD是MMC仿真的常用工具但直接上来就拖IGBT器件搭详细模型仿真速度和收敛性是双重折磨。几十个模块的桥臂每个模块里两个IGBT加电容全部用详细器件模型的话跑一个稳态可能需要几十秒扫一次参数想都别想。正确做法是用PSCAD自带的MMC模型库内部采用子模块戴维南等效电路。这种模型把每个子模块看成一个可控电压源和电阻的组合在不影响外部特性的前提下省掉器件级开关细节仿真速度能快一到两个数量级。模型中需要设置的参数包括子模块电容值、桥臂电抗、桥臂子模块数量这些都在软件面板里直接填。控制平台的搭法要注意步长匹配。电气仿真步长一般取几十微秒量级控制器的执行周期要和排序周期一致比如1毫秒排序一次那就不能在10微秒的斜波里频繁翻转排序结果。仿真时把控制步长和排序周期显式地建模出来结果才贴近实物。很多刚入门的同学在PSCAD里把排序周期设成和仿真步长一样小仿真出来的电容电压曲线光滑得像一条线但一旦换成实际控制器里的1毫秒周期立刻原形毕露。模型验证顺序也有讲究。先做空载或纯电阻负载确认交流侧电压台阶正常再加功率观察电容电压波动和均压是否收敛最后才做故障这类动态工况。4.2 现场常见问题排查清单把做MMC仿真和样机调试过程中见过的典型故障整理成了表格方便你对照排查。常见问题现象 | 可能原因 | 排查思路与解法 电容电压整体发散、无明显规律 | 排序方向接反了 | 确认桥臂电流方向定义对比仿真波形符号反了就把比较器的符号翻转 上、下桥臂电压整体偏离参考值 | 桥臂间能量不平衡环流抑制未投入 | 检查环流控制环是否打开桥臂电抗参数是否正确 同一桥臂里个别模块电压偏高或偏低 | 采样通道错位、ADC标定不准 | 用固定电压校准每个采样通道检查多通道采样时序 排序导致开关频率异常高 | 排序周期太短或阈值太小 | 调大排序周期到毫秒级加大电压阈值配合保持因子 桥臂电流里100赫兹分量压不下去 | 环流抑制PI参数没整定好 | 按上一节准PR整定流程逐步调试Kp和谐振带宽 上电瞬间电压就崩 | 预充电没做完就切入了均压控制 | 先确认母线电压充到额定附近再切换可控充电和均压每次都强调采样和时序是因为八成问题都出在这两块。不少“算法不收敛”最后查出来是ADC数据位序接错了或者差分信号极性反了。排查这类问题时先怀疑硬件链路再怀疑控制逻辑顺序一定不能反。4.3 一些文档里不会写的工程细节预充电阶段是个容易被忽略的点。所有子模块从零电压开始直接套排序均压是没法工作的。通常要先经过不控整流阶段让交流侧通过二极管桥给电容充到接近额定值之后才切换到可控充电并启用均压控制。这个切换逻辑没做好上电瞬间的冲击电流就可能触发保护。故障穿越工况下的均压策略也要提前想好。交流侧电压跌落时桥臂电流里会出现较大的非周期分量此时排序结果可能剧烈变化模块开关次数瞬间暴涨。先不说器件应力单是均压算法在这种时刻可能产生的异常投切就足够让系统重新过一遍调试。工程中比较稳妥的做法是在故障期间保持排序周期不变但适当加大电压阈值减少无谓的投切动作。最后提一条硬件在环验证的建议均压算法从纯仿真搬进控制器中间隔着一整个I/O链路。有条件的话先做控制器硬件在环测试将PSCAD模型编译到实时仿真机里把FPGA控制器接上去跑一遍。这一遍能查出绝大多数“仿真能跑实物不行”的隐患尤其是采样延迟、脉冲输出时序、逻辑资源占用这类问题在硬件在环上一目了然。我个人在实际操作中的体会是均压控制是MMC整个控制系统里最能把“工程感”体现出来的环节。算法原理书上写得很清楚但真正落地时考验的是你对采样时序、能量流动方向和硬件特性的感知力。排序法看起来朴素我用这么多年再回头看那些号称更优的复杂方案很多时候只是在某个特定约束下的小众优化。把基础策略做到极致理解每一个参数身后的物理过程面对再多新问题时心里也都有底。这个方向后续还能延伸出去比如结合故障检测的自适应均压、基于机器学习的开关策略预测但地基永远是今天聊的这套东西。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →