Welcome! Log In Create A New Profile

Advanced

PID-Regelung für Heizelemente mit Selbstkalibrierung

Posted by peer 
PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 11:39AM
Eine PID-Regelung für die Heizelemente (Extruderheizung und Druckplattenheizung) hat den Vorteil, dass sie eine schnelle Aufheizung und eine genaue Regelung ohne Überschwinger auf den Sollwert ermöglicht.

Im Gegensatz dazu hat eine Zweipunktregelung (nur eine Schaltschwelle und dann Heizung entweder an oder aus) den Nachteil, dass sie zu regelmäßigen Temperaturschwankungen um den Sollwert führt.

In der FiveD Firmware ist schon eine PID-Regelung integriert, aber mir ist nicht klar, wie man die Parameter sinnvoll bestimmt. Diese hängen ja von der thermischen Trägheit des jeweiligen Aufbaus und von der verfügbaren Heizleistung (usw.?) ab.

Da ich weiß, dass es "selbstlernende Heizungssteuerungen" gibt, die ein paar Tage den Temperaturgang der Wohnräume ausmessen, um die Raumtemperaturen dann besser zu regeln, denke ich, dass man das auch in der Firmware implementieren kann.

Auf reprap-dev wurde dazu angemerkt, dass eine selbstlernende Temperaturregelung die Komplexität bei der Fehlersuche erhöhen könnte (für Anfänger sehr schwer zu debuggen) und von einem Beiträger für eine Zweipunktregelung mit höherer thermischer Trägheit (größerer Metallblock) plädiert. Jedoch habe ich schlechte Erfahrungen mit einer Zweipunktregelung gemacht (zu große Temperaturamplitude) und denke daher nach wie vor, dass eine PID-Regelung mit Autokalibrierung sinnvoll ist. Vielleicht lassen sich Abfragen einbauen, die typische Fehler wie "lockeres Thermistorkabel" automatisch feststellen, um sowas gar nicht erst umständlich Debuggen zu müssen.

Nun bin ich leider kein Ing. und weiß nicht, wie man die Kalibrierwerte errechnet. Ich vermute, die relevanten Stichwörter dafür sind "Verhalten des Systems bei Sprungantwort" und "daraus die PID-Koeffizienten ermitteln".

Aber weiß jemand, wie man die dann ausrechnet?

Edited 1 time(s). Last edit at 10/21/2010 11:46AM by peer.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 11:55AM
[en.wikipedia.org]


Mfg
Wolfgang
Aller Anfang war schwer - Wolfstrap Reprap-fab.org Meine Meinung

Erfahrungen kann man leider schlecht weiter geben, die muss man selber machen.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 12:17PM
Das, was für die Fragestellung interessant ist, steht auf der WP-Seite unter "Loop tuning". Darum geht's hier.
Aber es ist dort noch nicht konkret genug.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 12:28PM
[en.wikipedia.org]

spinning smiley sticking its tongue out


Mfg
Wolfgang
Aller Anfang war schwer - Wolfstrap Reprap-fab.org Meine Meinung

Erfahrungen kann man leider schlecht weiter geben, die muss man selber machen.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 12:34PM
Nun, wer die FiveD-Software verwendet, muss ja irgendwie die PID-Werte für seine Firmware ermitteln, wenn die Regelung optimal arbeiten soll.

Ich habe momentan keine Ahnung, wie man das macht.

Egal ob manuell oder automatisch.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 01:52PM
Hallo peer

eventuell hilft dir das.

[www.chemgapedia.de]


Grüße Jochen
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 02:35PM
In der aktuellen offiziellen Firmware sieht das so aus:

config.h(.dist)

292 	// PID gains. E_ = extruder, B_ = bed. The Es are about right for a brass extruder about 8 mm
293 	// in diameter and 30 mm long heated by a 6 ohm coil with a 12v supply. The B_ values are OK
294 	// for the bed described here: [reprap.org]
295 	// Extruding increase biases the input to the extruder heater when the extruder
296 	// is running as it requires more power.
297 	// +/- BAND is the proportional band. Setting this to 0 gives bang-bang control; setting
298 	// it very large gives full PID all the way.
299 	
300 	#define E_TEMP_PID_PGAIN 2.0
301 	#define E_TEMP_PID_IGAIN 0.15
302 	#define E_TEMP_PID_DGAIN 0.5
303 	#define EXTRUDING_INCREASE 7
304 	#define E_TEMP_PID_BAND 0.0
305 	
306 	#define B_TEMP_PID_PGAIN 2.0
307 	#define B_TEMP_PID_IGAIN 0.07
308 	#define B_TEMP_PID_DGAIN 1.0
309 	#define B_TEMP_PID_BAND 1000.0


