资源简介
SRM直接转矩MATLAB仿真,用于SRM直接转矩电机的研究。
代码片段和文件信息
function [sysx0strts] = d_sfunc_dtc(txuflagFsetSpeedKpKiTemax)
%intput:u(1)-u(5)--fafbfcTen
%state: x1:F change statex2:Te change statex3:sx4:section
% x5:Fax6:Fbx7:sum det_speedx8:pid output as Te*
%output:y1:sy2:sectiony3:Fay4:Fb
switch flag
case 0
[sysx0strts] = mdlInitializeSizes;
case 2
sys = mdlUpdate(txuFsetSpeedKpKiTemax);
case 3
sys = mdlOutputs(txu);
case {149 }
sys = []; % do nothing
otherwise
error([‘unhandled flag = ‘num2str(flag)]);
end
function sys = mdlUpdate(txuFsetSpeedKpKiTemax)
% *******************************************
% slove Fs and delta
Fa=u(1)-0.5*u(2)-0.5*u(3);% 3/2
Fb=0.86605*(u(2)-u(3));% 3/2 :0.86605=sqrt(3)/2
Fs=sqrt(Fa*Fa+Fb*Fb);
if (abs(Fa)<1e-5)
Fa=1e-5;
end
Fba=Fb/Fa;
delta=atan(Fba);% pi/2 ~ -pi/2
if (Fa<0)
delta=delta+pi; % -pi/2 ~ 3pi/2
end
%***************************************************
det_speed=Speed-u(5);
sum_det=x(7)+det_speed;
% if (sum_det*Ki>Temax*3)%limited sum_det
% sum_det=Temax*3/Ki;
% end
% if (sum_det*Ki<-Temax*3)%limited sum_det
% sum_det=-Temax*3/Ki;
% end
x(8)=det_speed*Kp+sum_det*Ki;%pid output as Te*
if x(8)>Temax %limited Temax
x(8)=Temax;
end
if x(8)<-Temax
x(8)=-Temax;
end
% **************************************************
% s=1:00 T- phir- s=2:01 T- phir+
% s=3:10 T+ phir- s=4:11 T+ phir+
if (Fset-Fs)/Fset>0.005
x(1)=1;
end
if (Fset-Fs)/Fset<-0.005
x(1)=0;
end
if (x(8)-u(4))/x(8)>0.005
x(2)=1;
end
if (x(8)-u(4))/x(8)<-0.005
x(2)=0;
end
x(3)=x(2)*2+x(1)+1;%s=x(2)*2+x(1)+1;
% ******************************************
% slove section based on delta
% 1: 0-60 2: 60-120 3: 120-180
% 4: 180-240 5: 240-300 6: 300-360
if (delta<0)
delta=delta+2*pi; % -pi/2 ~ 3pi/2 --->0~ 2pi
end
x(4)=ceil(delta*360/(2*pi*60));%section=ceil(delta/60)
% ******************************************************
x(5)=Fa;
x(6)=Fb;
sys(1)=x(1); %if abs(Fset-Fs)<=0.005 x(1) no change
sys(2)=x(2); %if abs(Tset-u(4))<=0.005 x(2) no change
sys(3)=x(3);
sys(4)=x(4);
sys(5)=x(5);
sys(6)=x(6);
sys(7)=sum_det;
sys(8)=x(8);
function sys = mdlOutputs(txu)
sys(1)=x(3);
sys(2)=x(4);
sys(3)=x(5);
sys(4)=x(6);
function [sysx0strts] = mdlInitializeSizes()
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates =8;
sizes.NumOutputs = 4;
sizes.NumInputs = 5;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes =1;
sys = simsizes(sizes);
x0 =[1 1 1 1 0.001 0.001 0 0];
str = [];
ts = [-1 0];
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 102145 2013-08-27 15:58 SRM直接转矩matlab仿真\DTC_measure.mdl
文件 2805 2013-08-16 09:53 SRM直接转矩matlab仿真\d_sfunc_dtc.m
文件 1261 2013-08-21 21:23 SRM直接转矩matlab仿真\d_sfunc_measure.m
文件 97020 2013-09-11 23:00 SRM直接转矩matlab仿真\Sfun_dtc_ASR.mdl
文件 126422 2013-11-24 23:32 SRM直接转矩matlab仿真\Srm_dtc.mdl
文件 306 2014-06-06 12:30 SRM直接转矩matlab仿真\仿真模型说明.txt
目录 0 2015-09-06 19:48 SRM直接转矩matlab仿真
----------- --------- ---------- ----- ----
329959 7
- 上一篇:A*算法 matlab版
- 下一篇:matlab GA-pls建立模型
评论
共有 条评论