說明:
全文共四個參考:
- 終極參考,程序+仿真圖+結果,但是缺少原理和文字建模過程。
- 參考0和1重在文字部分,模型建立怎么敘述,但無實際程序。
- 參考2重在程序部分,實際的matlab程序部分,直接上機調試。
- 每個大參考分別給了幾個小參考,以供選擇。
具體看個部分內容前先全部游覽下。
終極參考:
https://wenku.baidu.com/view/df64a8ece009581b6bd9eb2f.html
參考0 這是個題目,但是直接告訴你數學模型了,具體分析看參考1中的論文
參考一 重在借鑒論文各部分敘述,但無實際程序,不用擔心,程序請看參考二。
關鍵圖:
關鍵圖截取:
參考二 完整程序 ,自己修改數據和數學符號,配合參考一 文字敘述模塊,整個問題就解決了。
下面給了兩個參考程序,第二個參考程序易懂,標注清楚。你都跑一下,看看效果。
程序1 http://ask.wenku1.com/question/%E5%80%92%E7%AB%8B%E6%91%86%E5%BB%BA%E6%A8%A1.htm
%主程序: clear all close all global A B C D g=9.8;%重力加速度 M=1.0;%小車質量 m=0.1;%桿的質量 L=0.5;%桿長度的一半 Fc=0.0005;%小車相對導軌的摩擦系數 Fp=0.000002;%桿相對於小車的摩擦系數 I=1/12*m*L^2; l=1/2*L; t1=m*(M+m)*g*l/[(M+m)*I+M*m*l^2]; t2=-m^2*g*l^2/[(m+M)*I+M*m*l^2]; t3=-m*l/[(M+m)*I+M*m*l^2]; t4=(I+m*l^2)/[(m+M)*I+M*m*l^2]; A=[0 1 0 0; t1 0 0 0; 0 0 0 1; t2 0 0 0]; B=[0;t3;0;t4]; C=[1 0 0 0; 0 0 1 0]; D=[0;0]; Q=[100 0 0 0; 0 10 0 0; 0 0 1 0; 0 0 0 1]; R=[0.1]; K=lqr(A,B,Q,R); e1_1=0; e2_1=0; e3_1=0; e3_1=0; u_1=0; xk=[-10/57.3,0,0.20,0]; ts=0.02; for k=1:1:1000 time(k)=k*ts; Tspan=[0 ts]; para=u_1; [t,x]=ode45('daolibai_PID_Controller_SubFunction',Tspan,xk,[],para); xk=x(length(x),:); r1(k)=0.0; r2(k)=0.0; r3(k)=0.0; r4(k)=0.0; x1(k)=xk(1); x2(k)=xk(2); x3(k)=xk(3); x4(k)=xk(4); e1(k)=r1(k)-x1(k); e2(k)=r2(k)-x2(k); e3(k)=r3(k)-x3(k); e4(k)=r4(k)-x4(k); S=1; if S==1 u(k)=K(1)*e1(k)+K(2)*e2(k)+K(3)*e3(k)+K(4)*e4(k); elseif S==2 de1(k)=e1(k)-e1_1; u1(k)=-50*e1(k)-10*de1(k); de2(k)=e2(k)-e2_1; u2(k)=-10*e2(k)-10*de2(k); de3(k)=e3(k)-e3_1; u3(k)=-10*e3(k)-10*de3(k); de4(k)=e4(k)-e4_1; u4(k)=-10*e4(k)-10*de4(k); u(k)=u1(k)+u2(k)+u3(k)+u4(k); end if u(k)>=10 u(k)=10; elseif u(k)<=-10 u(k)=-10; end e1_1=e1(k); e2_1=e2(k); e3_1=e3(k); e4_1=e4(k); u_1=u(k); end figure(1); subplot(411); plot(time,r1,'k',time,x1,'k'); xlabel('time(s)');ylabel('Angle'); subplot(412); plot(time,r2,'k',time,x2,'k'); xlabel('time(s)');ylabel('Angle rate'); subplot(413); plot(time,r3,'k',time,x3,'k'); xlabel('time(s)');ylabel('Car Position'); subplot(414); plot(time,r4,'k',time,x4,'k'); xlabel('time(s)');ylabel('Car rate'); figure(5); plot(time,u,'k'); xlabel('time(s)');ylabel('Force'); %子程序 function dx=dym(t,x,flag,para) global A B C D u=para; dx=zeros(4,1); dx=A*x+B*u; %剛學,望多多交流,多多批評指正 0
程序2 http://www.verysource.com/code/6426077_1/untitled202.m.html
clear; M = 1.096; m = 0.109; b = 0.1; f=0; I= 0.0034; g = 9.8; l = 0.25; D = I*(M+m)+M*m*l^2; %denominator for the A and B matricies A = [0 1 0 0; 0 -(I+m*l^2)*b/D (m^2*g*l^2)/D -m*l*f/D; 0 0 0 1; 0 -(m*l*b)/D m*g*l*(M+m)/D -(m+M)*f/D] B = [ 0; -(I+m*l^2)/D; 0; -m*l/D]; C = [1 0 0 0; 0 0 1 0]; D = [0; 0]; disp('The rank of controllability matrix') rc=rank(ctrb(A,B)) % p=[-2-3*i,-2+3*i,-20,-21]; p=[-20,-21,-2-3*i,-2+3*i]; k=place(A,B,p) Cn=[1 0 0 0 ]; Nbar=rscale(A,B,Cn,0,k) t0=0; tspan=0.006; R=1; y0=[0 0 0.1 0]; n=1000; F=R*Nbar-k*y0'; for i=1:n tf=t0+tspan; [t,y]=ode45(@xprime10,[t0 tf],y0',[],F); t0=tf; y1=y(end,1); y2=y(end,2); y3=y(end,3); y4=y(end,4); y0=[y1 y2 y3 y4]; F=R*Nbar-k*y0'; h(i,1)=y1; h(i,2)=y2; h(i,3)=y3; h(i,4)=y4; h(i,5)=F; end T=0.006:0.006:6; figure(1) plot(T,h(:,1),':b') legend('小車位移') grid figure (2) plot(T,h(:,3),'-r') legend('擺桿擺角') grid figure(3) plot(T,h(:,5),'--g') legend('F') grid
程序3 有網友說Matlab自帶一個例程,我電腦沒安裝matlab,你去找找。
在matlab模糊控制工具箱里有演示動畫
總結:
在學習的時候,老師布置的作業,肯定是別人做過的部分,所以只要挖,你總能找到。
祝你 goodluck !