Forum: Mikrocontroller und Digitale Elektronik PID Regler dimensionieren & implementieren


von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte (zum ersten Mal für mich) einen Regler mit einem 
Mikrocontroller aufbauen. Ich habe schon eine "Vermutung" wie es geht, 
es wäre aber nett, wenn jemand mit Erfahrung mir bestätigen könnte, ob 
meine Annahmen o.k. sind.

Zur Regelstrecke:
Es handelt sich um einen PWM-geregelten Lüfter welcher in einem Rohr 
ist. In dem Rohr befindet sich ein Luftmassenmesser, dessen 
(Analog-)Signal ich messe.

Die Aufgabe:
Es soll ein Soll-Massenstrom durch den Lüfter bewegt werden. Mit äußeren 
Störgrößen ist nicht zu rechnen.

Mein Lösungsansatz:
Ich habe mir die Sprungantwort des Systems angeschaut (siehe Anhang). Es 
handelt sich scheinbar um ein PT1-System mit Totzeit (0,8s).
Meiner Ansicht nach ist ein PID-Regler geeignet für das System.

Aus der Sprungantwort entnehme ich:
Nach Chien/Hrones/Reswick:

Im Code würde ich dann eine Funktion mit einer Abtastzeit von Ta = 100ms 
(reicht das???) aufrufen, die folgendes macht:
1
e = w - x;          //w = Sollwert, x = Messwert)
2
esum = esum + e;        //Integration I-Anteil
3
y = Kp*e + Ki*Ta*esum + Kd/Ta*(e  ealt);  //Reglergleichung
4
ealt = e;

Und y gibt mir dann (in %) das neu einzustellende PWM-Verhältnis an.

Ist das richtig?
Verbesserungsvorschläge?

Über "Feedback" (Anglizismus) würde ich mich sehr freuen.
Viele Grüße,
Alex

von Juergen G. (jup)


Lesenswert?

Ja das geht so.

Worauf Du achten solltest ist, das Deine gemessenen Werte einigermassen 
"glatt" sind bevor Du sie dem PID Algo fuetterst.
Sonst regelt sich Dein Regler tot und Du machst Dir Gedanken warum Du 
vorher gerechnet hast.

Wenn Du die Analogwerte per uC ADC misst, dann benutze die ISR des ADC 
und einen schnellen Algo um den (moeglichst gleitenden) Mittelwert zu 
berechnen.


Ju

von guest (Gast)


Lesenswert?

Alex Bürgel schrieb:
> Mit äußeren
> Störgrößen ist nicht zu rechnen.

wozu willst du dann einen Regler programmieren.
Ohne Störungen kannst du ja auch jedem Massestrom fest ein 
Tastverhältnis zuordnen.

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Das ist ein Argument, vielleicht sollte man die Formulierung ändern in:
"Mit gewaltigen äußeren Störgrößen ist nicht zu rechnen".

Außerdem: Wenn ich feste Tastverhältnisse einprogrammieren wollte, so 
müsste ich diese erstmal messen. Das könnte mehr Aufwand sein, als einen 
Regler zu erstellen. Zumal es interessanter ist :-)

Gruß,
Alex

@Jup:
Alles klar, werde einen gleitenden Mittelwert für die ADC-Messungen 
verwenden.

von Alexander D. (alexander_d)


Lesenswert?

Hallo Alex,

bei deinem Integrator in der Zeile esum=esum+e solltest du noch eine 
Begrenzung einführen. Wenn es zu einem Variablenüberlauf kommt, kann das 
in einer Regelschleife fatale Folgen haben.

Gruß,
Alexander

von Christian (Gast)


Lesenswert?

Zu der begrenzung des Integrators:

Die Begrenzung ist nicht nur wegen eines Variablenüberlaufs sinnvoll. Da 
deine Stellgröße begrenzt ist solltest du den maximalwert deines 
I-Anteils dahingehend begrenzen. Wenn der Regler am Anschlag der 
Stellgröße ist und die Regeldifferenz immer noch positiv ist steigt der 
I-Anteil weiter. Fällt dann die Regeldifferenz muss dieser I-Anteil erst 
wieder abgebaut werden bevor der Ausgang reagieren kann.

von Markus J. (mjay)


Lesenswert?

Christian schrieb:

> Die Begrenzung ist nicht nur wegen eines Variablenüberlaufs sinnvoll.
[...]
> Wenn der Regler am Anschlag der
> Stellgröße ist und die Regeldifferenz immer noch positiv ist steigt der
> I-Anteil weiter.

Da habe ich nur so rein interessehalber mal eine Verständnisfrage zu:
Ein I-Regler zeichnet sich ja dadurch aus, dass er keine bleibende 
Regeldifferenz hat. Bei korrekter Dimensionierung (und einem 
BIBO-stabilen System) dürften doch keine Werte "durch die Decke" gehen, 
oder?

Abgesehen davon würde ich natürlich auch eine Begrenzung einfügen. 
Kostet nix und man ist auf der sicheren Seite. ;)

von Alexander D. (alexander_d)


Lesenswert?

Markus J. schrieb:

> Da habe ich nur so rein interessehalber mal eine Verständnisfrage zu:
> Ein I-Regler zeichnet sich ja dadurch aus, dass er keine bleibende
> Regeldifferenz hat. Bei korrekter Dimensionierung (und einem
> BIBO-stabilen System) dürften doch keine Werte "durch die Decke" gehen,
> oder?

Im eingeschwungenen Zustand sollte das so sein. Es gibt aber auch die 
Zeit nach dem Einschalten, wenn Soll- und Istwerte evtl. weit 
auseinander liegen, Sollgrößensprünge oder größere Änderungen der 
Störgröße, auf die man keinen Einfluss hat. In diesen Fällen kann der 
Integrator an den Anschlag laufen, und das sollte verhindert werden.

Gruß,
Alexander

von Karl H. (kbuchegg)


Lesenswert?

Markus J. schrieb:

> Da habe ich nur so rein interessehalber mal eine Verständnisfrage zu:
> Ein I-Regler zeichnet sich ja dadurch aus, dass er keine bleibende
> Regeldifferenz hat. Bei korrekter Dimensionierung (und einem
> BIBO-stabilen System) dürften doch keine Werte "durch die Decke" gehen,
> oder?

Das nicht.
Aber wenn dein mechanisches System auf einen Anschlag fährt, kann der 
Regler ausregeln so viel er will, er wird den Fehler nicht mehr kleiner 
kriegen. (Ein Verfahrweg der auf 100mm limitiert ist und der Regler will 
an die Position 150 verfahren). Mit dem Effekt, dass der aufsummierte 
Fehlerwert in kürzester Zeit durch die Decke geht.

von Markus J. (mjay)


Lesenswert?

Hm, das stellt mich noch nicht ganz zufrieden. ;)

@Alexander: Weit auseinanderliegende Soll-/Istwerte sollte doch der 
D-Anteil des Reglers schnell ausgleichen, bevor der I-Teil zu lange 
herumintegriert.

@Karl Heinz: Wenn mein Regler an die Position 150 fahren will, obwohl 
nur 100 geht, habe ich doch entweder eine falsche Führungsgröße oder die 
Dämpfung ist zu klein und das System schwingt zu stark.

Also in beiden Fällen eigentlich falsch dimensioniert, oder?

(Eigentlich hatte ich mir geschworen, nie wieder über Regelungstechnik 
nachzudenken, nachdem ich 3x durch die Klausur gefallen bin und erst in 
der mündlichen Nachprüfung bestanden habe. Praktische Erfahrungen habe 
ich auch nicht. Aber aus irgendeinem Grund finde ich das gerade 
interessant. Sollten meine Einwände/Fragen zu blöd sein, dann sagt mir 
bitte Bescheid. ;) )

von Alexander D. (alexander_d)


Lesenswert?

Markus J. schrieb:

> @Alexander: Weit auseinanderliegende Soll-/Istwerte sollte doch der
> D-Anteil des Reglers schnell ausgleichen, bevor der I-Teil zu lange
> herumintegriert.

da hast du die Rechnung ohne die Regelstrecke gemacht :-) Stelle dir 
vor, du hast eine Regelung für einen Lötofen, die 300 °C konstant halten 
soll. Nach dem Einschalten hat der Ofen Raumtemperatur und braucht eine 
Weile, bis die Ofentemperatur in die Nähe des Sollwerts kommt. In dieser 
Zeit wird der Integrator in die Begrenzung laufen, da die Heizleistung 
begrenzt ist.

Gruß,
Alexander

von Karl H. (kbuchegg)


Lesenswert?

Markus J. schrieb:

> @Karl Heinz: Wenn mein Regler an die Position 150 fahren will, obwohl
> nur 100 geht, habe ich doch entweder eine falsche Führungsgröße oder die
> Dämpfung ist zu klein und das System schwingt zu stark.

Oder du hast eine Störgröße, die dir das System durcheinanderbringt.

Wenn, um bei diesem Beispiel zu bleiben, die Regelstrecke darin besteht 
einen Stab zu balanzieren und die Tür aufgeht, woraufhin ein enormer 
Luftzug deinen Stab zum Kippen bringen will und der Regeler 
'beschliesst' in einem Rutsch erst mal enorm gegenzusteuern und dabei 
den Schlitten mit dem Stab an den mechanischen Anschlag zu fahren, dann 
passiert sowas schon mal.

Ein guter Regler kommt auch dann noch zurecht, wenn unvorhergesehene 
Dinge passieren.

von Juergen G. (jup)


Lesenswert?

Das Beispiel von kbuchegg mit dem Stab und dem Schlitten ist was fuer 
Machatronik Freaks. Da spielt wirklich ein grosser Teil der Auslegung 
der Mechanik und Antriebe eine Rolle. Reglungstechnisch ist es genau wie 
jeder andere Regler.

Das mit dem Loetofen finde ich didaktisch besser.
und dazu als Erweiterung, das Problem des Originalposters mit dem 
Luefter.

Hier hat man ganz klar den Fall eines langsamen und eines schnellen 
Reglers.
Was klar eine Dimensionierungsfrage ist.

Immer aber ist mein Stellglied irgendwie begrenzt und ich kann es nicht 
weiter "auf|zu machen" als sein Stellbereich ist.

Wenn mein Stellglied beim Loetofen, nun "ZU" ist weil ich 0 Grad Celsius 
vorgegeben habe und immer noch eine Differenz da ist, weil der Ofen 
nicht so schnell abkuehlt, was wird mein I Teil wohl machen?
Er wird weiter zu machen wollen als geht. Somit summiert sich der I Teil 
auf, doch mehr Zu als Zu geht nicht.

Und ganau hier muss ich begrenzen.


Das Problem stellt sich extrem beim Problem des Originalposters. Hier 
soll per PWM ein Luefter den Lufstrom regeln.

Benutze ich einen uint8_t fuer die PWM und sein Wert ist sagen wir 20.
Nun soll der Regler auf null regeln. er wird (vereinfacht) -20 fordern. 
In der Naechsten Runde bewegt sich die Luft aber immer noch weil der 
Luefter noch nachlauft.
Also gibt er nochmal zBsp. -10 dazu, meine PWM Variable ist auf 0 weil 
in der Letzten Runde 20 - 20 vorgegeben wurde.
Nun kommt 0 - 10 dazu, durch den Ueberlauf des uint8_t lauft mein 
Luefter jetzt wieder hoch.

Das sollte ganz klar "begrenzt" werden.

Jup

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Hallo @all!

Also, der Regler läuft jetzt und funktioniert auch tatsächlich! Ich habe 
die zuvor berechneten Parameter jedoch noch etwas angepasst. Ich habe 
auch, wie vorgeschlagen, eine gleitende Mittelung über jeweils 8 
eingelesene AD-Werte implementiert.

Was nicht geklappt hat:
Ich hatte zunächst die Abtastzeit des Reglers auf 100ms eingestellt. Die 
Totzeit des Systems liegt, wie gesagt, bei ca. 0,8s. Mit den 
eingestellten 100ms geriet das System teilweise ins schwingen.

Woran könnte (ich weiß - Glaskugelfrage) das liegen?

Nun habe ich die Abtastzeit auf 1s eingestellt und es funktioniert 
(stabil).

Morgen muss ich "nur noch" vom Massenstrom-Signal des Luftmassenmessers 
auf den Volumenstrom umrechnen, der eigentlich gefordert ist... inkl. 
Temperatur-Anpassung... (was ja dann doch, anders als ich eingangs 
schrieb, einer Störgröße entspricht, oder?).

Viele Grüße & nochmal Danke an alle soweit,
Alex

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Ach so: Begrenzung des I-Anteils ist auch eingebaut und war auch 
definitiv nötig! Vielleicht rührt daher auch das Schwingen bei Ta = 
100ms, da ich die Begrenzung erst später eingebaut hatte...

von Markus J. (mjay)


Lesenswert?

Markus J. schrieb:
> Hm, das stellt mich noch nicht ganz zufrieden. ;)

Jetzt hab's ich's begriffen. War da wohl etwas merkbefreit. Und im 
nachhinein ist mir meine Frage etwas peinlich. Aber ich danke euch, dass 
ihr mir das trotzdem so gut erklärt habt. ;)

von U.R. Schmitt (Gast)


Lesenswert?

Alex Bürgel schrieb:
> Ach so: Begrenzung des I-Anteils ist auch eingebaut und war auch
> definitiv nötig! Vielleicht rührt daher auch das Schwingen bei Ta =
> 100ms, da ich die Begrenzung erst später eingebaut hatte...

Diese Vermutung ist durchaus wahrscheinlich.
Eine Abtastzeit die deutlich größer ist als die Zeitkonstanten des 
Systems kann eigentlich nicht gut funktionieren. Insofern waren 0,1s bei 
Totzeit von 0,8s und 0,4s für das PT1 Verhalten schon recht gut.

von Alex22 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Nochmal vielen Dank für eure Tipps!

Im Anhang noch für diejenigen, die es interessiert, ein Bild wie der 
Regler nun auf einen Sollwert-Sprung reagiert.

Es dauert ca. 10s bis der neue Wert stabil eingestellt ist.

Etwas kniffelig war es, da ich die PWM in hundertstel Prozent verändern 
musste, um die geforderte Volumenstrom-Auflösung zu realisieren...

Viele Grüße,
Alex

von Jup (Gast)


Lesenswert?

Perfect, congrats.

Ju

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.