SVPWM控制是一种控制三相交流电机的方法,它可以实现高效、精确的控制。由于它具有快速响应、低噪声、高精度等特点,在工业控制、船舶、风力发电、太阳能发电、新能源汽车等领域得到了广泛的应用。以下是一些应用领域:
**1. ** 变频空调 : SVPWM控制可以降低功率因数,提高空气质量,节约能源。
2. 电动船和潜水 器: SVPWM控制可以通过改变电机转速来改变船或潜水器的速度和方向。
3. 风力发电系统: SVPWM控制可以将变频器输出的直流电转换为交流电,以控制发电机的转速和输出功率。
4. 太阳能发电系统: SVPWM控制可以优化光伏逆变器的输出,最大限度地提高太阳能电池板的能量利用效率。
5. 汽车电动驱动系统: SVPWM控制可以提高电驱动车辆的性能和节能效果,使其具有更好的加速性能和更长的续航里程。
总之,SVPWM控制在许多工业领域和新兴领域都具有广泛的应用前景,其高效、精确的控制特性使其成为一种技术上先进的控制方法。
下面是一份基于MATLAB的SVPWM程序代码:
function [v1, v2, v3] = svpwm(theta, va, vb, vc)
% theta:当前时刻的角度值
% va, vb, vc:三相电压值
% 转换输入电压为ab、bc、ca轴正向电压值
va_b = -0.5 * va + 0.5 * sqrt(3) * vb;
va_c = -0.5 * va - 0.5 * sqrt(3) * vb;
vb_c = sqrt(3) * vc;
% 计算电压矢量的幅值和角度
Vmax = max([va_b va_c vb_c]); % 电压矢量的最大幅值
theta_tilda = pi/3; % 电压/电流星型转换因子
tau = theta_tilda - mod(theta, theta_tilda); % 计算角度离竖直线顶点的偏差
Vm_alpha = Vmax * sin(tau/2); % 电压矢量在alpha轴上的投影
Vm_beta = Vmax * cos(tau/2); % 电压矢量在beta轴上的投影
phi = acos(Vm_alpha / Vmax); % 电压矢量与alpha轴的夹角
% 根据所处的扇区计算PWM信号
if (phi < pi/6)
T1 = Vm_alpha / sin(phi);
T2 = Vm_beta / sin(pi/3 - phi);
v1 = 0.5 * (T1 + T2);
v2 = 0.5 * (T1 - T2);
v3 = -v1 - v2;
elseif (phi < pi/3)
T1 = Vm_beta / sin(phi);
T2 = Vm_alpha / sin(pi/3 - phi);
v1 = 0.5 * (T2 - T1);
v2 = 0.5 * (T2 + T1);
v3 = -v1 - v2;
else
v1 = Vmax / sqrt(3);
v2 = Vmax / sqrt(3);
v3 = Vmax / sqrt(3);
end
这段代码中,theta是当前时刻的角度值,va、vb、vc是三相电压值。首先通过对输入电压的正向投影获得各轴正向电压值,然后计算电压矢量的幅值和角度,根据所处的扇区计算PWM信号,并最终得到输出的电压值v1、v2和v3。需要注意的是,在扇区一和二中,存在一个机电转动角度(受跨越VRT变化的影响),需要在程序中进行补偿。
以下是一份基于TMS320F28035的SVPWM程序代码:
//--------------------------------- Include Files ---------------------------------
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include
//--------------------------------- Definitions ---------------------------------
#define Fsw 10000 // SVPWM Switching Frequency (Hz)
#define Vdc 24.0 // DC Bus Voltage (V)
#define PI 3.141592 // Pi Value
//--------------------------------- Global Variables ------------------------------
float Va_REF = 0.0;
float Vb_REF = 0.0;
float Vc_REF = 0.0;
float theta_elec = 0.0;
Uint16 SVPWM_Trip = 0;
//-------------------------------- Function Prototypes -----------------------------
void SVPWM(void);
interrupt void epwm1_isr(void);
//----------------------------------- Main Routine --------------------------------
void main(void)
{
// Initialize system variables
InitSysCtrl();
InitPieCtrl();
//Enable CPU interrupts
DINT;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT = &epwm1_isr; //Assign ISR address to vector
EDIS;