Hallo,
ich habe für ein Netzteil einen PI-Regler mit einem Operationsverstäker
aufgebaut.
Nun würde ich gerne diesen PI-Regler in Software umsetzen, auf einem
Mikrokontroller. Ich habe eine Schaltung angehängt, nach der ich meinen
PI-Regler aufgebaut habe. Dabei auch die Berechnung von Reglerparametern
aus den Bauteilewerten.
Im Netz habe ich dann folgendes gefunden, wie man einen PI-regler in
Software aufbaut.
esum= esum + e
y= Kp * e + Ki Ta esum
Meine Frage wäre nun erst einmal, was esum, e und Ta für Werte sind und
ob diese beiden Zeilen wirklich einen kompletten PI-regler in Software
ausmachen?
Ist e die Regelabweichung, also Sollwert-Istwert? Aus der Zeichnung
gesehen
U_ref-U?
Grüße
Mirko
e ist die Regelabweichung (Sollwert - Istwert)
esum ist die Summe aller Abweichungen (I-Anteil -> Abweichung wird mit
der Zeit vollkommen eliminiert)
Ta ist die Abtastzeit. In deinem Fall die Zeit, die zwischen zwei
AD-Wandlungen vergeht.
>Ist e die Regelabweichung, also Sollwert-Istwert? Aus der Zeichnung>gesehen>U_ref-U?
ja
>ob diese beiden Zeilen wirklich einen kompletten PI-Regler in Software>ausmachen?
ja. Ist ein kompletter digitaler PI-Regler
edit: Kennst du diese Seite?
http://www.roboternetz.de/wissen/index.php/Regelungstechnik#PI-Regler
>Im Netz habe ich dann folgendes gefunden, wie man einen PI-regler in>Software aufbaut.>esum= esum + e>y= Kp * e + Ki Ta esum
In Software aufgebaute Regelalgorithmen müssen immer in der z-Ebene
berechnet werden! Also wird immer eine Differenzengleichung benötigt!
Icgh werd die Diff-gleichung für PI dann mal herleiten. Aber jetzt muss
ich nochmal kurz weg
>Ta ist die Abtastzeit. In deinem Fall die Zeit, die zwischen zwei>AD-Wandlungen vergeht
Also wenn ich in meinem Programm die AD-Ports alle 100µs abfrage, also
die anliegenden Spannungen wandle, wäre Ta=100µs!?
Für esum würde ich dann zu Programmstart einen Startwert geben,
vermutlich Null am sinnvollsten!?
>In Software aufgebaute Regelalgorithmen müssen immer in der z-Ebene>berechnet werden! Also wird immer eine Differenzengleichung benötigt!
Warum so kompliziert, wenn die obigen Formeln stimmen oder kann man mit
den Formel in der Abbildung die Werte nicht richtig berechnen. Ich denke
eine Feineinstellung wird man vornehmen, wen man das System testet und
den Regler dann noch ein wenig anpassen.
Grüße
Mirko
Mirko wrote:
>>Ta ist die Abtastzeit. In deinem Fall die Zeit, die zwischen zwei>>AD-Wandlungen vergeht>> Also wenn ich in meinem Programm die AD-Ports alle 100µs abfrage, also> die anliegenden Spannungen wandle, wäre Ta=100µs!?
Ja
>> Für esum würde ich dann zu Programmstart einen Startwert geben,> vermutlich Null am sinnvollsten!?
Für den Start ist esum = 0 zu setzen
>>In Software aufgebaute Regelalgorithmen müssen immer in der z-Ebene>>berechnet werden! Also wird immer eine Differenzengleichung benötigt!>> Warum so kompliziert, wenn die obigen Formeln stimmen oder kann man mit> den Formel in der Abbildung die Werte nicht richtig berechnen. Ich denke> eine Feineinstellung wird man vornehmen, wen man das System testet und> den Regler dann noch ein wenig anpassen.
Mit den Formeln oben kannst du doch nur die Bauteilwerte für analoge
Regler berechnen. Diese Werte brauchst du doch aber gar nicht - oder
willst du einen vorhandenen analogen PI-Regler als digital aufbauen?
In der Praxis läuft es meist auf ein ausprobieren verschiedener
Regelparameter hinaus. Es gibt aber auch Verfahren, um den Regler
"optimal" einzustellen. (z.B. nach Hurwitz, Ziegler-Nichols, ...)
>Warum so kompliziert
Weil diese Rechnung halt nicht stimmt. Das ist nur ein Zusammengebastel
aus dem analogen Bereich! Mehr nicht.
Man kann nicht einfach die (analogen) Formel nehmen und im digitalen
anwenden!
Ein digitaler PID-Regler ist folgende Formel:
Diese Formel ist im Zeitraster Ta zu rechnen!
u(k) = d0 * e(k) + d1 * e(k-1) + d2 * e(k-2) + (1-c1) * u(k-1) + c1
*u(k-2)
mit:
Kr Ta + Tv Td + Tv
d0 = --------- * [ 1 + ------- + ------- ]
1 + Tv/Ta 2*Ti Ta
Kr Ta 2(Td + Tv)
d1 = --------- * [ -1 + ----- + ----------- ]
1 + Tv/Ta 2*Ti Ta
Kr Td + Tv Tv
d2 = --------- * [ ------- - ------ ]
1 + Tv/Ta Ta 2*Ti
Tv
c1 = - ------
Ta + Tv
Kr : Proportionalitskonstante,
Ti : Integrationszeitkonstante,
Td : Differentationszeitkonstante,
Tv : Realisierungspol für D-Anteil ( => 0)
Ta : Abtastzeit
u(k) : aktuelle Stellgröße (Reglerausgang)
e(k) : aktuelle Regelabweichung (Reglereingang)
k : diskretisierte Zeit
>In der Praxis läuft es meist auf ein ausprobieren verschiedener>Regelparameter hinaus.
Sorry, nimms nicht persönlich: Aber der erste Teil des Nicks sagt vieles
aus...
>Sorry, nimms nicht persönlich: Aber der erste Teil des Nicks sagt vieles>aus...
Natürlich ist es anstrebsam einen Regelkreis im Laplace-Bereich zu
beschreiben und die Parameter nach aperiodischem-Grenzfall, etc. zu
optimieren. Das Problem ist aber immer das selbe: Das reale System ist
nie 100%ig bekannt. Klar kann man das System durch Sprünge analysieren -
dann muss man aber auch wieder an den Parametern drehen, bis sich das
gewünschte Verhalten ergibt.
Ein naher bekannter hatte einen Prof., der hat denen in Regelungstechnik
das Ausprobieren als richtige Methode hingestellt, ganz ohne
irgendwelche Betrachtungen im Laplace-Bereich oder Z-Trafos für die
digitalen Filter. Das ist natürlich auch nicht das Wahre. Ich denke aber
nicht, dass man einen Regler berechnet und dann weiß, dass er genauso
funktioniert wie er soll.
Mit der Erfahrung von langjährigen Entwicklern, die Regelkreise
berechnen/einsetzen/auslegen kann ich natürlich nicht mithalten. Man
kann nicht alles perfekt können - aber mann lernt ja nie aus.
PS: Ich nehme deine Anspielung nicht persönlich, aber: Mein Nick sagt
überhaupt nix aus ;-)
>Mein Nick sagt überhaupt nix aus ;-)
Hihi. Ok.
>Ausprobieren als richtige Methode
Naja, Wir hatten auch entsprechende "empirische" Einstellverfahren..
Aber was ich damit sagen will ist, es sollte zumindest von der
Implementierung korrekt gemacht werden, auch wenn dann an den Parametern
"wahllos" herumgedreht wird...
>Aber was ich damit sagen will ist, es sollte zumindest von der>Implementierung korrekt gemacht werden, auch wenn dann an den Parametern>"wahllos" herumgedreht wird...
Full ACK. Hab ich aber auch nicht anders empfohlen ;-)
Hallo Matthias,
>>Warum so kompliziert> Weil diese Rechnung halt nicht stimmt. Das ist nur ein Zusammengebastel> aus dem analogen Bereich! Mehr nicht.> Man kann nicht einfach die (analogen) Formel nehmen und im digitalen> anwenden!
Da würde es mich mal interessieren, wo Du den großen Unterschied siehst.
Nach meinem Verständnis geht die Differenzengleichung bei schneller
Abtastung in die zugehörige Differentialgleichung über. Problematisch
können im Einzelfall höchstens Aliasingeffekte werden.
>>In der Praxis läuft es meist auf ein ausprobieren verschiedener>>Regelparameter hinaus.> Sorry, nimms nicht persönlich: Aber der erste Teil des Nicks sagt vieles> aus...
Stimmt. Das ist ein sehr sympathischer Nick.
Freundliche Grüße
Michael
Hi,
wow, was für eine Diskussion.
>> Sorry, nimms nicht persönlich: Aber der erste Teil des Nicks sagt vieles>> aus...>Stimmt. Das ist ein sehr sympathischer Nick.
Das finde ich auch :)
>Mit den Formeln oben kannst du doch nur die Bauteilwerte für analoge>Regler berechnen. Diese Werte brauchst du doch aber gar nicht - oder>willst du einen vorhandenen analogen PI-Regler als digital aufbauen?
Für die Formel y= Kp * e + Ki Ta esum brauche ich doch die Werte
für Kp und Ki. Ich habe bereits einen Regler mit einem OP aufgebaut und
möchte diesen nun durch einen digitalen ersetzen. Dann kann ich doch mit
den Formeln in der Grafik die Werte für Kp und Ki berechnen!? Oder sehe
ich das falsch.
Die Internetseite von Robernetz habe ich mir angesehen, da steht steht
doch genau fast genau die gleiche Zeichung der OP-Schaltung und auch die
Berechnung der Parameter und auch der Code für die Software-Umsetzung.
Also kann ich doch damit aus meinem analogen PI-Regler einen digitalen
umsetzen oder stehe ich da irgendwie auf der Leitung?
Das ist auf der Seite doch auch für einen PID einmal durchgeführt...
Mirko
Hallo Mirko,
eben weil da Bild und Formel stimmen, dachte ich, du hast den
Artikel schon!
Bei Atmel gibt es auch eine fertige Aplication PID AVR221
mit c-code.
http://www.atmel.com/dyn/resources/prod_documents/doc2558.pdf
Wichtig ist die Einstellung und Optimierung. Dazu ist es sinnvoll
die Hintergründe zu kennen, d.h. was macht welcher Block im Regelkreis.
Habe selber schon Programme so erweitert, daß ich Parameter mit Potis
einstellen konnte und so in der Regelstrecke direktes Optimieren
möglich war. Danach natürlich die werte fix!
Die Formeln sind dann wirklich so einfach wenn man nur Grundschaltungen
verwendet.
gruß hans
Hallo,
die Seite hatte ich noch nicht gesehen vorher.
Ich zeile auch nicht darauf ab, das super genau zu berechnen. Bei dem
analogen regler habe ich das auch Pi Mal Daumen berechnet und dann in
der fertigen Schaltung die Werte angepasst durch probieren, auch wenn
das vielleicht nicht die feine englische ist.
Ich werde das mal mit den Formel, die ich als erstes angegeben habe
probieren und mal schauen, was da so passiert.
Grüße
Mirko
Hallo Mirko,
wir fangen mal mit der Differentialgleichung des OPV an, daraus müßten
sich eigentlich die Parameter für einen äquivalenten Digitalregler
ergeben.
Konvention
- Strompfeile betrachte ich als positiv, wenn sie von links nach rechts
gehen.
- Ich gehe außerdem davon aus, daß der Kondensator zum Zeitpunkt Null
ungeladen ist. In einer realen Schaltung stellst Du das sicher, indem Du
parallel zu R2 und Ci einen großen Widerstand schaltest.
Rechnung
Am invertierenden Eingang herrscht das Potential U_REF.
Daher gilt:
i1(t) = (U-U_REF)(t)/R1
UA(t) = U_REF(t) - R2*i1(t) - 1/C Int(i1(t) dt)
Durch Einsetzen erhältst Du:
UA = U_REF -R2/R1 * (U-U_REF) - 1/(R1 C) Int(U-U_Ref) dt
wobei ich die Abhängigkeit "von t" zur Vereinfachung weglasse.
Durch Differentiation d/dt folgt:
dUA/dt = d/dt U_REF -R2/R1* d/dt(U-U_REF) - 1/(R1 C) (U-U_REF)
Wenn Du jetzt bei allen zeitabhängigen Größen den Differentialquotienten
dx/dt näherungsweise durch den Differenzenquotienten x(k)-x(k-1)
ersetzt, kommst Du zu einer Differenzengleichung, die im wesentlichen
dasselbe macht, wie die analoge Schaltung:
U-U_REF nenne ich zur Vereinfachung jetzt einmal e (für error).
UA(k)-UA(k-1) = U_REF(k)-U_REF(k-1) -R2/R1 (e(k)-e(k-1)) - 1/(R1 C) e(k)
Freundliche Grüße
Michael