Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. clear all;
  2. close all;
  3. mw = 4;
  4. mc= 1.5;
  5. L = 1.2;
  6. g=9.81;
  7. a2=mc*g/(mw*L); a4= (mw+mc)*g/(mw*L); b2 =1/mw;
  8. A= [0 0 1 0;0 0 0 1;0 a2 0 0;0 -a4 0 0];
  9. B=[0 0 b2 -b2]';
  10. C=[1 0 0 0];D=0;
  11. n=length(A);
  12. r=size(B,2);
  13. m=size(C,1);
  14. eig(A) % niestabilny bo sa dodatnie i zerowe, uklad typowo niestabilny
  15.  
  16. tmax= 10;
  17. t=linspace(0,tmax,200);
  18. u=zeros(1,length(t));
  19. C12=[1,0,0,0;0,1,0,0];
  20. x10=[0.1;0;0;0];
  21. y_x1= lsim(A,B,C12,D,u,t,x10)
  22. %plot(t,y_x1); grid
  23.  
  24. %regulacja stanu - projektowanie regulatora - lokacja biegunow
  25.  
  26. p = [-1.5 -1.5 -2 -2]';
  27. % tr=4/8=0.5 okolo czas regulacji
  28.  
  29. %macierz wzmocnien, place nie zadziala bo podwojny biegun
  30. K=acker(A,B,p) %rank(ctbr(A,B))
  31. Ac=A-B*K; % eig(Ac) bieguny
  32.  
  33. % obliczenie N
  34.  
  35. L=[A B; C D];
  36. P=[zeros(n,m); eye(m)];
  37. nxu=L\P;
  38. N=K*nxu(1:n,:)+ nxu((n+1):(n+m),:);
  39.  
  40. % odpowiedzi z uwzgl. N
  41. ycx1=lsim(Ac,B*N,C12-D*K,D*N,u,t,x10) % x10 - wektor stanu poczatkowego
  42. % plot(t,ycx1); grid
  43. %subplot(121);
  44. subplot(221);plot(t,y_x1); grid; title(' uklad otwarty, x10=0.1');
  45. subplot(222); plot(t,ycx1); grid; title(' uklad zamkniety, x10=0.1');
  46.  
  47. %wyznaczenie transmitancji wzgledem wartosci zadanej ukl. zamknietego
  48. [lw,mw]=ss2tf(Ac,B*N,C-D*K,D*N);
  49. y=step(lw,mw,t);
  50. %transmitancja zakloceniowa
  51. [lz,mz]=ss2tf(Ac,B,C-D*K,D);
  52. yz=step(lz,mz,t);
  53.  
  54. subplot(223);plot(t,y); grid; title(' uklad zamkniety - odp na wart. zadana');
  55. subplot(224); plot(t,yz); grid; title(' uklad zamkniety - zaklocenie');
  56.  
  57. close all;
  58. %obserwator
  59. z(t>=tmax/2)=50;
  60. po=2*p;
  61. H=(acker(A',C',po))'; %macierz wzmocnien korektora
  62. Ao=A-H*C;
  63.  
  64. %uklad zamkniety z obserwatorem
  65. Az=[A-B*K,B*K; zeros(n,n) A-H*C];
  66. Bz=[B*N; zeros(n,m)];
  67. Cz=[C; zeros(m,n)];
  68. Dz=D;
  69.  
  70. nz=length(Az)
  71. Ca=eye(nz);
  72. Da=zeros(nz,r);
  73. y_obs=lsim(Az,Bz,Ca,Da,zeros(size(t)),t,[x10;x10]); %przebieg dla obserwatora
  74.  
  75. figure;
  76. x1=y_obs(:,1);
  77. e1=y_obs(:,1+n);
  78. x2=y_obs(:,2);
  79. e2=y_obs(:,n+2);
  80.  
  81. subplot(221); plot(t,x1,t,x1-e1); grid; title('obserwator - x1'); legend('x1','x1 - uzyskane z obserwatora');
  82. subplot(222); plot(t,x2,t,x2-e2); grid; title('obserwator - x2'); legend('x2','x2 - uzyskane z obserwatora');
  83.  
  84.  
  85.  
  86. subplot(223); plot(t,e1); grid; title('obserwator - e1');
  87. subplot(224); plot(t,e2); grid; title('obserwator - e2');
  88.  
  89.  
  90. Ai=[A zeros(n,m); C zeros(m)];
  91. Bi=[B; zeros(m,r)];
  92. pi=[p;min(p)];
  93. kki=acker(Ai,Bi,pi);
  94.  
  95. k=kki(:,1:n);
  96. ki=kki(:,(n+1):(n+m));
  97.  
  98. %uklad zamkniety z calkowaniem bez obserwatora
  99. Aci=[A-B*k -B*ki; C zeros(m)];
  100. Bci=[B*N; -eye(m)];
  101. Cci= [C zeros(m) ];
  102. Dci = 0;
  103.  
  104. [lwi,mwi] = ss2tf(Aci,Bci,Cci,Dci)
  105.  
  106. %odpowiedz skokowa
  107. figure;
  108. ywi=step(lwi,mwi,t);
  109. plot(t,ywi); grid;
  110.  
  111. tmax=2*tmax;
  112. t=linspace(0,tmax,400); %generuje liczby w danym zakresie
  113. z=zeros(size(t));
  114. z(t>=tmax/2) = 50;
  115. figure;
  116. subplot(121);
  117. hold on;
  118. for kNi=[ki ki 0; N 0 N]
  119. Aci= [A-B*k -B*kNi(1); C zeros(m)];
  120. Bci=[B*kNi(2); -eye(m)];
  121. [lwi,mwi]=ss2tf(Aci,Bci,Cci,Dci);
  122. ywi=step(lwi,mwi,t);
  123. yzi=lsim(Aci,[B;zeros(m,r)],Cci,Dci,z,t);
  124. plot(t,ywi+yzi); legend('N+I','tylko I','tylko N');
  125. end
  126. hold off;
  127. grid;
  128.  
  129. %e0=[0.2 0 0 0
  130. e0=[0 0 0 0]';
  131. xexio0=[e0;e0;zeros(m,1)];
  132. subplot(122); hold on
  133.  
  134. for kNi =[ki ki 0;N 0 N]
  135. Acoi=[A-B*k B*k -B*kNi(1)
  136. zeros(n) A-H*C zeros(n,m)
  137. C zeros(m,n+m)];
  138. Bcoi=[B*kNi(2); zeros(n,m); -eye(m)];
  139. Ccoi=[C zeros(m,n+m)];
  140. Dcoi=0;
  141. ywoi=lsim(Acoi,Bcoi,Ccoi,Dcoi,ones(size(t)),t,xexio0);
  142. yzoi=lsim(Acoi,[B;zeros(n,r);zeros(m,r)],Ccoi,Dcoi,z,t);
  143. % yzoi=lsim(Acoi,[B;B;zeros(m,r)],Ccoi,Dcoi,z,t);
  144. plot(t,ywoi+yzoi);
  145. end
  146. hold off; grid;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement