第3篇:SVPWM技术详解:空间矢量脉宽调制原理与实现

📌 本文导读:SVPWM(Space Vector Pulse Width Modulation,空间矢量脉宽调制)是FOC算法中将控制信号转换为实际PWM信号的关键技术。本文将深入讲解SVPWM的基本原理、扇区判断、占空比计算和硬件实现,帮助读者掌握这一核心技术。

开篇引言

在前两篇文章中,我们学习了FOC的核心思想和坐标变换。通过坐标变换,我们将三相电流变换为dq轴电流,实现了解耦控制。但是,dq轴电压如何转换为实际的三相PWM信号,驱动电机运转呢?这就需要SVPWM技术。

SVPWM是一种先进的PWM调制技术,相比传统的SPWM(正弦脉宽调制),具有更高的直流电压利用率、更低的谐波含量和更好的动态性能。在现代电机控制中,SVPWM已经成为主流的调制方式。

💡 类比理解:如果把三相逆变器比作一个画家,SVPWM就是指导画家如何调配三种颜色(A、B、C三相),画出任意想要的色彩(任意电压矢量)。通过巧妙地混合8种基本颜色(8个基本电压矢量),可以合成出任意方向和大小的电压矢量。

这篇文章会详细讲解SVPWM的原理、计算方法和代码实现。我会尽量用直观的方式解释,而不是堆砌公式。

本章学习目标

  • ✅ 理解SVPWM的基本原理与电压空间矢量

  • ✅ 掌握六扇区划分与基本矢量

  • ✅ 掌握参考电压矢量合成方法

  • ✅ 掌握占空比计算与扇区判断

  • ✅ 了解SVPWM的硬件实现


一、SVPWM的基本原理

🎯 本节重点:理解电压空间矢量的概念,掌握SVPWM的基本思想。

1.1 三相逆变器的工作原理

1.1.1 三相逆变器拓扑

三相逆变器由6个功率开关管组成,形成3个半桥:

复制代码
        直流母线(+) ──────┬──────┬──────┐
                          │      │      │
                        S1     S3     S5
                          │      │      │
        电机A相 ─────────┤      │      │
                          │      │      │
                        S4     S6     S2
                          │      │      │
        电机B相 ─────────┤      │      │
                          │      │      │
        电机C相 ─────────┤      │      │
                          │      │      │
        直流母线(-) ──────┴──────┴──────┘
1.1.2 开关状态定义

每个半桥有两种状态:

  • 上管导通、下管截止:状态为1

  • 上管截止、下管导通:状态为0

三相逆变器共有 2³ = 8 种开关状态:

开关状态 S1 S4 S3 S6 S5 S2 状态代码
0 0 1 0 1 0 1 000
1 1 0 0 1 0 1 100
2 1 0 1 0 0 1 110
3 0 1 1 0 0 1 010
4 0 1 1 0 1 0 011
5 0 1 0 1 1 0 001
6 1 0 0 1 1 0 101
7 1 0 1 0 1 0 111

1.2 电压空间矢量

1.2.1 电压空间矢量的定义

电压空间矢量是三相电压在复平面上的表示:

复制代码
V = (2/3) · (Va + Vb·e^(j2π/3) + Vc·e^(j4π/3))

其中:

  • Va、Vb、Vc:三相相电压

  • e^(jθ):复数旋转因子

1.2.2 基本电压矢量

根据8种开关状态,可以得到8个基本电压矢量:

零矢量(2个)

  • V0 (000):零矢量,电压为0

  • V7 (111):零矢量,电压为0

非零矢量(6个)

  • V1 (100):幅值(2/3)Udc,角度0°

  • V2 (110):幅值(2/3)Udc,角度60°

  • V3 (010):幅值(2/3)Udc,角度120°

  • V4 (011):幅值(2/3)Udc,角度180°

  • V5 (001):幅值(2/3)Udc,角度240°

  • V6 (101):幅值(2/3)Udc,角度300°

电压矢量图

