level 1
贴吧用户_QtEU8R5
楼主
我做的是永磁同步电机的直接转矩控制,在最后一部分要选择合适的三相逆变桥的各个IGBT的通断,我用全用的if else语句来进行选择的。源程序如下:
function [Ua,Ub,Uc] = table(Te,xitas,xitar,ciliangeiding)
if ciliangeiding==0 && Te==1 && 0<=xitas<pi/3
Ua=0
Ub=1
Uc=0
else if ciliangeiding==0 && Te==1 && pi/3<=xitas<2*pi/3
Ua=0
Ub=1
Uc=1
else if ciliangeiding==0 && Te==1 && 2*pi/3<=xitas<pi
Ua=0
Ub=0
Uc=1
else if ciliangeiding==0 && Te==1 && pi<=xitas<4*pi/3
Ua=1
Ub=0
Uc=1
else if ciliangeiding==0 && Te==1 && 4*pi/3<=xitas<5*pi/3
Ua=1
Ub=0
Uc=0
else if ciliangeiding==0 && Te==1 && 5*pi/3<=xitas<6*pi/3
Ua=1
Ub=1
Uc=0
else if ciliangeiding==0 && Te==0 && 0<=xitas<pi/3
Ua=0
Ub=1
Uc=1
else if ciliangeiding==0 && Te==0 && pi/3<=xitas<2*pi/3
Ua=0
Ub=0
Uc=1
else if ciliangeiding==0 && Te==0 && 2*pi/3<=xitas<pi
Ua=1
Ub=0
Uc=1
else if ciliangeiding==0 && Te==0 && pi<=xitas<4*pi/3
Ua=1
Ub=0
Uc=0
else if ciliangeiding==0 && Te==0 && 4*pi/3<=xitas<5*pi/3
Ua=1
Ub=1
Uc=0
else if ciliangeiding==0 && Te==0 && 5*pi/3<=xitas<6*pi/3
Ua=0
Ub=1
Uc=0
else if ciliangeiding==0 && Te==-1 && 0<=xitas<pi/3
Ua=0
Ub=0
Uc=1
else if ciliangeiding==0 && Te==-1 && pi/3<=xitas<2*pi/3
Ua=1
Ub=0
Uc=1
else if ciliangeiding==0 && Te==-1 && 2*pi/3<=xitas<pi
Ua=1
Ub=0
Uc=0
else if ciliangeiding==0 && Te==-1 && pi<=xitas<4*pi/3
Ua=1
Ub=1
Uc=0
else if ciliangeiding==0 && Te==-1 && 4*pi/3<=xitas<5*pi/3
Ua=0
Ub=1
Uc=0
else if ciliangeiding==0 && Te==-1 && 5*pi/3<=xitas<6*pi/3
Ua=0
Ub=1
Uc=1
else if ciliangeiding==1 && Te==1 && (0<=xitar<pi/6 || 11*pi/6<=xitar<12*pi/6)
Ua=1
Ub=1
Uc=0
else if ciliangeiding==1 && Te==1 && pi/6<=xitar<pi/2
Ua=0
Ub=1
Uc=0
else if ciliangeiding==1 && Te==1 && pi/2<=xitar<5*pi/6
Ua=0
Ub=1
Uc=1
else if ciliangeiding==1 && Te==1 && 5*pi/6<=xitar<7*pi/6
Ua=0
Ub=0
Uc=1
else if ciliangeiding==1 && Te==1 && 7*pi/6<=xitar<9*pi/6
Ua=1
Ub=0
Uc=1
else if ciliangeiding==1 && Te==1 && 9*pi/6<=xitar<11*pi/6
Ua=1
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && (0<=xitar<pi/6 || 11*pi/6<=xitar<12*pi/6)
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && pi/6<=xitar<pi/2
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && pi/2<=xitar<5*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && 5*pi/6<=xitar<7*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && 7*pi/6<=xitar<9*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && 9*pi/6<=xitar<11*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==-1 && (0<=xitar<pi/6 || 11*pi/6<=xitar<12*pi/6)
Ua=0
Ub=0
Uc=1
else if ciliangeiding==1 && Te==-1 && pi/6<=xitar<3*pi/6
Ua=1
Ub=0
Uc=1
else if ciliangeiding==1 && Te==-1 && 3*pi/6<=xitar<5*pi/6
Ua=1
Ub=0
Uc=0
else if ciliangeiding==1 && Te==-1 && 5*pi/6<=xitar<7*pi/6
Ua=1
Ub=1
Uc=0
else if ciliangeiding==1 && Te==-1 && 7*pi/6<=xitar<9*pi/6
Ua=0
Ub=1
Uc=0
else ciliangeiding==1 && Te==-1 && 9*pi/6<=xitar<11*pi/6
Ua=0
Ub=1
Uc=1
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end

