📌 本文导读: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个基本电压矢量,合成任意方向和大小的参考电压矢量。
实现方法:
-
根据参考电压矢量的角度,判断所在扇区
-
选择相邻的两个非零矢量
-
计算两个非零矢量的作用时间
-
加入零矢量,使总时间等于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 本章要点总结
通过本章的学习,我们掌握了以下关键知识:
-
SVPWM的基本原理:
-
电压空间矢量的概念
-
8个基本电压矢量
-
矢量合成原理
-
-
扇区判断与时间计算:
-
六扇区划分方法
-
矢量作用时间计算
-
占空比计算
-
-
SVPWM的完整实现:
-
完整的算法流程
-
代码实现
-
硬件PWM更新
-
-
SVPWM vs SPWM对比:
-
SVPWM的优势:高电压利用率、低谐波
-
SPWM的优势:实现简单
-
-
SVPWM的优化技术:
-
过调制处理
-
死区补偿
-
同步调制
-
7.2 思考题
-
思考题1:SVPWM为什么能够提高直流电压利用率?其物理本质是什么?
-
思考题2:如何选择零矢量V0和V7?选择不同的零矢量有什么影响?
-
思考题3:死区时间对SVPWM输出有什么影响?如何补偿?
-
思考题4:在过调制区,SVPWM的性能会如何变化?如何处理?
-
思考题5:SVPWM的开关频率如何选择?对性能有什么影响?
7.3 下章预告
在下一篇文章中,我们将深入学习PID控制与参数整定,包括:
-
PID控制原理:比例、积分、微分
-
FOC的双闭环控制架构:电流环与速度环
-
电流环设计:PI参数计算与整定
-
速度环设计:PI参数计算与整定
-
抗积分饱和策略
通过下一章的学习,您将掌握PID控制器设计,理解FOC的双闭环控制策略。
参考文献:
-
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
-
Zhou, K., & Wang, D., "Relationship between space-vector modulation and three-phase carrier-based PWM: a comprehensive analysis", IEEE Transactions on Industrial Electronics, 2002
-
Holtz, J., "Pulsewidth modulation for electronic power conversion", Proceedings of the IEEE, 1994
-
Bose, B. K., "Modern Power Electronics and AC Drives", Prentice Hall, 2002
-
李永东, 《交流电机数字控制系统》, 机械工业出版社, 2002
推荐阅读:
-
《现代永磁同步电机控制原理及MATLAB仿真》- 袁雷
-
《电力拖动自动控制系统》- 阮毅
-
《电机控制技术》- 王成元
-
《电力电子技术》- 王兆安
作者寄语: SVPWM是FOC算法中连接控制算法和硬件驱动的桥梁,务必扎实掌握。建议读者自己动手编写代码,并在实际硬件上验证,这样才能真正理解。下一章我们将学习PID控制与参数整定,这是实现高性能控制的关键技术。