📄 mybldc2.m
字号:
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=5*pi/3 & theta<11*pi/6)
LA= -1;
LB=((5*pi/3)-theta)*6/pi;
LC=1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=11*pi/6 & theta<2*pi)
LA= 6*(theta-2*pi)/pi;
LB=-1;
LC=1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
%%%-------------CALCULATION FOR SYS(4)<0---------------------------------------------------
if (theta>=-2*pi & theta<-11*pi/6)
LA= (theta+2*pi)*6/pi;
LB=-1;
LC=1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if (theta>=-11*pi/6 & theta<-5*pi/3)
LA=1;
LB=-1;
LC=-(theta+(10*pi/6))*6/pi;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if (theta>=-5*pi/3 & theta<-3*pi/2)
LA=1;
LB=-1;
LC=-(theta+(10*pi/6))*6/pi;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if (theta>=-3*pi/2 & theta<-4*pi/3)
LA=1;
LB=( theta+(4*pi/3) )*6/pi;
LC=-1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=-4*pi/3 & theta<-7*pi/6)
LA=1;
LB=( theta+(4*pi/3) )*6/pi;
LC=-1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if (theta>=-7*pi/6 & theta<-pi)
LA=-(theta+pi)*6/pi;
LB=1;
LC=-1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=-pi & theta<-5*pi/6)
LA=-(theta+pi)*6/pi;
LB=1;
LC=-1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=-5*pi/6 & theta<-4*pi/6)
LA= -1;
LB=1;
LC=( theta+(4*pi/6))*6/pi;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if (theta>=-4*pi/6 & theta<-3*pi/6)
LA= -1;
LB=1;
LC=( theta+(4*pi/6))*6/pi;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=-3*pi/6 & theta<-2*pi/6)
LA= -1;
LB=-(theta+(2*pi/6))*6/pi;
LC=1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=-2*pi/6 & theta<-pi/6)
LA= -1;
LB=-(theta+(2*pi/6))*6/pi;
LC=1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
if(theta>=-pi/6 & theta<0)
LA= 6*theta/pi;
LB=-1;
LC=1;
sys(1)= LA*N*BM*Rl*Rr*u(4); % Back emf for phase U
sys(2)=LB*N*BM*Rl*Rr*u(4); %Back emf for phase V
sys(3)=LC*N*BM*Rl*Rr*u(4); %Back emf for phase W
sys(4)=BM*Rl*Rr*N*LA*u(1); % Phase Torque U
sys(5)=BM*Rl*Rr*N*LB*u(2); %Phase Torque V
sys(6)=BM*Rl*Rr*N*LC*u(3); %Phase Torque W
end;
%------------------------------UPDATE THE MATRIX A IN mystate-space BLOCK------------------------------
up_A=[-(R/(L-M)) 0 0 -N*BM*Rl*Rr*LA/(L-M) 0; 0 -(R/(L-M)) 0 -N*BM*Rl*Rr*LB/(L-M) 0; 0 0 -(R/(L-M)) -N*BM*Rl*Rr*LC/(L-M) 0; N*BM*Rl*Rr*LA/J N*BM*Rl*Rr*LB/J N*BM*Rl*Rr*LC/J -DF/J 0; 0 0 0 P/2 0];
val=['[' sprintf(' %d %d %d %d %d; %d %d %d %d %d; %d %d %d %d %d; %d %d %d %d %d; %d %d %d %d %d',up_A') ']'];
% SURPRISINGLY, Matlab gives an error if there is a white space betweeb spintf and starting braces!!! POOR LANGUAGE!!!!
dirty = get_param(bdroot,'Dirty');
set_param('mybldc_mdl2/mybldc/my state-space','A',val);
set_param(bdroot,'Dirty',dirty);
% -----------------------------------------UPDATE OVER------------------------------------------------------
%-------------------------------------------------FRICTION CALCULATIONS-----------------------------------
%
if (u(4)==0 )
if (abs (sys(4)+sys(5) + sys(6) ) )>F0 %check if wn==0 and the total torque vis-a-vis the max value of friction
Fnp=sign(sys(4)+sys(5)+sys(6))*( F0 ); %the value of friction when the rotor is standstill
sys(7)=Fnp; %output the friction generated
else
Fnp=sys(4)+sys(5) + sys(6); %if the generated torque is insufficient, then the value of friction adjusts itself.
sys(7)=Fnp; %output the friction generated
end;
end;
if (u(4)~=0 ) %if wn is not zero
Fnp=sign(sys(4)+sys(5)+sys(6))*( F0*exp(-50*abs(u(4)))+Fs+0.001*abs(u(4)) ); %the value of friction when the rotor is moving
sys(7)=Fnp; %output the friction generated
end;
function LocalResetController(name)
mdl = bdroot(name);
dirty = get_param(mdl, 'Dirty');
set_param(name, 'A', '[-165.88 0 0 0 0; 0 -165.88 0 11.61 0; 0 0 -165.88 -11.61 0;0 -245 245 -10 0; 0 0 0 2 0]');
set_param(mdl, 'Dirty',dirty);
function sys=mdlTerminate(t,x,u)
sys = [];
% End of mdlOutputs.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -