PID Regler dimensionieren & implementieren

OP (Firma: Ucore Fotografie www.ucore.de) Persönliche Seite #1913024
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
Angehängte Dateien:
#1913060
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
OP (Firma: Ucore Fotografie www.ucore.de) Persönliche Seite #1913256
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.
Gast #1913438
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.
#1913872
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. ;)
#1913879
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
#1913885
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.
#1913925
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. ;) )
#1913962
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
#1914012
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.
#1914134
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
OP (Firma: Ucore Fotografie www.ucore.de) Persönliche Seite #1914191
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
Gast #1915053
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.
Gast #1928513
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren