Moin, ich frage mich grade, wie genau der zeitliche Abstand zwischen zwei Aufrufen eines digitalen Reglers (z.B. PI, PID, etc.) eingehalten werden muss. Hintergrund: Ich habe eine Schaltung auf AVR Basis, die neben einem PWM gesteuerten Step-Down-Wandler ein Display und mehrere Tasten enthält. Der Step-Down-Wandler soll per PID-Regler gesteuert werden. Nun würde ich gerne, um einen Timer und Interrupt zu sparen, die Regelung einfach mit in die Hauptschleife integrieren. In dieser werden aber auch die Tasten abgefragt und das Display angesteurt. Wenn nun das Display aktualisiert wird, verzögert sich die Zeit zwischen zwei Reglerberechnungen, so dass ich keine konstanten Abstände zwischen den Berechnungen mehr habe. Ist sowas tolerierbar?
Es ist dann nicht tolerierbar, wenn du die Resourcen frei hast um für den PID Regler ganz einfach eine Zeitbasis zu schaffen. Und nein: Man kann durchaus mit einem Timer auch mehrere Dinge erledigen lassen, solange es sich nur zeitlich ausgeht, dass alles fertig ist, bis der nächste ISR Aufruf erfolgt.
Sinnvollerweise verwendet man einen Timer um alle zB 10ms ein Flag zu setzen, aufgrund dessen man dann im main die Regelscheife ausfuehrt. Man kann so auch mit Subzyklen arbeiten. Wenn der Timer zB schneller wie der ADC ist, so ruft man eben nur alle 30 Ticks die Regelscheife auf und macht sonst was anderes. zB die Tasten, Display, usw. Der PID ist uebrigens fuer Faule die minimales Interesse haben. Aber solange es damit geht, geht's. Will damit sagen, man koennte auch mit ungleichen Zeitabstaenden arbeiten, das ist aber eher nichts fuer PID Leute. Die Berechnungen werden komplizierter und wenn man mehr rechnen muss dauert's noch laenger.
Heia Jetzt-aber schrieb: > Will damit sagen, man koennte auch mit ungleichen Zeitabstaenden > arbeiten, das ist aber eher nichts fuer PID Leute. Die Berechnungen > werden komplizierter und wenn man mehr rechnen muss dauert's noch > laenger. Wenn man eh nebenher eine Zeitbass laufen hat und schön die Zeitabstände zwischen den Sollwert- und Istwertmessungen und der Berechnung/Ausgabe mitloggt, wirds wieder einfacher. Dann könnte man aber gleich die Berechnungen und die Ausgabe mit in die Zeitbasis packen. Eine gute Sache ist es jedenfalls, ADC-Messungen anzustoßen und daraufhin nicht wie mans überall sieht, den Prozessor in einer Warteschleife hängen lassen, die prüft, ob das Bit wieder zurückgesetzt ist. Auch hier lohnt sichs, Interruptgetrieben zu arbeiten. mf
Philipp schrieb: > Der Step-Down-Wandler soll per PID-Regler gesteuert werden. Ist meines Erachtens nach unnötig. Eine einfache 2-Punkt-Regelung reicht aus. Schließlich soll der Regler einigermaßen schnell sein, damit es keine Überschwinger gibt. Dabei kann man 2 Ansätze wählen: Entweder die PWM anhand der gemessenen Ausgangsspannung nachregeln (mehr, weniger oder so lassen), was einer kontinuierlichen Ansteuerung des Konverters entspricht. Man kann auch mit einer festen PWM arbeiten, welche der Last angepasst wird und diese an der Schaltschwelle komplett abschalten und beim Unterschreiten wieder einschalten. Dies wäre dann eine diskontinierliche Ansteuerung des Konverters.
Danke für eure Antworten. Ich werd's dann wohl in der ISR, oder, wie hacky geschrieben hat, über Flags realisieren. Die Idee von travelrec finde ich auch ganz ansprechend. Da müsste müsste ich mich dann nicht um den ganzen Kram für nen PID-Regler kümmern.
Philipp schrieb: > ich frage mich grade, wie genau der zeitliche Abstand zwischen zwei > Aufrufen eines digitalen Reglers (z.B. PI, PID, etc.) eingehalten werden > muss. Allgemein: Das hängt von den Anforderungen an die Regelgüte ab. Pauschal: Wenn sich die Regelfrequenz ändert bedeutet das eine andere Bewertung für die Zeitabhängigen Anteile I und D. Aber natürlich spielt das Zeitverhalten der Strecke auch rein, also P kann dann auch zuviel oder zuwenig des Guten sein. Also lieber f = const.
Du verstehst das Grundproblem? Die PID Parameter sind Abhängig von der Abtastzeit.
Es würde sich anbieten den Regler in den Interrupt vom AD-wandler zu verlegen. Die eigentliche Regelfunktion ist ja nicht so langwierig, wenn man da keine Fließkommazahlen benutzt.
>Es würde sich anbieten den Regler in den Interrupt vom AD-wandler zu
verlegen....
Eher nicht. Meist benoetigt man mehrere Werte, bevor man eine
Entscheidung treffen kann. Und die Werte der verschiedenen Groessen
kommen sequentiell an. Also erst alle Werte wandeln, dann die
Regelroutine aufrufen. Falls es von Vorteil ist kann man zwischendurch
pruefen ob von Sensorwerten Grenzwerte ueberschritten wurden.
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.