异步电机直接转矩控制电压空间矢量选择

S-Function

function [sys,x0,str,ts] = switch_U(t,x,u,flag)

switch flag

  case 0
    [sys,x0,str,ts]=mdlInitializeSizes;


  case 3
    sys=mdlOutputs(t,x,u);

  case {1,2,4,9}
    sys=[];

  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end


%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 6;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);

x0  = [];

str = [];
ts  = [0 0];

% end mdlInitializeSizes


%
%=============================================================================
% mdlOutputs
% 计算输出
%=============================================================================
%
function sys=mdlOutputs(t,x,u)

if(u(1)==1&&u(2)==1)
    k=1;
elseif(u(1)==1&&u(2)==0)
    k=2;
elseif(u(1)==0&&u(2)==1)
    k=3;
elseif(u(1)==0&&u(2)==0)
    k=4;
end

switch u(3)
    case 1
    if(k==1)
        sa=1;
        sb=1;
        sc=0;
    elseif(k==2)
        sa=1;
        sb=0;
        sc=1;
    elseif(k==3)
        sa=0;
        sb=1;
        sc=0;
    elseif(k==4)
        sa=0;
        sb=0;
        sc=1;
    end
    
     case 2
     if(k==1)
        sa=0;
        sb=1;
        sc=0;
     elseif(k==2)
        sa=1;
        sb=0;
        sc=0;
     elseif(k==3)
         sa=0;
         sb=1;
         sc=1;
     elseif(k==4)
        sa=1;
        sb=0;
        sc=1;
     end
   
    case 3
     if(k==1)
        sa=0;
        sb=1;
        sc=1;
     elseif(k==2)
        sa=1;
        sb=1;
        sc=0;
     elseif(k==3)
        sa=0;
        sb=0;
        sc=1;
     elseif(k==4)
            sa=1;
            sb=0;
            sc=0;
     end  
    
     case 4
    if(k==1)
     sa=0;
     sb=0;
     sc=1;
    elseif(k==2)
        sa=0;
        sb=1;
        sc=0;
    elseif(k==3)
        sa=1;
        sb=0;
        sc=1;
     elseif(k==4)
            sa=1;
            sb=1;
            sc=0;
    end
     
    case 5
    if(k==1)
     sa=1;
     sb=0;
     sc=1;
    elseif(k==2)
        sa=0;
        sb=1;
        sc=1;
    elseif(k==3)
        sa=1;
        sb=0;
        sc=0;
   elseif(k==4)
       sa=0;
       sb=1;
       sc=0;
    end
    
    case 6
    if(k==1)
     sa=1;
     sb=0;
     sc=0;
    elseif(k==2)
        sa=0;
        sb=0;
        sc=1;
    elseif(k==3)
        sa=1;
        sb=1;
        sc=0;
    elseif(k==4)
            sa=0;
            sb=1;
            sc=1;
    end
end


if(sa==1)
    a1=1;
    a2=0;
elseif(sa==0)
    a1=0;
    a2=1;
end

if(sb==1)
    b1=1;
    b2=0;
elseif(sb==0)
    b1=0;
    b2=1;
end

if(sc==1)
    c1=1;
    c2=0;
elseif(sc==0)
    c1=0;
    c2=1;
end

sys=[a1;a2;b1;b2;c1;c2];
% end mdlOutputs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值