4、基本电压空间矢量:6个扇区的划分,矢量幅值与相角计算

好,咱们接着聊。上一章我们把三相静止坐标系下的电压,通过 Clarke 变换扔到了两相静止 αβ 坐标系里。但光有 αβ 还不够,SVPWM 的核心是「空间矢量」这个概念——说白了,就是把三相电压合成一个旋转的矢量,然后用这个矢量去控制电机。

这一章,我们就来拆解这个旋转矢量的「骨架」:六个基本电压空间矢量。它们是怎么来的?扇区怎么划分?幅值和相角又该怎么算?

核心要点:六个基本矢量把平面分成六个扇区,每个扇区60°。你只需要知道目标矢量落在哪个扇区,就能决定用哪两个基本矢量去合成它。

4.1 六个基本电压空间矢量从哪来?

先回想一下逆变器的拓扑。一个典型的电压型三相逆变器,有六个开关管(Q1~Q6),上下桥臂互补导通。我们把上桥臂导通记为“1”,下桥臂导通记为“0”。那么三个桥臂的状态组合起来,一共有 2³ = 8 种状态。

这 8 种状态里,有 6 种是非零矢量,2 种是零矢量(000 和 111)。

我个人习惯把非零矢量记作 V1(001)、V2(010)、V3(011)、V4(100)、V5(101)、V6(110)。注意,这里的顺序是按二进制排列的,但实际在空间里,它们的排列顺序是 V4(100) → V6(110) → V2(010) → V3(011) → V1(001) → V5(101),逆时针转一圈。

为什么会这样排列?你想想看,每个非零矢量对应一个线电压组合,合成到 αβ 坐标系下,就得到一个幅值为 2/3 Vdc 的固定矢量。六个矢量正好把 360° 平面均分成六份。

开关状态 (a,b,c) 矢量编号 α轴分量 β轴分量 幅值 相角
100 V4 2/3 Vdc 0 2/3 Vdc 0°
110 V6 1/3 Vdc √3/3 Vdc 2/3 Vdc 60°
010 V2 -1/3 Vdc √3/3 Vdc 2/3 Vdc 120°
011 V3 -2/3 Vdc 0 2/3 Vdc 180°
001 V1 -1/3 Vdc -√3/3 Vdc 2/3 Vdc 240°
101 V5 1/3 Vdc -√3/3 Vdc 2/3 Vdc 300°
000 / 111 V0 / V7 0 0 0 —

一个小技巧:我在项目中经常用这个表来快速验证 Clarke 变换的代码。你把 V4(100) 代入 Clarke 公式,算出来的 αβ 分量如果跟表里对不上,那肯定是变换矩阵的系数搞错了。

4.2 扇区划分:把圆切成六块蛋糕

六个基本矢量把 αβ 平面分成六个扇区,每个扇区占 60°。扇区的编号方式有很多种,我见过有人按 0~5 编号,也有人按 1~6 编号。我个人习惯用 1~6,并且从 V4(100) 所在的 0° 位置开始算扇区 I。

扇区划分的规则很简单:

  • 扇区 I:0° ~ 60°(介于 V4 和 V6 之间)
  • 扇区 II:60° ~ 120°(介于 V6 和 V2 之间)
  • 扇区 III:120° ~ 180°(介于 V2 和 V3 之间)
  • 扇区 IV:180° ~ 240°(介于 V3 和 V1 之间)
  • 扇区 V:240° ~ 300°(介于 V1 和 V5 之间)
  • 扇区 VI:300° ~ 360°(介于 V5 和 V4 之间)

嗯,这里要注意:扇区的边界是包含的。比如目标矢量正好落在 60° 线上,它既属于扇区 I 也属于扇区 II,但实际代码里我们通常会把它归到其中一个,避免边界判断的歧义。

我曾经踩过的坑:有一次在 DSP 上跑 SVPWM,扇区判断用的浮点 atan2,结果在 0° 和 360° 边界处因为浮点精度问题,扇区跳变不稳定,导致电流波形出现毛刺。后来我改用查表法 + 定点数判断,问题就解决了。所以,扇区判断尽量用比较法,少用三角函数。

4.3 矢量幅值与相角计算

知道了扇区划分,下一步就是算目标矢量的幅值和相角。这个目标矢量,其实就是我们通过 Clarke 变换得到的 Uα 和 Uβ。

幅值计算很简单:

Vref = sqrt(Uα² + Uβ²)

相角计算:

θ = atan2(Uβ, Uα)

注意,atan2 返回的是弧度,范围是 -π 到 π。我们需要把它映射到 0 ~ 2π,方便扇区判断。

有了相角 θ,扇区编号就可以直接算出来:

// 将 θ 映射到 0 ~ 2π
if (θ < 0) θ += 2π;

// 扇区编号(1~6)
sector = floor(θ / (π/3)) + 1;

举个例子:假设 Uα = 200V,Uβ = 200V,那么:

  • Vref = sqrt(200² + 200²) ≈ 282.8V
  • θ = atan2(200, 200) = π/4 = 45°
  • 45° 落在 0°~60° 之间,所以扇区 I

这个结果告诉我们,目标矢量在扇区 I,需要用 V4(100) 和 V6(110) 来合成它。

关键点:扇区判断只是第一步。真正决定 SVPWM 性能的,是后面每个扇区里两个基本矢量的作用时间计算。但前提是——你得先知道目标矢量在哪个扇区。

4.4 知识结构图:扇区与矢量的关系

下面这张 SVG 图,把六个基本矢量、扇区划分、以及目标矢量的关系画在了一起。你可以把它当作本章的「地图」来用。

六个基本电压空间矢量与扇区划分 六个基本电压空间矢量与扇区划分 V4(100) V6(110) V2(010) V3(011) V1(001) V5(101) 扇区 I 扇区 II 扇区 III 扇区 IV 扇区 V 扇区 VI Vref 说明:六个基本矢量幅值均为 2/3 Vdc,相邻矢量夹角 60°。目标矢量 Vref 落在扇区 I, 由 V4 和 V6 合成。零矢量 V0/V7 位于原点,用于调节作用时间。

4.5 实际项目中的扇区判断技巧

在实际代码里,我们很少直接用 atan2 去算相角再判断扇区——太慢了。更常见的做法是用 Uα 和 Uβ 的符号和比值来直接判断。

我常用的方法是:

  1. 先定义三个中间变量:
U1 = Uβ
U2 = (√3/2)*Uα - (1/2)*Uβ
U3 = -(√3/2)*Uα - (1/2)*Uβ
  1. 然后根据这三个变量的符号,查表得到扇区:
sector = 0;
if (U1 > 0) sector += 1;
if (U2 > 0) sector += 2;
if (U3 > 0) sector += 4;

这个查表法的好处是:只用比较和加法,没有三角函数,没有浮点除法。在定点 DSP 上跑起来飞快。

我个人的经验:如果你用浮点 MCU,直接用 atan2 也没问题,代码更直观。但如果你用低成本 DSP 或者 FPGA,强烈建议用查表法。我在一个风机项目里,把扇区判断从 atan2 改成查表法后,PWM 更新频率从 8kHz 提到了 12kHz。

4.6 本章小结

这一章我们干了三件事:

  • 搞清楚了六个基本电压空间矢量是怎么从逆变器开关状态来的
  • 学会了把 αβ 平面切成六个扇区,每个扇区 60°
  • 掌握了目标矢量的幅值和相角计算方法,以及工程上更高效的扇区判断技巧