SVPWM羊角波仿真搭建

文章详细描述了一种电力系统中利用参考电压、调制比和相角进行矢量分配的方法,包括大扇区和小扇区的判断、时间逻辑计算以及不同波形的分配,以生成调制波并应用于仿真中。
摘要由CSDN通过智能技术生成

步骤

参考电压的生成:

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

  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值