4、PWM与逆变器建模:PWM生成原理、两电平逆变器模型、SVPWM算法实现

说到电机控制,PWM和逆变器是绕不开的核心环节。我刚开始做电机驱动时,总觉得PWM不就是个开关信号嘛,有啥好研究的?直到有一次在调试一台伺服驱动器时,电机嗡嗡响得厉害,电流波形乱七八糟,我才意识到——PWM的生成质量,直接决定了整个系统的性能。

这一章,我们就来聊聊PWM的生成原理、两电平逆变器的建模,以及SVPWM算法的实现。这些东西,说白了就是电机控制的"心脏"和"血管"。

4.1 PWM生成原理

PWM,全称是脉冲宽度调制。它的核心思想很简单:用数字信号去模拟模拟信号。你想想看,微控制器只能输出0和1,但电机需要的是连续变化的电压,怎么办?

答案就是——高频开关。通过调整一个周期内高电平的占比(也就是占空比),就能等效出不同的平均电压。

核心公式:

占空比 D = T_on / T_sw

平均电压 V_avg = D × V_dc

其中 T_sw 是开关周期,V_dc 是母线电压

在Simulink中,我习惯用两种方式生成PWM:

  • 三角波比较法:将调制波与高频三角载波比较,输出PWM信号。这是最直观的方法,适合教学演示。
  • 计数比较法:利用定时器计数,在特定计数值时翻转输出。这种方法更接近实际DSP/FPGA的实现方式。

我个人建议,在仿真阶段先用三角波比较法,因为它的物理意义更清晰。等你要做代码生成时,再切换到计数比较法。

小技巧:载波频率的选择很关键。频率太低,电机噪音大;频率太高,开关损耗大。我一般选在5kHz-20kHz之间,具体看IGBT或MOSFET的开关特性。

4.2 两电平逆变器模型

两电平逆变器,是电机驱动中最常见的拓扑结构。它由6个开关管组成,分成三个桥臂,每个桥臂上下各一个开关管。

嗯,这里要注意:上下两个开关管绝对不能同时导通,否则就是短路,会炸管的。我在项目中就见过一次,同事调试时死区时间设得太短,结果IGBT直接冒烟了……

两电平逆变器的输出电压只有两种电平:+V_dc/2 和 -V_dc/2。通过不同的开关组合,可以合成8种基本电压矢量,其中6个是非零矢量,2个是零矢量。

在Simulink中建模,我通常用以下方式:

% 两电平逆变器开关函数
% Sa, Sb, Sc 为各相开关状态 (0或1)
% V_dc 为母线电压

V_an = (2*Sa - Sb - Sc) * V_dc / 3;
V_bn = (2*Sb - Sa - Sc) * V_dc / 3;
V_cn = (2*Sc - Sa - Sb) * V_dc / 3;

这个公式其实很好理解。你想想看,当Sa=1,Sb=0,Sc=0时,A相接到正母线,B、C相接到负母线,那么A相电压就是2/3的母线电压。

避坑指南:我曾经在建模时忽略了死区时间的影响,结果仿真结果和实际测试对不上。死区时间虽然只有几微秒,但会导致电压畸变和电流谐波。建议在模型中加入死区补偿模块。

4.3 SVPWM算法实现

SVPWM,全称是空间矢量脉宽调制。相比传统的SPWM,它的母线电压利用率更高,谐波更小。说白了,就是同样的母线电压,SVPWM能让电机跑得更快。

SVPWM的核心思想是:用8个基本电压矢量去合成任意方向的参考电压矢量。具体实现分三步走:

  1. 扇区判断:根据参考电压矢量的角度,判断它在哪个扇区(共6个扇区,每个60度)
  2. 作用时间计算:计算相邻两个基本矢量的作用时间T1和T2
  3. 开关序列生成:根据作用时间,生成各相开关管的PWM信号

下面这张图,是我整理的SVPWM实现流程图,你看一眼就明白了:

SVPWM算法实现流程图 开始 输入:V_alpha, V_beta (参考电压) 扇区判断 (N = A + 2B + 4C) 计算 T1, T2 (相邻矢量作用时间) 过调制判断 生成三相PWM占空比 (Ta, Tb, Tc) 输出PWM信号

在Simulink中实现SVPWM,我一般用MATLAB Function模块写算法,这样调试起来方便。核心代码如下:

function [Ta, Tb, Tc] = svpwm(V_alpha, V_beta, V_dc, T_sw)
    % 扇区判断
    V1 = V_beta;
    V2 = sqrt(3)/2 * V_alpha - 0.5 * V_beta;
    V3 = -sqrt(3)/2 * V_alpha - 0.5 * V_beta;
    
    N = 0;
    if V1 > 0, N = N + 1; end
    if V2 > 0, N = N + 2; end
    if V3 > 0, N = N + 4; end
    
    % 根据扇区查表计算T1, T2
    % 这里省略了查表细节,实际项目中用switch-case实现
    
    % 过调制处理
    if (T1 + T2) > T_sw
        T1 = T1 / (T1 + T2) * T_sw;
        T2 = T2 / (T1 + T2) * T_sw;
    end
    
    % 生成三相占空比
    T0 = T_sw - T1 - T2;
    % 根据扇区分配Ta, Tb, Tc
    % 这里省略了分配逻辑
end

经验之谈:SVPWM的过调制处理很关键。当参考电压幅值超过六边形内切圆时,必须进行过调制。我一般用比例缩放法,虽然简单但效果不错。如果追求更高性能,可以用最小幅值误差法。

最后,我想强调一点:SVPWM的开关序列选择,有七段式和五段式两种。七段式谐波小,但开关次数多;五段式开关损耗低,但谐波大一些。怎么选?看你的应用场景。如果是精密伺服,我选七段式;如果是大功率风机泵类,五段式更合适。

好了,这一章的内容就到这里。PWM和逆变器建模是电机控制的基础,把这些搞明白了,后面的电流环、速度环才能玩得转。记住,仿真只是第一步,真正到硬件上调试时,你会发现很多仿真里看不到的问题——比如死区效应、管压降、寄生参数……这些,都是工程师成长的必经之路。

本章要点回顾:

  • PWM的本质是用数字信号等效模拟信号,占空比决定平均电压
  • 两电平逆变器有8种开关状态,对应8个基本电压矢量
  • SVPWM通过扇区判断、时间计算、序列生成三步实现
  • 过调制处理是SVPWM工程实现的关键环节

专注资料整理