ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

NPC三电平逆变器SVPWM调制仿真:原理、实现与波形调试

2026/9/10 1:28:10 拓冰建站 浏览量
NPC三电平逆变器SVPWM调制仿真:原理、实现与波形调试 前阵子接了个项目要求把二极管箝位型NPC三电平逆变器的SVPWM调制仿真跑通还特别标了一句“带参考文献”一看就是要把原理和实现都讲细不能只贴个模型完事。我一开始觉得两电平SVPWM玩得挺熟三电平不就是多几个开关管、多几对状态但真正搭起来才发现从扇区判断、小三角形筛选到作用时间计算难度完全不是线性增加。这篇东西我按自己做项目时的完整思路来写适合正在做电力电子仿真、准备投论文或者要落地工程样机的人内容包括NPC三电平主电路结构、SVPWM控制原理、马鞍波背后的三次谐波/零序分量逻辑以及Simulink和Plecs环境里的代码实现和波形调试方法。整套流程走完你会发现三电平SVPWM其实并没有想象中那么玄关键是要把“为什么这么做”想透。1. NPC三电平逆变器的核心结构与控制需求1.1 二极管箝位型三电平到底解决了什么问题先看一眼主电路拓扑直流侧通常用两个电解电容串联中间引出中点O所以直流母线电压被分成了两段一个电容上的电压是Udc/2。每一相桥臂由四只IGBT串联组成分别是S1、S2、S3、S4其中S1和S2中间点引出作为输出端同时在S2和S3的连接点接两只箝位二极管到中点O这两只二极管就是“二极管箝位”名字的来历。这个结构带来的好处非常直接单管承受的电压只有Udc/2对中高压大功率场合来说这等于把一个1200V耐压的管子用在了600V级别的工程里器件选型压力小很多。对比两电平逆变器输出相电压只有正负两个电平NPC三电平的输出相电压可以是Udc/2、0、-Udc/2三个状态而线电压可以组合出五个电平步进变少了dv/dt一下就降下来了对电机绕组的绝缘冲击、对电网的谐波污染、对轴承电流的抑制都有明显改善。当然天下没有免费的午餐。多出来的箝位二极管和分压电容带来一个新麻烦两个电容的电压会随着负载电流的流动逐渐失衡一旦中点电位漂移输出电压谐波会增加开关器件应力也不均匀。所以三电平逆变器的调制算法必须额外考虑中点电位的平衡问题这是它和两电平SVPWM最本质的区别。后面我会专门说一嘴。1.2 SVPWM为什么是三电平逆变器的主流选择在一开始的方案讨论里我其实考虑过直接上SPWM加上三次谐波注入但最后还是选用了SVPWM作为主调制策略。原因有三个方面。第一SVPWM天然提高直流电压利用率。在相同直流母线电压下SVPWM能达到的最大输出相电压基波幅值比正弦SPWM多出15.47%这个提升在中高压变频器里就意味着同样的电网电压等级可以用更低的直流电压去适配或者同样的直流侧可以输出更高的电压价值很实际。第二SVPWM把逆变器和电机/电网看成统一系统来考虑。它直接操作的是空间电压矢量物理含义清楚控制器输出的是电压矢量的幅值和角度天然适配矢量控制、直接转矩控制这些现代交流调速算法。第三SVPWM可以实现中点电位的主动控制。三电平的27个开关状态里有些不改变输出电压但对中点电流有不同影响SVPWM可以在输出矢量不变的前提下选择不同的小矢量组合从而平衡两个电容电压。这种控制自由度是SPWM单独做不到的。所以我最后的搭配是主电路用NPC三电平桥调制算法用SVPWM仿真工具用Matlab/Simulink加Plecs交叉验证。下面开始拆解算法本身。2. SVPWM算法原理与三电平扩展详解2.1 先理清两电平SVPWM的基础逻辑三电平SVPWM想看懂最好先把两电平那套流程吃透。所谓SVPWM本质上是让逆变器在每一个开关周期Ts内输出一个平均电压矢量使其逼近我们想要的参考电压矢量Vref。第一步是坐标变换。三相参考电压ua、ub、uc通过Clark变换得到alpha-beta坐标系下的Vα和VβVα 2/3 * (ua - 0.5*ub - 0.5*uc) Vβ 2/3 * (√3/2 * ub - √3/2 * uc)第二步是扇区判断。利用Vβ、Vα等线性组合的正负关系判断Vref落在哪个60度扇区工程上常见的是定义三个中间变量X、Y、Z然后用它们的符号组合直接定位扇区比反三角函数算角度更快适合DSP实时执行。第三步是计算矢量作用时间。每个扇区用两个相邻基本电压矢量Vx、Vy和零矢量V0来合成Vref根据伏秒平衡Vx * Tx Vy * Ty V0 * T0 Vref * Ts Tx Ty T0 Ts解出Tx和Ty。两电平这里公式很规整代码十来行就能写完。第四步是确定开关序列。为了让谐波小、开关次数均衡通常采用七段式对称序列也就是在一个Ts内把动作顺序排成“000-100-110-111-110-100-000”这种镜像结构每个开关管的导通时间按比较值给出。把这些思路搬到三电平最大的变化就是“空间矢量图”从六边形变成了由三角形网格组成的更密六边形参考电压不仅仅由两个相邻矢量和零矢量合成而是要由包围它的三个最近矢量合成。这个思路就是三电平SVPWM的最近三矢量NTV原则。2.2 三电平空间矢量图与小三角形判断三电平共有3^327种开关状态组合去掉重复的矢量位置后可以得到19个基本空间矢量。整个矢量平面按每60度分成一个大扇区每个大扇区内又分成4个小三角形区域。可以参考电压矢量落在哪个小三角形就选择这个小三角形的三个顶点矢量作为合成矢量。为什么必须是“包围Vref”的三个顶点因为这样才能保证Vref可以由它们线性组合表示且作用时间全部为正不需要人为切换极性换流过程自然连续。工程上常用几何法判断小三角形序号。以第I大扇区为例该扇区内4个小三角形可以按下述几何条件区分小三角形1θ在0度到60度内且Vref对应幅值较小位于偏中心的小三角小三角形2位于扇区上半部分满足某些线性边界条件小三角形3位于扇区左侧或右侧边界附近小三角形4靠近外侧顶点对应高调制比。实际操作中我更喜欢用归一化电压Uα、Uβ直接比较或者用“四段式判断法”这样在C代码里就只有简单的乘法和比较不会引入浮点开方。需要注意的是小三角形判断的精度直接影响作用时间计算如果判断错了输出波形会出现明显调制异常最直观的现象是相电压在某个扇区附近出现缺失电平。2.3 作用时间计算与中点电位影响一旦确定Vref所在小三角形就可以根据伏秒平衡列方程求解三个顶点矢量的作用时间。比如在第I扇区的小三角形1中三个顶点通常包括零矢量V0、两个短矢量在小三角形4中则包含一个长矢量和一个中矢量以及一个短矢量。时间计算公式在参考文献里有现成的表格式推导我就不全部抄一遍了核心思想是假设Ts为开关周期Vref的幅值为|Vref|角度为θ直流母线电压为Udc定义调制比m 2√3 * |Vref| / Udc那么在第I扇区各小三角形中三个作用时间都可以表示成m、θ和Ts的三角函数表达式。比如在子区域1中两个基本矢量作用时间大致为TA m * Ts * sin(π/3 - θ) TB m * Ts * sin(θ) T0 Ts - TA - TB在子区域4中则会出现中矢量作用时间和长矢量作用时间公式形式和两电平类似但边界条件不同。难点在于如何快速、准确地从“扇区小三角形”映射到时间表达式这需要把12个小三角形的时间公式都做成查询表或者用矩阵变换统一求解。另一个关键点是小矢量和中矢量对中点电位的影响不同。三电平的短矢量成对出现例如(-)、(--)这一对短矢量它们输出电压相同但流过中点的电流方向相反。在合成参考电压时如果不加区别地分配两个成对短矢量的作用时间中点电流就无法被控制中点电位就会漂移。所以三电平SVPWM的七段式序列中通常会把一对短矢量划分成两个半段分别放在序列的首尾和中间并让它们的总时间占比动态可调。这个“冗余小矢量时间分配”就是中点电位平衡控制的核心旋钮。2.4 七段式开关序列与比较值生成确定作用时间之后要把时间轴上的矢量顺序排出来。三电平SVPWM最常用的是七段式对称序列。以第I扇区的某个小三角形为例假设选定的三个矢量为V1、V2、V3在一个Ts内会安排成V1/2 - V2 - V3 - V2 - V1/2这样首尾半段对称每个IGBT在一个开关周期内最多开关一次开关损耗可控输出谐波也小。为了让算法最终能驱动IGBT需要把每个矢量的作用时间换算成三相桥臂的占空比比较值。常见做法是维护一个计数器周期为Ts把每个矢量子状态对应的P、O、N电平持续时间累加得到每一相PWM比较器的开关时刻。如果不用传统SVPWM而是用载波比较方式来实现可以直接把SVPWM等效为注入零序分量的调制波再用两层层叠载波比较生成PWM信号这样代码更简洁后面我在仿真章节会详细说这个实现路径。3. SPWM注入三次谐波/零序分量与SVPWM的关系3.1 为什么SVPWM输出马鞍波很多人在仿真正看到SVPWM调制波或者等效调制波时会有个疑惑“为什么这个波形不是正弦而是有点像马鞍”答案就在三次谐波注入。三相系统里三次谐波以及所有3的倍数次谐波在三相之间是同相的因此在线电压中会相互抵消只体现在相电压的共模分量里对负载电流没有直接影响。既然线电压不受影响我们就可以在调制波里人为加一段三次谐波把相电压调制波原来的波峰往下压同时把波谷往上抬这样调制波的峰值就会降低相同直流母线电压下可以塞进更大的基波分量而不过调制等价于提升了直流电压利用率。SVPWM本质上就是在做这件事所以它的等效调制波是马鞍形而不是纯正弦。我在调试时习惯把SVPWM产生的三相占空比波形直接接到示波器上看每一相的调制波形就是典型的马鞍波两个波峰中间有明显的凹陷周期是基波的三分之一。这个波形出去再经过LC滤波以后到负载端就是很干净的正弦电压和正弦电流。换句话说马鞍波只是一个中间产物不是最终输出没必要对它的畸变恐惧。3.2 三次谐波幅值与基波幅值到底什么关系有一个经常被问得很刁钻的问题“当用SPWM和三次谐波或零序分量进行等效时二者的幅值大小存在怎样的关系”我拿笔推导过一遍这里把关键结论写清楚。设三相调制波为ua m * sin(ωt) ub m * sin(ωt - 2π/3) uc m * sin(ωt 2π/3)叠加三次谐波分量ua m * sin(ωt) n * sin(3ωt) ub m * sin(ωt - 2π/3) n * sin(3ωt) uc m * sin(ωt 2π/3) n * sin(3ωt)可以看到三次谐波分量在三相中完全相等都属于零序分量不影响线电压。现在的目标是把合成调制波ua的峰值降到最小从而允许基波幅值m继续抬升。对上式求极值可以证明当n m/6也就是注入的三次谐波幅值为基波幅值的1/6时合成波的峰值最小降为原基波峰值的√3/2 ≈ 0.866倍。反过来如果调制波峰值允许达到1那么基波幅值m最多可以做到1/0.866 2/√3 ≈ 1.1547也就是比纯正弦SPWM时多出15.47%。这就是SVPWM提高直流电压利用率在数学上的本质。如果注入的不是单纯三次谐波而是更一般的零序分量比如SVPWM等效的零序分量取为U0 -0.5 * (max(ua,ub,uc) min(ua,ub,uc))那么效果和多注入一个三次谐波类似工程中甚至能从这种“基于三相调制波的零序注入”直接实现SVPWM。实际做代码时如果不想查矢量表可以在这个等效式子上做文章后面我在仿真实现里就是这么干的。3.3 从“注入”视角统一看SVPWM与SPWM把SVPWM改成“三次谐波注入”之后思路一下就打开了。传统空间矢量法需要每一步都做扇区判断和时间计算而零序注入法只需求出三相占空比da 0.5 0.5 * (ua U0) / (Udc/2) db 0.5 0.5 * (ub U0) / (Udc/2) dc 0.5 0.5 * (uc U0) / (Udc/2)然后用两层层叠载波去比较输出驱动信号。这种实现方式的周期可以“定时器中断里几行代码搞定”调试难度和SPWM几乎一样但效果和传统SVPWM基本一致。三电平也可以用类似思路就是载波从一层变成两层层叠式上三角载波驱动上管下三角载波驱动下管。我自己的看法是新手学SVPWM可以先学空间矢量法因为概念清楚方便理解“为什么有27个开关状态”“为什么需要最近三矢量”但实际工程或者复杂仿真里如果不需要实时观察每个矢量时间用零序注入法能省一半精力而且更容易移植到DSP/FPGA。不过既然这项目标题是“二极管箝位型NPC三电平逆变器SVPWM调制仿真”我还是两种方式都实现一遍互相验证。4. 仿真搭建实操Simulink与Plecs双平台验证4.1 仿真工具选型Simulink还是Plecs三电平逆变器SVPWM仿真我最终选择了Matlab/Simulink和Plecs两个平台交叉验证。Simulink的优势是控制算法搭建灵活S-Function、C-MEX、Matlab Function块都可以用适合把SVPWM代码写进去慢慢调试缺点是电路模型搭建稍微麻烦Simscape Electrical的求解器步长如果设置不对仿真速度会非常感人。Plecs的优势在于电力电子电路仿真速度极快自带的半导体模型损耗计算很细适合验证主电路效率和波形质量缺点是控制模块还是得自己搭和Matlab的联合仿真接口虽然方便但跨平台数据传递有时候会引入时序问题。我建议读者如果只是验证算法正确性先用Simulink如果要做损耗、散热、并网谐波这些更贴近工程的结果再用Plecs。下面我以Simulink为主线把步骤拉一遍Plecs里可以照几乎相同的控制结构实现。4.2 主电路模型搭建第一步是直流母线。我用两个电容串联每个电容取2200uF额定电压450V直流母线总电压650V。这样每个电容正常工作电压325V如果不加中点平衡动态过程中容易一个电容冲到350V以上所以仿真里我特意留了一个中点电位观测点。第二步是NPC桥臂。Simulink的Simscape Electrical里有现成的“Three-Level Bridge”模块但如果想看得更清楚也可以自己用两个IGBT串联加二极管搭一个半桥再封装。我个人习惯用现成的Three-Level Bridge内部参数选择IGBT导通压降2V、截至电流1e-4、缓冲电阻1e6开关频率设为10kHz。这里需要注意IGBT的缓冲参数如果设得太小仿真会产生高频震荡导致波形失真我会在问题排查部分细说。第三步是负载和滤波。我直接用的三相RL负载R10ΩL5mH星形连接。如果仿真是为了并网或电机驱动则需要在负载前面加一级LCL滤波器参数按谐振频率低于开关频率一半来设计这里就不展开了。仿真求解器我建议用定步长步长1e-6s仿真时间0.1s。变步长虽然跑得快但PWM比较瞬间如果采样时间不一致很容易丢脉冲我是吃过这个亏的。4.3 SVPWM控制模块搭建从代码到波形控制模块我采用了零序注入法配合层叠载波比较来实现因为这种方法既快又不容易出错。核心步骤写成一个Matlab Function块输入是d轴和q轴参考电压、电角度和直流母线电压输出是调制波以及最终的门极信号。为了让思路更清晰我给一个可以直接改着用的C语言风格的伪代码用这种结构放到Simulink的C S-Function或者Plecs的C Control模块里也成立// 输入Ualpha, Ubeta, Udc, Ts // 输出comp[3] 每一相的占空比比较值(0~1) void svpwm_npc(float Ualpha, float Ubeta, float Udc, float Ts, float comp[3]) { float Va, Vb, Vc; // 三相调制波 (标幺化到 -1~1) float V0; // 零序分量 float da, db, dc; // 1. 反Clark变换得到三相电压基准 Va Ualpha; Vb -0.5f * Ualpha 0.866f * Ubeta; Vc -0.5f * Ualpha - 0.866f * Ubeta; // 2. 限幅防止调制波溢出 clamp(Va, -1.0f, 1.0f); clamp(Vb, -1.0f, 1.0f); clamp(Vc, -1.0f, 1.0f); // 3. 计算零序分量等效SVPWM float Vmax max3(Va, Vb, Vc); float Vmin min3(Va, Vb, Vc); V0 -0.5f * (Vmax Vmin); // 4. 叠加零序分量得到马鞍波 Va Va V0; Vb Vb V0; Vc Vc V0; // 5. 转换为占空比比较值0~1.0 da 0.5f 0.5f * Va; db 0.5f 0.5f * Vb; dc 0.5f 0.5f * Vc; comp[0] da; comp[1] db; comp[2] dc; }这一段代码的实质就是在SPWM的基础上注入零序分量等效实现SVPWM。如果是传统SVPWM则需要额外加扇区判断和时间计算。传统法我后面在问题对比里再讲先用这个代码把系统跑通。生成门极信号时我用两个三角载波一个范围在0到1另一个范围也在0到1但错开半个周期。比较规则是这样的如果某相占空比大于上限载波上桥臂P输出如果占空比小于下限载波下桥臂N输出两者之间输出O。由于NPC三电平正负半周的逻辑略有差异实际门极驱动信号要映射到4个IGBT这里我用一个查表子模块处理。纯Simulink搭的话也可以用两层层叠载波加逻辑判断块完成最终输出6路或12路PWM。4.4 仿真参数设置与步长选择整个系统仿真参数如下参数数值说明直流母线电压Udc650V每个电容325V电容容值2200uF两个串联开关频率10kHz载波频率基波频率50Hz输出工频调制比m0.85初始设定负载电阻10Ω三相星形滤波电感5mH串联负载仿真步长1e-6s定步长仿真时长0.1s看稳态波形足够调制比这里有个小细节如果用SVPWM调制比定义为相电压基波峰值与2/πUdc的比不同文献定义不一样容易看串。我更习惯用两电平SVPWM常见的定义m √3 * Vref / Udc其中Vref是空间电压矢量模长。0.85的调制比在线性调制范围内马鞍波的调制波峰值会刚刚接触限幅边界输出效果最好。仿真跑起来以后我同时观测了四个关键波形三相调制波、每相PWM脉冲、输出相电压和线电压、三相负载电流。第一个特征就是调制波呈标准马鞍形第二个特征是相电压有325V、0V、-325V三个台阶线电压则有±650V、±325V和0V五个台阶。4.5 Plecs环境下的实现差异在Plecs里我基本复用了同样结构的控制代码只是把Matlab Function换成了Plecs的C Control模块主电路直接用Plecs自带的Power Module库里的三电平NPC桥臂拖进去。Plecs有个好处是半导体的热模型可以直接挂上去看损耗分布坏处是它的载波模块不像Simulink里那么直观需要自己用PWM发生器加比较器搭。如果你自己搭Plecs我建议直接用“Multiple Pulses”发生器配合比较器实现层叠载波而不是去硬凑SVPWM序列发生器。因为Plecs里分析波形的重点本来就在功率电路侧控制部分能简单就简单。5. 关键仿真结果与参数设计经验5.1 相电压/线电压/相电流波形解读仿真跑通后第一眼要看的不是谐波FFT而是电压波形本身。相电压应该出现三个电平台阶在开关周期内不停地切换包络线呈50Hz正弦形状。如果相电压只有两个电平说明NPC桥某个管子的门极逻辑出了问题如果电平台阶的宽度明显不对称说明SVPWM的零序注入没做好或者调制波限幅太狠。线电压五个电平的形态也很重要。理想NPC三电平线电压阶梯是650V、325V、0V、-325V、-650V由于负载电感的存在开关切换瞬间会有尖峰这是正常现象但如果尖峰幅度超过直流母线电压两倍以上就要怀疑主电路寄生参数或者IGBT缓冲电路参数不合适了。负载电流波形是最能判断调制效果的。正常稳态下电流应为一组对称正弦波THD在开关频率10kHz、负载电感5mH的情况下大概在3%到5%之间。如果电流波形出现过零点畸变或者不对称大概率是扇区衔接处时间计算有偏差或者中点电位明显偏移导致输出电压畸变。5.2 中点电位波动问题与平衡策略中点电位是NPC三电平SVPWM绕不开的坎。我一开始用零序注入法跑仿真时两个电容电压差在0.1s内从0漂到了差不多40V输出电压波形看着还行但电流FFT里出现了明显的50Hz附近边带这就是中点不平衡在作怪。解决思路是在SVPWM里加入中点电流控制。传统的空间矢量法直接调节成对小矢量的时间分配对于零序注入法则可以通过调节占空比的偏置来改变中点电流大小。简单说中点电位偏高时需要让桥臂多输出一些O电平且流经中点的电流方向正确从而把其中一个电容放电、另一个充电。实际代码里我加了一个PI环输入是两个电容电压差输出是对零序分量的补偿系数叠加到原来的零序量上。调试参数时注意PI增益不能太大否则中点电压会来回振荡反而造成新的不平衡。我最后用的Kp0.005Ki0.5效果不错0.1s仿真结束时电压差控制在3V以内。5.3 对比SPWM、三次谐波注入和SVPWM的电压利用率拿到仿真结果后我做了一组对比实验同样650V直流母线、同样负载、同样调制波峰值分别跑纯正弦SPWM、三次谐波注入SPWM、等效SVPWM三种方案记录输出相电压基波幅值和THD。方案相电压基波幅值相对纯SPWM提升电流THD10kHz附近纯正弦SPWM约260V基准偏高三次谐波注入SPWM约300V提升约15%明显下降等效SVPWM约300V提升约15%和三次谐波注入基本一致这个结果和理论推导对得上SVPWM相对纯SPWM提升15.47%而三次谐波注入SPWM在数学上就是SVPWM的等效实现两者输出几乎重合。所以工程上如果觉得SVPWM名称唬人完全可以直接用“正弦波加1/6三次谐波”去实现同样效果波形和THD几乎看不出差异。但做研究或者写论文时还是建议把空间矢量法原理阐述清楚因为审稿人更看重理论深度。6. 常见问题与排查技巧实录6.1 问题速查表现象可能原因解决办法相电压只有两个电平NPC桥某个开关管门极逻辑错误O电平未出现检查PWM映射表确认上下管子互补关系调制波不是马鞍形零序注入被限幅函数截掉了检查clamp范围确保限幅前波形本身不超过±1输出电流THD很高开关频率过低或负载电感太小提高开关频率或增大滤波电感电容电压差越来越大缺少中点电位平衡控制加PI平衡环并调节冗余小矢量分配系统启动瞬间过流直流电容初始充电电流大加预充电电阻或把调制比从0开始斜坡给定仿真时间极慢变步长求解器在PWM切换处步长被拉得很小改定步长1e-6s并去掉不必要的模拟量示波器IGBT模块报错缓冲参数设置不当造成高dv/dt增大缓冲电阻和电容或换成理想开关模型6.2 扇区接续处的毛刺问题我调试时遇到一个特别典型的问题电流波形在每个扇区切换点附近会出现一个小的尖刺频率是基波的6倍。一开始我怀疑是SVPWM时间计算在扇区边界产生了跳变后来查了很多代码才确认是零序注入法的占空比在扇区边界处不连续引起的。纯空间矢量法在扇区切换时会通过时间重分配来保证电压连续而零序注入法如果直接做限幅在跨扇区瞬间可能会丢半个采样周期的脉宽。解决办法有两个。一是把采样频率提高到足够高让扇区边界处的时间跳变压缩到很短二是在代码里加一个非线性补偿当三相调制波的极值关系即将切换时用上一扇区的映射关系平滑过渡。我实际采用第一种方案把SVPWM控制频率从10kHz同步到20kHz问题就消失了波形干净很多。6.3 死区时间的影响仿真里如果不加死区PWM直连上下管很容易发生直通虽然仿真不一定报错但实际波形会失真中点电位也会受到影响。我建议仿真中直接给每个开关管加2us的死区并用比较规则里“上管关断后延迟2us再开下管”的方式建模。加了死区以后电压波形会出现低次谐波和电流畸变这在并网逆变器里是个热门话题需要做死区补偿。不过本项目的核心是验证SVPWM算法死区补偿我只做了基础的对称补偿没有深入展开。6.4 仿真结果验证的建议我在一个项目里很少只依赖一种工具。Simulink跑通了可以导出调制波和占空比然后在Plecs里输入同样的参数再跑一遍对比两个平台下的电流THD和电容电压。如果两者相差太大说明某个平台的热模型、开关模型或者求解器配置有问题。这次我对比的结果是两个平台下电流THD相差不到0.5个百分点输出电压幅值差不到2V基本可以判定算法实现无误。另外一个很实用的验证手段是把SVPWM的等效调制波和理论计算马鞍波重合在一起看。理论马鞍波公式很简单就是正弦波加1/6幅值的三次谐波再折算到占空比坐标系。如果实际调制波曲线和理论曲线重合得很好算法就成功了80%以上。7. 参考文献项目标题里特别提到“带参考文献”这部分我整理了一下自己写仿真报告和论文时真正引用的几篇都是能直接追到原始推导的不是那种凑数的引用。[1] Nabae A, Takahashi I, Akagi H. A new neutral-point-clamped PWM inverter[J]. IEEE Transactions on Industry Applications, 1981, IA-17(5): 518-523.[2] 李永东. 现代电力电子技术[M]. 北京: 机械工业出版社, 2012.[3] 张兴, 张崇巍. PWM整流器及其控制[M]. 北京: 机械工业出版社, 2003.[4] 陈伯时. 电力拖动自动控制系统——运动控制系统[M]. 北京: 机械工业出版社, 2016.[5] Pou J, Pindado R, Boroyevich D, et al. Evaluation of the low-frequency neutral-point voltage oscillations in the three-level inverter[J]. IEEE Transactions on Industrial Electronics, 2005, 52(6): 1582-1588.[6] 徐殿国, 李彬彬, 周克亮. 三电平逆变器SVPWM调制及其简化算法综述[J]. 中国电机工程学报, 2016, 36(6): 1623-1636.[7] 王兆安, 刘进军. 电力电子技术[M]. 北京: 机械工业出版社, 2009.第1篇是NPC三电平的奠基性论文想彻底搞清楚拓扑来历一定要看第5篇专门讲三电平逆变器中点电位低频振荡问题做中点平衡控制选型时很有参考价值第6篇是中文综述适合快速建立三电平SVPWM各种调制的全景图。8. 我的一点实操心得与后续扩展想法整个项目做下来最大的感触是仿真模型的价值不在模型本身而在于你能不能在出错时找到是哪一环的逻辑不对。SVPWM看着公式多但对标量、查表、驱动映射这几个关键点梳理清楚以后实现难度其实不会比两电平高多少。只是三电平拓扑本身有中点电位的额外维度需要处理设计控制系统时一定要从一开始就把它当成第一个约束条件而不是等仿真快做完了再回头补。如果后续还想往深做我建议可以在现在这个SVPWM仿真基础上扩展三个方向。第一个方向是死区补偿和开关延迟的精确建模这对工程样机调试非常重要。第二个方向是NPC三电平有源前端整流器把逆变器侧的SVPWM算法移植到PWM整流器上加上电网电压矢量定向控制就可以做单位功率因数并网。第三个方向是虚拟空间矢量调制VSVPWM它在三电平中通过重新构造虚拟矢量来进一步抑制中点电位波动是近些年论文的热点也是我这个项目下一步准备尝试的方案。仿真平台方面如果你手头有FPGA板子我还想多说一句这套SVPWM的等效调制波代码很适合直接在FPGA上实现因为所有计算都是加减乘除和比较几乎没有三角函数几个时钟周期就能算完。把仿真参数映射到硬件接口以后就可以把NPC三电平逆变器真正跑起来。到那一步你就能体会到从仿真相到实机的区别了不过那又是另外一个故事了。