123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Einführung in Matlab/Simulink
- %
- % Regelungstechnik Übung
- % Institut für Automatisierungstechnik
- % Gruppe für komplexe dynamische Systeme
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % In diesem Musterfile wird hauptsächlich die Funktionalität der Control
- % Systems Toolbox (CST) näher erläutert. Diese findet vor allem in
- % regelungstechnischen Aufgabenstellungen Anwendung.
- % Ausgangspunkt für die Verwendung der CST ist ein mathematisches Modell
- % der betrachteteten Strecke. Im Allgemeinen werden nur lineare
- % zeitkontinuierliche und zeitdiskrete Probleme betrachtet.
- clear all
- close all
- clc
- %%
- help control % Wichtig: Die Hilfe zur Control Systems Toolbox
- %% Erzeugen von Datenobjekten kontinuierlicher Systeme in der CST
- % Es wird ein einfaches PT2-Glied betrachtet (siehe Vorlesung AT)
- T = 0.5;
- xi = 0.2;
- V = 2;
- % 1. Möglichkeit: Übertragungsfunktion
- G_tf = tf([V],[T^2 2*xi*T 1])
- % Zugriff auf das Datenobjekt
- G_tf.num{1} % Zähler
- G_tf.den{1} % Nenner
- G_tf.Variable % Variable
- % Alternative (ist bevorzugt zu verwenden)
- s = tf('s') % Erzeugen der komplexen Variablen s
- G_tf1 = V/(1+2*xi*T*s+s^2*T^2)
- % 2. Möglichkeit: Über Pol-Nullstellen
- p1 = (-xi+sqrt(xi^2-1))/T;
- p2 = (-xi-sqrt(xi^2-1))/T;
- G_zp = zpk([],[p1 p2],V/T^2)
- % Zugriff auf das Datenobjekt
- G_zp.z{1} % Nullstellen
- G_zp.p{1} % Polstellen
- G_zp.k % Verstärkung (aber nicht der Verstärkungsfaktor V)
- G_zp.Variable % Variable
- % 3. Möglichkeit: Zustandsraumdarstellung
- A = [0 1; -1/T^2 -2*xi/T];
- B = [0;V/T^2];
- C = [1,0];
- D = 0;
- sys = ss(A,B,C,D)
- % Zugriff auf das Datenobjekt
- sys.a % Dynamikmatrix
- sys.b % Eingangsmatrix
- sys.c % Ausgangsmatrix
- sys.d % Durchschaltmatrix
- sys.StateName % Name der Zustände
- % 4. Möglichkeit FRD-Modelle: Numerische Eingabe von gemessenen
- % Übertragungsfunktionen, wird hier nicht näher betrachet
- % Umwandeln der Objekte in andere Darstellungsformen
- G_ss2tf = tf(sys)
- G_spk2tf = tf(G_zp)
- sys_zpk2ss = ss(G_zp)
- sys_tf2ss = ss(G_tf)
- G_ss2zpk = zpk(sys)
- G_tf2zpk = zpk(G_tf)
- % Zusätzliche Möglichkeiten
- help ss2tf
- help ss2zp
- help zp2tf
- help zp2ss
- help tf2zp
- help tf2ss
- %% Diskrete Modelle
- % Diese können prinzpiell wie oben erzeugt werden, ledglich muss noch
- % eine Abstastzeit vorgegeben werden
- Ta = 0.2; % Vorgabe einer Abtastzeit
- % Direktes Erzeugen
- z = tf('z',Ta)
- Gzt = 1/(z-0.5); % Als Übertragungsfunktion
- sysd = ss(1,1,1,0,Ta) % In Zustandsraumdarstellung (hier: Diskreter Integrator)
- % Aus bestehendem kontinuierlichen Modell
- Gz = c2d(G_tf,Ta,'zoh') % Hier wird ein Halteglied nullter Ordnung verwendet
- sys_z = c2d(sys,Ta,'zoh')
- % Modelle im Tustin Bereich (q-Bereich)
- Gq = d2c(Gz,'tustin')
- sys_q = d2c(sys_z,'tustin')
- %% Modelle mit Totzeiten
- G_tzi = tf(1,[1 1],'inputdelay',0.5) % Eingangsverzögerung
- G_tzo = tf(1,[1 1],'outputdelay',0.5) % Ausgangsverzögerung
- G_tzio = tf(1,[1 1],'iodelay',0.5) % Eingangs-Ausgangsverzögerung
- %% Verknüpfung von Modellen
- G2 = 1/s;
- Gsum = G_tf+G2 % Summe der Modelle
- Gdiff = G_tf-G2 % Differenz der Modelle
- Gprod = G_tf*G2 % Hintereinanderschlatung der Modelle
- Gfb = feedback(G_tf,G2) % Rückkopplung
- %% Analyse von LTI-Modellen
- dcgain(G_tf) % Verstärkungsfaktor bestimmen
- damp(G_tf) % Natürliche Frequenzen und Dämpfungen
- bandwidth(G_tf) % Bandbreite
- pole(G_tf) % Pole der Übertragungsfunktion
- zero(G_tf) % Nullstellen der Übertragunsgfunktion G_tf
- zero(Gsum) % Nullstellen der Übertragunsgfunktion Gsum
- pzmap(Gsum) % Pol-Nullstellendiagramm
- grid on
- figure
- impulse(G_tf,10) % Impulsantwort für 10 Sekunden
- hold on
- step(G_tf,10) % Sprungantwort für 10 Sekunden
- legend('Impulsantwort','Sprungantwort');
- % Systemantwort auf beliebiges Eingangssignal
- [u,t] = gensig('square',1,10); % Erzeugung eines Testsignals
- [y,t] = lsim(G_tf,u,t); % Simulation des Systems mit dem Eingangssignal
- figure
- plot(t,u,t,y)
- grid on
- legend('Eingangssignal','Ausgangssignal');
- % Lösung im eingeschwungenen Zustand
- H = freqresp(G_tf,2) % Auswertung an der Stelle omega = 2
- % Bodediagramm
- figure
- bode(G_tf)
- grid on
- [abs,pha,omega] = bode(G_tf); % Auslesen der Daten aus dem Bodediagramm
- [abs,pha,omega] = bode(G_tf,2); % Bodediagramm an der Stelle omega = 2
- % Nyquistdiagramm
- figure
- nyquist(G_tf)
- grid on
- % Minimalrealisierung von Systemen
- minreal((s+1)/(s+1)/s) % Durchführen von Pol-Nullstellen-Kürzungen
- %%
- % Regler- und Beobachterentwurf: In dieser Einführung sollen nur die
- % grundlegenden Bergiffe für Regler- und Beobachterentwurf genannt werden,
- % die Anwendung erfolgt dann in den späteren Kapiteln
- % Analyse des offenen Regelkreises
- allmargin(G_tf/s) % Kennwerte für den offenen Kreis beim Frequenzkennlinienverfahren
- A = [-1 2; 0 -2];
- B = [0;1];
- C = [1,0];
- D = 0;
- sysr = ss(A,B,C,D)
- ctrb(A,B) % Erreichbarkeitsmatrix
- obsv(A,C) % Beobachtbarkeitsmatrix
- gram(sysr,'c') % Gramsche Matrix (controllability gramian)
- gram(sysr,'o') % Gramsche Matrix (observability gramian)
- acker(A,B,[-10 -11]) % Polvorgabe
- place(A,B,[-10 -11]) % Polvorgabe
|