Hey Leute, ich möchte einen digitalen PID Regler auf einem Arduino Due, aber mit dem ASF, realisieren. Geplant ist einen Timer einzusetzen, der mit einer Zeit Ttim periodisch ein Interrupt auslöst, in dem die Berechnung für den Regler erfolgt. Die Abtastrate Ta des AD-Wandlers soll 1MS/s betragen. Ich habe im Artikel Regelungstechnik von RN-Wissen nachgelesen, dass die Zeit Ta/2 für einen quasi-kontinuierlichen Betrieb viel kleiner sein sollte, als die dominierende Zeitkonstante der Regelstrecke (ich glaube in meinem Fall liegt ein einfaches PT1 Glied vor). Nun meine Frage, die hoffentlich nicht zu doof gedacht ist. Wenn ich die Periodendauer Ttim des Timers auf 1ms festlege und beim Auslösen des Interrupts gleichzeitig AD wandle, ist die eigentliche Abtastrate zwar immer noch 1MHz, aber um abzuschätzen, ob ich mit dem Regler quasi-kontinuierlich Arbeite, muss ich doch die Periodendauer Ttim mit meiner Zeitkonstante T1 der Regelstrecke vergleichen oder liege ich da flasch? Habt ihr vielleicht ein paar Erfahrungswerte für mich, um welchen Wert ich meine "Abtastrate" kleiner als die Zeitkonstante T1 machen muss? Vielen Danke und einen schönen Abend Willy :)
>um welchen Wert ich meine "Abtastrate" kleiner als die Zeitkonstante T1 machen
muss?
Man sagt so Faktor 10.
Ich empfehle eine Simulation um dies zu erforschen. Wichtig dabei sind auch die Nichtlinearitaeten. Fuer Nilchtlineare System kann man uebrigens einen Grossteil der Theorie ueber Bord schmeissen. Ich sag mal Faktor 10 schneller als Tau ist ein guter Anfang. Das Stellglied sollte es dann auch bringen...
... im Grunde nichts anderes, als der zeitliche Abstand zwischen zwei Messungen bzw. Regelvergleichen. Da die digitale Regelung nichts anderes ist als ein Zyklus aus: Zeit ermitteln + messen + berechnen. Man kann mit diesem Zyklus eine Vollbeschäftigung der CPU erreichen oder im anderen Extrem, Reglerbedingt, einige tolle Überläufe produzieren. Keiner kann Dir verwehren, die Temperatur einer großen Masse (z.B. Raum) im Mikrosekundentakt zu erfassen. Nur tut sich dabei nichts. Auch kann Dir Keiner verwehren die Bahn eines Flugkörpers alle Sekunde zu prüfen. Dabei sollte man aber die Beschleunigungssensoren im "Auge" behalten, sonst bekommst Du den Crash gar nicht mit.
grüner Krauterer schrieb: > Ich empfehle eine Simulation um dies zu erforschen. Meine Ausgangsgröße ist der DutyCycle einer PWM. Muss ich um die Sprungantwort des Systems aufzunehmen einfach nur die Regelstrecke mit einem normalen Sprung beaufschlagen oder muss ich die Sprungantwort durch die PWM mit plötzliche Erhöhung des DutyCycle aufnehmen?
Amateur schrieb: > Man kann mit diesem Zyklus eine Vollbeschäftigung der CPU erreichen oder > im anderen Extrem, Reglerbedingt, einige tolle Überläufe produzieren. Könntest du auf die Überlaufe genauer eingehen? Meinst du den Integrator der Überlaufen kann? Ich habe da irgendwann mal gehört, dass es da zu Problemen kommen kann.
>Meine Ausgangsgröße ist der DutyCycle einer PWM.
Dabei wuerde ich pro Zyklus, falls moeglich, auf Ueberstrom pruefen, und
den PWM Wert alle Reglerperioden aendern. Wenn das 1000 PWM Perioden
sind, was solls. Massgebend ist das Zeitverhalten des Systems.
W. M. schrieb: > Amateur schrieb: >> Man kann mit diesem Zyklus eine Vollbeschäftigung der CPU erreichen oder >> im anderen Extrem, Reglerbedingt, einige tolle Überläufe produzieren. > > Könntest du auf die Überlaufe genauer eingehen? Meinst du den Integrator > der Überlaufen kann? Ich habe da irgendwann mal gehört, dass es da zu > Problemen kommen kann. Überleg mal logisch. Wenn dein Regler eine Heizung betreut und alle Zehntelsekunde die Reglergleichung laufen lässt. Er detektiert, dass es zu kalt ist und aus diesem Grund dreht er die Heizung auf. Dumm an der ganzen Sache ist nur, dass es 4 Stunden dauert, bis die Produktionshalle auch nur um 2 Grad wärmer geworden ist. Der Regler vergleicht aber alle 1 Zehntelsekunden die Solltemperatur mit der Isttemperatur und da das eine halbe Stunde dauert, bis er überhaupt mal eine Temperaturzunahme feststellen kann, dreht er die Heizung immer weiter und immer weiter und immer weiter auf. Das Spielchen geht so lange, bis sich seine Fehlersumme in astronmische Höhe aufgeschaukelt hat und dann endlich nach 4 STunden das gegenteilige Problem entsteht: Der Regler braucht erst mal wieder eine halbe Stunde bis er die Fehlersumme soweit wieder reduziert hat, dass er dann das erste mal die Heizung wieder ausschaltet. Nur halt leider eine halbe Stunde zu spät, in der die Halle weiter geheizt wurde, obwohl es eigentlich schon warm genug ist. anderes, biologisches Beispiel: wenn du beim Autofahren eine nervöse Hand hast und sofort rasend schnelle Lenkbewegungen machst, dann wirst du keine einzige Kurve vernünftig durchfahren können sondern dauern im Zickzack um die Kurve rumschleudern. zu langsam regeln ist nichts. zu schnell regeln aber auch nicht. Die Anzahl der Korrekturen muss in einem vernünftigem Verhältnis zur Reaktion des Systems stehen. Das genannte Steuer Beispiel ist gar nicht so realitätsfern. Wer das erste mal am Steuerrad eines SChiffes steht hat meistens genau dieses Problem, dass er viel zu schnelle Korrekturen macht auf die das Schiff gar nicht reagieren kann. Da keine Reaktion kommt dreht er noch mehr am Ruder und noch mehr, bis dann endlich die Drehung einsetzt - natürlich viel zu schnell wodurch er wieder in die andere Richtung korrigieren muss. Diese Leute erkennt man daran, dass sie es nicht schaffen ganz einfach gerade aus zu fahren.
:
Bearbeitet durch User
Zum testen des System könnte man auch die normale Sprungantwort messen. Das ist ja ein Sprung von 0% auf 100% PWM Wert. Es kann allerdings sein, das damit die Antwort zu groß wird und so etwas wie maximal zulässige Grenzen des Systems erreicht werden. Von daher muss man beim Sprung ggf. doch einen kleineren Sprung machen. Ein Alternative, ist es die Impulsantwort zu messen, also mit einen kurzen Puls als Anregung zu messen. Das gibt im Prinzip die Ableitung der Sprungantwort und kann ähnlich wie die Sprungantwort zum Abgleich des Reglers genutzt werden, teils sogar einfacher. Einstellregeln gibt es für beide Fälle. Das ein zu langsames Abtasten nicht gut geht, kann man sich zu erklären: Man verliert mit langer Abtastzeit immer an Reaktionszeit. Das D Glied nutzt man um etwa um die Vorhaltezeit in die Zukunft zu schätzen. Es sollte der Verlust durch langsames Abtasten also kurz gegen den Gewinn durch das D Glied sein. Die Abtastzeit des Regler gibt so etwas wie eine zusätzliche Tiefpassfilterung. Wenn man sehr schnell abtastet, muss man ggf. eine passende Filterung zusätzlich explizit einbauen, denn die einfache Differenzbildung für die Ableitung gibt zunehmend mehr Rauschen wenn die Zeit kürzer wird. Die Filterfrequenz ist ein 4. Parameter für das Tunen des PID Reglers, der öfter verschwiegen wird oder einfach über einen mehr oder weniger passenden Faktor an die Vorhalte-Zeit gekoppelt wird. Je nach System kann eine andere Filterfunktion und damit Abtastzeit passend sein. Dabei geht es nicht nur um die Dynamik des Systems, sondern auch das Rauschen.
@ Karl Heinz (kbuchegg) (Moderator) >zu langsam regeln ist nichts. zu schnell regeln aber auch nicht. Die >Anzahl der Korrekturen muss in einem vernünftigem Verhältnis zur >Reaktion des Systems stehen. Ja. Aber in deiner Erklärung werden zwei Dinge ungünstig vermischt. Die Abtastfrequenz des Reglers und die Zeitkonstanten der Reglestrecke. Man KANN auch eine Heizung mit 10 Hz Abtastfrequenz reglen, ohne dass dabei die Reglung schwingt. Man muss so oder so die Zeitkonstanten den der Regelung sowohl an die Regelstrecke als auch an die Abtastfrequenz anpassen. Sprich, bei 10 Hz addiert dein Integrator pro Schritt nur 0,001, wo er bei 1 Hz eben 0,01 addiert. In beiden Fällen ist die Regelung stabil und auch schnell genug. Ein zu hohe Abtastfrequenz schadet im Prinzip nie, eine zu niedrige aber schon. Die Zeitkonstanten bzw. Gewichtungsfaktoren KP, KI und KD sind eine andere Sache. >so realitätsfern. Wer das erste mal am Steuerrad eines SChiffes steht >hat meistens genau dieses Problem, dass er viel zu schnelle Korrekturen Der Mensch als Regler. Dazu hatte ich mal ne Vorlesung ;-) Dort hieß es, der Mensch hat ca. 4 Hz Bandbreite. Naja.
> Wer das erste mal am Steuerrad eines SChiffes steht > hat meistens genau dieses Problem, Das ist zwar ein schoenes Beispiel, aber leider falsch. Die Abtastzeit gewichtet die Regelparameter. Du kannst beliebig schnell abtasten wenn du dafuer deine Regelparameter verkleinerst. Waere es anders wuerden lineare Regler nicht funktionieren. Das es in der Praxis natuerlich keinen Sinn macht und nur unnoetig Rechenzeit verschleudert wenn man sehr schnell abtastet ist davon natuerlich unberuehrt. Ausserdem muesste man dann auch irgendwann ueber Rundungsfehler nachdenken. Die minimal Abtastzeit kommt daher weil man sich ein quasi analoges Verhalten wuenscht um den mathematischen Ueberbau verwenden zu koennen um die Regelparameter zu bestimmen. Wuerde man zu langsam abtasten haette man irgendwann kein LTI System mehr. Olaf
Danke für die vielen Antworten :) Also ich Taste zwar mit 1MHz ab, aber nur ein Wert pro ms. So war das gemeint. Durch die Abtastrate könnte ich Aufwand für den Anti-Aliasing Filter reduzieren. Dann reicht vielleicht sogar ein Filter 2. Ordnung. Ulrich H. schrieb: > Zum testen des System könnte man auch die normale Sprungantwort messen. > Das ist ja ein Sprung von 0% auf 100% PWM Wert. Es kann allerdings sein, > das damit die Antwort zu groß wird und so etwas wie maximal zulässige > Grenzen des Systems erreicht werden. Von daher muss man beim Sprung ggf. > doch einen kleineren Sprung machen. Ich hatte die Sprungantwort vom meiner Regelstrecke (Wastegate Aktor eines Turboladers) gemessen, sah sehr nach einem P-T1-T0 Glied aus. Allerdings konnte ich die Messergebnisse bisher nicht auswerten. Liegen aber als csv vor. Aber ich möchte das Ganze lieber nochmals mit einem Sprung des DutyCycles messen. grüner Krauterer schrieb: >>Meine Ausgangsgröße ist der DutyCycle einer PWM. > > Dabei wuerde ich pro Zyklus, falls moeglich, auf Ueberstrom pruefen, und > den PWM Wert alle Reglerperioden aendern. Wenn das 1000 PWM Perioden > sind, was solls. Massgebend ist das Zeitverhalten des Systems. Das verstehe ich nicht ganz. Also bei jedem ISR Durchlauf auf Überstrom prüfen und ggf. die PWM begrenzen oder komplett ausschalten? Und wie ist das gemeint mit den PWM Wert alle Reglerperioden ändern? Entschuldigt wenn ich gerade ein wenig auf dem Schlauch stehe, digitale Regler sind komplettes Neuland für mich, ich brauche glaub ich ein wenig bis ich damit warm werde.
Bei einem kleinem Fahr-Roboter (Nibobee) habe ich mit 100ms Intervallen gearbeitet, was auf Anhieb gut klappte. Es gibt dabei keinen Zusammenhang zur PWM Frequenz, de viel höher liegt. Ich habe mir dabei überlegt, wie lange wohl so ein Motor baucht, um seine Drehzahl zu ändern. Das es keine einstelligen Millisekunden sein werden, war klar. Und dann habe ich mir überlegt, wie schnell der Roboter wohl lenken muss, um eine falsche Fahrtrichtung zu korrigieren. Eine Sekunde wäre bei dem verfügbaren Platz zu langsam. So bin ich dann auf die 100ms gekommen. Wenn es damit nicht geklappt hätte, hätte ich 10ms versucht.
> digitale Regler sind komplettes Neuland für mich
Das war es für mich auch. Mir hat es geholfen, erstmal einen analogen
PID Regler für eine Raumheizung (als Modell) zu implementieren. Und zwar
alle drei Stufen zuerst einzeln und dann kombiniert.
So konnte ich mit mir vertrauten mitteln die Eigenschaften der drei
Stufen ausprobieren, was mir sehr geholfen hat, sie zu verstehen.
Die anschließende Umsetzung in Software war danach ein Kinderspiel.
> Das war es für mich auch. Mir hat es geholfen, erstmal einen analogen > PID Regler für eine Raumheizung (als Modell) zu implementieren. Das kann ich nur jedem raten! Es muss noch nichtmal als Modell sein. Man kann das auch analog machen. Dann kann man mit den drei Potis fuer Kp, Ki und Kd spielen und ein Gefuehl fuer die Wirkung bekommen.(Tietze/Schenk) Und danach sollte man sich dann mal ein paar Fragen stellen: Wie komme ich an optimale Werte fuer Kp, Ki, Kd? Wenn es dafuer einfache Herleitungen gibt. (Ziegler/Nichols) Was setzen die eigentlich voraus? Linearitaet? Wieso? Wenn ich von einem analogen in ein digitales System uebergehe, was ist da eigentlich der Unterschied? Oder noch besser wie muss ein digitales System aussehen damit es nicht mehr von einem analogen zu unterscheiden ist? Und warum ist das wichtig. Wenn der Regelungskram schon so kompliziert ist das man davon nur Teile in endlicher Zeit begreifen kann, was fuer Tricks gibt es mit diesen Teilen zum Ziel zu kommen. (Kaskadenregelung) Ich denke wenn man so vorgeht kann man begreifen was Regeln bedeutet und warum es so schwer ist. Und immer fleissig spielen! (z.B Gefuehl fuer die Bedeutung der Totzeit bekommen) Der andere Weg ist das Nachrichtentechnikstudium wo dann der Mathematische Ansatz durchgezogen wird. Ich sag mal so, dass kann auch Spass machen muss aber nicht. :-) Idealerweise muss man aber beide Wege gehen. Nur Matlab alleine reicht nicht! Einfach weil die Modelle nicht unendlich genau/gut sind. Das ist genaus wie mit LT/Spice. Es gibt einen Unterschied zwischen Theorie und Praxis. .-) Olaf
Sofern die Zykluszeit (also die Zeit zwischen zwei neu berechneten Werten des Reglers) kurz genug ist, gibt es keinen wesentlichen Unterschied mehr zwischen dem zeitdiskreten digitalen PID Regler und einem analogen PID Regler. Bei der Implementierung des D Gliedes gibt es aber unterschiedliche Wege, weil es ein ideales D-Glied beim realen Regler nicht gibt, nicht geben kann. Die Zykluszeit hat ggf. einen Einfluss darauf was man als Näherung für das D-Glied bekommt bzw. wählt. Die einfachste Näherung für die Steigung ist die Differenz der letzten beiden Werte geteilt durch die Zykluszeit. Bei zu langer Zyklusszeit wird die Reaktion zu langsam, weil hohe Frequenzen verloren gehen. Bei zu kurzer Zykluszeit bekommt ein Rauschproblem, weil auch auf sehr hochfrequente Anteile reagiert wird. Das Rauschproblem kann man durch eine zusätzliche Filterung des D-Anteils reduzieren, so dass man ohne Einschränkung schnell Abtasten kann. Man hat dann die Filter-Parameter (insbesondere Grenzfrequenz) als zusätzlichen Parameter, der nicht mehr an die Zykluszeit gekoppelt ist. Meist hat die eher schnelle Abtastung mit expliziter Filterung Vorteile gegenüber einer Filterung über die Zykluszeit bzw. den Anti-Aliasing Filter. Ein logische Wahl für die Zyklusszeit des Reglers ist es für jede PWM Periode einen neuen Wert zu berechnen, möglichst so das der Wert auch ohne große Verzögerung übernommen werden kann, also gerade nicht am Anfang der PWM Periode (Überlauf Interrupt beim PWM Timer), sondern eher kurz vor dem Ende. Die Frage ist dann ggf. noch ob die PWM Frequenz hoch genug ist.
Mit Modell meinte ich, statt Wohnzimmer und Gastherme eine Styroporkiste mit Glühlampe als Heizung zu verwenden.
> Mit Modell meinte ich, statt Wohnzimmer und Gastherme eine Styroporkiste > mit Glühlampe als Heizung zu verwenden. Ach so, ein 3D-Modell. :-) Ist natuerlich auch super. Probier mal aus was es fuer einen Unterschied macht wenn der Temperaturfuehler verschieden weit von der Gluehlampe entfernt ist. Da kann man eine Menge draus lernen. Olaf
Einen digitalen Regler implementiert man natuerlich kommunizierend. Damit kann man Werte zur Laufzeit aendern und anzeigen. Alle Parameter, auch die Zykluszeit sind dann veraenderbare Variablen.
Hallo Um die ganze Sache mal zusammen zu fassen: 1. Ist die Abtastzeit im Regler einstellbar, so kann die Abtastzeit in Abhängigkeit der Regelstrecke gewählt werden.Es gibt Faustformeln um Ta über Tu, Tg und T95 zu ermitteln. 2. Die Abtastzeit sagt nur aus wie oft die Regelgröße pro Zeiteinheit gelesen wird(Shannon) und ist unabhängig von den Einstellparametern Kpr, Tn und Tv. 3. Reglereinstellungen nach CHR und ZN lassen sich durchaus auch für digitale Regler verwenden wenn die Parameter des Reglers passend sind. (Im englischen Sprachraum werden für die Parametruierung von PID Reglern Ki, Kd und Kpr genutzt. Üblich in Deutschland Kpr, Tn und Tv. 4. Ein Regelkreismodell kann leicht über einen Arduino mit wenig Aufwand aufgebaut werden. Analogausgang D11 als Reglerausgang y, A0 zum lesen der Regelgröße x. Als Regelstrecke dient im einfachsten fall ein RC Tiefpass (1M und 4,7µ) das ergibt eine T1 Regelstrecke einer Zeitkonstante von 4,7s. Graphisch kann die Regelgröße x über den "ComGrapher" via serieller Schnittstelle angezeigt werden. 5. Der Sketch für einen einfachen Pi-Regelkreis könnte so aussehen: /******************************************************** *PI-Regelkreis * Lesen der Regelgröße am Analogeingang0 * Ausgang der Stellgröße Y ist PWM Ausgang D11 * Die Führungsgröße ist w , Regeldifferenz e *SerialCmGrapher: CH1=260. CH2=260, 9200 ********************************************************/ //Variablendeklaration int e=0; int w=100; int x=0; int y=0; int Kp=2; int Ki=1; int esum=0; float Ta=0.1; // Abtastzeit 100ms //Initialisieren void setup() { analogWrite(11,0); //Herunterfahren der Regelstrecke delay(10000) ; //Warten bis Regelstrecke unten ist Serial.begin(9600); //Serielle Kommunikation Konfigurieren } void loop() { x = analogRead(0); // lesen der Regelgröße x=x/4; // anpassen der Regelgröße 1024->255 e=w-x ; //bilden der Regeldifferenz esum=esum + e; y=(Kp*e)+(Ki*esum*Ta); //Regelalgorithmus if(y >254) // begrenzen der Ausgangsspannung des Reglers auf 255 { y=255; } analogWrite(11,y); //Ausgabe der Stellgröße Y Serial.print(x); // Serielle Ausgabe auf ComGrapher Serial.print("; "); Serial.print(y); Serial.println(" "); delay(100); //entspricht der Abtastzeit } noch Fragen? Matu
Für den Arduino gibt es bereits eine fertige PID library: http://playground.arduino.cc/Code/PIDLibrary Da ist auch schon eine Erklärung mit dabei.
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.