Forum: Digitale Signalverarbeitung / DSP / Machine Learning Diskretisierung des realen PID-Reglers als Geschwindigkeitsalgorithmus


von Wiesel (Gast)


Angehängte Dateien:

Lesenswert?

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

von aSma>> (Gast)


Lesenswert?

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.

von Wiesel (Gast)


Lesenswert?

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

von aSma>> (Gast)


Lesenswert?

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.

von Wiesel (Gast)


Angehängte Dateien:

Lesenswert?

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>>!

von Waldo (Gast)


Lesenswert?

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

von Wiesel (Gast)


Lesenswert?

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?

von aSma>> (Gast)


Lesenswert?

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.

von Waldo (Gast)


Lesenswert?

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

von Dirac Impuls (Gast)


Lesenswert?

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.

von Wiesel (Gast)


Lesenswert?

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

von aSma>> (Gast)


Lesenswert?

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.

von Wiesel (Gast)


Lesenswert?

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.

von Waldo (Gast)


Lesenswert?

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

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.