Hallo Zusammen,
ich hätte da eine paar Frage zu einem PID-Regelalgorithmus.
Ich verwende folgenden PID-Algorithmus (nach
http://www.rn-wissen.de/index.php/Regelungstechnik):
1 | esum = esum + e
|
2 | y = Kp*e + Ki*esum + Kd*(e – ealt)
|
3 | ealt = e
|
Die Funktion wird alle X ms aufgerufen und bekommt die Regelabweichung e
übergeben (Kp, Ki und Kd sind die entsprechenden PID-Faktoren).
Meine zu regelnde Strecke wird durch einen 0-10V Ausgang angesteuert
(sagen wir der einfachheit halber ein 16-Bit DAC-Wert).
Ich betrachte momentan nur die PI Anteile, also Kd = 0.
Meine zu regelnde Strecke ist (unbelastet) bei sagen wir mal 5V (0x7fff)
ausgeregelt.
Nun ist mir die Weiterverarbeitung der Stellgröße y nicht so ganz klar.
Ich sehe da 2 Möglichkeiten:
1. Direkte Ausgabe von y auf den DAC der Form: out = PID(e)
2. Aufsummieren von y in der Form: out = out + PID(e)
Zu 1.:
Im Fall das die Regelabweichung e=0 wird, werden auch die P- und D-Terme
0.
Meine Ausgangsgröße out kann also nur noch durch den I-Term zustande
kommen.
esum wird dabei bei jedem Aufruf erhöht, bis die Regeldifferenz 0 ist.
Der P-Term ist dabei meines Erachtens nachrangig, da er lediglich bei
jedem Regelschritt nur einen (Regeldifferenzabhängigen) Offset beiträgt.
Die Regelstrecke ist damit hauptsächlich von I abhängig. Würde ich den
I-Faktor Ki auf 0 setzen,
würde die Regelung nicht funktionieren, da der P-Term ja nirgends
"gespeichert" wird (e=0 -> y=0).
Das kann eigentlich nicht richtig sein.
Zu 2.:
In diesem Fall wird bei jedem Regelschritt der P-Term und der I-Term
voll auf den Stellwert (out) addiert.
Der Regler kann nur mit P-Anteil als auch nur mit I-Anteil betrieben
wrrden.
Wenn ich allerdings einen Anlaufvorgang betrachte, stellt sich folgendes
Problem:
-> Zunächst ist e groß, out wächst schnell über die P- und I-Terme.
-> Komme ich jetzt meinem, Sollwert näher, wird der P-Term schnell
kleiner, der I-Term inkrementiert nur langsamer, verringert sich aber
nicht.
-> Erreiche ich nun meinen Sollwert, ist der P-Anteil 0, der I-Anteil
hat aber seinen Maximalwert erreicht (bedingt durch die Aufsummierung
von e in esum)
und sorgt mir dafür, das out weiter inkrementiert. esum wird erst
abgebaut wenn mein Istwert größer dem Sollwert wird, also wenn e das
Vorzeichen wechselt.
Ich bekomme also Immer einen Überschwinger, ich fürchte sogar dass das
System damit dann immer schwingt (beim "abbremsen" passiert ja das
gleiche).
Dies kann also auch nicht richtig sein.
Da ich aber weiss, das es funktionierende PID-Regler in der realen Welt
gibt, muss ich leider annehmen, das ich irgendwo einen Denkfehler
habe...
Ich wäre sehr dankbar, wenn mich Jemand etwas erleuchten könnte.
Grüße,
omeier