logo资料库

直线一级倒立摆的滑模变结构控制程序.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
基于比例切换控制的滑模控制直线一级倒立摆 >> clear all; >> close all; >> global C M0 F >> ts=0.02; >> T=30; >> TimeSet=[0:ts:T]; >> para=[]; >> options=odeset('RelTol',1e-3,'AbsTol',[1e-3 1e-3 1e-3 1e-3]); >> x0=[0.5,0.3,0,0]; >> [t,xout]=ode45('DxnamicModel',TimeSet,x0,options,para); >> x1=xout(:,1); >> x2=xout(:,2); >> x3=xout(:,3); >> x4=xout(:,4); >> s=C(1)*x1+C(2)*x2+C(3)*x3+C(4)*x4; >> if F==1 M0=40; u=-M0*sign(s); elseif F==2 beta=30; delta=0; for k=1:1:T/ts+1 u(k)=-beta*(abs(x1(k))+abs(x2(k))+abs(x3(k))+abs(x4(k))+delta)*sign(s(k)); end end figure(1); plot(t,x1,’r’); xlabel(‘time(s)’;ylabel(‘Cart Position’); figure(2); plot(t,x2,’r’); xlabel(‘time(s)’);ylabel(‘Pendulum Angle’); figure(3); plot(t,s,’r’); xlabel(‘time(s)’;ylabel(‘s’); figure(4); plot(t,u,’r’); xlabel(‘time(s)’;ylabel(‘u’);
function dx=DxnamicModel(t,x,flag,para) global C M0 F M=5;m=1;a=1;C1=1;g=9.81; a32=-3*(C1-m*g*a)/(a*(4*M+m)); a42=-3*(M+m)*(C1-m*g*a)/(a^2*m*(4*M+m)); b3=4/(4*M+m); b4=3/(4*M+m); A=[0,0,1,0; 0,0,0,1; 0,a32,0,0; 0,a42,0,0]; b=[0;0;b3;b4]; %Ackermann's formula n1=-1;n2=-2;n3=-3; C=[0,0,0,1]*inv([b,A*b,A^2*b,A^3*b])*(A-n1*eye(4))*(A-n2*eye(4))* (A-n3*eye(4)); s=C*x; F=2; if F==1 M0=40; u=-M0*sign(s); elseif F==2; beta=30; delta=0; u=-beta*(abs(x(1))+abs(x(2))+abs(x(3))+abs(x(4))+delta)*sign(s); end dx=zeros(4,1); f0=0.5; ft=f0*sin(3*t); dx=A*x+b*(u+ft);
基于指数趋近率的滑模控制一级倒立摆 clear all; close all; global C M A b eq k ts=0.02; T=30; TimeSet=[0:ts:T]; para=[]; options=odeset('RelTol',1e-3,'AbsTol',[1e-3 1e-3 1e-3 1e-3]); x0=[0.5,0.3,0,0]; [t,xout]=ode45('DynamicModel',TimeSet,x0,options,para); x1=xout(:,1); x2=xout(:,2); x3=xout(:,3); x4=xout(:,4); s=C(1)*x1+C(2)*x2+C(3)*x3+C(4)*x4; if M==2 k=10; eq=5.0; for kk=1:1:T/ts+1 xk=[x1(kk);x2(kk);x3(kk);x4(kk)]; sk(kk)=C(1)*x1(kk)+C(2)*x2(kk)+C(3)*x3(kk)+C(4)*x4(kk); slaw(kk)=-eq*sign(sk(kk))-k*sk(kk); u(kk)=inv(C*b)*(-C*A*xk+slaw(kk)); end end figure(1); plot(t,x1,'r'); xlabel('time(s)');ylabel('Cart Position'); figure(2); plot(t,x2,'r'); xlabel('time(s)');ylabel('Pendulum Angle'); figure(3); plot(t,s,'r'); xlabel('time(s)');ylabel('s'); if M==2 figure(4); plot(t,u,'r'); xlabel('time(s)');ylabel('u'); end
function dx=DynamicModel(t,x,flag,para) global C M eq A b k M=1.096;m=0.109;b=0.1;l=0.25;I=0.0034;g=9.81; a22=-(I+m*l^2)*b/(I*(M+m)+M*m*l^2); a23=m^2*g*l^2/(I*(M+m)+M*m*l^2); a42=-m*l*b/(I*(M+m)+M*m*l^2); a43=m*g*l*(M+m)/(I*(M+m)+M*m*l^2); b2=(I+m*l^2)/(I*(M+m)+M*m*l^2); b4=m*l/(I*(M+m)+M*m*l^2); A=[0 1 0 0;0 a22 a23 0;0 0 0 1;0 a42 a43 0]; b=[0;b2;0;b4]; n1=-1;n2=-2;n3=-3; C=[0,0,0,1]*inv([b,A*b,A^2*b,A^3*b])*(A-n1*eye(4))*(A-n2*eye(4))*(A-n3*eye(4)); s=C*x; M=2; eq=5.0; if M==1 slaw=-eq*sign(s); elseif M==2 k=10; slaw=-eq*sign(s)-k*s; elseif M==3 k=10;alfa=0.50; slaw=-k*abs(s)^alfa*sign(s); elseif M==4 k=1; slaw=-eq*sign(s)-k*s^3; end u=inv(C*b)*(-C*A*x+slaw); dx=zeros(4,1); f0=0.5; ft=f0*sin(3*t); dx=A*x+b*(u+ft);
分享到:
收藏