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 ;-)
da Mirko schon bei einer anderen Quelle gesucht hat http://www.roboternetz.de/wissen/index.php/Regelungstechnik sollte er dort einfach weiterlesen! Der Artikel ist wirklich gut und verständlich. gruß Hans
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
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.