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.

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.

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()

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.

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.

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.

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!