%=========================================================
%BLDCM模型中hall函数
%=========================================================
function [sys,x0,str,ts] =emf(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 进行初始化,设置系统变量的大小
%=========================================================
function [sys,x0,str,ts]=mdlInitializeSizes()
sizes = simsizes; %取系统默认设置
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 3;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [-1 0];
%=========================================================
%mdlOutputs 计算系统输出
%=========================================================
function sys=mdlOutputs(t,x,u,k)
global Pos;
global Ap;
global w;
global per;
global pai==3.1415926
Pos=u(1); % 角度(rad)
per=fix(Pos/(2*pai))*2*pai;
Ap=Pos-per;
if Ap>=0 & Ap<pai/3
sys(1)=1;
sys(2)=0;
sys(3)=1;
elseif Ap>(pai/3) & Ap<(2* pai/3)
sys(1)=1;
sys(2)=0;
sys(3)=0;
elseif Ap>=(2* pai/3) & Ap<pai
sys(1)=1 ;
sys(2)=1;
sys(3)=0;
elseif Ap>=pai & Ap<(4* pai/3)
sys(1)=0;
sys(2)=1;
sys(3)=0 ;
elseif Ap>=(4* pai/3) &Ap<(5* pai/3)
sys(1)=0;
sys(2)=1 ;
sys(3)=1;
else Ap>=(5* pai/3) &Ap<(2* pai)
sys(1)=0 ;
sys(2)=0;
sys(3)=1;
end
m.zip_Commutation_霍尔换向
版权申诉
77 浏览量
2022-09-24
20:59:55
上传
评论
收藏 800B ZIP 举报
局外狗
- 粉丝: 67
- 资源: 1万+