kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz
80 Vorlesung_2014_10_01
81 Vorlesung_2014_10_08
82 Vorlesung_2014_10_15
83 Vorlesung_2014_10_22
84 Vorlesung_2014_10_29
kramann.info
© Guido Kramann

Login: Passwort:




Identifizierung der Regelstrecke

(EN google-translate)

(PL google-translate)

Grundidee: Da die Übertragungsfunktion von PWM auf "Pixelgeschwindigkeit" (Pixel/Sekunde) einem PT2-Übertragungsglied zu ähneln scheint, wird versucht, hierfür die Parameter zu identifizieren.

Im Anschluß wird an das gefundene Übertragungsglied noch ein Integrator angehangen, um so wieder die Übertragungsfunktion von PWM auf "Pixel" zu erhalten.

Regelstrecke bestehend aus PT2-Übertragungsglied und Integrations-Element.

Bild 0-1: Regelstrecke bestehend aus PT2-Übertragungsglied und Integrations-Element.

Erster Versuch

ZZ  = [0.    ,   0.;         
       0.074 ,   94.594595;  
       0.133 ,   1271.1864;  
       0.199 ,   1363.6364;  
       0.265 ,   1393.9394];

p=0.0001;
q=0.0001;
r=0.0001;

s = poly(0,"s");
G = syslin('c',[1],[p*s*s+q*s+r]); //Definition eines PT2-Übertragungsgliedes

t = ZZ(:,1)';
anz=size(t);
u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
y = csim(u,t,G);

plot(t,ZZ(:,2)',t,y(1,:));

Code 0-1: Erstes Testprogramm zur Abschätzung der gesuchten Parameter.

Plot aus vorangehendem Skript.

Bild 0-2: Plot aus vorangehendem Skript.

Zweiter Versuch: Verwendung eines Optimierungsverfahrtens

//Vergl. Beispiel optim(..) in der Scilab-Hilfe:
clear();

//function [f, g, ind]=cost(x, ind)
function f=berechneFehler(x)
    ZZ  = [0.    ,   0.;         
           0.074 ,   94.594595;  
           0.133 ,   1271.1864;  
           0.199 ,   1363.6364;  
           0.265 ,   1393.9394];

    p=x(1);
    q=x(2);
    r=x(3);

    s = poly(0,"s");
    G = syslin('c',[1],[p*s*s+q*s+r]); //Definition eines PT2-Übertragungsgliedes

    t = ZZ(:,1)';
    anz=size(t);
    u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
    y = csim(u,t,G);

    //g = x - x0;
    differenz = y(1,:)' - ZZ(:,2); //Differenz
//    f = 0.5 * norm(differenz)^2;
    f = differenz'*differenz;
endfunction


x0 = [0.0001;0.0001;0.0001];

//[fopt, xopt] = optim(cost, x0);
//[fopt, xopt, gopt] = optim(cost, "b", x0.*0.1, x0.*10.0, x0,"gc")
//[fopt, xopt, gopt] = optim(list(NDcost,berechneFehler), "b", x0.*0.1, x0.*10.0, x0,"gc")
//[fopt, xopt, gopt] = optim(list(NDcost,berechneFehler),x0);
[fopt, xopt, gopt] = optim(list(NDcost,berechneFehler), "b", x0.*0.001, x0.*1000.0, x0);

//Plot mit optimalen Parametern:
disp(xopt);

ZZ  = [0.    ,   0.;         
       0.074 ,   94.594595;  
       0.133 ,   1271.1864;  
       0.199 ,   1363.6364;  
       0.265 ,   1393.9394];

p=xopt(1);
q=xopt(2);
r=xopt(3);

s = poly(0,"s");
G = syslin('c',[1],[p*s*s+q*s+r]); //Definition eines PT2-Übertragungsgliedes

t = ZZ(:,1)';
anz=size(t);
u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
y = csim(u,t,G);

plot(t,ZZ(:,2)',t,y(1,:));

Code 0-2: Verwendung der Optimierungsfunktion optim()

Plot aus vorangehendem Skript.

Bild 0-3: Plot aus vorangehendem Skript.

Dritter Versuch: Vorangehende Interpolation der Meßwerte

    ZZ  = [0.    ,   0.;         
           0.074 ,   94.594595;  
           0.133 ,   1271.1864;  
           0.199 ,   1363.6364;  
           0.265 ,   1393.9394];
    tt=linspace(0,0.265,10)
    ZZZZ = interp1(ZZ(:,1),ZZ(:,2),tt,"linear");
    plot(tt,ZZZZ);
    ZZ = [tt',ZZZZ'];

Code 0-3: Lineare Interpolation der Meßwerte.

ZZ  = [0.           0.         
    0.0294444    37.638991  
    0.0588889    75.277981  
    0.0883333    380.43328  
    0.1177778    967.62128  
    0.1472222    1291.1083  
    0.1766667    1332.3528  
    0.2061111    1366.9014  
    0.2355556    1380.4204  
    0.265        1393.9394];

Code 0-4: Grundlage für die weitere Identifikation.

Lineare Interpolation der Werte.

Bild 0-4: Lineare Interpolation der Werte.

Vierter Versuch: Asymptote vorgeben (Systemwissen ergänzen)

clear();
    ZZ  = [0.    ,   0.;         
           0.074 ,   94.594595;  
           0.133 ,   1271.1864;  
           0.199 ,   1363.6364;  
           0.265 ,   1393.9394;
           1.0   ,   1400.0 ];
    tt=linspace(0,1.0,100)
    ZZZZ = interp1(ZZ(:,1),ZZ(:,2),tt,"linear");
    plot(tt,ZZZZ);
    ZZ = [tt',ZZZZ'];

function f=berechneFehler(x)

    p=x(1);
    q=x(2);
    r=x(3);

    s = poly(0,"s");
    G = syslin('c',[1],[p*s*s+q*s+r]); //Definition eines PT2-Übertragungsgliedes

    t = ZZ(:,1)';
    anz=size(t);
    u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
    y = csim(u,t,G);

    //g = x - x0;
    differenz = y(1,:)' - ZZ(:,2); //Differenz
//    f = 0.5 * norm(differenz)^2;
    f = differenz'*differenz;
endfunction


x0 = [0.0001;0.0001;0.0001];
[fopt, xopt, gopt] = optim(list(NDcost,berechneFehler), "b", x0.*0.001, x0.*1000.0, x0);

//Plot mit optimalen Parametern:
disp(xopt);

p=xopt(1);
q=xopt(2);
r=xopt(3);

s = poly(0,"s");
G = syslin('c',[1],[p*s*s+q*s+r]); //Definition eines PT2-Übertragungsgliedes

t = ZZ(:,1)';
anz=size(t);
u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
y = csim(u,t,G);

plot(t,ZZ(:,2)',t,y(1,:));

Code 0-5: Optimierung mit interpolierten Meßwerten.

Plot zu obigem Skript.

Bild 0-5: Plot zu obigem Skript.

p = 0.0000135  
q = 0.0002673  
r = 0.0028864  

Code 0-6: Optimierte Parameter.

Fünfter Versuch: Nicht schwingungsfähiges System postulieren

clear();
    ZZ  = [0.    ,   0.;         
           0.074 ,   94.594595;  
           0.133 ,   1271.1864;  
           0.199 ,   1363.6364;  
           0.265 ,   1393.9394;
           1.0   ,   1400.0 ];
    tt=linspace(0,1.0,100);
    ZZZZ = interp1(ZZ(:,1),ZZ(:,2),tt,"linear");
    plot(tt,ZZZZ);
    ZZ = [tt',ZZZZ'];

function f=berechneFehler(x)

    p=x(1);
    q=x(2);
    r=x(3);

    s = poly(0,"s");
    G = syslin('c',[p],[(q+s)*(r+s)]); //...nicht schwingungsfähig!

    t = ZZ(:,1)';
    anz=size(t);
    u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
    y = csim(u,t,G);

    differenz = y(1,:)' - ZZ(:,2); //Differenz
    f = differenz'*differenz;
endfunction

x0 = [100000.0;20.0;20.0];
[fopt, xopt, gopt] = optim(list(NDcost,berechneFehler), "b", x0.*0.001, x0.*1000.0, x0);

//Plot mit optimalen Parametern:
disp(xopt);

p=xopt(1);
q=xopt(2);
r=xopt(3);

s = poly(0,"s");
    G = syslin('c',[p],[(q+s)*(r+s)]); //...nicht schwingungsfähig!

t = ZZ(:,1)';
anz=size(t);
u = 4.0*ones(anz(1),anz(2));  //PWM-Signal hatte den Wert 4.
y = csim(u,t,G);

plot(t,ZZ(:,2)',t,y(1,:));

Code 0-7: PT2-Glied mit rein reellen polstellen.

Plot zu obigem Skript.

Bild 0-6: Plot zu obigem Skript.

p=115509.42  
q=    18.067538  
r=    18.067538  

Code 0-8: Optimierte Parameter - werden zur Grundlage für die Reglerauslegung!