Die Marlin Firmware hat paar echt nette Features am Board,
unter anderem das „PID Autotuning“.
Es sind zwar PID-Werte schon in der Firmware vordefiniert aber
diese sind in der Regel als Richtwerte anzusehen.
Grade wenn man wie ich ein komplett anderes HotEnd verbaut hat wie es
ursprünglich angedacht war.
Zum Glück hat die Marlin-Firmware ein nettes Tool mit an Board..
das PID Autotuning.
Dies macht es einen sehr einfach die richtigen PID-Werte zu ermitteln.
Als erstes nehmen wir und das HotEnd vor.
Nun erst einmal der G-Code zur Ermittlung der PID-Wete für das HotEnd in 8 Zyklen:
M106 M303 E-0 S230 C8
Erläuterung:
- M106 Nozzel Lüfter auf 100%
- M303 startet das PID Autotuning
- E-0 wählt das erste HotEnd
- S230 die zu erreichende Temperatur (230°C)
- C8 gibt die Zyklen der Messungen an ( 8 Stk. )
Nach dem nun die 8 Heizzyklen durchgelaufen sind habe ein Ergebnis in dieser Art:
Kp 21.0 Ki 1.25 Kd 86.0
Diese werden nun mit folgenden G-Code im EEPROM gepeichert.
M301 P21.0 I1.25 D86.0 M500
Erläuterung:
- M301 setzt die PID-Werte temporär
- P = KP
- I = KI
- D = KD
- M500 speichert die temporären PID-Werte im EEPROM
Oder direkt in die Firmware (Configuration.h) eingetragen.
#define DEFAULT_Kp 21.0 #define DEFAULT_Ki 1.25 #define DEFAULT_Kd 86.0
Um auch das HotBed über PID zu regeln, muss es erst mal in der Firmware aktiviert werden.
So muss das dann ein und auch auskommentiert werden in der Configuration.h
#define PIDTEMPBED //#define BED_LIMIT_SWITCHING
Auch hier können wir nun wieder das Autotuning Tool nutzen
M303 E-1 S60 C8
Erläuterung:
- M303 startet das PID Autotuning
- E-1 wählt das erste HotBed
- S60 die zu erreichende Temperatur (60°C)
- C8 gibt die Zyklen der Messungen an ( 8 Stk. )
Nach dem nun die 8 Heizzyklen durchgelaufen sind habe wir auch wieder hier ein Ergebnis in dieser Art:
Kp 579.01 Ki 100.87 Kd 586.0
Diese werden nun mit folgenden G-Code im EEPROM gepeichert.
M304 P579.01 I100.87 D586.0 M500
Erläuterung:
- M304 setzt die PID-Werte für das HotBed temporär
- P = KP
- I = KI
- D = KD
- M500 speichert die temporären PID-Werte im EEPROM
Oder auch hier direkt in die Firmware (Configuration.h) eingetragen.
#define DEFAULT_bedKp 579.01 #define DEFAULT_bedKi 100.87 #define DEFAULT_bedKd 586.0
Das war es auch schon :o)
14 Kommentare
Gerry · 19. November 2018 um 13:54
Hallo…. klapptndad auch mit dem stock anet board und software? Da ist ja auch pid als reglung vorgesehen und auch werte drin die aber nix taugen.
Seb · 1. März 2018 um 22:11
Ich habe bei meinem Black Widow dieses Autotuning zwei mal durchlaufen lassen. In beiden Fällen war das Ergebnis, dass er die erforderliche Temperatur nicht mehr erreicht hat. Die Autotunewerte weichen auch sehr von den Firmwarewerten ab. Ich habe dann wieder auf die Defaultwerte gestellt und jetzt druckt er wieder. Ich vermute, Autotune ist noch nicht das non plus ultra 😉
Stefan · 10. Februar 2018 um 11:38
Bei mir gibt es 2 Bereiche für die Werte:
#if ENABLED(PIDTEMPBED)
//#define PID_BED_DEBUG // Sends debug data to the serial port.
//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from FOPDT model – kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
#define DEFAULT_bedKp 337.76
#define DEFAULT_bedKi 46.85
#define DEFAULT_bedKd 608.72
//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from pidautotune
//#define DEFAULT_bedKp 97.1
//#define DEFAULT_bedKi 1.41
//#define DEFAULT_bedKd 1675.16
gehe ich recht in der Annahme, dass die Werte im Bereich „from pidautotune“ geändert werden müssen und die Auskommentierung entsprechend entfernt und oben bei „from FOPDT model“ hinzugefügt werden müssen.
Des weiteren muss in der advanced config von Marlin der Wert „WATCH_BED_TEMP_PERIOD“ auf unter 127 gesetzt werden um den fehler „PID Autotune failed“ zu vermeiden.
Stefan · 4. Februar 2018 um 15:15
Hi.
Wenn ich versuche den PID Abgleich für das heatbed zu machen. Kommt im Display die Meldung
„Heating failed printer halted“.
Ich verwende für Bett einen Mosfet und Marlin 1.1.8 als FW.
Der PID Abgleich des Extruders (ohne Mosfet) hatte funktuioniert! Die anpassungen
#define PIDTEMPBED
//#define BED_LIMIT_SWITCHING
hatte ich vorgenommen.
Carsten · 21. Februar 2018 um 11:25
Leider habe ich auch dieses Problem :-/
Rex Kramer · 3. Juni 2018 um 21:11
Hier gleiches Problem
deckelmaho · 17. Juli 2018 um 06:15
THERMAL_PROTECTION_BED muss abgeschalten werden, dann gehts auf Marlin 1.1.8
also aus so
#define THERMAL_PROTECTION_BED
mach so
//#define THERMAL_PROTECTION_BED
deckelmaho · 17. Juli 2018 um 06:41
EDIT:
Falls ihr Bauchschmerzen habt die „THERMAL_PROTECTION_BED“ deaktiviert zu lassen,
dann könnt ihr auch das PID-Tuning ausführen, die ermittelten Werte in die FW eintragen und „THERMAL_PROTECTION_BED“ wieder aktivieren.
Falko Lünsmann · 14. Juni 2017 um 22:13
Ich habe nun viele Foren in Bezug AutoPID Einstellung virgrfunden und meinen Daycom 3dp-100 versucht die ruchtigen PID-Daten zu erhalten.wenn ich daa Heatbed aufheize, zeigt mir der Thermistor zwar konstant 60°C an, aber die messung mit meinem Laserthermomessgerät zeigt mir 54°C an. Im Markin ist PID Aktiviert und auch gespeichert. Wie kann ich das nun anpassen? Anfangs hatte ich eine Temperaturtabelle Nr.11 aktiviert. Muss diese evtl.deaktiviert werden? Mein MK3 Heatbed ist zusätzlich mit einer Borosilikatglas bestückt.
Mit freundlichen Grüßen Falko
Shojo · 15. Juni 2017 um 10:45
Die Abweichungen sind ganz normal , da dein Temperatursensor eine Toleranz von ca. 5 % besitzt und Du auch ein anderen Messpunkt gewählt hast wie der Sensor in nutzt.
Steuert tut man auch nicht über die PID.
Ich könnte z.B. in meinem Octoprint ein „Temp Offset“ einstellen.
Ein Weg über die Firmware wäre mir das nicht bekannt.
Tobias · 19. Februar 2017 um 14:17
Servus,
wo bzw. mit welchem Tool gibt man denn die G-Codes ein?
Danke
LG
Tobi
Shojo · 21. Februar 2017 um 21:31
Ich mache das aktuell immer über Octoprint,
geht aber auch mit jeden Slicer wenn du den Drucker mit deinen PC / Lappi verbunden hast.
Tobias · 7. Februar 2017 um 10:06
Hallo Shojo,
sehr gute Anleitung:)
Eine Frage hätte ich. Sollte man evtl. beim Tuning den Nozzle-Lüfter manuell aktivieren (M106=ON M107=OFF), da ja beim Betrieb die Nozzle indirekt mitgekühlt wird, was beim Tuning mit einberechnet werden sollte? Ich kann mir gut vorstellen das die Temperatur sonnst zu stark absackt, wenn der Lüfter ab 0.5mm anspringt.
Oder sind die PID-Werte nur für das „Anheizen“?
VG
Tobias
Shojo · 7. Februar 2017 um 11:58
Hi Tobias,
so unrecht hast Du da nicht…
Hatte ich glatt verpennt 😉
Die PID-Werte sind für den ganzen Druck gültig.
Gruß
Dennis (Shojo)