复制代码
                    β轴
                     ↑
                     │
                     │
           V3(010)   │   V2(110)
               ╱     │     ╲
             ╱       │       ╲
           ╱         │         ╲
         ╱           │           ╲
       ╱      扇区III│扇区II      ╲
     ╱               │               ╲
   ╱                 │                 ╲
 ─────────────────V4(011)───────────────V1(100)──→ α轴
   ╲                 │                 ╱
     ╲               │               ╱
       ╲      扇区IV │扇区I        ╱
         ╲           │           ╱
           ╲         │         ╱
             ╲       │       ╱
               ╲     │     ╱
                 V5(001) V6(101)
                     │
                     │
                   扇区V
                     │
                   扇区VI

1.3 SVPWM的基本思想

1.3.1 核心思想

SVPWM的核心思想是:利用8个基本电压矢量,合成任意方向和大小的参考电压矢量

实现方法

  1. 根据参考电压矢量的角度,判断所在扇区

  2. 选择相邻的两个非零矢量

  3. 计算两个非零矢量的作用时间

  4. 加入零矢量,使总时间等于PWM周期

1.3.2 电压矢量合成

假设参考电压矢量Vref位于扇区I,可以用V1和V2合成:

复制代码
Vref = (T1/Ts)·V1 + (T2/Ts)·V2 + (T0/Ts)·V0

其中:

  • T1:V1的作用时间

  • T2:V2的作用时间

  • T0:零矢量的作用时间

  • Ts:PWM周期

几何关系

复制代码
                V2
                 ↑
                /│
               / │
              /  │
             /   │ T2/Ts·V2
            /    │
           /     │
          /      │
         /       │
        /θ       │
       ──────────┼──────────→ V1
       └──T1/Ts·V1
       
       Vref = T1/Ts·V1 + T2/Ts·V2

二、扇区判断与时间计算

🎯 本节重点:掌握扇区判断方法和矢量作用时间计算。

2.1 扇区判断

2.1.1 六扇区划分

将复平面划分为6个扇区,每个扇区对应60°:

扇区 角度范围 相邻矢量
I 0° - 60° V1, V2
II 60° - 120° V2, V3
III 120° - 180° V3, V4
IV 180° - 240° V4, V5
V 240° - 300° V5, V6
VI 300° - 360° V6, V1
2.1.2 扇区判断方法

方法一:角度判断法

根据参考电压矢量的角度θ判断扇区:

复制代码
int Get_Sector(float theta)
{
    theta = fmodf(theta, 2 * M_PI);
    if (theta < 0) theta += 2 * M_PI;
    
    int sector = (int)(theta / (M_PI / 3)) + 1;
    if (sector > 6) sector = 1;
    
    return sector;
}

方法二:坐标判断法(推荐)

根据参考电压矢量的αβ分量判断扇区:

复制代码
int Get_Sector_From_AlphaBeta(float v_alpha, float v_beta)
{
    int sector = 0;
    
    float ref1 = v_beta;
    float ref2 = -0.5f * v_beta + 0.866f * v_alpha;
    float ref3 = -0.5f * v_beta - 0.866f * v_alpha;
    
    if (ref1 > 0) sector = 1;
    if (ref2 > 0) sector |= 2;
    if (ref3 > 0) sector |= 4;
    
    switch (sector) {
        case 3: return 1;
        case 1: return 2;
        case 5: return 3;
        case 4: return 4;
        case 6: return 5;
        case 2: return 6;
        default: return 1;
    }
}

2.2 矢量作用时间计算

2.2.1 时间计算公式

设参考电压矢量的幅值为Vref,角度为θ,直流母线电压为Udc,PWM周期为Ts。

扇区I(0° - 60°)

复制代码
T1 = Ts · (√3 · Vref · sin(60° - θ)) / Udc
T2 = Ts · (√3 · Vref · sin(θ)) / Udc
T0 = Ts - T1 - T2

扇区II(60° - 120°)

设 θ' = θ - 60°,则:

复制代码
T2 = Ts · (√3 · Vref · sin(60° - θ')) / Udc
T3 = Ts · (√3 · Vref · sin(θ')) / Udc
T0 = Ts - T2 - T3

通用公式

对于任意扇区n(n=1,2,...,6),设扇区内角度为θ' = θ - (n-1)·60°:

复制代码
Tn = Ts · (√3 · Vref · sin(60° - θ')) / Udc
T(n+1) = Ts · (√3 · Vref · sin(θ')) / Udc
T0 = Ts - Tn - T(n+1)
2.2.2 代码实现
复制代码
typedef struct {
    float T1;
    float T2;
    float T0;
} VectorTime_t;

void Calculate_Vector_Time(float v_alpha, float v_beta, float Udc, float Ts, 
                          int sector, VectorTime_t *time)
{
    float X = v_beta;
    float Y = 0.5f * v_beta + 0.866f * v_alpha;
    float Z = 0.5f * v_beta - 0.866f * v_alpha;
    
    float t1, t2;
    
    switch (sector) {
        case 1:
            t1 = Z;
            t2 = Y;
            break;
        case 2:
            t1 = Y;
            t2 = -X;
            break;
        case 3:
            t1 = -X;
            t2 = Z;
            break;
        case 4:
            t1 = -Z;
            t2 = -Y;
            break;
        case 5:
            t1 = -Y;
            t2 = X;
            break;
        case 6:
            t1 = X;
            t2 = -Z;
            break;
        default:
            t1 = 0;
            t2 = 0;
            break;
    }
    
    float Udc_norm = Udc / 1.732f;
    time->T1 = t1 * Ts / Udc_norm;
    time->T2 = t2 * Ts / Udc_norm;
    time->T0 = Ts - time->T1 - time->T2;
    
    if (time->T0 < 0) {
        float scale = Ts / (time->T1 + time->T2);
        time->T1 *= scale;
        time->T2 *= scale;
        time->T0 = 0;
    }
}

2.3 占空比计算

2.3.1 七段式SVPWM

七段式SVPWM将一个PWM周期分为7段:

复制代码
T0/4 - T1/2 - T2/2 - T0/2 - T2/2 - T1/2 - T0/4

扇区I的开关序列

复制代码
时间轴:  0    T0/4  T0/4+T1/2  T0/4+T1/2+T2/2  Ts/2  ...  Ts
         │      │       │            │          │          │
         V0     V1      V2           V0         V2         V1    V0
         000    100     110          111        110        100   000
2.3.2 占空比计算公式

三相占空比的计算:

扇区I

复制代码
Ta = (T0/4 + T1/2 + T2/2) / Ts
Tb = (T0/4 + T2/2) / Ts
Tc = T0/4 / Ts

扇区II

复制代码
Ta = (T0/4 + T2/2) / Ts
Tb = (T0/4 + T1/2 + T2/2) / Ts
Tc = T0/4 / Ts
2.3.3 代码实现
复制代码
typedef struct {
    float Ta;
    float Tb;
    float Tc;
} DutyCycle_t;

void Calculate_Duty_Cycle(int sector, VectorTime_t *time, float Ts, DutyCycle_t *duty)
{
    float t1 = time->T1 / Ts;
    float t2 = time->T2 / Ts;
    float t0 = time->T0 / Ts;
    
    switch (sector) {
        case 1:
            duty->Ta = t0/4 + t1/2 + t2/2;
            duty->Tb = t0/4 + t2/2;
            duty->Tc = t0/4;
            break;
        case 2:
            duty->Ta = t0/4 + t2/2;
            duty->Tb = t0/4 + t1/2 + t2/2;
            duty->Tc = t0/4;
            break;
        case 3:
            duty->Ta = t0/4;
            duty->Tb = t0/4 + t1/2 + t2/2;
            duty->Tc = t0/4 + t2/2;
            break;
        case 4:
            duty->Ta = t0/4;
            duty->Tb = t0/4 + t2/2;
            duty->Tc = t0/4 + t1/2 + t2/2;
            break;
        case 5:
            duty->Ta = t0/4 + t2/2;
            duty->Tb = t0/4;
            duty->Tc = t0/4 + t1/2 + t2/2;
            break;
        case 6:
            duty->Ta = t0/4 + t1/2 + t2/2;
            duty->Tb = t0/4;
            duty->Tc = t0/4 + t2/2;
            break;
        default:
            duty->Ta = 0.5f;
            duty->Tb = 0.5f;
            duty->Tc = 0.5f;
            break;
    }
}

三、SVPWM的完整实现

🎯 本节重点:掌握SVPWM的完整实现流程和代码。

3.1 完整的SVPWM算法流程

3.1.1 算法流程图
复制代码
开始
  │
  ↓
输入:v_alpha, v_beta, Udc, Ts
  │
  ↓
扇区判断
  │
  ↓
计算矢量作用时间 T1, T2, T0
  │
  ↓
计算三相占空比 Ta, Tb, Tc
  │
  ↓
更新PWM寄存器
  │
  ↓
结束
3.1.2 完整代码实现
复制代码
typedef struct {
    float v_alpha;
    float v_beta;
    float Udc;
    float Ts;
    float Ta;
    float Tb;
    float Tc;
    int sector;
} SVPWM_t;

void SVPWM_Calculate(SVPWM_t *svpwm)
{
    float X = svpwm->v_beta;
    float Y = 0.5f * svpwm->v_beta + 0.866f * svpwm->v_alpha;
    float Z = 0.5f * svpwm->v_beta - 0.866f * svpwm->v_alpha;
    
    int sector = 0;
    if (X > 0) sector = 1;
    if (Y > 0) sector |= 2;
    if (Z > 0) sector |= 4;
    
    float t1, t2;
    switch (sector) {
        case 3:
            t1 = Z;
            t2 = Y;
            svpwm->sector = 1;
            break;
        case 1:
            t1 = Y;
            t2 = -X;
            svpwm->sector = 2;
            break;
        case 5:
            t1 = -X;
            t2 = Z;
            svpwm->sector = 3;
            break;
        case 4:
            t1 = -Z;
            t2 = -Y;
            svpwm->sector = 4;
            break;
        case 6:
            t1 = -Y;
            t2 = X;
            svpwm->sector = 5;
            break;
        case 2:
            t1 = X;
            t2 = -Z;
            svpwm->sector = 6;
            break;
        default:
            t1 = 0;
            t2 = 0;
            svpwm->sector = 1;
            break;
    }
    
    float Udc_norm = svpwm->Udc / 1.732f;
    float T1 = t1 * svpwm->Ts / Udc_norm;
    float T2 = t2 * svpwm->Ts / Udc_norm;
    float T0 = svpwm->Ts - T1 - T2;
    
    if (T0 < 0) {
        float scale = svpwm->Ts / (T1 + T2);
        T1 *= scale;
        T2 *= scale;
        T0 = 0;
    }
    
    float t1_norm = T1 / svpwm->Ts;
    float t2_norm = T2 / svpwm->Ts;
    float t0_norm = T0 / svpwm->Ts;
    
    switch (svpwm->sector) {
        case 1:
            svpwm->Ta = t0_norm/4 + t1_norm/2 + t2_norm/2;
            svpwm->Tb = t0_norm/4 + t2_norm/2;
            svpwm->Tc = t0_norm/4;
            break;
        case 2:
            svpwm->Ta = t0_norm/4 + t2_norm/2;
            svpwm->Tb = t0_norm/4 + t1_norm/2 + t2_norm/2;
            svpwm->Tc = t0_norm/4;
            break;
        case 3:
            svpwm->Ta = t0_norm/4;
            svpwm->Tb = t0_norm/4 + t1_norm/2 + t2_norm/2;
            svpwm->Tc = t0_norm/4 + t2_norm/2;
            break;
        case 4:
            svpwm->Ta = t0_norm/4;
            svpwm->Tb = t0_norm/4 + t2_norm/2;
            svpwm->Tc = t0_norm/4 + t1_norm/2 + t2_norm/2;
            break;
        case 5:
            svpwm->Ta = t0_norm/4 + t2_norm/2;
            svpwm->Tb = t0_norm/4;
            svpwm->Tc = t0_norm/4 + t1_norm/2 + t2_norm/2;
            break;
        case 6:
            svpwm->Ta = t0_norm/4 + t1_norm/2 + t2_norm/2;
            svpwm->Tb = t0_norm/4;
            svpwm->Tc = t0_norm/4 + t2_norm/2;
            break;
        default:
            svpwm->Ta = 0.5f;
            svpwm->Tb = 0.5f;
            svpwm->Tc = 0.5f;
            break;
    }
}

3.2 硬件PWM更新

3.2.1 PWM寄存器更新
复制代码
void Update_PWM(SVPWM_t *svpwm, uint32_t PWM_PERIOD)
{
    uint32_t ccr1 = (uint32_t)(svpwm->Ta * PWM_PERIOD);
    uint32_t ccr2 = (uint32_t)(svpwm->Tb * PWM_PERIOD);
    uint32_t ccr3 = (uint32_t)(svpwm->Tc * PWM_PERIOD);
    
    TIM1->CCR1 = ccr1;
    TIM1->CCR2 = ccr2;
    TIM1->CCR3 = ccr3;
}
3.2.2 死区时间设置
复制代码
void Set_Dead_Time(uint32_t dead_time_ns, uint32_t timer_clock_mhz)
{
    uint32_t dead_time_ticks = (dead_time_ns * timer_clock_mhz) / 1000;
    
    if (dead_time_ticks > 255) {
        dead_time_ticks = 255;
    }
    
    TIM1->BDTR &= ~TIM_BDTR_DTG;
    TIM1->BDTR |= dead_time_ticks;
}

四、SVPWM vs SPWM对比

🎯 本节重点:对比SVPWM和SPWM的优缺点,理解SVPWM的优势。

4.1 SPWM的基本原理

4.1.1 SPWM调制方法

SPWM(正弦脉宽调制)通过比较正弦调制波和三角载波生成PWM信号。

复制代码
        正弦调制波
             ╱╲      ╱╲
            ╱  ╲    ╱  ╲
           ╱    ╲  ╱    ╲
    ──────╱──────╲╱──────╲──────
         ╱        ╲      ╱
        ╱          ╲    ╱
       ╱            ╲  ╱
      ╱              ╲╱
     
           三角载波
      ╱╲  ╱╲  ╱╲  ╱╲  ╱╲
     ╱  ╲╱  ╲╱  ╲╱  ╲╱  ╲
    ╱                     
    
    PWM输出
    ████    ██████    ████
        ████      ████
4.1.2 SPWM的局限性
局限性 具体表现 影响
直流电压利用率低 最大输出电压为Udc/2 电机输出功率受限
谐波含量高 低次谐波丰富 电机发热、噪音大
动态性能差 无法实现最优调制 响应速度慢

4.2 SVPWM的优势

4.2.1 直流电压利用率高

SPWM

  • 最大输出相电压幅值:Udc/2

  • 最大线电压幅值:√3·Udc/2 ≈ 0.866·Udc

SVPWM

  • 最大输出相电压幅值:Udc/√3 ≈ 0.577·Udc

  • 最大线电压幅值:Udc

提升幅度

复制代码
提升比例 = Udc / (√3·Udc/2) = 2/√3 ≈ 1.155

即SVPWM的直流电压利用率比SPWM高15.5%。

4.2.2 谐波含量低

SPWM谐波分析

  • 主要谐波:载波频率及其倍频

  • 低次谐波:丰富

SVPWM谐波分析

  • 主要谐波:载波频率及其倍频

  • 低次谐波:少

对比结果

谐波指标 SPWM SVPWM 改善程度
THD(总谐波失真) 5-10% 3-6% 降低40%
低次谐波 显著改善
电流纹波 降低30%
4.2.3 动态性能好

响应速度

  • SPWM:调制波变化,PWM立即跟随

  • SVPWM:参考电压矢量变化,PWM立即跟随

控制精度

  • SPWM:开环调制,无反馈

  • SVPWM:可实现闭环控制

4.3 对比总结

对比项 SPWM SVPWM 优势方
直流电压利用率 86.6% 100% SVPWM
谐波含量 SVPWM
电流纹波 SVPWM
动态响应 一般 SVPWM
实现复杂度 简单 复杂 SPWM
计算量 SPWM
适用场景 低成本应用 高性能应用 各有优势

五、SVPWM的优化技术

🎯 本节重点:了解SVPWM的优化方法,提高性能。

5.1 过调制处理

5.1.1 过调制现象

当参考电压矢量幅值超过最大线性调制范围时,进入过调制区。

线性调制范围

  • 最大幅值:Udc/√3

  • 此时T0 = 0

过调制范围

  • 幅值:Udc/√3 ~ 2Udc/3

  • 需要特殊处理

5.1.2 过调制处理方法

方法一:截断法

复制代码
if (T0 < 0) {
    float scale = Ts / (T1 + T2);
    T1 *= scale;
    T2 *= scale;
    T0 = 0;
}

方法二:最小相位误差法

保持参考电压矢量方向不变,调整幅值:

复制代码
float Vref_max = Udc / sqrtf(3.0f);
float Vref = sqrtf(v_alpha * v_alpha + v_beta * v_beta);

if (Vref > Vref_max) {
    float scale = Vref_max / Vref;
    v_alpha *= scale;
    v_beta *= scale;
}

5.2 死区补偿

5.2.1 死区影响

死区时间会导致输出电压畸变,特别是在低速和低调制比时。

死区效应

  • 输出电压降低

  • 电流波形畸变

  • 转矩脉动增加

5.2.2 死区补偿方法

电流极性补偿法

复制代码
void Dead_Time_Compensation(float *v_alpha, float *v_beta, float i_alpha, float i_beta, 
                           float Udc, float T_dead)
{
    float V_comp = Udc * T_dead / Ts;
    
    if (i_alpha > 0) {
        *v_alpha += V_comp;
    } else {
        *v_alpha -= V_comp;
    }
    
    if (i_beta > 0) {
        *v_beta += V_comp;
    } else {
        *v_beta -= V_comp;
    }
}

5.3 同步调制

5.3.1 同步调制原理

使载波频率与调制波频率保持整数倍关系,消除拍频现象。

实现方法

复制代码
void Synchronous_Modulation(float freq_mod, float freq_carrier_ratio)
{
    float freq_carrier = freq_mod * freq_carrier_ratio;
    
    TIM1->PSC = (uint32_t)(SystemCoreClock / freq_carrier / PWM_PERIOD - 1);
}

六、SVPWM的仿真验证

🎯 本节重点:通过仿真验证SVPWM算法的正确性。

6.1 MATLAB/Simulink仿真

6.1.1 仿真模型
复制代码
┌──────────────────────────────────────────────────────┐
│                                                      │
│  ┌─────────┐    ┌─────────┐    ┌─────────┐         │
│  │ 参考电压 │──→│  SVPWM  │──→│ 三相逆变器│──→ 电机 │
│  │  生成器  │    │  算法   │    │         │         │
│  └─────────┘    └─────────┘    └─────────┘         │
│                                                      │
└──────────────────────────────────────────────────────┘
6.1.2 仿真参数
参数 数值
直流母线电压 300V
PWM频率 10kHz
参考电压幅值 150V
参考电压频率 50Hz
6.1.3 仿真结果

相电压波形

复制代码
  200V ┤     ╱╲      ╱╲      ╱╲
       │    ╱  ╲    ╱  ╲    ╱  ╲
    0V ┼───╱────╲──╱────╲──╱────╲───
       │  ╱      ╲╱      ╲╱      ╲
 -200V ┤ ╱

线电压波形

复制代码
  300V ┤     ╱╲      ╱╲      ╱╲
       │    ╱  ╲    ╱  ╲    ╱  ╲
    0V ┼───╱────╲──╱────╲──╱────╲───
       │  ╱      ╲╱      ╲╱      ╲
 -300V ┤ ╱

6.2 实验验证

6.2.1 实验平台

硬件配置

  • 主控芯片:STM32F405

  • 功率模块:IPM模块

  • 直流电源:300V

  • 电机:PMSM,额定功率1kW

软件配置

  • PWM频率:10kHz

  • 死区时间:2μs

  • 控制周期:100μs

6.2.2 实验结果
测试项目 理论值 实测值 误差
相电压幅值 150V 148V 1.3%
线电压幅值 260V 257V 1.2%
THD <5% 4.2% -
效率 >95% 96.2% -

七、总结与思考

7.1 本章要点总结

通过本章的学习,我们掌握了以下关键知识:

  1. SVPWM的基本原理

    • 电压空间矢量的概念

    • 8个基本电压矢量

    • 矢量合成原理

  2. 扇区判断与时间计算

    • 六扇区划分方法

    • 矢量作用时间计算

    • 占空比计算

  3. SVPWM的完整实现

    • 完整的算法流程

    • 代码实现

    • 硬件PWM更新

  4. SVPWM vs SPWM对比

    • SVPWM的优势:高电压利用率、低谐波

    • SPWM的优势:实现简单

  5. SVPWM的优化技术

    • 过调制处理

    • 死区补偿

    • 同步调制

7.2 思考题

  1. 思考题1:SVPWM为什么能够提高直流电压利用率?其物理本质是什么?

  2. 思考题2:如何选择零矢量V0和V7?选择不同的零矢量有什么影响?

  3. 思考题3:死区时间对SVPWM输出有什么影响?如何补偿?

  4. 思考题4:在过调制区,SVPWM的性能会如何变化?如何处理?

  5. 思考题5:SVPWM的开关频率如何选择?对性能有什么影响?

7.3 下章预告

在下一篇文章中,我们将深入学习PID控制与参数整定,包括:

  • PID控制原理:比例、积分、微分

  • FOC的双闭环控制架构:电流环与速度环

  • 电流环设计:PI参数计算与整定

  • 速度环设计:PI参数计算与整定

  • 抗积分饱和策略

通过下一章的学习,您将掌握PID控制器设计,理解FOC的双闭环控制策略。


参考文献

  1. Hava, A. M., Kerkman, R. J., & Lipo, T. A., "Carrier-based PWM-VSI overmodulation strategies: analysis, comparison, and design", IEEE Transactions on Power Electronics, 1998

  2. Zhou, K., & Wang, D., "Relationship between space-vector modulation and three-phase carrier-based PWM: a comprehensive analysis", IEEE Transactions on Industrial Electronics, 2002

  3. Holtz, J., "Pulsewidth modulation for electronic power conversion", Proceedings of the IEEE, 1994

  4. Bose, B. K., "Modern Power Electronics and AC Drives", Prentice Hall, 2002

  5. 李永东, 《交流电机数字控制系统》, 机械工业出版社, 2002

推荐阅读

  1. 《现代永磁同步电机控制原理及MATLAB仿真》- 袁雷

  2. 《电力拖动自动控制系统》- 阮毅

  3. 《电机控制技术》- 王成元

  4. 《电力电子技术》- 王兆安


作者寄语: SVPWM是FOC算法中连接控制算法和硬件驱动的桥梁,务必扎实掌握。建议读者自己动手编写代码,并在实际硬件上验证,这样才能真正理解。下一章我们将学习PID控制与参数整定,这是实现高性能控制的关键技术。

相关推荐
木子n15 小时前
FOC电机控制算法实战指南:从理论到工程实
电机控制·foc
木子n17 小时前
第2篇:坐标变换与数学基础:FOC算法的核心数学工具
算法·电机控制·foc
jdhfusk7 天前
foc进阶篇3——对比PLL测速,为M法加低通正名
foc·低通滤波·速度环·m法测速·pll锁相环
Wallace Zhang9 天前
SimpleFOC源码学习02(v2.3.2) - 低通滤波器lowpass_filter.cpp与lowpass_filter.h
foc
Wallace Zhang9 天前
SimpleFOC源码学习04(v2.3.2) - 数学基础层foc_utils.cpp与foc_utils.h
foc
Wallace Zhang10 天前
SimpleFOC源码学习00(v2.3.2) - 源码版本说明
foc
Wallace Zhang10 天前
SimpleFOC源码学习01(v2.3.2) - PID控制器PID.cpp与PID.h
foc
小白zlm12 天前
预畸变双线性变换
单片机·嵌入式硬件·算法·电机控制
小白zlm13 天前
连续系统-离散系统的转换
算法·嵌入式·电机控制·pmsm