pid.pde
136 	float error = (float)(targetTemperature - currentTemperature);
137 	int output;
138 	if(error < -band)
139 	{
140 	output = 0;
141 	setTarget(targetTemperature);
142 	} else if (error > band)
143 	{
144 	output = 255;
145 	setTarget(targetTemperature);
146 	} else
147 	{
148 	// PID
149 	time = millis();
150 	float dt = 0.001*(float)(time - previousTime);
151 	previousTime = time;
152 	if (dt <= 0) // Don't do it when millis() has rolled over
153 	return;
154 	
155 	
156 	integral += error*dt;
157 	float derivative = (error - previousError)/dt;
158 	previousError = error;
159 	output = (int)(error*pGain + integral*iGain + derivative*dGain);
160 	if(!doingBed && cdda[tail]->extruding())
161 	output += EXTRUDING_INCREASE;
162 	output = constrain(output, 0, 255);
163 	}
164 	
165 	analogWrite(heat_pin, output);

Fazit:
- Die PID-Werte stehen in der config.h, sollen also (vermutlich) angepasst werden.
- In den Kommentaren ist angegeben, für was für Hardware sie sind.
- Nicht jeder hat diese Hardware.
- Insbesondere die neuen Extruder mit dem Klotz unten weichen davon ab.
- Wie man die Werte ermittelt, steht nirgends.
- Die Herkunft des Zahlenwerts für Extruder_increase ist nicht weiter erklärt (vermutlich ausprobiert?).
- Warum sollte diese Anpassung unabhängig sein von der Extrudergeschwindigkeit? Die programmierte Methode ist aber unabhängig von der Geschwindigkeit.

Da besteht Bedarf an Dokumentation und es gibt Möglichkeiten zur Verbesserung des Modells.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 03:09PM
peer Wrote:
-------------------------------------------------------
> In der aktuellen offiziellen Firmware sieht das so
> aus:
>
> config.h(.dist)
>
Das ist nicht in der letzten Offiziellen, sonder in der letzten Trunk (beta)

das sollte man nicht durcheinander werfen... in der Offiziellen ist der PID für beide Heizungen gleich. Da gibt es diese Unterteilung noch gar nicht.


Mfg
Wolfgang
Aller Anfang war schwer - Wolfstrap Reprap-fab.org Meine Meinung

Erfahrungen kann man leider schlecht weiter geben, die muss man selber machen.
VDX
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 03:09PM
... lies dich hier mal rein - wir verwenden für unsere Sensoren, um die Armatur und einen Membranheizer auf Konstatnttemperatur zu halten, nur eine PI-Regelung.

Wenn ich die Armatur von Raumtemperatur aus auf 60°C hochheize (relativ geringe Heizleistung von etwa 20Watt), dann habe ich bei den aktuell eingestellten P und I-Werten einen ersten Überschwinger von etwa 0.3°C, dann zwei stark gedämpfte Einschwinger und ab dann habe ich eine Temperaturkonstanz von +/- 0.001°C mit einem Ni200-Ssensor und 16Bit Auflösung ...

Ich habe da auch die Einstellregel für die PI-Regelung dargestellt - erst mit I=0 und P sehr groß das System zum Schwingen bringen, dann P runterregeln, bis die Schwingung aufhört, dann P nochmal 10% kleiner, und dann I soweit hochregeln, daß das 'Einschwingen' möglichst schnell und ohne starke Überschwinger erfolgt.

Mit den richtigen Werten kann ich auch eine hochheiz-Kurve ohne Überschwinger einstellen, dann brauchen die letzten 0.01°C aber viel länger bis zum Endwert von +/- 0.001°C.

Da wir für den RepRap keine 1/1000-el Grad brauchen und mit viel höheren Leistungen drangehen, müßte das auch mit den 10Bit Auflösung des Arduino gehen ...

Edited 1 time(s). Last edit at 10/21/2010 03:10PM by VDX.


Viktor
--------
Aufruf zum Projekt "Müll-freie Meere" - [reprap.org] -- Deutsche Facebook-Gruppe - [www.facebook.com]

Call for the project "garbage-free seas" - [reprap.org]
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 03:11PM
Hallo peer,

aehm, jetzt wird es für mich arg Theroie..
Warum soll die Heizungsregelung (PID) noch den Parameter Extudiergeschwindikeit verarbeiten ?
Dafür ist sie nicht gemacht.

Der PID regelt die Temperatur. Wenn viel extrudiert wird muss er seinen wert bekommen, genauso wie wenn nur sehr wenig extrudiert wird.
Ist PID einstellung, wie schnell er reagieren soll, und mit welcher nachstellgeschindikeit.
Jetzt hänge ich nen wenig, aber increase heisst doch mehr Gas ?
Vermutlich haben die einen künstlichen Parameter geschaffen um auftretende kurze Hitzestaus mit mehr power auf
auf die Extudergeschindikeit in kürzester Zeit auszugleichen.

