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