Regelungssysteme day by day
(EN google-translate)
(PL google-translate)
  | 
62_Regelungssysteme/02_Heizregelkreis/
62_Regelungssysteme/03_Verzoegerungsglieder/
62_Regelungssysteme/04_Laplace/
  | 
Während der Vorlesung entstandene Scilab-Skripte:
pt1.zip -- Während der Vorlesung entstandene Scilab-Skripte
Wiederholungen
62_Regelungssysteme/03_Verzoegerungsglieder/
62_Regelungssysteme/04_Laplace/
62_Regelungssysteme/04_Laplace/01_Eigenwerte/
62_Regelungssysteme/04_Laplace/02_PT1/
Neu
Bestimmung der Gesamtübertragungsfunktion eines geschlossenen Regelkreises:
62_Regelungssysteme/04_Laplace/03_PRegler/
P-Regler mit Scilab
62_Regelungssysteme/04_Laplace/04_Scilab/
Übertragungsfunktion mit Scilab / Umsetzung des P-geregelten PT2-Übertragungsgliedes (Vorl.)
PID-Regler
I-Anteil im Zeitbereich mit Scilab / D-Anteil steht noch im Zeitbereich aus
"Übung3"
  | 
Was ist "Totzeit"? / Umsetzung in Scilab
62_Regelungssysteme/07_Einstellregeln/01_Totzeit/
Reglerauslegung nach Ziegler und Nichols
62_Regelungssysteme/07_Einstellregeln/
Methode 1
62_Regelungssysteme/07_Einstellregeln/02_Methode1/
Methode 2
62_Regelungssysteme/07_Einstellregeln/03_Methode2/
Übung: Auslegung eines Reglers zur Strecke 1/((s+1)*(s+1)) nach Methode 1 von Ziegler Nichols, wenn Tt==0,2s
  | 
Der Zustandsregler
62_Regelungssysteme/08_Polvorgabe
62_Regelungssysteme/07_Einstellregeln/05_Daempfungsgrad
Beispiele zu ode und csim -- 62_Regelungssysteme/01_day_by_day/pt1.zip
polvorgabe.zip -- Scilab-Beispiele aus der Vorlesung.
  | 
Polvorgabe, wenn Zielzustand nicht der Nullvektor ist.
Reglerauslegung durch Optimierung
polvorgabe_offset.zip -- Im Unterricht erarbeitete Scilab-Skripte.
  | 
Gleichstrom-Elektromotor -- Herleitung
62_Regelungssysteme/05_Regleroptimierung/06_Gleichstrommotor
Gleichstrom-Elektromotor -- Polvorgabe
62_Regelungssysteme/08_Polvorgabe
OPTIMIERUNG
62_Regelungssysteme/05_Regleroptimierung
62_Regelungssysteme/05_Regleroptimierung/07_Stoerverhalten
Optimierungsbeispiele
62_Regelungssysteme/01_day_by_day/003_optimierung.zip
62_Regelungssysteme/01_day_by_day/identifikation.zip
62_Regelungssysteme/12_Adaptiv/05_Regleroptimierung
SKRIPTE VON DIESEM TAG: 62_Regelungssysteme/01_day_by_day/optimierung.zip
  | 
Projektthema in Gruppen:
Modellierung, Simulation, Regelung und Regelungsoptimierung eines invertierenden Pendels.
Musterlösung heute:
  | 
  | 
m = 1.0;
r = 0.1;
l = 1.0;
h = l/2;
J = (1/4)*m*r*r + (1/12)*m*l*l;
g = 9.81;
function f = rechteSeite(t,y)
    phi = y(1,1);
    om  = y(2,1);
    x   = y(3,1);
    vx  = y(4,1);
    f(1,1) = om;
    sp = sin(phi);
    cp = cos(phi);
    F = 0;
    Z = -m*h*h*om*om*cp*sp + m*g*h*sp + F*h*cp;
    N = J + m*h*h*sp*sp;
    f(2,1) = Z/N;
    f(3,1) = vx;
    f(4,1) = F/m;
