|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我自己做了一个基于任意坐标系的异步电机模型,s函数如下。可以仿真,但是不知道什么地方没编写对,总是波形不对。希望各位大哥指点一下!万分感谢!function [sys,x0,str,ts] = ac_motor(t,x,u,flag)
%异步电机在任意以w1旋转的坐标系下的两轴模型
%==============基本电机参数===================
%电机方程
%
L1s=0.000724; L1r=0.000724; Lm1=0.02711;
Rs=0.08233; Rr=0.0503; P=2;
J=0.01; Lm=1.5*Lm1; Ls=L1s+Lm;
Lr=L1r+Lm;
%6个状态变量ids iqs idr iqr w theta
%5个输入变量uas ubs ucs TL w1
%8个输出变量Uds Uqs ids iqs idr iqr w Te
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u,Ls,Lr,Lm,Rs,Rr,P,J);
case 3,
sys=mdlOutputs(t,x,u,P,Lm);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 6;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 8;
sizes.NumInputs = 5;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0,0,0,0,0,0];
str = [];
ts = [0 0];
function sys=mdlDerivatives(t,x,u,Ls,Lr,Lm,Rs,Rr,P,J)
TL=u(4); w1=u(5); w=x(5); theta=x(6); g=w1-w;
Uds=sqrt(2/3)*(cos(x(6))*u(1)+cos(x(6)-2*pi/3)*u(2)+cos(x(6)+2*pi/3)*u(2));
Uqs=-sqrt(2/3)*(sin(x(6))*u(1)+sin(x(6)-2*pi/3)*u(2)+sin(x(6)+2*pi/3)*u(2));
Udr=0;
Uqr=0;
RR =[Rs -w1*Ls 0 -w1*Lm
w1*Ls Rs w1*Lm 0
0 -g*Lm Rr -g*Lr
g*Lm 0 g*Lr Rr];
LL=[Ls 0 Lm 0
0 Ls 0 Lm
Lm 0 Lr 0
0 Lm 0 Lr];
I=[x(1);x(2);x(3);x(4)];
U=[Uds;Uqs;Udr;Uqr];
II=-inv(LL)*RR*I+inv(LL)*U;%能否直接这样求解电流?
Te=P*Lm*(x(2)*x(3)-x(1)*x(4));
dw=(P/J)*(Te-TL);
dx(6)=u(5);
sys = [II(1);II(2);II(3);II(4);dw;dx(6)];
function sys=mdlOutputs(t,x,u,P,Lm)
Uds=sqrt(2/3)*(cos(x(6))*u(1)+cos(x(6)-2*pi/3)*u(2)+cos(x(6)+2*pi/3)*u(2));
Uqs=-sqrt(2/3)*(sin(x(6))*u(1)+sin(x(6)-2*pi/3)*u(2)+sin(x(6)+2*pi/3)*u(2));
Te=P*Lm*(x(2)*x(3)-x(1)*x(4));
sys = [Uds,Uqs,x(1),x(2),x(3),x(4),x(5),Te]; |
|