Guest User

Untitled

a guest
Jan 11th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.76 KB | None | 0 0
  1. % Projekt SA-Lab Ćwiczenie 7
  2. % Filipów Bartosz 160 488
  3. % Pełka   Jakub   160 648
  4.  
  5. clc; clear;
  6. % Parametry układu
  7. Tp = 1.2e-3;
  8. Kp = 1.31;
  9. a1 = 4.1918e-4;
  10. a2 = 1.4037e-7;
  11. Ti = 3.045e-3;
  12. T0 = 212.500e-6;
  13.  
  14. % Transmitancja Sterownika
  15. Lc = [0.09];
  16. Mc = [1];
  17. Gc = tf(Lc,Mc);
  18. [Ac,Bc,Cc,Dc] = ssdata(Gc);
  19.  
  20. % Transmitancja Obiektu
  21. Lp = [Kp];
  22. Mp = [Ti*Tp*a2 (Ti*Tp*a1+Ti*a2) (Ti*Tp +Ti*a1) Ti 0];
  23. Gp = tf(Lp,Mp);
  24. [Ap,Bp,Cp,Dp] = ssdata(Gp);
  25.  
  26. % Transmitancja Czujnika
  27. Lt = [1];
  28. Mt = [10*Tp 1];
  29. Gt = tf(Lt,Mt);
  30. [At,Bt,Ct,Dt] = ssdata(Gt);
  31.  
  32. % Jednostkowe sprzężnie zwrotne
  33. Lj = [1];
  34. Mj = [1];
  35. Gj = tf(Lj,Mj);
  36. [Aj,Bj,Cj,Dj] = ssdata(Gj);
  37.  
  38. % Połączenie szeregowe - układ otwarty
  39. Trans = series(Gc,Gp);
  40. [Ao,Bo,Co,Do] = ssdata(Trans);
  41. figure(1)
  42. rlocus(Ao,Bo,Co,Do);
  43.  
  44. % Ujemne Sprzężenie zwrotne z czujnikiem
  45. [A,B,C,D] = feedback(Ao,Bo,Co,Do,At,Bt,Ct,Dt,-1);
  46.  
  47. % Stabilność układu
  48. [P,Z]   = pzmap(Ao,Bo,Co,Do)    % Bieguny i zera układu  
  49.  
  50. % SYMULACJA
  51. Umax    = 2;                     % Ograniczenie sygnału
  52. TopO    = 2*T0;                  % Opóźnienie obiektu
  53. TopC    = 0;                     % Opóźnienie czujnika
  54. dT      = 1e-6;
  55. Tsym    = 0.5;
  56. Ur      = 1;
  57.  
  58. Xp  = zeros(size(Bp));           % Wektor stanu
  59. Xt  = zeros(size(Bt));
  60. Xc  = zeros(size(Bc));
  61.  
  62. Ap  = dT*Ap; Bp = dT*Bp;         % Modyfikacja modelu
  63. At  = dT*At; Bt = dT*Bt;
  64. Ac  = dT*Ac; Bc = dT*Bc;
  65.  
  66.  
  67. Ts  = 0:dT:Tsym;                 % Wektor czasu
  68.  
  69. N   = length(Ts);
  70.  
  71. R   = ones(size(Ts));            % Sygnał zadający
  72. U   = zeros(size(Ts));           % Sygnał sterujący
  73. Uop = zeros(size(Ts));           % Sygnał sterujący opóźniony
  74. Ucz = zeros(size(Ts));           % Sygnał z czujnika opóźniony
  75.  
  76. Ys  = zeros(size(Ts));           % Sygnał wyjścia obiektu
  77. Yt  = zeros(size(Ts));           % Sygnał wyjścia czujnika
  78. Yc  = zeros(size(Ts));           % Sygnał wyjścia sterownika
  79.  
  80. E   = zeros(size(Ts));           % Sygnał uchybu
  81.  
  82. % Tablice opóźnień
  83. NopO = TopO/dT;                  % Obiektu
  84. NopO = round(NopO);
  85.  
  86. NopC = TopC/dT;                  % Czujnika
  87. NopC = round(NopC);
  88.  
  89. for t=1:N-1,
  90.     % Przewidywanie przyszłego wyjścia sterownika
  91.     X2c     = Xc + Ac*Xc + Bc*E(t+1);
  92.     Yc(t+1) = Cc*X2c + Dc*E(t+1);
  93.        
  94.     % Przewidywanie przyszłego wyjścia obiektu
  95.     Xp2     = Xp + Ap*Xp + Bp*Uop(t+1);
  96.     Ys(t+1) = Cp*Xp2 + Dp*Uop(t+1);
  97.    
  98.     % Przewidywanie przyszłego wyjścia czujnika
  99.     X2t     = Xt + At*Xt + Bt*Ys(t+1);
  100.     Yt(t+1) = Ct*X2t + Dt*Ys(t+1);
  101.        
  102.     % Uchyb
  103.     E(t)    = R(t)  - Ucz(t);
  104.     E(t+1)  = R(t+1)- Ucz(t+1);
  105.    
  106.     % Symulacja dynamiki sterownika
  107.     Yc(t)   = Cc*Xc + Dc*E(t);
  108.     X2c     = Xc + Ac*Xc +Bc*E(t+1);
  109.     Xc      = Xc + 0.5*(Ac*Xc + Bc*E(t) + Ac*X2c + Bc*E(t+1));
  110.     Yc(t+1) = Cc*Xc + Dc*E(t+1);
  111.    
  112.     U(t)    = Yc(t);
  113.     U(t+1)  = Yc(t+1);
  114.    
  115.     % Ogrniczenie wartości syngału sterującego
  116.     if U(t)<-Umax,
  117.         U(t) = -Umax;
  118.     end;
  119.     if U(t)>Umax,
  120.         U(t) = Umax;
  121.     end;
  122.     if U(t+1)<-Umax,
  123.         U(t+1) = -Umax;
  124.     end;
  125.     if U(t+1)>Umax,
  126.         U(t+1) = Umax;
  127.     end;
  128.  
  129.     % Opóźnienie wejścia obiektu
  130.     if t==NopO
  131.         Uop(t+1) = U(t+1-NopO);
  132.     end;
  133.     if t>NopO
  134.         Uop(t)   = U(t-NopO);
  135.         Uop(t+1) = U(t+1-NopO);
  136.     end;
  137.        
  138.     % Symulacja dynamiki obiektu
  139.     Ys(t)   = Cp*Xp + Dp*Uop(t);
  140.     Xp2     = Xp + Ap*Xp + Bp*Uop(t);
  141.     Xp      = Xp + 0.5*(Ap*Xp + Bp*Uop(t) + Ap*Xp2 + Bp*Uop(t+1));
  142.     Ys(t+1) = Cp*Xp + Dp*Uop(t+1);    
  143.    
  144.     % Symulacja dynamiki czujnika
  145.     Yt(t)   = Ct*Xt + Dt*Ys(t);
  146.     X2t     = Xt + At*Xt + Bt*Ys(t+1);
  147.     Xt      = Xt + 0.5*(At*Xt + Bt*Ys(t) + At*X2t + Bt*Ys(t+1));
  148.     Yt(t+1) = Ct*Xt + Dt*Ys(t+1);
  149.    
  150.     % Opóźnienie czujnika
  151.     if t==NopC
  152.         Ucz(t+1) = Yt(t+1-NopC);
  153.     end;
  154.     if t>NopC
  155.         Ucz(t)   = Yt(t-NopC);
  156.         Ucz(t+1) = Yt(t+1-NopC);
  157.     end
  158. end;
  159.  
  160. figure(2)
  161. step(A,B,C,D);
  162. hold on;
  163. plot(Ts,Ys,'r');
  164. hold off;
  165. legend('Bez opóźnienia za pomocą step','Pętla for z opóźnieniem');
  166. grid on;
  167. title('Odpowiedz skokowa układu');
  168.  
  169. % Obliczanie wskaźników jakości układu
  170. T5  = 0;
  171. T2  = 0;
  172. K   = 0;
  173.  
  174. for i = 1:length(Ys)
  175.     if abs(Ur- Ys(i)) < 0.05*Ur && T5 == 0
  176.         T5 =i;
  177.     end
  178.     if abs(Ur- Ys(i)) >0.05*Ur
  179.         T5 = 0;
  180.     end
  181.    
  182.     if abs(Ur- Ys(i)) < 0.02*Ur && T2 == 0
  183.         T2 = i;
  184.     end
  185.     if abs(Ur- Ys(i)) >0.02*Ur
  186.         T2 = 0;
  187.     end
  188.    
  189.     if Ys(i) > K
  190.         K = Ys(i);
  191.     end
  192. end
  193.  
  194. T5 = T5*dT;
  195. T2 = T2*dT;
  196. ep = Ur - Ys(length(Ys));
  197. if K > Ur
  198.     K = ((K-Ur)/Ur)*100;
  199. else
  200.     K = 0;
  201. end
  202.  
  203. disp(['T5% = ' num2str(T5) '   T2% = ' num2str(T2) '   Przeregulowanie = ' num2str(K) '   Uchyb pozycyjny = ' num2str(ep)]);
Advertisement
Add Comment
Please, Sign In to add comment