Hallo
Ich habe meinen ersten PI-Regler auf einem uC integriert und noch einige
Unsicherheitsfaktoren... Die Regelstrecke ist ein passives
Tiefpassfilter 2. Ordnung mit OP. Geregelt wird eine Spannung von 0..10V
mittels PWM.
Frage 1: KS Skalierung
======================
Ich arbeite mit Fixkommazahlen und habe leider auch keine ALU die mit
einem Zyklus Multiplizieren kann. So hab ich mir überlegt, möglichst nur
die Konstanten und die Stellgrösse w zu skalieren, da w am wenigsten oft
ändert.
Alle Werte bei 100% Ausgangsspannung.
w_ = 254 (8bit Stellgrösse 0..254 = 0..100%)
x_ = 924 (10bit ADC)
u_ = 473 (9bit PWM 5V)
y_ = 10V (Ausgangsspannung -> geregelte PWM mit 2 PT1 Gliedern + OP mit
G=2.22)
Ich skaliere w_ mit dem Faktor 3.64 (233/64) auf den Wertebereich von x
(w_ * 3.64 = 924). Somit ist bei 10V Ausgangsspannung w und x gleich
gross und der Fehler e = 0. Auf KP, KI, KD sollte dies keinen Einfluss
haben? Bevor ich den Stellgrösse u in das PWM Register schreibe skaliere
ich mit dem Faktor 473/924 = 0.512, was vermutlich 1/KS entsprechen
müsste.
Ist dies korrekt? Die Formel ist KS=dx/dy, was setzte ich für dy in
meinem Fall ein?
Frage 2: Parameter bestimmen
============================
Folgende Werte habe ich gemessen:
Tu = 12us
Ta = 47us (geht leider nicht schneller)
Tg = 400us
KP kritisch = 2
T kritisch = 475us
KS = 1.95?
Nach Chien/Hrones/Reswick erhalte ich dafür KP=15.4, KI*Ta=18.2, q0=6.6,
q1=-6.0
Nach Ziegler/Nichols bekomme ich KP=6.0, KI*Ta=0.6, q0=33.6, q1=-15.4
Implementiert habe ich den Stellungsalgo vereinfacht so:
1 | e = (w*3.64) - x; //Vergleich
|
2 | y = yalt + 7*e - 6*ealt; //Reglergleichung
|
3 | ealt = e;
|
4 | yalt = y;
|
5 | PWM = y;
|
Da schwingt aber alles, darum vermute ich hier noch einen
Überlegungsfehler. Den Genauigkeitsverlust beim Integrationsanteil habe
ich beachtet.
Wenn ich aber nach der Try&Error Methode mal dies versuche:
1 | e = (w*3.64) - x; //Vergleich
|
2 | y = yalt + e/8 - ealt/16; //Reglergleichung
|
3 | ealt = e;
|
4 | yalt = y;
|
5 | PWM = y/2;
|
funktioniert der Regler fast wie gewünscht (siehe Frage 3). Ich weiss
aber auch nicht genau wieso :)
Sieht hier jemand einen Fehler? Irgendwie scheint mit Theorie und Praxis
noch nicht aufzugehen???
Frage 3: Störstabilität
=======================
Bei der 2. Implementation aus Frage 2. funktioniert die Regelung mit der
gewünschten Genauigkeit. Um die Störstabilität zu testen habe ich das
Verhalten getestet wenn sich der Verstärkungsfaktor der Regelstrecke
ändert. Bei einer Verstärkung um Faktor 1.2 vermag der PI Regler das PWM
Signal zu drosseln und exakt auf 10.0V regeln. Hat der
Verstärkungsfaktor (Gz?) aber nur schon 2% weniger als 1 sakt die
Ausgangsspannung langsam ab. Bei 0.9 ist der Ausgang 9.34V.
Ich dachte erst an eine HW Begrenzug oder Implementierungsfehler bei
negativen Zahlen. Leider konnte ich bis jetzt mit Messen/Debuggen nichts
finden.
Könnte dies auch ein Überlegungsfehler sein?
Vielen Dank für eure Antworten