3. 电压矢量合成原理:8个基本电压矢量及扇区划分

好,咱们进入SVPWM的核心地带了。前面聊了坐标变换,那都是准备工作。现在要回答一个关键问题:逆变器只有6个开关管,怎么就能输出任意角度的电压矢量呢?

答案就是——电压矢量合成。说白了,就是用几个固定的基本矢量,通过时间组合,拼出你想要的那个矢量。这就像调色,只有红绿蓝三原色,但你能调出万千色彩。

3.1 逆变器的8种开关状态

先看一个三相两电平逆变器。每相桥臂有两个开关管,上下互补导通。我习惯用SA、SB、SC表示三个半桥的状态:

  • Sx = 1:上管导通,下管关断,该相输出接到直流母线正极(+Vdc/2)
  • Sx = 0:上管关断,下管导通,该相输出接到直流母线负极(-Vdc/2)

三个开关管,每个两种状态,一共23 = 8种组合。这就是全部家当了。

8种开关状态:

  • 6个非零矢量:U1(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)
  • 2个零矢量:U0(000)、U7(111)

你可能会问:为什么(000)和(111)是零矢量?因为三相输出都接到同一个电位上,电机绕组两端电压差为零,所以不产生转矩。嗯,这里要记住,零矢量不是没用,后面讲调制策略时你就知道它的妙处了。

3.2 基本电压矢量的空间分布

把这8个状态映射到αβ坐标系下,就得到了6个非零矢量和2个零矢量。每个非零矢量的幅值都是2Vdc/3,方向相差60°。

我记得第一次画这个六边形时,总觉得它像个钟表盘。你看:

  • U4(100) 指向0°方向(α轴正方向)
  • U6(110) 指向60°
  • U2(010) 指向120°
  • U3(011) 指向180°
  • U1(001) 指向240°
  • U5(101) 指向300°

零矢量U0和U7都在原点,但实现方式不同——一个全下管导通,一个全上管导通。

基本电压矢量空间分布图 α β U₄(100) U₆(110) U₂(010) U₃(011) U₁(001) U₅(101) U₀(000) / U₇(111) 扇区Ⅰ 扇区Ⅱ 扇区Ⅲ 扇区Ⅳ 扇区Ⅴ 扇区Ⅵ 0° 60° 120° 180° 240° 300°

3.3 扇区划分——把圆切成六块

6个非零矢量把整个αβ平面分成了6个扇区,每个扇区60°。扇区编号我习惯用罗马数字Ⅰ~Ⅵ,从U4开始逆时针数:

扇区 角度范围 边界矢量 包含区域
Ⅰ 0° ~ 60° U4、U6 第一象限上半
Ⅱ 60° ~ 120° U6、U2 第二象限上半
Ⅲ 120° ~ 180° U2、U3 第二象限下半
Ⅳ 180° ~ 240° U3、U1 第三象限下半
Ⅴ 240° ~ 300° U1、U5 第三象限上半
Ⅵ 300° ~ 360° U5、U4 第四象限上半

个人经验:我刚开始做SVPWM时,扇区判断总是搞混。后来我总结了一个规律——看Uβ的符号和Uα与Uβ的比例关系。其实用Uα、Uβ和Uα+Uβ的符号组合就能唯一确定扇区,这个后面代码实现时会细讲。

3.4 电压矢量合成——用两个相邻矢量拼出目标

现在关键来了。假设我想输出一个角度为θ、幅值为Uref的电压矢量,但它不在任何一个基本矢量的方向上。怎么办?

答案是:用这个扇区边界的两个非零矢量,加上零矢量,通过时间加权平均来合成。

举个例子,目标矢量Uref落在扇区Ⅰ(0°~60°),那就用U4(100)和U6(110)来合成:

合成公式(伏秒平衡原理):

Uref × Ts = U4 × T4 + U6 × T6 + U0/7 × T0

其中:
  Ts = T4 + T6 + T0  (一个PWM周期)
  T4、T6、T0 分别是U4、U6和零矢量的作用时间

