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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.