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.

Verzeichnis in Workspace importieren

Dann müsste das komplette Marlin-Verzeichnis im Explorer sichtbar sein.

ExplorerNun müssen wir PlatformIO erst einmal mitteilen welches Board und welchen Prozessor wir benutzen. Dazu öffnen wir die Datei „platformio.ini“ mit einem Doppelklick.

platformio.ini

Im Moment ist im Abschnitt „[platformio]“ noch der ATMega2560 als Prozessor angegeben.

Prozessorauswahl

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.

Board suchen

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.

Board einfügenDanach 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.

Fortschritt Kompilierungsvorgang

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.
Fertig
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 Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein! an mich wenden. Bitte habt Verständnis wenn ich nicht innerhalb kurzer Zeit antworte, die Familie und die Arbeit gehen immer vor.