Hallo,
ich habe Schwierigkeiten bei der Diskretisierung meines PID-Algorithmus.
Ich will den realen PID-Regler verwenden (DT1 anstatt D-Glied) und als
Geschwindigkeitsalgorithmus implementieren. Die drei Anteile würde ich
gerne einzeln diskretisieren und anschließend aufsummieren (siehe
Blockdiagramm).
Ich habe meinen Diskretisierungs-Versuch angehangen.
Mir kommt es jedoch seltsam vor, dass der DT1-Anteil eine andere
Verstärkung hat als der reine D-Anteil. Mache ich irgendwo einen Fehler,
den ich übersehe?
Ich stelle mir das so vor, dass das alte Du_k-1 mit dem Faktor Tg/(Tg+T)
eingeht und das neue Du_k mit dem Faktor 1/(Tg+T). Die Addition der
Faktoren ist allerdings größer als 1 --> Verstärkung.
Die Frage ist dementsprechend: Ist das korrekt und ich habe durch
Verwendung des DT1 eine Verstärkung oder habe ich einen Fehler gemacht?
Viele Grüße und Danke für Eure Hilfe
Wiesel
Wieso differenzierst du deinen PID Regler?!
Ich würde dir eher dazu raten eine mögliche Tabelle von Reglern zu
erstellen: P,PI,PDT1,PIDT1 und dann deinen gewünschten Regler einfach
auswählen. Hier ein Beispiel für PIDT1:
u=k1* uk_1+ k2* uk_2 + k3* e+ k4* ek_1+ k5* ek_2;
...
Das ist der schnellste und eleganteste Weg.
Hallo,
der Grund den sog. Geschwindigkeitsalgorithmus zu wählen ist eine
Adaptivität der PID-Parameter. So kann ich sicherstellen, dass
Parameteränderungen nicht sofort "voll durchschlagen" und das
Stellsignal schlagartig verändern.
Und da ich keine Diskretisierung für diesen Fall gefunden habe, habe ich
per Hand diskretisiert. Grundsätzlich ist der Differenzierer an der
Stelle in der Praxis (gerade für Stellglieder mit integrierendem
Verhalten) ja glaube ich Gang und Gebe!?
Beispiel eines "idealen" PID-Algorithmus als
"Geschwindigkeitsalgorithmus ist bspw. hier nachzulesen:
http://homepages.uni-regensburg.de/~erc24492/PID-Regler/PID-Regler.pdf
Viele Grüße
Jan
Wiesel schrieb:> Und da ich keine Diskretisierung für diesen Fall gefunden habe, habe ich> per Hand diskretisiert. Grundsätzlich ist der Differenzierer an der> Stelle in der Praxis (gerade für Stellglieder mit integrierendem> Verhalten) ja glaube ich Gang und Gebe!?
Nein!
Damit kompensierst du den I-Anteil und der Regler wird instabil, da die
Nenner Nullstellen kleiner Zähler Ns sind.
Okay, dann versuche ich es mal auf herkömmliche Art und Weise.
Ist die Diskretisierung, die ich angehangen habe so korrekt?
Ich finde es "verwunderlich", dass ich im Gegensatz zu den Ansätzen aus
den von dir angesprochenen Tabellen kein uk_2 und kein ek_2 benötige.
Der Grund dafür, dass ich nicht einfach die gängigen PID-Algorithmen aus
einem Buch "abschreibe" ist, dass ich zum Einen gerne verstehen möchte,
was passiert und zum Anderen, weil ich gerne die 3 Stellgrößen des P-,
I- und D-Anteils einzeln als Variablen in meinem Mikrocontroller
vorliegen haben möchte, um sie zu beobachten und auszuwerten.
Vielen Dank für deine Hilfe aSma>>!
PID-Regler diskret:
mit dem Integral:
sk = sk-1 + kR*T/Ti*ek
ergibt sich für den Regler:
yk = kR*ek + kR*T/Ti*ek + sk-1 + kR*Tv*(ek - ek-1)/T
Im ausgeregelten Zustand ist ek=0 und ek-1=0. Was auch immer ich mit den
Reglerparametern mache, es wird nichts springen.
Wenn ek<>0 dann wird auch beim Geschw.Algorithmus der Ausgang springen.
Waldo
Hallo Waldo,
genau, ich meine natürlich den Fall e<>0.
I-Anteil:
Damit im konventionellen PID-Algorithmus kein Sprung im I-Anteil
auftritt, muss der Faktor K_i mit in die Summe gezogen werden. Bei dem
Geschwindigkeitsalgorithmus brauche ich mir an der Stelle keine Gedanken
machen, weil sich eine Veränderung des Faktors K_i nur auf die
zukünftigen Stellwert"änderungen" auswirkt.
P-Anteil:
Hier bin ich mir nicht sicher.
Szenario: Ich habe eine Regelabweichung die mir im P-Anteil einen
gewissen Stellwert u beschert. Wird nun der Parameter K_p verdoppelt,
verdoppelt sich sofort auch der Stellwert u. Die Frage, die ich mir hier
stelle ist, ob dies nicht sogar gewollt ist? Mit dem veränderten
Regelparameter K_p reagiere ich ja auf eine Änderung im
Streckenverhalten. Ist also ab diesem Zeitpunkt eine Verdopplung des
Stellwerts nicht sogar notwendig, da die Strecke ja schon anders
reagiert?
Im Geschwindigkeitsalgorithmus dagegen geht die Änderung wieder nur so
ein, dass ab dem Zeitpunkt der K_p-Änderung die Änderung des Stellwerts
doppelt so schnell ist. Also keine "schlagartige" Änderung des
Stellwerts.
Ist klar geworden worauf ich hinaus will?
Wiesel schrieb:> Okay, dann versuche ich es mal auf herkömmliche Art und Weise.> Ist die Diskretisierung, die ich angehangen habe so korrekt?
Ja, sieht gut aus. Den I-Anteil kannst du auch zu Ende schreiben:
uk = uk_1 + KI*Ta*ek
> Ich finde es "verwunderlich", dass ich im Gegensatz zu den Ansätzen aus> den von dir angesprochenen Tabellen kein uk_2 und kein ek_2 benötige.
Du hast halt Euler Rückwärts als Polygonzugverfahren. Ich dagegen habe
Eulervorwärts. Da gibt es Vor- und Nachteile, die man bei Lutz Wendt mal
nachlesen könnte. Sei nur gesagt, dass wenn die Strecke in der Frequenz
Ebene stabil ist, dann ist diese bei Eulervorwärts auch, sonst muss man
die Abtastzeit an die kleinste Streckenkonstante anpassen (siehe auch
u.a. Serge Zacher, Manfred Reuter).
> Der Grund dafür, dass ich nicht einfach die gängigen PID-Algorithmen aus> einem Buch "abschreibe" ist, dass ich zum Einen gerne verstehen möchte,> was passiert und zum Anderen, weil ich gerne die 3 Stellgrößen des P-,> I- und D-Anteils einzeln als Variablen in meinem Mikrocontroller> vorliegen haben möchte, um sie zu beobachten und auszuwerten.
Kannst du gerne doch machen aber anhand der Simulation am PC. Am µC
braucht jede Multiplikation seine Zeit. Vorallem bei
Fließkommaarithmetik braucht eine Multiplikation von double mit 0
mehrere dutzend Befehle.
PS: "schlagartige Änderung" kann man auch mit einer Rampe lösen.
Der P-Anteil springt auch beim Geschw.Algo., nämlich dann, wenn die
Abweichung springt.
Das Design liefert eben keinen Sprung bei Parameteränderung. Dieser
Sprung wird durch eine neue Aufteilung der Anteile im Regler
kompensiert. Der I-Anteil wird virtuell neu gesetzt.
Im diskreten DT1-Glied wird uk-1 mit einem Wert <1 ( T1/(T1+T) <1 )
bewertet. Die Eigenbewegung klingt also stabil ab.
Waldo
Wiesel schrieb:> Wird nun der Parameter K_p verdoppelt,> verdoppelt sich sofort auch der Stellwert u. Die Frage, die ich mir hier> stelle ist, ob dies nicht sogar gewollt ist?
Natürlich nicht! In der Praxis lässt man den integralen Anteil dann neu
berechnen, damit die Stellgröße bei Parameteränderung nicht springt.
Wow, vielen Dank! Eure Antworten helfen mir wirklich sehr!
Auf eine Neuberechnung des I-Anteils bin ich noch gar nicht gekommen.
Heißt das in der Praxis, dass ich die Integralsumme so anpasse, dass der
Stellwert trotz Parameteränderung gleich bleibt? Und anschließend wird
dann der PID berechnet?
Was bedeutet die Parameteränderung eigentlich für den D-Anteil?
Und nur, um nochmal sicherzugehen: Ein Geschwindigkeitsalgorithmus ist
keine Option bzw. eine schlechte Wahl?
Und damit ich demnächst nicht mehr so viel fragen muss: Wo finde ich in
der Literatur etwas zu solchen Themen?
Viele Grüße
Wiesel
Mich würde es eher interessieren in welchen Einsatzgebiet dein Regler
eingesetzt werden soll?
Nehmen wir mal an als adaptiver Temperaturregler mit Selftuning. Bei den
Dingern von Jumo gibt man einen Regler vor: PI, PID, 2P, 3P...
Beim Selftuning ändern sich nur die Parameter aber nicht der Regler.
Dieser bleibt als Vorgabe bestehen.
Wenn der Reglertyp beibehalten wird und sich die Parameter ändern durch
Selftuning, dann soll es doch auch Änderung in der Stellgröße geben.
Hallo,
der Regler soll zur Erwärmung von Wasser eingesetzt werden.
Der Regler an sich soll gleich bleiben. Allerdings sorgen verschiedene
Störgrößen für ein deutlich anderes Streckenverhalten (Parameter habe
ich unter verschiedenen Bedingungen anhand von Sprüngen ermittelt).
Darauf will ich reagieren, indem ich die Parameter des Reglers (Kp, Tn,
Tv) an diese Änderung des Streckenverhaltens anpasse. Also eine
gesteuerte Adaptivität der Regelparameter. Keine Änderung des Reglers
selbst.
Der Geschw.Algo. ist nur eine Form der Implementierung eines
PID-Reglers.
Das PID-Verhalten ist zu 100% erfüllt. Wie ich von einem Regler bzw.
einem Parametersatz zum nächsten umschalte ist in der PID-Struktur nicht
festgelegt.
Der D-Anteil ist nicht frei wählbar. Man kann diesen nicht setzen, da es
kein Gedächtnis gibt. Das Gedächtnis das ich setzen kann ist der
I-Anteil.
Waldo
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang