PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regelung für Heizwicklung "Overshot" - Gelöst!



wkrug
30.11.2007, 22:33
Hallo Forumsteilnehmer,

ich möchte einen Thermostat für eine kleine Heizwicklung ( 20W ) entwickeln.
Die Schaltung wird von einem ATMEGA8 gesteuert, der die Heizwicklung via MOS FET mit PWM Signalen ansteuert.
Als Messweraufnehmer dient ein Temperatursensor Typ LM335 der thermischen Kontakt mit der Heizwicklung hat.
Die Schaltung ist im Prinzip fertig und funktioniert bis auf ein paar Kleinigkeiten schon gut.

Nun zu meinem Problem:
Beim ersten Start der Heizwicklung, kommt es zu einer Überhitzung der Heizwicklung ( Overshot ), weil der Temperatursensor erst ca. 4Sekunden später die aktuelle Temperatur der Heizwicklung mitkriegt. Die Temperatur schießt somit um 4...6°C über den eingestellten Temperaturpunkt hinaus.

Wie kriegt man sowas in den Griff, ohne die Anheizleistung zu stark zu verringern ?
Theoretisch sollte so etwas über eine Art Tendenzauswertung klappen, blos wie berechnet bzw. realisiert man sowas (wenn möglich ohne höhere Mathematik) und wie kriegt man das in den Microcontroller.

Ich hätte auch gerne, das sich die Schaltung im Betrieb einschwingt und nicht ständig zwischen PWM Extremwerten hin und her pendelt, was sie zur Zeit gelegentlich tut.
Die Temperaturabweichung beträgt dabei maximal 2°C.
Wie kriegt man das mit der vorhandenen Schaltung am einfachsten hin.

Zu den Rahmenbedingungen.
Die Umgebungstemperatur kann zwischen -25 und +20°C liegen.
Die Heiztemperatur (Wunschtemperatur) liegt im Bereich von 24...43°C.
Die PWM lässt sich in 0,2% Schritten ( 512 Schritte ) einstellen.
Die maximale Temperaturabweichung soll 1°C betragen.
Die Auflösung des Sensorsystems ( Sensor + A/D Wandler ) beträgt 0,5°C.

Ich bin jetzt nicht der Regeltechnik Crack und hab auch kein Hochschul Studium hinter mir, also bitte allgemein Verständlich antworten, wenn das möglich ist.

dennisstrehl
30.11.2007, 23:39
Also, das Problem mit dem Overshoot kann man auf zwei Arten lösen:
1. Softstart, also Temperatur langsam hochfahren, aber das willst du ja nicht.
2. Brauchbaren Regler programmieren :P Ich weiß ja nicht wie die Regelung bisher funktioniert, vermutlich ein Integralregler, dann sollte man mal testweise noch einen Proportionalteil dazurechnen, d.h. du sagst dem Mikrocontroller "nimm den Temperaturunterschied der aktuellen Messung zur vorherigen, wenn sich die Temperatur verändert hat dann rechne das mal einen bestimmten Faktor und addiere das zum PWM-Wert". (Edit: Vorsicht mit dem Vorzeichen ;) )
Achso... Das Anheizen wird dadurch wahrscheinlich auch einen kleinen Tacken langsamer, dürfte aber nicht extrem stören.

Es gibt hier auch einen Artikel zum Thema Regelungstechnik (https://www.roboternetz.de/wissen/index.php/Regelungstechnik)...

Zu dem zweiten Hin-und-Herpendeln noch: Evtl. hat sich das erledigt, wenn der Regler auch vernünftig einschwingt.

avion23
01.12.2007, 12:55
Hallo wkrug,
wie dennis bin ich der Meinung, dass sich das Problem mit einem PI-Regler lösen lässt. Hierfür braucht man etwas Mathematik. Es lohnt sich nicht, ein vorhandenes Programm ohne Verständniss anzupassen. Bemüh mal die Suche nach "PID Regler", dort habe ich einen sehr guten (englischen) link gepostet, in dem eine Heizungsregelung diskutiert wird.

wkrug
01.12.2007, 13:43
@dennisstrehl
Die Regelung schaut bis jetzt so aus, das für den vorhandenenen Temperaturunterschied ein Inkrement errechnet wird.
Dieses Inkrement wird dann einfach zum bestehenden Phasenwinkel dazuaddiert.
Dieser Vorgang wird alle 35mS wiederholt.
Bei Temperaturabweichungen unter 2°C wird diese Zeit auf 350ms verlängert.
Also ich würd sagen das ist eine reine integrierende Regelung.
Das funktioniert auch im Prinzip schon recht gut, nur durch die Verzögerung der Temperaturweiterleitung schießt das ganze Spiel über den eingestellten Sollwert hinaus. Auch wenn ich nach Erreichen des Sollwertes die Spannungszufuhr komplett abschalte ist im Heizsystem noch so viel Energie gespeichert, das es zu dieser Übertemperatur kommt.
Sprich der Regler muss also schon im Vorfeld ahnen, das nun bald ein Temperatur Überschwinger zu erwarten ist und entsprechend darauf reagieren.
Das es nicht ganz ohne Mathematik geht ist mir schon klar.
Blos wenn Du mir jetzt ne 3 zeilige Formel um die Ohren haust ist mir damit auch nicht geholfen.

Das was Du über den Proportionalanteil schreibst ist mir im Prinzip schon klar.
Sobald aber die Heizung mal läuft habe ich keine Information mehr über die Umgebungstemperatur. Das heisst ein Proportionalanteil der bei -20°C noch OK ist, wird mir bei +15°C Umgebungstemperatur die Heizung hoffnungslos überhitzen. Es müsste sich also um einen Proportionalanteil der Temperaturdifferenz handeln, was ja dann trotzdem wieder ein integrierendes Verfahren wäre.

Ausserdem ist die Spannung mit der die Heizung versorgt wird nicht 100% konstant und kann bist zu +/- 10% schwanken, was das Problem nicht unbedingt vereinfacht.

Nun immer noch die Frage, wie komm ich denn auf vernünftige Regelparameter ? Vieleicht kann man da ja auch Experimentell was ermitteln ? Wie sollte ich da rangehen, ohne vorher ein Steuer und Regelungstechnik Studium abzuschließen ?

jar_
01.12.2007, 14:48
man kann doch locker einen 2-punktregler vorschalten per software

wenn temp zu hoch abschalten, nur löst das nicht das problem warum der sensor es nur nach 4 sekunden mitbekommt

das muss man lösen

PsiQ
01.12.2007, 14:58
Mechanische Lösung:
Heizung in Alublock/Kupfer setzen mitsamt dem Sensor,
der Block puffert die Tempschwankung wie ein Kondensator,
der Sensor bekommt das besser mit.

Software:
Soft-Start erst paar Sekunden nur mit wenig Leistung
ausgehend vom ersten Messwert vor dem Start:
Startschleife 10sekunden
BSP.:
10°C = 30%max
20% = 40% max
dann normale Programmschleife

..wie mans braucht

Wenn aber dein Sensor einfach dermaßen träge ist, nützt auch die beste+schnellste (auf den Messwerten basierende) Software nichts.

dennisstrehl
01.12.2007, 17:03
> "Es müsste sich also um einen Proportionalanteil der Temperaturdifferenz handeln, was ja dann trotzdem wieder ein integrierendes Verfahren wäre."

Nein... Man differenziert die Temperatur indem man die Temperaturdifferenz bildet, und das was man rausbekommt integriert man wieder durch das auf-den-PWM-Wert-draufaddieren. Beim Integralregler wird dagegen die Abweichung vom Sollwert gemessen und integriert. Würde man noch einen Differentialteil nutzen wollen, müsste man dafür 2x differenzieren und anschließend den Wert aufintegrieren. Direkt geht das meines Wissens nicht, wenn man mehrere Regler (Integral und Proportional) kombinieren will.

Den dazugehörigen Regelparameter kann man experimentell bestimmen... Stell es beispielsweise so ein, dass wenn die Temperatur um 0,5°C steigt / sinkt, die Regelgröße um 5 Prozentpunkte verringert / erhöht wird. Wenn es in die richtige Richtung geht, kannste den Wert noch erhöhen.
Im Regelungstechnik-Artikel gibt es ein paar mehr oder weniger einfache Designregeln... Das mit der Schwingungsmethode sieht noch relativ einfach aus.

Zum Verständnis: Die beiden Regelteile arbeiten kurz vorm Erreichen der korrekten Temperatur gegeneinander, der Integralregler will die Heizleistung erhöhen, während der Proportionalregler dauernd die Heizleistung verringert, weil die Temperatur steigt. Dadurch wird die Heizleistung schon vor dem Erreichen der Solltemperatur verringert.
Der Proportionalregler dient letztlich nur dazu, den Integralregler zu stabilisieren, die Endtemperatur wird weiterhin durch den Integralregler bestimmt.

wkrug
01.12.2007, 18:25
Heute Nachmittag hab ich mal eine ausgedehnte Messsitzung gemacht und
ich glaube ich hab jetzt eine recht brauchbare Lösung für mein Problem gefunden.

Ich habe in die Regelung einen Proportionalanteil mit recht hohem Verstärkungsfaktor eingebaut.
Allein dieser Regelzweig bringt mir die Regelung bis auf 3...4°C an den Wunschwert heran.
Ab einem bestimmten PWM Wert greift eine integrierende Routine mit ein, die zum Proportionalanteil alle 100ms die PWM um 1 erhöht (weniger geht ja nicht), das sind rund 0,2%.
Wird der Sollwert überschritten wird die PWM alle 100ms um 2 erniedrigt.

Ergebnis:
Die Schaltung startet jetzt mit der maximalen Leistung und weicht im Regelbetrieb nur noch um 1...1,5°C vom Sollwert ab.
Ein Temperatur Overshot findet nicht mehr statt.

Da die Genauigkeit der Messwerterfassung auch nur bei +/- 0,5°C liegt passt mir das so.

Nimmt man die Regelzeit von 100ms zurück auf 35ms (kann man per Taststur eingeben) wird die Schaltung instabil, weil der integrierende Anteil die PWM zu schnell hochfährt.

Ich möchte mich bei allen Bedanken, die mir hier geholfen haben, im Besonderen bei "dennisstrehl", der mich auf diese Lösung gebracht hat.

oberallgeier
01.12.2007, 18:58
... einem ... Wert greift eine integrierende Routine mit ein ... Wird der Sollwert überschritten wird ... erniedrigt ...
Ich habe bei integrierenden Anteilen gute Erfahrung damit gemacht, dass um den Sollwert herum ein schmales Band bleibt, in dem der Integrierer wieder abgeschaltet wird. Das verhindert meistens das "Zittern" um den Nullpunkt bei integrierenden Anteilen - da das Stellwert-Increment meistens NICHT zum noch verbleibenden Abweichungs-Rest passt.

wkrug
02.12.2007, 10:58
dass um den Sollwert herum ein schmales Band bleibt
Diese Idee hatte ich auch schon.
Da aber die Heizleistung auch von der Umgebungstemperatur abhängig ist, ich zu diesem Zweck aber nicht noch einen Sensor einbauen will, muß das Band dann doch etwas breiter sein, als ich mir das wünschen würde.
Ich glaub ich hab aber jetzt einen Kompromiss gefunden mit dem ich gut leben kann.