Moin. Es geht um eine Temperaturregelung. Von Automatisierungstechnik hab ich leider wenig Ahnung. Ich habe ein Heizelement und einen Temperatursensor. Das Heizelement wird über PWM angesteuert. Man kann einen Temperatursollwert einstellen und ein µC soll die PWM Aussteuerung so ändern, dass der Temperaturmesswert möglichst schnell den Sollwert erreicht. Im Moment habe ich einfach die Temperaturdifferenz von Mess-Soll ausgerechnet und wenn sie negativ ist, wird die Aussteuerung erhöht und wenn sie positiv ist, verringert und weil das Heizelement recht träge ist, passiert das hochzählen etwa in 100ms Abständen, damit er quasi nicht nur 100% und 0% Aussteuerung fährt. Das Problem bei dieser Lösung ist, dass das Abkühlen langsamer ist als das Aufheizen, d.h. beim Hochfahren auf T_soll wird T_soll etwa um 10° überschritten. Danach geht er wieder runter und erreicht fast direkt den Sollwert. Allerdings dauert das ganze ca 1,5 Minuten bis der Wert stabil ist. Wenn man direkt mit 100% heizt, wird der Maximalwert des Elements recht schnell erreicht. Ich schätze mal 20-30s. Was für eine Regelung könnte ich relativ einfach Implementieren, die mir meinen Sollwert schneller bringt? Ich benutze einen Atmega8 mit Assembler, also es sollte kein zu komplizierter Algorithmus sein.
Probiers doch mal mit einer "Gradientenbegrenzung" beim Aufheitzen, d.h. nicht mehr heizen, wenn der Gradient X °C/s überschreitet. Weiterhin musst du deine 100% Ansteuerung "frühzeitig = X °C vor Erreichen der Soll-Temperatur " auf Werte kleiner 90% drosseln.
Wenn ich das richtig gelesen habe, benutzt Du einen P(roportional)-regler. Die neigen zum von Dir beschriebenen Überschwingen. Stichwort wäre PID. Dazu findet sich auch einiges im Netz.
> Was für eine Regelung könnte ich relativ einfach Implementieren, > die mir meinen Sollwert schneller bringt? Ich benutze einen > Atmega8 mit Assembler, also es sollte kein zu komplizierter > Algorithmus sein. Natuerlich kann man soetwas auch in Assembler machen, auch wenn es Unsinn ist sich das Leben unnoetig schwer zu machen. Wie kompliziert dein Regler wird haengt aber allein von deiner Strecke ab und nicht von deiner Faulheit. Deine Strecke duerfte wahrscheinlich PT1 Verhalten zeigen, vielleicht sogar PT2 wenn dein Temperaturfuehler nicht direkt neben deinem Heizwiderstand ist. Letzteres solltest du dringenst vermeiden. Es empfiehlt sich in der Tat einen PID-Regler zu verwenden. Dann solltest du einmal einen Eingangssprung anlegen und so die Parameter deiner Strecke messen. Desweiteren empfiehlt es sich mal an auszuprobieren wieviel Prozent Heizleistung du fuer deine Solltemperatur brauchst. Wenn du deine Hardware so ausgelegt hast das du etwa 70-80% Heizleistung fuer die Solltemperatur benoetigt dann kannst du die Parameter des PID Reglers erstmal mit den ueblichen Verfahren berechnen. Danach noch ein bisschen von Hand optimieren und das ganze laeuft. Solltest du verschiedene Sollwerte anfahren wollen die weit auseinander liegen so wirst du wohl einen adaptiven Regler brauchen. Im einfachsten Falle dann an mehreren Stellen die Parameter ausprobieren/messen, eine Ausgleichgerade zeichnen. Pruefen ob man mit einer Funktion 2, 3 oder gar 4 Ordnung hinkommt und dann je nach Sollwert andere Regelparameter berechnen. Du musst zur Berechnung natuerlich die Werte sinnvoll skalieren. Auf einem 8Bit Controller noch dazu in Assembler natuerlich ziemlich uebel. Besonders Funktion zur berechnung des maximalen I-anteils kann aufwendiger werden und ist fuer dein Ueberschwingen sehr wichtig. Ein PID Regler ist im uebrigen nicht kompliziert. Kompliziert kann es dagegen sein die Regelparameter zu ermitteln. Also kann der dumme Algorythmus in deinem dummen Mega8 laufen, und die schlauen Parameter entstehen in deinem schlauen Kopf. :-) Ich halte im uebrigen eine Abtastzeit von 0.1s fuer unoetig kurz falls du nicht eine sehr kleine thermische Masse regelst oder grobe Stoergroessen erwartest. Ich wuerde 1s empfehlen. Es empfiehlt sich auch sich am Controller einen seriellen Ausgang zu schaffen und dort dann einmal pro Sekunde Istwert, Sollwert, Kp, Ki, Kd, Imax, PWM-% auszugeben. Das erleichtert es sehr seinen Regler zu parametrisieren. Und bevor du programmierst, alles einmal von Hand durchrechnen und pruefen welche Zahlen da vorkommen, damit du weisst mit welchem Faktor du skalieren musst, welche Variablenbreiten notwendig sind, und ob es zu einem Registerueberlauf kommen kann. Und ein Buch ueber Regelungstechnik kann auch nicht schaden. .-) > Dazu findet sich auch einiges im Netz. Was ich bisher im Netz gesehen habe war alles gut geeignet um einen die Sache nochmal vor Augen zu fuehren nachdem man die Regelungstechnik- vorlesung gehoert habe. Aber wenn man noch garkeine Ahnung hat wird man ohne ein Buch nicht weit kommen. Und wenn man keine Ahnung hat und daran nichts aendern will, dann schmeisst man den Mega8 weg und baut sich einen analogen Regler wo man einfach nach Gefuehl die Werte mit drei Potis einstellt. :-D Ich glaube im Tietze und Schenk war eine Schaltung die zeigt wie das unabhaengig geht. Olaf
1 | float regeln(float istWert, float sollWert) { |
2 | float diff = sollWert - istWert; |
3 | esum = esum + diff; |
4 | y = K_P * diff + K_I * T_A * esum + K_D * (diff - diffalt) / T_A; |
5 | diffalt = diff; |
6 | if (y > STELL_LIMIT) |
7 | y = STELL_LIMIT; |
8 | else if (y < -STELL_LIMIT) |
9 | y = -STELL_LIMIT; |
10 | |
11 | return y; |
12 | }
|
Ersetze float durch einen Typ deiner wahl :) (bei deinen Zeitkonstanten wirst du wahrscheinlich aber auch mit 'float' bei 8Bit und 0,5MHz Takt eine ausreichende Regelfrequenz erreichen.)
>Deine Strecke duerfte wahrscheinlich PT1 Verhalten zeigen Mit größer Wahrscheinlichkeit, Ja! >sogar PT2 wenn dein Temperaturfuehler nicht direkt neben deinem >Heizwiderstand ist. Nö, der Tempfühler ändert nix an der Strecke! Lediglich die Rückführung (Tempfühler) hat halt auch PT1-Charakter. >Letzteres solltest du dringenst vermeiden. Seh' ich unkritisch! 2x PT1 (geschlossener Kreis) bedeuten noch lange keine Instabilität! >Es empfiehlt sich in der Tat einen PID-Regler zu verwenden. In der Theorie ist der PID dem PI an Schnelligkeit deutlich überlegen. Allerdings muss die Geschwindigkeit irgendwo herkommen... und zwar aus einer (wenn auch nur kurzzeitig) sehr hohen Heizleistung zu Beginn der Regelung, die um ein vielfaches höher ist, als die Heizleistung im eingeschwungenen stationären Zustand. Da eine solch hohe Leistung vermutlich nicht zur Verfügung steht, wäre der D-Anteil der Regelung eh' verschwindend gering, womit man gleich beim PI-Regler bleiben kann. Hätte gleich den Vorteil, dass man ohne D-Anteil weniger störanfällig wird! Hinzu kommt noch die beschriebene Trägheit beim Abkühlen. Die kann selbst ein PID nicht per "negativer" Heizleistung bechleunigen ;-) >Ich halte im uebrigen eine Abtastzeit von 0.1s fuer unoetig kurz Ich halte sie für optimal. Ich würde Messungen des Temperaturfühlers sowieso noch per gleitendem Mittelwert filtern. Dann wäre die Abtastrate trotz Filterung noch ausreichen klein gegenüber den domierenden Streckenzeitkonstanten, womit man einerseits den Mittelwertfilter als auch das Abtasthalteglied veranchlässigen könnte und eine quasi-kontinuierliche Regelung entwerfen kann! -> PI-Regler mit Kompensation der dominierenden Zeitkonstante(n) des Systems >Und wenn man keine Ahnung hat und daran nichts aendern will, dann >schmeisst man den Mega8 weg und baut sich einen analogen Regler wo >man einfach nach Gefuehl die Werte mit drei Potis einstellt. :-D Mit einer digitalen Regelung ist man weitaus besser bedient und sehr viel flexibler in der Parametrierung. Die dafür notwendige Ahnung braucht man in beiden Fällen!
> >Letzteres solltest du dringenst vermeiden. > Seh' ich unkritisch! Kannst du das mal begruenden? Soweit ich mich erinnere wird der Abstand Fuehler zum Heizelement in der Fachliteratur als besonders kritisch angesehen und ich bin mir auch relativ sicher das mein Regelungstechnikprof darueber auch mal ein Wort verloren hat. Ich zitiere mal aus Elementare Regelungstechnik/Busch s.187: P-T2-Verhalten zeigt z.B eine Temperaturregelstrecke, wenn der Messwert nicht direkt an der Heizwicklung aufgenommen wird. Zur Verzoegerung der Heizwicklung kommt dann noch die verzoegerte Uebertragung einer Temperaturaenderung von der Heizwicklung zum Messfuehler. > Da eine solch hohe Leistung vermutlich nicht zur Verfügung > steht, wäre der D-Anteil der Regelung eh' verschwindend > gering, womit man gleich beim PI-Regler bleiben kann. Hast du eigentlich schonmal so einen Regler aufgebaut? Durch richtige, und relativ grosse, Wahl des D-Anteil habe ich so eine Regelung schon dazu gebracht einen linearen Anstieg bis auf den Sollwert zu machen. Also ohne ein nennenswertes Ueberschwingen. Aber letztlich wissen wir ja garnicht wie die Strecke aussieht. Ich wuerde also im Zweifel immer einen PID nehmen, und wenn man wirklich ohne D-Anteil auskommt dann wird Kd eben null. Nochmal ein Zitat aus obigen Buch: Auch mit PI-Regler kann das System bei verkehrter Parameterwahl instabil werden. [..] Optimal zur Regelung einer PT2-Strecke ist ein PID-Regler, der allerdings kompliziert einzustellen ist. Bei einer reinen PT1 Strecke geht der Autor zwar auch davon aus das man keinen D-Anteil braucht, aber wenn man wirklich kein Ueberschwingen haben will dann waer ich da vorsichtig. Die Frage ist naemlich ob man wirklich ganz sicher keine zweite Verzoegerungszeit hat sonst wird man naemlich sein blaues Wunder erleben. > Ich würde Messungen des Temperaturfühlers sowieso noch per gleitendem > Mittelwert filtern. Auch dafuer haette ich gerne mal eine Begruendung. Schliesslich machst du damit doch deine Regelstrecker aus der Sicht des Reglers komplizierter weil du eine neue zeitabhaengige Groesse einfuehrst. Warum willst du das machen? Ich sehe da keinen Vorteil. Olaf
>Hast du eigentlich schonmal so einen Regler aufgebaut? Allerdings. Aktuelles Projekt, gerade in der Serieneinführung. >Kannst du das mal begruenden? Soweit ich mich erinnere wird >der Abstand Fuehler zum Heizelement in der Fachliteratur als besonders >kritisch angesehen und ich bin mir auch relativ sicher das mein >Regelungstechnikprof darueber auch mal ein Wort verloren hat. Ich denke, jedem ist klar, dass der Fühler so nah wie möglich am Heizelement angebracht werden sollte. Insbesondere wenn die Temperatur des Heizelements geregelt werden soll. Wenn der Fühler weiter weg ist, erhöht sich entsprechend die Zeitkonstante der Rückführung, wodurch der Regler insgesamt langsamer ausgelegt werden muss um stabil zu bleiben. Genau der Grund, warum sich ein "schneller" PID oft gar nicht lohnt. >Durch richtige, und relativ grosse, Wahl des D-Anteil habe ich so eine >Regelung schon dazu gebracht einen linearen Anstieg bis auf den Sollwert >zu machen. Wenn die Stellgröße das mitmacht, spricht ja nix dagegen! Ich kann nur aus eigener Erfahrung sagen, dass mein Regelkreis sich zu Beginn der Aufheizphase in der Stellgrößenbegrenzung befindet. Schneller geht also gar nicht. Und die Heizleistung so "übermäßig" hoch zu dimensionieren, damit ein PID sich wirklich austoben kann, wird aufwändiger und teuerer. Wenn man's braucht... tja dann muss man halt ;-) >Auch mit PI-Regler kann das System bei verkehrter Parameterwahl >instabil werden. Unbestritten, hab ich aber auch nicht behauptet. >Bei einer reinen PT1 Strecke geht der Autor zwar auch davon aus das >man keinen D-Anteil braucht, aber wenn man wirklich kein Ueberschwingen >haben will dann waer ich da vorsichtig. Ich wusste nicht, dass der TE kein Überschwingen haben darf/will. Aber nur durch die Wahl eines PID gegenüber einem PI ist das auch noch lange nicht gewährleistet! >> Ich würde Messungen des Temperaturfühlers sowieso noch per gleitendem >> Mittelwert filtern. >Auch dafuer haette ich gerne mal eine Begruendung. Schliesslich machst >du damit doch deine Regelstrecker aus der Sicht des Reglers >komplizierter weil du eine neue zeitabhaengige Groesse einfuehrst. Nö, sagte ich doch! Durch die Wahl der kleinen Abtastzeit gegenüber der dominierenden Zeitkonstante des Systems kann man das vernachlässigen! >Warum willst du das machen? Jede ADC-Messung hat Quantisierungsrauschen. Ausserdem ist jede analoge Messung durch digitale Schaltungsteile (µC), durch Schaltvorgänge (PWM) und womöglich durch Schaltregler potentiell störgefährdet. Ich mache bei ADC-Messungen immer eine Mittelung!
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.