在交流电机控制领域,空间矢量脉宽调制(SVPWM)技术因其出色的性能表现,已成为现代电机驱动系统的核心调制方法。这项技术最早由日本学者在20世纪80年代提出,经过数十年的发展完善,如今已广泛应用于工业变频器、伺服驱动和新能源汽车电控系统等领域。
与传统SPWM(正弦脉宽调制)相比,SVPWM具有三个显著优势:
从物理本质来看,SVPWM技术创造性地将三相电压系统视为一个整体空间矢量,通过逆变器的六个有效开关状态(非零矢量)和两个零开关状态(零矢量),在复平面上合成任意角度和幅值的电压矢量。这种独特的调制方式使得电机能够获得近似圆形的旋转磁场,大幅提升了驱动系统的动态响应和能效表现。
理解SVPWM需要从三相系统的空间矢量表示开始。假设三相电压分别为u_a、u_b、u_c,根据Clarke变换原理,我们可以将其转换为两相静止坐标系(α-β坐标系)下的分量:
code复制U_α = u_a - 0.5*u_b - 0.5*u_c
U_β = (sqrt(3)/2)*u_b - (sqrt(3)/2)*u_c
在复平面上,空间电压矢量可以表示为:
code复制U_out = U_α + jU_β = (2/3)(u_a + u_b*e^(j2π/3) + u_c*e^(j4π/3))
这个变换中的2/3系数保证了变换前后功率守恒。值得注意的是,虽然幅值保持不变,但采用2/3变换后,相电压峰值将等于直流母线电压的1/√3倍,这解释了为什么SVPWM能获得更高的电压利用率。
典型的三相两电平逆变器由六个功率开关管组成,每个桥臂有上下两个开关状态。定义上管导通为"1",下管导通为"0",则三相逆变器共有8种开关组合(2^3=8),对应8个基本空间矢量:
| 开关状态 | 矢量类型 | 幅值 | 角度 |
|---|---|---|---|
| 000 | 零矢量 | 0 | - |
| 100 | 非零矢量 | 2/3*U_dc | 0° |
| 110 | 非零矢量 | 2/3*U_dc | 60° |
| 010 | 非零矢量 | 2/3*U_dc | 120° |
| 011 | 非零矢量 | 2/3*U_dc | 180° |
| 001 | 非零矢量 | 2/3*U_dc | 240° |
| 101 | 非零矢量 | 2/3*U_dc | 300° |
| 111 | 零矢量 | 0 | - |
这6个非零矢量将复平面均匀划分为6个60°的扇区,构成了SVPWM调制的基础框架。在实际应用中,我们通过快速切换这些基本矢量来合成所需的任意方向和大小的电压矢量。
实现SVPWM的第一步是确定目标电压矢量所在的扇区。这里介绍一种高效的数字判断方法:
计算三个中间变量:
code复制V_ref1 = U_β
V_ref2 = (√3/2)*U_α - (1/2)*U_β
V_ref3 = -(√3/2)*U_α - (1/2)*U_β
通过符号判断生成标志位:
code复制A = (V_ref1 > 0) ? 1 : 0
B = (V_ref2 > 0) ? 1 : 0
C = (V_ref3 > 0) ? 1 : 0
计算扇区编号:
code复制N = A + 2*B + 4*C
得到的N值对应关系如下表所示:
| N值 | 实际扇区 |
|---|---|
| 3 | I |
| 1 | II |
| 5 | III |
| 4 | IV |
| 6 | V |
| 2 | VI |
实际编程时需要注意,不同文献对扇区编号的定义可能不同,建议通过仿真验证判断逻辑的正确性。
确定扇区后,需要计算相邻两个非零矢量的作用时间。以扇区I为例,目标矢量由U4(100)和U6(110)合成:
根据伏秒平衡原理:
code复制U_out*Ts = U4*T4 + U6*T6
分解到α-β轴得到:
code复制T4 = (√3*Ts/Udc)*(√3*U_α - U_β)
T6 = (√3*Ts/Udc)*U_β
为简化计算,通常先计算三个中间变量:
code复制X = (√3*Ts/Udc)*U_β
Y = (√3*Ts/Udc)*(√3/2*U_α + 1/2*U_β)
Z = (√3*Ts/Udc)*(-√3/2*U_α + 1/2*U_β)
各扇区的作用时间分配如下表:
| 扇区 | T1 | T2 |
|---|---|---|
| I | -Z | X |
| II | Z | Y |
| III | X | -Y |
| IV | -X | Z |
| V | Y | -Z |
| VI | -Y | -X |
当T1+T2>Ts时,需要进行过调制处理:
code复制T1 = T1/(T1+T2)*Ts
T2 = T2/(T1+T2)*Ts
零矢量作用时间:
code复制T0 = T7 = (Ts - T1 - T2)/2
为减小开关损耗和电流谐波,通常采用七段式对称发波模式。以扇区I为例:
计算三个关键时间点:
code复制Ta = T0/2
Tb = Ta + T4/2
Tc = Tb + T6/2
将这三个时间点分配给三相PWM比较寄存器,不同扇区的分配规则如下:
| 扇区 | CMP1 | CMP2 | CMP3 |
|---|---|---|---|
| I | Ta | Tb | Tc |
| II | Tb | Ta | Tc |
| III | Tc | Ta | Tb |
| IV | Tc | Tb | Ta |
| V | Tb | Tc | Ta |
| VI | Ta | Tc | Tb |
在实际MCU编程中,需要根据PWM模块的工作模式(中央对齐或边沿对齐)进行适当调整。现代32位电机控制专用MCU(如STM32F3/F4系列)通常都内置了硬件SVPWM生成单元,可以大大简化软件实现难度。
在实际硬件中,为防止上下管直通必须插入死区时间,这会导致输出电压损失。补偿方法包括:
死区时间通常设置在500ns-1μs之间,具体值需要根据开关管特性确定。
波形畸变:
电流噪声大:
电机振动:
当目标电压矢量接近六边形边界时,可采用过调制策略进一步提高电压利用率。常用方法包括:
对于三电平逆变器,SVPWM算法更为复杂但能获得更好的波形质量。关键改进包括:
将模型预测控制(MPC)与SVPWM结合,可以进一步优化动态性能。这种方法通过在线优化选择最佳开关状态,但计算量较大。
建议通过以下步骤验证SVPWM实现效果:
开环测试:
带载测试:
长期运行测试:
在实际项目中,我通常会先用MATLAB/Simulink搭建仿真模型验证算法正确性,然后再移植到实际硬件平台。这种方法可以大幅降低开发风险。