Marlin 2.0 für 3D-Drucker
Nach der Umrüstung meines Ender-3 auf das SKR E3 DIP V1.0 wollte ich noch einige Anpassungen an der Firmware für das Board vornehmen. Desweiterem sind die 1.9er Versionen nicht dafür ausgelegt auf einem 32-bit Prozessor vernünftig zu laufen und alle Anpassungen dafür sind mehr oder weniger nur „Krücken“. Diese Anleitung hier ist primär nur für das SKR E3 DIP, kann aber mit etwas Überlegung auch für andere Boards genutzt werden da die Abfolge der Einstellungen fast weitesgehend gleich ist.
Um die Firmware zu konfigurieren und auf das Board zu spielen nutze ich VS-Code mit PlatformIO. Für VS-Code gibt auch ein Plugin um Marlin zu konfigurieren, das aber bis dato noch nicht mit Marlin 2.0 funktioniert.
Zum Anfang laden wir uns die Marlin 2.0 von der Marlin-Homepage herunter. Speziell für seine Boards stellt BigTreeTech schon fertig vorbereitete Versionen zur Verfügung die man nur noch nach seinen Wünschen anpassen muss. Einige andere Anbieter tun es ihnen gleich. Nach dem entpacken öffen wir VS-Code und importieren das ganze Verzeichnist mit „Add Folder to Workspace“ im Explorer. Wenn der Explorer noch nicht angezeigt wird können wir diesen mit Strg-Umschalt-E aufrufen.
Dann müsste das komplette Marlin-Verzeichnis im Explorer sichtbar sein.
Nun müssen wir PlatformIO erst einmal mitteilen welches Board und welchen Prozessor wir benutzen. Dazu öffnen wir die Datei „platformio.ini“ mit einem Doppelklick.
Im Moment ist im Abschnitt „[platformio]“ noch der ATMega2560 als Prozessor angegeben.
Da wir aber meist einen anderen Prozessor haben müssen wir diesen ändern. Dazu sind in der Datei viele anderen Plattformen hinterlegt nach denen wir suchen können. Mit Strg-F öffnen wir das Suchfester und suche nach „E3 DIP“. Sofern Ihr ein anders Board habt müsst ihr danach suchen. Es reicht auch wenn ihr nur Teile der Bezeichung eingibt, zu den einzelnen Boards sind auch Beschreibungen vorhanden.
Dort kopieren wir uns die Bezeichnung für unser Board heraus (bei mir „STM32F103RC_btt“) und setzen diese ganz oben in der Datei im Bereich „[platformio]“ hinter „default_envs =“ ein. Die Bezeihnungen können sich je nach Marlin-Version unterscheiden, also nicht wundern wenn dort etwas anderes steht.
Danach speichern wir die Datei mit Strg-S ab.Nun öffenen wir im Verzeichnis „Marlin“ die Datei „configuration.h“. Die Änderungen dazu folgen weitesgehend analog zu den Einstellungen zu Marlin 1.9. Aufgrund des leistungsfähigeren Boards habe ich folgene Änderungen bei mir vorgenommen (die Parameter fangen immer mit #define an. Eventuelle „//“ vor dem „#define“ müssen zur Aktivierung der Option entfernt werden)
Option | Änderung | Erläuterung |
CONFIGURATION_H_VERSION | 020005 | Hier kann man die Versionsnummer der Konfiguration hinterlegen |
STRING_CONFIG_H_AUTHOR | "(DM5SN)" | Hier kann man den Autor der Konfiguration hinterlegen |
SERIAL_PORT | 2 | Hier gibt man den seriellen Port zum Host (Cura, Octoprint etc.) an. Diese Einstellung ist etwas tricky da man dazu herausfinden muss mit welchen seriellen Port das Board und der Prozesssor mit dem Steuerrechner kommuniziert |
MOTHERBOARD | BOARD_BTT_SKR_E3_DIP | Hier muss das genaue Board angegeben werden. Diese findet man im Verzeichnis „/src/core/“ in der datei „boards.h“ |
CUSTOM_MACHINE_NAME | "ENDER-3" | Hier kann man dem Drucker noch einen Namen geben der im Display angezeigt wird. |
DEFAULT_NOMINAL_FILAMENT_DIA | 1,75 | Der Filamentdurchmesser ist bei mir 1,75 |
TEMP_SENSOR_0 | 1 | Die Bauart des Temperatursensors am Hotend |
TEMP_SENSOR_BED | 1 | Die Bauart des Temperatursensors am Druckbett |
BED_MAXTEMP | 125 | Die maximale Temperatur für das Druckbett |
PID_EDIT_MENU | Zusätzlicher Menüpunkt für PID-Tuning (testweise) | |
PID_AUTOTUNE_MENU | Zusätzlicher Menüpunkt für PID-Autotuning (testweise) | |
DEFAULT_KpDEFAULT_KiDEFAULT_Kd | Die Werte vom PID-Tuning für das Hotend (eigene Werte) [Link] | |
PIDTEMPBED | PID-Tuning fürs Druckbett aktivieren | |
DEFAULT_bedKpDEFAULT_bedKiDEFAULT_bedKd | Die Werte vom PID-Tuning für das Druckbett (eigene Werte) [Link] | |
EXTRUDE_MAXLENGTH | 600 | Maximale Länge eines Extrusionsvorgang (muss bei einem Drucker mit Bowden länger sein) |
X_DRIVER_TYPEY_DRIVER_TYPEZ_DRIVER_TYPEE0_DRIVER_TYPE | Alle TMC2208 | Der Typ der Stepperdriver und deren Ansteuerung (bei mir TMC2208 mit SPI) |
ENDSTOP_INTERRUPTS_FEATURE | Entstops sollen bei Betätigung einen Interrupt auslösen (spart Rechenzeit) | |
DEFAULT_AXIS_STEPS_PER_UNIT | { 80, 80, 400, 93 } | Gibt an wie viele Steps die Schrittmotoren machen müssen um 1mm zu bewegen |
DEFAULT_ACCELERATIONDEFAULT_RETRACT_ACCELERATION DEFAULT_TRAVEL_ACCELERATION | Alle 500 | Gibt die maximale Beschleunigung der Bewegungen an |
S_CURVE_ACCELERATION | Kurvenfahrten mit langsamerer beschleunigung werden aktiviert | |
INVERT_X_DIRINVERT_Y_DIRINVERT_Z_DIRINVERT_E0_DIR | false oder true je nach Bedarf | Drehrichtung der Mortoren invertieren (weiter unten beschrieben) |
X_BED_SIZEY_BED_SIZE | 235235 | Größe des Druckbettes in mm |
Z_MAX_POS | 250 | Maximale Höhe beim drucken |
HOMING_FEEDRATE_XY | 20*60 | Maximale Geschwindigkeit für X und Y beim Homing |
LCD_LANGUAGE | de | Sprache auf dem Display |
DISPLAY_CHARSET_HD44780 | WESTERN | Zeischensatz für das Display |
SDSUPPORT | Unterstützung für SD-Karten | |
INDIVIDUAL_AXIS_HOMING_MENU | X, Y und Z individuell homen | |
CR10_STOCKDISPLAY | Hier oder darüber/darunter muss das verbaute Display aktiviert werden | |
Option | Änderung | Erläuterung |
CONFIGURATION_H_VERSION | 020005 | Hier kann man die Versionsnummer der Konfiguration hinterlegen |
STRING_CONFIG_H_AUTHOR | "(DM5SN)" | Hier kann man den Autor der Konfiguration hinterlegen |
SERIAL_PORT | 2 | Hier gibt man den seriellen Port zum Host (Cura, Octoprint etc.) an. Diese Einstellung ist etwas tricky da man dazu herausfinden muss mit welchen seriellen Port das Board und der Prozesssor mit dem Steuerrechner kommuniziert |
MOTHERBOARD BOARD_BTT_SKR_E3_DIP | BOARD_BTT_SKR_E3_DIP | Hier muss das genaue Board angegeben werden. Diese findet man im Verzeichnis „/src/core/“ in der datei „boards.h“ |
CUSTOM_MACHINE_NAME | "ENDER-3" | Hier kann man dem Drucker noch einen Namen geben der im Display angezeigt wird. |
DEFAULT_NOMINAL_FILAMENT_DIA | 1,75 | Der Filamentdurchmesser ist bei mir 1,75 |
TEMP_SENSOR_0 | 1 | Die Bauart des Temperatursensors am Hotend |
TEMP_SENSOR_BED | 1 | Die Bauart des Temperatursensors am Druckbett |
BED_MAXTEMP | 125 | Die maximale Temperatur für das Druckbett |
PID_EDIT_MENU | Zusätzlicher Menüpunkt für PID-Tuning (testweise) | |
PID_AUTOTUNE_MENU | Zusätzlicher Menüpunkt für PID-Autotuning (testweise) | |
DEFAULT_Kp DEFAULT_Ki DEFAULT_Kd | Die Werte vom PID-Tuning für das Hotend (eigene Werte) [Link] | |
PIDTEMPBED | PID-Tuning fürs Druckbett aktivieren | |
DEFAULT_bedKp DEFAULT_bedKi DEFAULT_bedKd | Die Werte vom PID-Tuning für das Druckbett (eigene Werte) [Link] | |
EXTRUDE_MAXLENGTH | 600 | Maximale Länge eines Extrusionsvorgang (muss bei einem Drucker mit Bowden länger sein) |
X_DRIVER_TYPE Y_DRIVER_TYPE Z_DRIVER_TYPEE0_DRIVER_TYPE | Alle TMC2208 | Der Typ der Stepperdriver und deren Ansteuerung (bei mir TMC2208 mit SPI) |
ENDSTOP_INTERRUPTS_FEATURE | Entstops sollen bei Betätigung einen Interrupt auslösen (spart Rechenzeit) | |
DEFAULT_AXIS_STEPS_PER_UNIT | { 80, 80, 400, 93 } | Gibt an wie viele Steps die Schrittmotoren machen müssen um 1mm zu bewegen |
DEFAULT_ACCELERATION DEFAULT_RETRACT_ACCELERATION DEFAULT_TRAVEL_ACCELERATION | Alle 500 | Gibt die maximale Beschleunigung der Bewegungen an |
S_CURVE_ACCELERATION | Kurvenfahrten mit langsamerer beschleunigung werden aktiviert | |
INVERT_X_DIR INVERT_Y_DIR INVERT_Z_DIR INVERT_E0_DIR | false oder true je nach Bedarf | Drehrichtung der Mortoren invertieren (weiter unten beschrieben) |
X_BED_SIZEY_BED_SIZE | 235235 | Größe des Druckbettes in mm |
Z_MAX_POS | 250 | Maximale Höhe beim drucken |
HOMING_FEEDRATE_XY | 20*60 | Maximale Geschwindigkeit für X und Y beim Homing |
LCD_LANGUAGE | de | Sprache auf dem Display |
DISPLAY_CHARSET_HD44780 | WESTERN | Zeischensatz für das Display |
SDSUPPORT | Unterstützung für SD-Karten | |
INDIVIDUAL_AXIS_HOMING_MENU | X, Y und Z individuell homen | |
CR10_STOCKDISPLAY | Hier oder darüber/darunter muss das verbaute Display aktiviert werden |
Somit haben wir erst einmal die Grundeinstellungen getätigt. Je nach Board und Drucker können noch mehr Optionen genutzt werden. Dieses kann man dann wenn alles ausprobieren wenn diese Grundeinstellungen laufen. Die geänderte „configuration.h“ speichern wir nun mit Strg-S ab.
Über den Menüpunkt Run-> Run Task starten wir nun per „PlatformIO:Build Marlin-2.0.x“ Übersetzungsvorgang. Wir können auch das Häckchen im unteren Bereich zum Starten der Übersetzung nutzen.
Im unteren Bereich auf der rechten Seite kann man nun im Terminal den Forschritt beim kompilieren sehen.
Auch eventuelle Fehler werden dort angezeigt. Ich hatte das Problem das das Übersetzen einer älteren Version ohne Probleme durchlief aber die aktuelle Version trotz leichen Einstellung immer abbrach. Die Lösung dafür war das Verzeichnis „.vscode“ im Nutzerverzeichnis komplett zu löschen und das PlatformIO-Plugin in VS-Code neu zu installieren. Danach lief der Vorgang ohne Probleme.
Wenn alles geklappt hat zeigt VS-Code dieses unten an.
Nun kann das Binary auf den Drucker spielen. Es liegt im Verzeichnis „.pio/build/‘--Board--/‘“ als „firmware.bin“ und „firmware.elf“. Beim Ender-3 mit dem SKR E3 DIP wird die „firmware.bin“ auf eine SD-Karte gespielt, dann diese SD-Karte in den Drucker gesteckt und der Drucker eingeschaltet. Der Drucker installiert die Firmware von allein.
Bitte habt Verständnis das ich nicht für jeden Drucker sagen kann wie die Firmware eingespielt wird. Das ist aufgrund der sehr unterschiedlichen Hardware faktisch unmöglich. Hier ist etwas eigener Elan nötig.
Diese Seite werde ich nach und nach aktualisieren und auf Änderungen eingehen. Wenn Ihr Fragen habt könnt Ihr euch gern