说白了,就是让U4导通T4时间,U6导通T6时间,剩下的时间给零矢量。在一个PWM周期内,平均效果就等于Uref。

你想想看,这就像搬砖——你一个人一次搬不动100块砖,那就分几次搬,只要总时间对得上,效果一样。

3.5 作用时间的计算

具体怎么算T4和T6?用正弦定理或者投影法都行。我习惯用投影法,直观:

在扇区Ⅰ中:
  Uα = |U4| × T4/Ts + |U6| × cos(60°) × T6/Ts
  Uβ = |U6| × sin(60°) × T6/Ts

其中 |U4| = |U6| = 2Vdc/3

解得:
  T4 = (3Ts / 2Vdc) × (Uα - Uβ/√3)
  T6 = (3Ts / 2Vdc) × (2Uβ/√3)
  T0 = Ts - T4 - T6

注意:如果T4 + T6 > Ts,说明目标矢量超出了六边形内切圆的范围,也就是过调制了。这时候需要等比例缩小T4和T6,保证总时间不超过Ts。我曾经在调试高速电机时遇到过这个问题,转速一上去,电压指令就饱和了,电机反而降速。后来加了过调制处理才搞定。

3.6 零矢量的作用——不只是"休息"

零矢量有两个:U0(000)和U7(111)。它们对输出电压没贡献,但作用很大:

  • 填充剩余时间:T4 + T6 不够一个周期,剩下的时间用零矢量填满
  • 降低开关频率:合理分配U0和U7的时间,可以减少开关次数
  • 影响谐波:零矢量的分配方式会影响电流纹波和THD

我个人的习惯是,在扇区Ⅰ、Ⅲ、Ⅴ用U0开头和结尾,在扇区Ⅱ、Ⅳ、Ⅵ用U7开头和结尾,这样每次切换只改变一相开关状态,开关损耗最小。这个叫"七段式SVPWM",后面章节会详细展开。

3.7 合成矢量的幅值限制——六边形内切圆

6个非零矢量的幅值是2Vdc/3,但合成矢量的最大幅值不是这个数。因为你要留时间给零矢量,所以实际能合成的最大幅值是六边形的内切圆半径:

Uref_max = (2Vdc/3) × cos(30°) = Vdc/√3 ≈ 0.577Vdc

这个值就是SVPWM的线性调制区上限。超过这个值就进入过调制区,输出电压会失真。对比一下SPWM,它的最大相电压幅值只有Vdc/2 = 0.5Vdc。你看,SVPWM的直流电压利用率比SPWM高了约15.4%。这也是为什么伺服驱动几乎都用SVPWM的原因之一。

关键对比:

调制方式 最大相电压幅值 直流电压利用率
SPWM Vdc/2 50%
SVPWM(线性区) Vdc/√3 57.7%
SVPWM(过调制) 2Vdc/3 66.7%

3.8 避坑指南——我踩过的几个坑

做SVPWM实现时,有几个地方特别容易出问题:

  • 扇区判断边界条件:当Uβ = 0或Uα = 0时,目标矢量正好落在扇区边界上。这时候两个扇区都可以,但必须选一个,不能模棱两可。我一般统一按"逆时针优先"处理。
  • 时间计算精度:T4和T6的计算涉及除法,定点DSP上要注意溢出。我曾经用Q15格式时没做饱和处理,结果T4算出来是负数,电机直接抖了一下。
  • 死区时间补偿:实际IGBT/MOSFET有死区时间,会导致实际输出电压和理论值有偏差。低速时尤其明显,电流波形会畸变。这个后面讲死区补偿时会细聊。

嗯,以上就是电压矢量合成的全部基础。8个基本矢量、6个扇区、伏秒平衡合成、时间计算——这些是SVPWM的骨架。下一层我们要把这些公式变成能在DSP/FPGA上跑的代码,到时候你会看到,其实核心逻辑就那么几行。