Würde ich jedenfalls so machen.

Grüße Jochen
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 05:01PM
> das sollte man nicht durcheinander werfen...

Da hast Du Recht!

> in der Offiziellen ist der PID für beide Heizungen gleich. Da gibt es diese Unterteilung noch gar nicht.

Was unwahrscheinlich ist. Das ist höchstwahrscheinlich ein Fehler. Es wäre reiner Zufall, wenn die thermischen Eigenschaften der beiden Heizvorrichtungen gleich wären.

> lies dich mal hier rein

Das ist im Prinzip dieselbe Regelung wie die PID-Regelung von Adrian, nur eben ohne D. Das Problem ist aber, wie findet man die Werte. Und ich will die Lösung (wie fast immer) nicht speziell für mich (denn irgendwie hingefrickelt kriege ich das wohl), sondern für den DAU, der von allem wenig Ahnung hat. Daher die Idee mit der Selbstkalibrierung, oder zumindest eine klare Anleitung, idealerweise mit Software-Unterstützung à la "Einstellassistent".

> einen künstlichen Parameter geschaffen

Der schlägt einfach fix "7" auf, wenn der Extruder extrudiert, und nennt als Grund, dass der dann mehr Wärme braucht. Was ja stimmt, da der Kunststoff laufend geschmolzen werden muss und die Wärme dann mitnimmt.
Die "7" gehen so direkt proportional in die Heizleistung ein, die als Zahl in einen PWM-Ausgang geschrieben wird (vermutlich 7 von 256, was dann "+2,7%" entspricht). Ich denke, wenn schnell oder langsam extrudiert wird, ist der Wärmeverlust verschieden hoch, da verschieden viel Kunststoff pro Zeit durch den Durchlauferhitzer geschoben wird, daher meine Idee, das Modell anzupassen.
Aber es stimmt, die Regelung sollte sowas eigentlich eh rausregeln. Ist anscheinend einfach irgendein Hack...

Edited 1 time(s). Last edit at 10/21/2010 05:03PM by peer.
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 05:10PM
> die Einstellregel für die PI-Regelung

Quote
Viktor im engl. Thread
For faster finding the correct values you can use this procedere:
- set I=0
- set P really big (i tested wit 20000), until the temp starts to oszillate around the SetTemp.
- reduce P until the oszillation stops ... then reduce the value by 10%
- then start to increase the I-value, until you get a fast enough setting on the target temperature ...
also:

- I auf 0 setzen
- P sehr groß einstellen (ich hab's mit 20000 getestet), bis die Temperatur anfängt, um den Sollwert zu oszillieren
- P reduzieren, bis die Schwingung stoppt, dann den Wert nochmals um 10% reduzieren
- dann anfangen, den I-Wert zu erhöhen, bis die Einstellung auf die Zieltemperatur schnell genug geht.

Ok, das ist ein konkreter Vorschlag. Ein konkreter Anfang für eine experimentelle Einstellmethode. Das könnte man ggf. sogar automatisieren...

Aber durch was ist der begründet? Ist es die beste Methode?
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 05:36PM
Hallo peer,
bin nimmer ganz da. Aber so wie du es beschreibst, könnte das ein weg sein die unerwünschten Fäden
bei abgeschaltetem Extruder zu vermeiden ....
Grüße Jochen
VDX
Re: PID-Regelung für Heizelemente mit Selbstkalibrierung
October 21, 2010 06:11PM
Hi Peer,

... den Tip mit "P runterfahren, bis es nicht mehr schwingt, und dann nochmal 10% kleiner" habe ich von einem älteren praktiker bekommen.

Dann habe ich mit unserem Aufbau einige Tage rumexperimentiert, bis ich einen brauchbaren Kompromiß hatte eye rolling smiley

Für eine perfekte Einstellung mußt du die Regelung zig mal runterkühlen und wieder hochheizen lassen - ich habe dafür zwei 'Kälte'-Sprühdosen zum schnelleren Runterkühlen der Armatur verbraucht eye popping smiley

Bei unserer Regelung brauche ich 20 bis 30 Minuten, bis sie perfekt eingeschwungen ist ... der Extruder ist viel schneller, dürfte aber auch einige Stunden erfordern, wenn du den so durch Ausprobieren optimierst ...


Viktor
--------
Aufruf zum Projekt "Müll-freie Meere" - [reprap.org] -- Deutsche Facebook-Gruppe - [www.facebook.com]

Call for the project "garbage-free seas" - [reprap.org]
Sorry, you do not have permission to post/reply in this forum.