步骤
参考电压的生成:
function Uref = volt(ua,ub,uc)
Uref=(2/3)*(ua+ub*exp(1i*2*pi/3)+uc*exp(-1i*2*pi/3)); %参考矢量
用参考电压求出幅值和相角,然后将相角的范围从-pi~pi转化到0~2*pi。
扇区的选择
先落到大扇区,再落到小扇区,在小扇区里面计算落到哪个小扇区,然后我们要知道每个小扇区对应的矢量作用时间,这些矢量作用时间知道以后我们开始分配,分配的区段是t1,t2,t3,那么我们的TA,TB,TC怎么放到t1,t2,t3当中又存在一个时间逻辑的问题,时间逻辑确定了之后,我们就可以把TA,TB,TC放到t1,t2,t3当中。然后我们再进行分配,抽取每一个矢量状态,分配到里面,我们就可以知道具体是怎么生成调制波的。
大扇区判断代码
function [N,theta] = BigvectorSwitch(u) %只需要输入相角u,也就是这个角度
% 公式: S=ceil(theta/60),beta=theta-60(S-1)
%投入到第一大扇区里面
N=0;
theta=0;
thetaset=ceil(u*3/pi);
u1=u;
u2=u-pi/3;
u3=u-2*pi/3;
u4=u-pi;
u5=u-4*pi/3;
u6=u-5*pi/3;
%以上得到0~2*pi的范围
%当我们要映射回到-pi~pi时,
if(thetaset==1)
theta=u1;
N=4;
end
if(thetaset==2)
theta=u2;
N=5;
end
if(thetaset==3)
theta=u3;
N=6;
end
if(thetaset==4)
theta=u4;
N=1;
end
if(thetaset==5)
theta=u5;
N=2; %例如:(90+180)/60=4.5≈5,即thetaset=5,但实际区间在第二扇区
end
if(thetaset==6)
theta=u6;
N=3;
end
输出的是第几大扇区以及具体的角度值
ceil()函数的实质
其实该函数就是表示向上取整的意思,在数学中用符号“⌈ ⌉”来表示
小扇区判断
小扇区的判断,根据几何关系就可以列出小扇区判断的条件。
function n = SmallvectorSwitch(m,theta) %需要输入m(调制比),角度theta
LBD=-0.5+m*sin(theta);
LAB=sqrt(3)*m*cos(theta)+m*sin(theta)-1;
LAD=-sqrt(3)*m*cos(theta)+m*sin(theta)+1;
if(theta<=pi/6)
if(LAB<=0)
n=1;
elseif(LAD<=0)
n=5;
else
n=3;
end
else
if(LAB<0)
n=2;
elseif(LBD>=0)
n=6;
else
n=4;
end
end
其中小扇区的判断,输入的是调制比和角度theta,输出n,即第几小扇区
时间的计算
由于六大扇区可以通过旋转关系相互等效,因此它们每个小扇区的时间计算都是一样的,只需根据每个大扇区中的小扇区各自的矢量作用顺序适当的调整对应时间的顺序即可。
function [TA,TB,TC] =vectortime(n,m,Ts,theta) %需要输入小扇区,m(调制比),周期,角度theta
TA=0;
TB=0;
TC=0;
if(n==1||n==2)
TA=2*m*Ts*sin(theta);
TB=Ts(1-2*m*sin(pi/3+theta));
TC=2*m*Ts*sin(pi/3-theta);
end
if(n==3||n==4)
TA=Ts*(1-2*m*sin(theta));
TB=Ts*(2*m*sin(pi/3+theta)-1);
TC=Ts*(1-2*m*sin(pi/3-theta));
end
if(n==5)
TA=2*m*Ts*sin(theta);
TB=2*Ts*(1-m*sin(pi/3+theta));
TC=Ts*(2*m*sin(pi/3-theta)-1);
end
if(n==6)
TA=Ts*(2*m*sin(theta)-1);
TB=2*Ts*(1-m*sin(pi/3+theta));
TC=Ts*2*m*sin(pi/3-theta);
end
问:为什么要输入调制比呢?
答: 因为使用调制比可以替代参考函数,并且可以根据调制比来改变不同的调制波。
由于1和2小扇区在同一个矢量三角形中,同理3和4;5,6是单独的用一组矢量
根据伏秒平衡方程可以求出这四种中状态下的TA,TB,TC。
七段式分配
12个为一个周期
逻辑分配
上半周期时间逻辑
function [t1,t2,t3] =timeshare(TA,TB,TC,n)
t1=0;
t2=0;
t3=0;
%查表
if(n==1)
t1=TC;
t2=TA;
t3=TB;
end
if(n==2)
t1=TA;
t2=TB;
t3=TC;
end
if(n==3)
t1=TA;
t2=TC;
t3=TB;
end
if(n==4)
t1=TC;
t2=TB;
t3=TA;
end
if(n==5)
t1=TB;
t2=TC;
t3=TA;
end
if(n==6)
t1=TB;
t2=TC;
t3=TA;
end
下半周期时间逻辑
function [t1,t2,t3] =timeshare(TA,TB,TC,n)
t1=0;
t2=0;
t3=0;
if(n==1)
t1=TC;
t2=TB;
t3=TA;
end
if(n==2)
t1=TA;
t2=TC;
t3=TB;
end
if(n==3)
t1=TA;
t2=TB;
t3=TC;
end
if(n==4)
t1=TC;
t2=TA;
t3=TB;
end
if(n==5)
t1=TB;
t2=TA;
t3=TC;
end
if(n==6)
t1=TB;
t2=TA;
t3=TC;
end
问:为什么要这样做呢?
答:以第一大扇区第一小扇区为例:
同理其他扇区也是如此,这样就可以找到对应的时间逻辑。T1,T2,T3是固定的位置,里面可以放不同的时间。
按羊角波分配
马鞍波和羊角波的不同,是因为在时间段上的分配不同。
对于onn这个状态来说,它是按照开关状态来分配的,分配到开关管中,三个状态形成一个矢量如:oon,现在我们把它们分别抽出来。例如:oon,可以抽为 ”o" , "o", "n",这三种状态。p=1,n=-1,o=0.按照时间分配,就可以得到每个开关管导通和关闭的时间。
%%羊角波分配上半部分
function [t11,t21,t31] =switchtime(n,T1,T2,T3)
t11=0;
t21=0;
t31=0;
if(n==1)
t11=T1/2;
t21=-T1/2;
t31=-T1/2-T2;
end
if(n==2)
t11=T1/2+T3;
t21=T1/2;
t31=-T1/2;
end
if(n==3)
t11=T1/2+T3;
t21=-T1/2;
t31=-T1/2-T2-T3;
end
if(n==4)
t11=T1/2+T2+T3;
t21=T1/2;
t31=-T1/2-T2;
end
if(n==5)
t11=T1/2+T2+T3;
t21=-T1/2-T2;
t31=-T1/2-T2-T3;
end
if(n==6)
t11=T1/2+T2+T3;
t21=T1/2+T3;
t31=-T1/2-T2-T3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%下半部分
function [t11,t21,t31] =switchtime(n,T1,T2,T3)
t11=0;
t21=0;
t31=0;
if(n==1)
t11=T1/2;
t21=T1/2+T3;
t31=-T1/2;
end
if(n==2)
t11=-T1/2;
t21=T1/2;
t31=-T1/2-T2;
end
if(n==3)
t11=T1/2;
t21=T1/2+T2+T3;
t31=-T1/2-T2;
end
if(n==4)
t11=-T1/2;
t21=T1/2+T3;
t31=-T1/2-T2-T3;
end
if(n==5)
t11=T1/2+T3;
t21=T1/2+T2+T3;
t31=-T1/2-T2-T3;
end
if(n==6)
t11=-T1/2-T2;
t21=T1/2+T3+T2;
t31=-T1/2-T2-T3;
end
顺序交叉
依次类推,我们可以得到12个规律周期
1,3,5相同,3,5与1交叉顺序
2,4,6相同,6,4与2交叉顺序
例如:第三扇区
function [YJA,YJB,YJC] =switchtime(N,t11,t12,t13,t21,t22,t23)
YJA=0;
YJB=0;
YJC=0;
if(N==1)
YJA=t11;
YJB=t12;
YJC=t13;
end
if(N==2)
YJA=t21;
YJB=t22;
YJC=t23;
end
if(N==3)
YJA=t13;
YJB=t11;
YJC=t12;
end
if(N==4)
YJA=t23;
YJB=t21;
YJC=t22;
end
if(N==5)
YJA=t12;
YJB=t13;
YJC=t11;
end
if(N==6)
YJA=t22;
YJB=t23;
YJC=t21;
end
整体仿真框图
仿真图结果:
注:
仿真周期Ts=1/20000; 电源的幅值是0.8,频率是100*pi(因为基频是50MHz);采样时间:1e-6