endfunction
t = linspace(0,30,3000);
y0 = [1,0,0,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
Code 0-1: Scilab-Programm: invertierendes Pendel ohne Antriebskraft.
  | 
m = 1.0;
r = 0.1;
l = 1.0;
h = l/2;
J = (1/4)*m*r*r + (1/12)*m*l*l;
g = 9.81;
//Linearisierung:
// phi.. = (mgh*phi + F*h) / J
// [phi.;om.] = A * [phi;om] + B * F
A = [  0         1
       m*g*h/J   0];
B = [  0
       h/J];
spec(A)
R = ppol(A,B,[-10+%i*10,-10-%i*10])
// - B*R*y => F = -R*y
function f = rechteSeite(t,y)
    phi = y(1,1);
    om  = y(2,1);
    x   = y(3,1);
    vx  = y(4,1);
    f(1,1) = om;
    sp = sin(phi);
    cp = cos(phi);
    //F = 0;
    r1 = R(1);
    r2 = R(2);
    F = -r1*phi - r2*om;
    Z = -m*h*h*om*om*cp*sp + m*g*h*sp + F*h*cp;
    N = J + m*h*h*sp*sp;
    f(2,1) = Z/N;
    f(3,1) = vx;
    f(4,1) = F/m;
endfunction
t = linspace(0,30,3000);
y0 = [1,0,0,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
Code 0-2: Scilab-Programm: Zustands geregeltes invertierendes Pendel.
Download Scilab-Skripte: 62_Regelungssysteme/01_day_by_day/inversependulum.zip
Bild 0-1: Pendel ohne Kraft.
Bild 0-2: Pendel mit Zustandsregler.
Ergebnisse der Analyse des linearisierten Systems: Eigenwerte bei -7.5594729 und +7.5594729, d.h. instabiles System.
Vorgabe von Zieleigenwerten bei Polvorgabe mit ppol: -10 + 10i und -10 -10i.
  | 
Ziele heute:
  | 
Schritte:
Zustandsregler
  | 
Optimierung
  | 
Offene Fragen
  | 
Aufgabenliste
  | 
Studentische Teillösungen
62_Regelungssysteme/01_day_by_day/Teil_a_b_Zwingmann.zip
  | 
62_Regelungssysteme/01_day_by_day/optipendel.zip
Aufgabe: Steuerung der Schrittweite alpha ergänzen.
Musterlösung, auch mit Kraftbegrenzung:
clear;
//Simulationsmodell
m = 1.0;
r = 0.1;
l = 1.0;
h = l/2;
J = (1/4)*m*r*r + (1/12)*m*l*l;
g = 9.81;
//Linearisierung:
// phi.. = (mgh*phi + F*h) / J
// [phi.;om.] = A * [phi;om] + B * F
A = [  0         1
       m*g*h/J   0];
B = [  0
       h/J];
spec(A)
R = ppol(A,B,[-10+%i*10,-10-%i*10])
// - B*R*y => F = -R*y
function f = rechteSeite(t,y)
    phi = y(1,1);
    om  = y(2,1);
    x   = y(3,1);
    vx  = y(4,1);
    f(1,1) = om;
    sp = sin(phi);
    cp = cos(phi);
    //F = 0;
    r1 = R(1);
    r2 = R(2);
    F = -r1*phi - r2*om;
    if F>100 then
        F = 100;
    end
    if F<-100 then
        F = -100;
    end
    Z = -m*h*h*om*om*cp*sp + m*g*h*sp + F*h*cp;
    N = J + m*h*h*sp*sp;
    f(2,1) = Z/N;
    f(3,1) = vx;
    f(4,1) = F/m;
endfunction
t = linspace(0,1.5,300);
y0 = [1,0,0,0]';
t0 = 0;
y  = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
//----------------------------------------------------------
//Fehlerfunktion
RR = [44.143333,    3.4333333  ];
function err = fehlerfunktion(RRR)
    R = RRR;
    y  = ode(y0,t0,t,rechteSeite);
    err = sum( abs(y(1,:)) );
endfunction
//Ausgangspunkt und dessen Fehler:
err_aktuell = fehlerfunktion(RR);
disp("Start-Fehler bei Verwendung der ppol-Ergebnisse:");
disp(err_aktuell);
startfehler = err_aktuell;
RRstart     = RR;
//----------------------------------------------------------
//Optimierer:
// Optimierer formulieren:
SCHRITTE = 2000;
alfamat = [0.1,0.1;0.1,0.1]; //Zeile==Paramternummer, Spalte==Richtung
for i=1:1:SCHRITTE
    RRneu = RR;
    //Zufällig wählen, welcher Parameter variiert wird.
    index = grand(1, 1, "uin", 1, 2);    
    //Zufällig Richtung wählen, in die ich den Parameter ändere
    index_richtung = grand(1, 1, "uin", 1, 2);    // [1 oder 2]
    richtung = 2*(index_richtung-1) - 1;    // [-1 oder +1]
    alfa = alfamat(index,index_richtung);
    RRneu(index) = RRneu(index) + richtung*alfa;
    err_neu = fehlerfunktion(RRneu);
    if err_neu < err_aktuell then
            disp(err_neu);
    end
    if    err_neu <= err_aktuell then
        RR = RRneu;
        err_aktuell = err_neu;
        alfamat(index,index_richtung) = alfa *1.01;
    else
        alfamat(index,index_richtung) = alfa *0.99;
    end
end
disp(RR)
err_best = fehlerfunktion(RR)
R = RR;
y  = ode(y0,t0,t,rechteSeite);
plot(t,y(1,:)',t,y(2,:)');
disp("Fehler nach Optimierung:");
disp(err_best);
disp("Fehler VOR Optimierung:");
disp(startfehler);
Code 0-3: Optimierung mit Schrittweitensteuerung.
  | 
E-Test 8:30
Einfache Modellierung eines Fahrzeugs / Regelung mit N.N. -- nur Kinematik!!!
  | 
siehe auch: Neuronales Netz auf FPGA-Basis ganz unten in day_by_day 69_FPGA/30_day_by_day/ :-)
Ergänzungen
Im bisherigen Verlauf der LV wurde konzentriert auf den Zustandsregler "hin gearbeitet". Einige Inhalte wurden dabei übersprungen. Ohne bei diesen zu sehr in die Tiefe zu gehen, sollen diese im Nachhinein angesprochen werden.
  | 
62_Regelungssysteme/05_Regleroptimierung/07_Stoerverhalten
  | 
62_Regelungssysteme/11_Stabilitaet
  | 
62_Regelungssysteme/11_Stabilitaet/02_Nyqusitkriterium
  | 
62_Regelungssysteme/11_Stabilitaet/04_Bode
  | 
62_Regelungssysteme/07_Einstellregeln/03_Methode2
  | 
62_Regelungssysteme/11_Stabilitaet/03_Windup
  | 
62_Regelungssysteme/07_Einstellregeln/05_Daempfungsgrad
  | 
62_Regelungssysteme/09_Beobachter
  | 
62_Regelungssysteme/12_Adaptiv/01_Definition
  | 
50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate
  | 
50_Simulationstechnik/07_Genalgorithmus
  | 
62_Regelungssysteme/13_Analyse/02_Nichtlinear
  | 
62_Regelungssysteme/14_Kalmanfilter
  | 
Kleinste Quadrate Methode
Gemeinsamer Entwurf einer Aufgabe und dessen Lösung.
//postulierter funktionaler Zusammenhang: // a= c0 + c1 * u^2 + c2 * 2^u //Messwerte: // u | a // 0 | 4 // 1 | 3 // 2 | 2 // 3 | 1 B = [1 0 1;1 1 2;1 4 4;1 9 8] d = [-4;-3;-2;-1] A = B'*B b = B'*d c = -inv(A)*b c0=4 c1=0 c2=-0.4 u = [0 1 2 3] a = c0 + c1*u + c2*2^u plot(u,a) a2 = [4 3 2 1]; plot(u,a2,'*') cc = lsq(B,-d)
Code 0-4: Beispiel aus dem Unterricht (Handrechnung fehlt hier).
Anderes Beispiel, siehe:
50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/02_Beispiel
Beispiel mit Realitätsbezug: Parameter eines Elektromotors bestimmen:
62_Regelungssysteme/08_Polvorgabe
Fuzzy-Regler
Im zweiten Teil der LV soll auf der Code-Basis der einfachen Fahrzeug-Simulation aus FPGA ein Fuzzy-Regler implementiert werden.
AV102_Sensor_alternativ.zip -- Ausgangsbasis
AV702_FUZZY.zip -- Musterlösung
  | 
Zustandsregler mit Beobachter am Beispiel des invertierenden Pendels
zustandsregler_mit_beobachter_inverses_pendel.zip