Forum: Mikrocontroller und Digitale Elektronik Ks skalieren bei einem PID Regler


von Roger (Gast)


Lesenswert?

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

von Roger (Gast)


Lesenswert?

Anmerkung zu Teil 3:
====================

Bei Sollwert = 254 ist die PWM bei 92% (wenn Gz=1), bei Gz=1.1 ist die 
PWM 82%, bei Gz=0.98 bei 96% und bei Gz=0.9 wieder unten bei 82% statt 
bei 99%. 0<= PWM <=511 hab ich beachtet und alle Variablen sind signed 
oder unsigned int16.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.