SVPWM基础回顾:基本原理、电压空间矢量、扇区判断与作用时间

聊堵转检测之前,咱们得先把SVPWM这块地基夯实了。我个人习惯是,不管多复杂的控制算法,先把基本原理吃透,后面踩坑了才知道往哪个方向排查。SVPWM这东西,说白了就是让电机转得又稳又安静,同时把直流母线电压的利用率拉到最高。

SVPWM的基本原理

SVPWM的全称是Space Vector Pulse Width Modulation,空间矢量脉宽调制。它跟传统的SPWM(正弦脉宽调制)最大的区别在哪?SPWM是让三相电压各自正弦变化,而SVPWM是从电机整体的角度出发,直接去逼近一个旋转的电压空间矢量。

你想想看,电机定子绕组通上三相对称电流,会在气隙里产生一个旋转的磁场。这个磁场的大小和方向,可以用一个空间矢量来表示。SVPWM的目标就是:用逆变器八个基本的开关状态,去合成任意方向、任意大小的电压矢量,让磁链轨迹尽量接近圆形。

核心思想: 用有限个离散的电压矢量,去逼近一个连续旋转的参考电压矢量。说白了就是“用有限的砖,铺出圆形的路”。

我在项目里遇到过一个问题:同样的电机参数,用SPWM驱动,电机噪音大、发热也厉害;换成SVPWM之后,电流谐波明显减小,噪音降了好几个分贝。这就是SVPWM的优势——谐波畸变率低,直流电压利用率比SPWM高出约15%。

电压空间矢量与逆变器开关状态

三相两电平逆变器,每相桥臂有两个开关管,上下互补导通。用1表示上管导通、下管关断,0表示下管导通、上管关断。那么三相开关状态组合起来,一共有2³ = 8种状态。

这8种状态里,有6个非零矢量(V1~V6)和2个零矢量(V0和V7)。6个非零矢量在空间上互差60°,把整个平面分成6个扇区。零矢量就是三相全上通或全下通,输出电压为零。

开关状态 (A B C) 矢量编号 矢量幅值 空间角度
100 V1 2/3 Vdc 0°
110 V2 2/3 Vdc 60°
010 V3 2/3 Vdc 120°
011 V4 2/3 Vdc 180°
001 V5 2/3 Vdc 240°
101 V6 2/3 Vdc 300°
000 V0 0 —
111 V7 0 —

小提示: 零矢量V0和V7虽然输出电压都是0,但开关切换路径不一样。我一般习惯在扇区切换时用V0,在扇区内部用V7,这样能减少开关次数,降低开关损耗。

扇区判断:第一步定位

拿到参考电压矢量Vref之后,第一件事就是判断它在哪个扇区。扇区判断的方法有很多,我常用的是基于Clark变换后的αβ分量来判断。

假设我们已经把三相电压变换到了αβ坐标系下,得到Vα和Vβ。那么扇区判断的步骤是这样的:

  1. 计算三个中间变量:
    B1 = Vβ
    B2 = (√3/2)·Vα - (1/2)·Vβ
    B3 = -(√3/2)·Vα - (1/2)·Vβ
  2. 根据B1、B2、B3的符号,得到一个三位二进制数:
    N = 4·sign(B3) + 2·sign(B2) + 1·sign(B1)
    其中sign(x)当x>0时取1,x<0时取0。
  3. 查表得到扇区号:
N值 1 2 3 4 5 6
扇区 II VI I IV III V

嗯,这里要注意:不同资料里扇区编号的起始位置可能不一样。我习惯把V1(100)所在的扇区定为扇区I,这样跟我的硬件布局对应得上。你最好也根据自己的硬件确认一下扇区编号规则。

作用时间计算:核心公式

判断完扇区之后,就要算两个相邻非零矢量和零矢量的作用时间了。以扇区I为例,Vref在V1(100)和V2(110)之间。设Vref与V1的夹角为θ,那么:

  • V1的作用时间:T1 = Ts · m · sin(60° - θ)
  • V2的作用时间:T2 = Ts · m · sin(θ)
  • 零矢量的作用时间:T0 = Ts - T1 - T2

其中m是调制比,m = √3·|Vref| / Vdc,Ts是开关周期。

其他扇区的公式类似,只是把θ换成相对于该扇区起始矢量的角度。我一般会在代码里建一个查找表,把sin值提前算好存起来,这样MCU跑起来快很多。

曾经踩过的坑: 有一次我算出来的T1+T2大于Ts,导致T0为负值。后来才发现是调制比超过了1,进入了过调制区。过调制时需要对T1和T2进行等比例缩放:T1' = T1 · Ts / (T1+T2),T2' = T2 · Ts / (T1+T2)。这个处理一定要做,不然电流波形会畸变。

知识体系总览

下面这张图把SVPWM的核心流程串起来了,从参考电压输入到PWM波形输出,每一步都离不开扇区判断和作用时间计算。

SVPWM核心流程 参考电压 Vref Clark变换 (Vα, Vβ) 扇区判断 (N=1~6) 作用时间计算 (T1, T2, T0) PWM波形生成 关键点 扇区判断用B1/B2/B3 作用时间用sin公式 过调制需等比例缩放 避坑提醒 T0为负 → 过调制 扇区编号确认起始位置 零矢量选择影响开关损耗

实际工程中的几点体会

扇区判断和作用时间计算,看起来就是几个公式的事。但真正写到MCU里,有几个细节值得注意:

  • 浮点运算要谨慎: 我早期用DSP做SVPWM,直接上浮点sin函数,结果一个开关周期里算不完。后来改成查表+定点数,速度翻了好几倍。
  • 扇区边界处理: Vref刚好落在扇区边界上时,B1、B2、B3可能为零。我习惯加一个很小的死区阈值,比如0.001,避免符号判断抖动。
  • 过调制检测: 每次算完T1+T2,我都会判断一下是否大于Ts。如果大于,就做等比例缩放。这个检查不能省,否则电机高速运行时电流波形会很难看。

个人习惯: 我会在代码里把扇区判断和作用时间计算封装成一个函数,输入Vα和Vβ,输出T1、T2和扇区号。这样调试的时候,只需要盯着这个函数的输入输出看,问题定位快很多。

好了,SVPWM的基础就回顾到这里。扇区判断和作用时间计算是后面堵转检测的数学基础——堵转时电流会突变,电压矢量也会跟着变,到时候我们就是靠这些公式来捕捉异常信号的。