📄 svpwm.m
字号:
%SVPWM
%author:gengtao
%date:2008.8.8
%version:1.0
function CMPR=svpwm(ualfa,ubeta)
global ts udc_ref;
%在IF语句中出现的变量必须赋初值
persistent T1on T2on T3on t1 t2 sectorNO;
if isempty(T1on)|isempty(T2on)|isempty(T3on)|isempty(t1)|isempty(t2)|isempty(sectorNO)
T1on=0;
T2on=0;
T3on=0;
t1=0;
t2=0;
sectorNO=0;
end
%#################################
%sectorNO 3(0 30')->1->5->4->6->2->3
%#################################
if ubeta>0
a=1;
else a=0;
end
if sqrt(3)*ualfa-ubeta>0
b=1;
else b=0;
end
if -sqrt(3)*ualfa-ubeta>0
c=1;
else c=0;
end
sectorNO=a+2*b+4*c;
%#################################
%
%#################################
x=sqrt(3)*ubeta*ts/udc_ref;
y=(1.5*ualfa+sqrt(3)/2*ubeta)*ts/udc_ref;
z=(-1.5*ualfa+sqrt(3)/2*ubeta)*ts/udc_ref;
%#################################
%voltage vector on time
%#################################
switch sectorNO
case 3
t1=-z;
t2=x;
case 1
t1=z;
t2=y;
case 5
t1=x;
t2=-y;
case 4
t1=-x;
t2=z;
case 6
t1=-y;
t2=-z;
case 2
t1=y;
t2=-x;
end
%#################################
%pwm timer value
%#################################
%饱和判断
if ts-t1-t2<0
t1=ts*t1/(t1+t2);
t2=ts-t1;
end
ta=(ts-t1-t2)/4;
tb=ta+t1/2;
tc=tb+t2/2;
switch sectorNO
case 3
T1on=ta;
T2on=tb;
T3on=tc;
case 1
T1on=tb;
T2on=ta;
T3on=tc;
case 5
T1on=tc;
T2on=ta;
T3on=tb;
case 4
T1on=tc;
T2on=tb;
T3on=ta;
case 6
T1on=tb;
T2on=tc;
T3on=ta;
case 2
T1on=ta;
T2on=tc;
T3on=tb;
end
CMPR=[T1on T2on T3on];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -