cds_matlab_intro_part3.m 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. % Einführung in Matlab/Simulink
  3. %
  4. % Regelungstechnik Übung
  5. % Institut für Automatisierungstechnik
  6. % Gruppe für komplexe dynamische Systeme
  7. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  8. % In diesem Musterfile wird hauptsächlich die Funktionalität der Control
  9. % Systems Toolbox (CST) näher erläutert. Diese findet vor allem in
  10. % regelungstechnischen Aufgabenstellungen Anwendung.
  11. % Ausgangspunkt für die Verwendung der CST ist ein mathematisches Modell
  12. % der betrachteteten Strecke. Im Allgemeinen werden nur lineare
  13. % zeitkontinuierliche und zeitdiskrete Probleme betrachtet.
  14. clear all
  15. close all
  16. clc
  17. %%
  18. help control % Wichtig: Die Hilfe zur Control Systems Toolbox
  19. %% Erzeugen von Datenobjekten kontinuierlicher Systeme in der CST
  20. % Es wird ein einfaches PT2-Glied betrachtet (siehe Vorlesung AT)
  21. T = 0.5;
  22. xi = 0.2;
  23. V = 2;
  24. % 1. Möglichkeit: Übertragungsfunktion
  25. G_tf = tf([V],[T^2 2*xi*T 1])
  26. % Zugriff auf das Datenobjekt
  27. G_tf.num{1} % Zähler
  28. G_tf.den{1} % Nenner
  29. G_tf.Variable % Variable
  30. % Alternative (ist bevorzugt zu verwenden)
  31. s = tf('s') % Erzeugen der komplexen Variablen s
  32. G_tf1 = V/(1+2*xi*T*s+s^2*T^2)
  33. % 2. Möglichkeit: Über Pol-Nullstellen
  34. p1 = (-xi+sqrt(xi^2-1))/T;
  35. p2 = (-xi-sqrt(xi^2-1))/T;
  36. G_zp = zpk([],[p1 p2],V/T^2)
  37. % Zugriff auf das Datenobjekt
  38. G_zp.z{1} % Nullstellen
  39. G_zp.p{1} % Polstellen
  40. G_zp.k % Verstärkung (aber nicht der Verstärkungsfaktor V)
  41. G_zp.Variable % Variable
  42. % 3. Möglichkeit: Zustandsraumdarstellung
  43. A = [0 1; -1/T^2 -2*xi/T];
  44. B = [0;V/T^2];
  45. C = [1,0];
  46. D = 0;
  47. sys = ss(A,B,C,D)
  48. % Zugriff auf das Datenobjekt
  49. sys.a % Dynamikmatrix
  50. sys.b % Eingangsmatrix
  51. sys.c % Ausgangsmatrix
  52. sys.d % Durchschaltmatrix
  53. sys.StateName % Name der Zustände
  54. % 4. Möglichkeit FRD-Modelle: Numerische Eingabe von gemessenen
  55. % Übertragungsfunktionen, wird hier nicht näher betrachet
  56. % Umwandeln der Objekte in andere Darstellungsformen
  57. G_ss2tf = tf(sys)
  58. G_spk2tf = tf(G_zp)
  59. sys_zpk2ss = ss(G_zp)
  60. sys_tf2ss = ss(G_tf)
  61. G_ss2zpk = zpk(sys)
  62. G_tf2zpk = zpk(G_tf)
  63. % Zusätzliche Möglichkeiten
  64. help ss2tf
  65. help ss2zp
  66. help zp2tf
  67. help zp2ss
  68. help tf2zp
  69. help tf2ss
  70. %% Diskrete Modelle
  71. % Diese können prinzpiell wie oben erzeugt werden, ledglich muss noch
  72. % eine Abstastzeit vorgegeben werden
  73. Ta = 0.2; % Vorgabe einer Abtastzeit
  74. % Direktes Erzeugen
  75. z = tf('z',Ta)
  76. Gzt = 1/(z-0.5); % Als Übertragungsfunktion
  77. sysd = ss(1,1,1,0,Ta) % In Zustandsraumdarstellung (hier: Diskreter Integrator)
  78. % Aus bestehendem kontinuierlichen Modell
  79. Gz = c2d(G_tf,Ta,'zoh') % Hier wird ein Halteglied nullter Ordnung verwendet
  80. sys_z = c2d(sys,Ta,'zoh')
  81. % Modelle im Tustin Bereich (q-Bereich)
  82. Gq = d2c(Gz,'tustin')
  83. sys_q = d2c(sys_z,'tustin')
  84. %% Modelle mit Totzeiten
  85. G_tzi = tf(1,[1 1],'inputdelay',0.5) % Eingangsverzögerung
  86. G_tzo = tf(1,[1 1],'outputdelay',0.5) % Ausgangsverzögerung
  87. G_tzio = tf(1,[1 1],'iodelay',0.5) % Eingangs-Ausgangsverzögerung
  88. %% Verknüpfung von Modellen
  89. G2 = 1/s;
  90. Gsum = G_tf+G2 % Summe der Modelle
  91. Gdiff = G_tf-G2 % Differenz der Modelle
  92. Gprod = G_tf*G2 % Hintereinanderschlatung der Modelle
  93. Gfb = feedback(G_tf,G2) % Rückkopplung
  94. %% Analyse von LTI-Modellen
  95. dcgain(G_tf) % Verstärkungsfaktor bestimmen
  96. damp(G_tf) % Natürliche Frequenzen und Dämpfungen
  97. bandwidth(G_tf) % Bandbreite
  98. pole(G_tf) % Pole der Übertragungsfunktion
  99. zero(G_tf) % Nullstellen der Übertragunsgfunktion G_tf
  100. zero(Gsum) % Nullstellen der Übertragunsgfunktion Gsum
  101. pzmap(Gsum) % Pol-Nullstellendiagramm
  102. grid on
  103. figure
  104. impulse(G_tf,10) % Impulsantwort für 10 Sekunden
  105. hold on
  106. step(G_tf,10) % Sprungantwort für 10 Sekunden
  107. legend('Impulsantwort','Sprungantwort');
  108. % Systemantwort auf beliebiges Eingangssignal
  109. [u,t] = gensig('square',1,10); % Erzeugung eines Testsignals
  110. [y,t] = lsim(G_tf,u,t); % Simulation des Systems mit dem Eingangssignal
  111. figure
  112. plot(t,u,t,y)
  113. grid on
  114. legend('Eingangssignal','Ausgangssignal');
  115. % Lösung im eingeschwungenen Zustand
  116. H = freqresp(G_tf,2) % Auswertung an der Stelle omega = 2
  117. % Bodediagramm
  118. figure
  119. bode(G_tf)
  120. grid on
  121. [abs,pha,omega] = bode(G_tf); % Auslesen der Daten aus dem Bodediagramm
  122. [abs,pha,omega] = bode(G_tf,2); % Bodediagramm an der Stelle omega = 2
  123. % Nyquistdiagramm
  124. figure
  125. nyquist(G_tf)
  126. grid on
  127. % Minimalrealisierung von Systemen
  128. minreal((s+1)/(s+1)/s) % Durchführen von Pol-Nullstellen-Kürzungen
  129. %%
  130. % Regler- und Beobachterentwurf: In dieser Einführung sollen nur die
  131. % grundlegenden Bergiffe für Regler- und Beobachterentwurf genannt werden,
  132. % die Anwendung erfolgt dann in den späteren Kapiteln
  133. % Analyse des offenen Regelkreises
  134. allmargin(G_tf/s) % Kennwerte für den offenen Kreis beim Frequenzkennlinienverfahren
  135. A = [-1 2; 0 -2];
  136. B = [0;1];
  137. C = [1,0];
  138. D = 0;
  139. sysr = ss(A,B,C,D)
  140. ctrb(A,B) % Erreichbarkeitsmatrix
  141. obsv(A,C) % Beobachtbarkeitsmatrix
  142. gram(sysr,'c') % Gramsche Matrix (controllability gramian)
  143. gram(sysr,'o') % Gramsche Matrix (observability gramian)
  144. acker(A,B,[-10 -11]) % Polvorgabe
  145. place(A,B,[-10 -11]) % Polvorgabe