各个输入输出如系统图所示。现在的问题是怎么让每一次选择之后他的输出维持一个周期?还有就是在下一次输入波形到来的时候,如何让该程序再次从头开始执行?还有就是系统图这个报错怎么解决?
2020年09月26日 06点09分
1
function [Ua,Ub,Uc] = table(Te,xitas,xitar,ciliangeiding)
if ciliangeiding==0 && Te==1 && 0<=xitas<pi/3
Ua=0
Ub=1
Uc=0
else if ciliangeiding==0 && Te==1 && pi/3<=xitas<2*pi/3
Ua=0
Ub=1
Uc=1
else if ciliangeiding==0 && Te==1 && 2*pi/3<=xitas<pi
Ua=0
Ub=0
Uc=1
else if ciliangeiding==0 && Te==1 && pi<=xitas<4*pi/3
Ua=1
Ub=0
Uc=1
else if ciliangeiding==0 && Te==1 && 4*pi/3<=xitas<5*pi/3
Ua=1
Ub=0
Uc=0
else if ciliangeiding==0 && Te==1 && 5*pi/3<=xitas<6*pi/3
Ua=1
Ub=1
Uc=0
else if ciliangeiding==0 && Te==0 && 0<=xitas<pi/3
Ua=0
Ub=1
Uc=1
else if ciliangeiding==0 && Te==0 && pi/3<=xitas<2*pi/3
Ua=0
Ub=0
Uc=1
else if ciliangeiding==0 && Te==0 && 2*pi/3<=xitas<pi
Ua=1
Ub=0
Uc=1
else if ciliangeiding==0 && Te==0 && pi<=xitas<4*pi/3
Ua=1
Ub=0
Uc=0
else if ciliangeiding==0 && Te==0 && 4*pi/3<=xitas<5*pi/3
Ua=1
Ub=1
Uc=0
else if ciliangeiding==0 && Te==0 && 5*pi/3<=xitas<6*pi/3
Ua=0
Ub=1
Uc=0
else if ciliangeiding==0 && Te==-1 && 0<=xitas<pi/3
Ua=0
Ub=0
Uc=1
else if ciliangeiding==0 && Te==-1 && pi/3<=xitas<2*pi/3
Ua=1
Ub=0
Uc=1
else if ciliangeiding==0 && Te==-1 && 2*pi/3<=xitas<pi
Ua=1
Ub=0
Uc=0
else if ciliangeiding==0 && Te==-1 && pi<=xitas<4*pi/3
Ua=1
Ub=1
Uc=0
else if ciliangeiding==0 && Te==-1 && 4*pi/3<=xitas<5*pi/3
Ua=0
Ub=1
Uc=0
else if ciliangeiding==0 && Te==-1 && 5*pi/3<=xitas<6*pi/3
Ua=0
Ub=1
Uc=1
else if ciliangeiding==1 && Te==1 && (0<=xitar<pi/6 || 11*pi/6<=xitar<12*pi/6)
Ua=1
Ub=1
Uc=0
else if ciliangeiding==1 && Te==1 && pi/6<=xitar<pi/2
Ua=0
Ub=1
Uc=0
else if ciliangeiding==1 && Te==1 && pi/2<=xitar<5*pi/6
Ua=0
Ub=1
Uc=1
else if ciliangeiding==1 && Te==1 && 5*pi/6<=xitar<7*pi/6
Ua=0
Ub=0
Uc=1
else if ciliangeiding==1 && Te==1 && 7*pi/6<=xitar<9*pi/6
Ua=1
Ub=0
Uc=1
else if ciliangeiding==1 && Te==1 && 9*pi/6<=xitar<11*pi/6
Ua=1
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && (0<=xitar<pi/6 || 11*pi/6<=xitar<12*pi/6)
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && pi/6<=xitar<pi/2
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && pi/2<=xitar<5*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && 5*pi/6<=xitar<7*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && 7*pi/6<=xitar<9*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==0 && 9*pi/6<=xitar<11*pi/6
Ua=0
Ub=0
Uc=0
else if ciliangeiding==1 && Te==-1 && (0<=xitar<pi/6 || 11*pi/6<=xitar<12*pi/6)
Ua=0
Ub=0
Uc=1
else if ciliangeiding==1 && Te==-1 && pi/6<=xitar<3*pi/6
Ua=1
Ub=0
Uc=1
else if ciliangeiding==1 && Te==-1 && 3*pi/6<=xitar<5*pi/6
Ua=1
Ub=0
Uc=0
else if ciliangeiding==1 && Te==-1 && 5*pi/6<=xitar<7*pi/6
Ua=1
Ub=1
Uc=0
else if ciliangeiding==1 && Te==-1 && 7*pi/6<=xitar<9*pi/6
Ua=0
Ub=1
Uc=0
else ciliangeiding==1 && Te==-1 && 9*pi/6<=xitar<11*pi/6
Ua=0
Ub=1
Uc=1
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end

各个输入输出如系统图所示。现在的问题是怎么让每一次选择之后他的输出维持一个周期?还有就是在下一次输入波形到来的时候,如何让该程序再次从头开始执行?还有就是系统图这个报错怎么解决?