Marlin Firmware auf RAMPS 1.4 installieren

Um einen 3D Drucker zu betreiben, muss auf dem Drucker Controller Board eine Firmware installiert werden. Hier wird beschrieben, wie die Marlin Firmware auf dem RepRap Arduino MEGA 2560 mit RAMPS 1.4 Board installiert wird.

Voraussetzungen:

Als Voraussetzung für die weiteren Schritte werden die benötigten Software Pakete aus den verschiedenen Quellen besorgt. Dafür werden folgende Pakete benötigt:


Von der Marlin Download Seite wird die aktuellste Version (im Moment ist das die 2.0.5.3) herunter geladen und entpackt.
Falls der Full Graphic Display Controller am RAMPS Board verwendet werden soll, muss noch die Bibliothek u8glib von https://github.com/olikraus/U8glib_Arduino heruntergeladen werden. Diese wird dann entpackt und in das Verzeichnis <Pfad zur Arduino Entwicklucklungsumgebung>\libraries kopiert.
 

Schritt 1 - USB-Treiber Installation:

Mit der Arduino Entwicklungsumgebung wird automatisch ein Treiber für den Arduino 2560 installiert. Wurde der Treiber richtig installiert, so erscheint das Arduino 2560 im Gerätemanager unter "Anschlüsse (COM & LPT). Der COM-Port wird automatisch von Windows vergeben. Daher wird dies auf einem anderen Rechner auch meist ein anderer Port sein! Der COM-Port wird später noch bei der Konfiguration der Arduino Entwicklungsumgebung benötigt.

Schritt 2 - Arduino Entwicklungsumgebung konfigurieren:

Nachdem die Arduino Entwicklungsumgebung auf dem Rechner installiert wurde und die Marlin Firmware in einem Verzeichnis auf dem Rechner abgelegt wurde, geht es daran, diese für den eigenen Drucker zu konfigurieren. Dazu die Arduino Entwicklungsumgebung starten und über "Datei/öffnen" in das Verzeichnis der Marlin Firmware wechseln. Anschließend die Datei "Marlin.ino" auswählen. Die Entwicklungsumgebung wird dann die Firmare laden und alle Dateien öffnen.

07-RUMBA-Marlin-ino

Für die weiteren Schritte muss die Datei "Configuration.h" in der Entwicklungsumgebung ausgewählt werden:

08-RUMBA-Configuration-h

Damit die Übertragung der Firmware auf das RAMPS 1.4 (Arduino Mega) Bord funktioniert, muss erst einmal über "Tools/Board" der Typ "Arduino Mega 2560 or Mega ADK" ausgewählt werden.

09-RUMBA-Board

 

Dann muss noch über "Tools/Serieller Port" der COM-Port ausgewählt werden, wie er im Gerätemanager sichtbar ist (siehe weiter oben).

10-RUMBA-port

 

Jetzt sollte sich die Marlin Firmware schon einmal compilieren lassen. Durch Klick auf das Häckchen-Symbol unterhalb des Menüpunktes "Datei" wird der Compiliervorgang gestartet.

Schritt 3 - Configuration.h für das RAMPS 1.4 Board anpassen:

Ziemlich zu Beginn der Konfigurationsdatei steht die Baudrate, mit welcher das Board später angesprochen werden will. In der aktuellen Version von Marlin steht hier ein Wert von "250000". Dieser Wert ist aber für den Rechner, bzw. USB Port unter Umständen zu hoch. Daher ist es eine gute Idee diesen Wert auf einen geläufigeren Wert wie 115000 einzustellen.

// This determines the communication speed of the printer
// This determines the communication speed of the printer
#define BAUDRATE 115200

In der aktuellen Marlin Version sind in der Datei "boards.h" alle unterstützten Boards aufgelistet und als Konstanten definiert. Für das RAMPS Board gibt es folgende Einträge in "boards.h":

#define BOARD_RAMPS_13_EFB 1010 // RAMPS 1.3 (Power outputs: Hotend, Fan, Bed)
#define BOARD_RAMPS_13_EEB 1011 // RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Bed)
#define BOARD_RAMPS_13_EFF 1012 // RAMPS 1.3 (Power outputs: Hotend, Fan0, Fan1)
#define BOARD_RAMPS_13_EEF 1013 // RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Fan)
#define BOARD_RAMPS_13_SF 1014 // RAMPS 1.3 (Power outputs: Spindle, Controller Fan)
#define BOARD_RAMPS_14_EFB 1020 // RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
#define BOARD_RAMPS_14_EEB 1021 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Bed)
#define BOARD_RAMPS_14_EFF 1022 // RAMPS 1.4 (Power outputs: Hotend, Fan0, Fan1)
#define BOARD_RAMPS_14_EEF 1023 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Fan)
#define BOARD_RAMPS_14_SF 1024 // RAMPS 1.4 (Power outputs: Spindle, Controller Fan)
#define BOARD_RAMPS_PLUS_EFB 1030 // RAMPS Plus 3DYMY (Power outputs: Hotend, Fan, Bed)
#define BOARD_RAMPS_PLUS_EEB 1031 // RAMPS Plus 3DYMY (Power outputs: Hotend0, Hotend1, Bed)
#define BOARD_RAMPS_PLUS_EFF 1032 // RAMPS Plus 3DYMY (Power outputs: Hotend, Fan0, Fan1)
#define BOARD_RAMPS_PLUS_EEF 1033 // RAMPS Plus 3DYMY (Power outputs: Hotend0, Hotend1, Fan)
#define BOARD_RAMPS_PLUS_SF 1034 // RAMPS Plus 3DYMY (Power outputs: Spindle, Controller Fan)

Die meist verbreitete Version dürfte die Variante <Extruder, Fan, Bed> sein. Dementsprechend muss in der "Configuration.h" im Define der Wert "BOARD_RAMPS_13_EFB" eingetragen werden:

#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_RAMPS_13_EFB
#endif

 RepRapDiscount Smart Controller

Falls ein RepRapDiscount Smart Controller (40x2 character display) installiert ist, dann müssen die Kommentarzeichen in 1770 entfernt werden:

//=============================================================================
//======================== LCD / Controller Selection =========================
//======================== (Character-based LCDs) =========================
//=============================================================================
//
// RepRapDiscount Smart Controller.
// http://reprap.org/wiki/RepRapDiscount_Smart_Controller //
// Note: Usually sold with a white PCB.
#define REPRAP_DISCOUNT_SMART_CONTROLLER

 RepRapDiscount Full Graphic Display

Wenn ein Full Graphic Display Controller (DOT Matrix 128x64) angeschlossen ist, muss der entsprechende DEFINE ab ca. Zeile 1910 aktiviert werden (die beiden "//" Zeichen löschen). Aber Achtung, die Voraussetzungen zu u8glib beachten, sonst lässt sich die Firmware nicht compilieren!

// IMPORTANT: The U8glib library is required for Graphical Display!
// https://github.com/olikraus/U8glib_Arduino
// RepRapDiscount FULL GRAPHIC Smart Controller
// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER


Damit sind die Basis Konfigurationsschritte für das RAMPS 1.4 Board abgeschlossen. Wird diese Konfiguration an das Board übertragen (Icon mit dem Pfeil nach rechts, unterhalb des Menüs "Datei"), dann sollte das Display nach dem Neustart des Boards die ersten Lebenszeichen von sich geben.


Als nächstes sind die für den verwendeten Drucker spezifischen Parameter einzustellen. Zuerst einmal ist ab ca. Zeile 145 zu prüfen, ob die Anzahl der Extruder richtig definiert ist. Für den Einsteiger dürfte im Normalfall hier eine "1" der richtige Wert sein:

// This defines the number of extruders
#define EXTRUDERS 1

Ab Zeile 70 beginnen die Konfigurationshinweise für die verwendeten Thermistoren für das Hotend und das Heizbett. Entsprechend des Hardwareaufbaus sind die DEFINES ab Zeile 409 zu setzen.

#define TEMP_SENSOR_0
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_BED 0
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_CHAMBER 0

Der Sensor für das Hotend wird im Normalfall an den ersten Sensor Eingang angeschlossen, also an TEMP_SENSOR_0. Das Heitzbett wird normalerweise an den zweiten Sensor Eingang angeschlossen und in der Konfiguration TEMP_SENSOR_BED konfiguriert. Wird ein EPCOS B57560G104F Thermistor verwendet (100K, Beta = 4036) muss eine "1" angegeben werden. Für einen Thermistor mit 100K und Beta = 3950 muss der im DEFINE des entsprechenden Sensors der Wert "60" eingetragen werden, also z. B.:

Für EPCOS (Beta = 4036) auf Hotend und Heizbett:

#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_BED 1

Für Beta = 3950 auf Hotend und Heizbett:

#define TEMP_SENSOR_0 60
#define TEMP_SENSOR_BED 60

Wer möchte kann sich noch an den DEFINES für HEATER_x_MINTEMP und HEATER_x_MAXTEMP zu schaffen machen, ist jedoch nicht nötig. Die vorgegebenen Werte stellen sicher, dass bei einem Kabelbruch o. Ä. die Temperatur nicht aus dem Ruder läuft und dann die Heizpatrone im Hotend, bzw. das Heizbett abgeschalten werden.

Ab Zeile 320 wird es wieder interessant, denn dort beginnen die relevanten Konfigurationen für die Schrittmotoren.

// Below this temperature the heater will be switched off
// because it probably indicates a broken thermistor wire.
#define HEATER_0_MINTEMP   5
#define HEATER_1_MINTEMP   5
#define HEATER_2_MINTEMP   5
#define HEATER_3_MINTEMP   5
#define HEATER_4_MINTEMP   5
#define HEATER_5_MINTEMP   5
#define HEATER_6_MINTEMP   5
#define HEATER_7_MINTEMP   5
#define BED_MINTEMP        5
// Above this temperature the heater will be switched off.
// This can protect components from overheating, but NOT from shorts and failures.
// (Use MINTEMP for thermistor short/failure protection.)
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define HEATER_5_MAXTEMP 275
#define HEATER_6_MAXTEMP 275
#define HEATER_7_MAXTEMP 275
#define BED_MAXTEMP      150

Ab Zeile 1058 wird es wieder interessant, denn dort beginnen die relevanten Konfigurationen für die Schrittmotoren.

// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false

An dieser Stelle können die Drehrichtungen der Schrittmotoren an den Hardwareaufbau angepasst werden. Hier hilft normalerweise einfach nur testen. Dazu die Achsen manuell in die Mitte stellen und dann den Drucker einschalten. Dann mit einer passen Hostsoftware oder über das Display die zu testende Achse einen kurzen Weg in eine Richtung verfahren. Stimmt die Drehrichtung nicht, dann einfach in der Konfiguration die Drehrichtung berichtigen.


ACHTUNG: Das Homing zu diesem Zeitpunkt noch nicht nutzen!

Über das Homing will die Software alle Achsen auf den mechanischen Nullpunkt des Druckers setzen, indem der Kopf bis zum jeweiligen Enstop gefahren wird. Stimmt die Drehrichtung in der Konfiguration noch nicht, dann fährt der Kopf an das falsche Ende. Hier hilft dann nur noch resetten oder ausschalten, bevor das Ende der Achse erreicht ist.

Kleiner Hinweis:
Nach dem Einschalten setzt Marlin die aktuelle Position der Achsen auf 0/0/0. Marlin läßt in der Grundkonfiguration nur positive Verfahrwege zu. Erst durch das Homing versucht Marlin den Druckkopf bis zum Endstop zu fahren und setzt dann dort den Nullpunkt.

Als nächstes müssen die Achsen kalibriert werden, d. h. die Anzahl der Steps pro Milimeter Weg konfiguriert werden. Dazu sind die DEFINES ab Zeile 733 richtig zu setzen.

/**
* Default Axis Steps Per Unit (steps/mm)
* Override with M92
* X, Y, Z, E0 [, E1[, E2...]]
*/
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }

Die Werte in den geschweiften Klammern legen die Anzahl Steps/Millimeter fest, dabei stehen die Werte für die Achsen wie folgt: {X-Achse, Y-Achse, Z-Achse, Extruder}
An dieser Stelle ist etwas Rechnen angesagt. Ausgangspunkt sind die Anzahl Steps pro Umdrehung des Schrittmotors, als z. B. für die meisten NEMA Schrittmotoren 200 Steps/Umdrehung. Das muss dann noch mit dem Microstepping multipliziert werden. Normalerweise wird entweder ein 1/16 oder 1/32 Stepping verwendet (bitte die Konfiguration der Schrittmotortreiber kontrollieren!).
Daraus folgt für:

  • 1/16 Stepping
    • 200 * 16 = 3.200 Steps / Umdrehung
  • 1/32 Stepping
    • 200 * 32 = 6.400 Steps / Umdrehung

 
Jetzt kommt noch die Komponente des Vorschubs/Umdrehung dazu. Für die Z-Achse ist ein M8 Gewindestab sehr gebräuchlich. Das M8 Gewinde hat eine Steigung von 1,25 mm pro Umdrehung. Damit lässt sich für die Z-Achse der initiale Wert (ohne genau kalibriert zu haben) erst einmal wie folgt einstellen:

  • 1/16 Stepping
    • 200 * 16 / 1,25 = 2560
  • 1/32 Stepping
    • 200 * 32 / 1,26 = 5120


Werden andere Gewindestangen wie z. B. ein Trapezgewinde TR8x1,5 oder TR10x3 verwendet, dann muss natürlich der Wert entsprechend in der Berechnung gesetzt werden.
Hierbei möchte ich anmerken, dass wahrscheinlich alles jenseits der 4 - 5 Stelle nach dem Komma wenig Auswirkung in der Praxis hat. D. h. hier reicht es die Werte bei 4 Stellen nach dem Komma abzuschneiden.

Die Einstellung für die X-/Y-Achse lässt sich wie folgt berechnen:
(Schritte pro Umdrehung * Microstepping) / (Anzahl Pulley Zähne * Riemen Pitch) = Steps per Unit

Für die Berechnung wird ein GT2 Pulley mit 20 Zähnen angenommen. Der GT2 Riemen hat einen Pitch von 2 mm. Damit ergeben sich folgende Werte: 

  • 1/16 Stepping
    • 200 * 16 / 20 * 2 = 80
  • 1/32 Stepping
    • 200 * 32 / 20 * 2 = 160


Dann ist noch die Einstellung fur den Extruder an der Reihe. Hier kommt es den eingesetzten Extruder an. So wird bei einem Wades Extruder der zu konfigurierende Wert vom Übersetzungsverhältnis der Zahnräder beeinflußt. Beim klassischen Wades hat ein Zahnrad 11 Zähne, das zweite 39. Dabei kommt ein Verhältnis von etwa 1 : 3,54 heraus. Dann kommt noch der Umfang der effiktive Umfang der Schraube zum Tragen, welches das Filament fördert. Hier hilft am Ende nur erst einen ungefähren Wert einsetzen und dann anschließend zu kalibrieren.

Für den Bulldog XL Extruder gibt reprapdiscount schon initiale Werte an:

  • 1/16 Stepping
    • 495
  • 1/32 Stepping
    • 990


Trotzalledem ist auch hier eine genaue Kalibrierung mit der ersten in Betriebnahme nötig.

Der letzte Punkt in der Konfiguration betrifft die maximalen Vorschubraten für die einzelnen Achsen. Durch diese Werte wird sichergestellt, dass Drucker im Rahmen seiner maximalen Werte bleibt, auch wenn über den GCode ein höherer Wert vorgeben wird. Diese Werte sind jedoch vom verwendeten Drucker und von der Einstellung des Stroms in den Schrittmotortreibern abhängig. Ist der Phasenstrom im Schrittmotortreiber sehr niedrig eingestellt, so können schon recht niedrige Vorschubwerte dafür sorgen, dass der Schrittmotor nicht mehr die Achse bewegt und nur brummt. Auf der anderen Seite kann aber ein zu hoch eingestellter Phasenstrom dafür sorgen, dass der Treiberbaustein während eines Ausdrucks überhitzt und dann aufgrund des Überhitzungschutzes einfach abschaltet und der Schrittmotor sich deswegen nicht mehr bewegt.
Im beiden Fällen hat dies zur Folge, dass der Ausdruck plötzlich in einer oder beiden Achsen (X/Y) versetzt und damit der Ausdruck unbrauchbar wird.

#define DEFAULT_MAX_FEEDRATE          {300, 300, 5, 25}    // (mm/sec).

Beim maximalen Vorschub und dem Phasenstrom des Schrittmotortreibers gilt es die Balance zwischen maximaler Geschwindigkeit und Betreibstemperatur des Treiberbausteins zu finden.

Gut, jetzt ist die initiale Konfiguration abgeschlossen. Jetzt muss die Firmware nur noch an das Board gesendet werden, indem auf das Icon Pfeil nach rechts geklickt wird:

08-RUMBA-Configuration-h

Nachdem die Firmware erfolgreich übertragen wurde und sich das Board neu gestartet hat, sollte das Display sich wieder melden und folgendes anzeigen (vorausgesetzt es ist ein Full Graphic Display installiert):

slider-3

Damit ist die Firmware Installation abgeschlossen. Nun muss der Drucker noch kalibriert werden!

Die mit einem * markierten Felder sind Pflichtfelder.

  • Display funktionirt nicht -keine Funktion???

    Einfache Beschreibung , aber Details Fehlen

  • Super Beschreibung

    Habe alles so gemacht wie beschrieben, das Programm lässt sich aber leider nicht compilieren, bekomme immer eine Fehlermeldung

  • Berechnung abweichend

    Hallo,
    super Artikel, aber eine Berechnung ist falsch:
    "Bei der Einstellung für die X-/Y-Achsen wird es ein klein wenig komplizierter. Hier wird der effektive Kreisumfang des Pulleys benötigt, da dieser angibt, wie weit der Zahnriehmen pro Umdrehung bewegt wird. Dazu nehmen wir einfach die Formel für den Kreisumfang mit u = d * Pi. Der Durchmesser eines GT2 Pulleys mit 20 Zähnen liegt bei ca. 12,23mm. Daraus ergibt sich ein Umfang von 38,4216mm. Zusammen mit den Werten für den Schrittmotor und das Microstepping ergeben sich als erster Näherungswert"
    Da bei GT2 Riemen wenn es gerade ist sind die Zähne 2mm voneinander entfernt. Es ist unnötig und falsch einen Umfang zu rechnen, da wir den Riemen bewegen und wir die Bewegungswert brauchen wie viel er sich bewegt, beziehungsweise, wie viel er den Schlitten bewegt.
    Die Rechnung ist viel einfacher:
    Ein Zahn bewegt 2mm Riemen (wo er gerade ist) vorausgesetzt er spring nicht über.
    •1/x Stepping: Stepping ◦360/Schrittwinkel * x / (Zähne*2)= 83,2864
    •1/16: Stepping ◦200 * 16 / (20*2)= 80
    •1/32: Stepping ◦200 * 32 / 40 = 160
    Beste Grüße
    Udo

  • Display zeigt nur weiße Blöcke an

    Sehr gut geschrieben und auch für Anfänger leicht zu verstehen. Allerdings finde ich, es sollte noch darauf eingegangen werden was man tun muss wenn man nicht das Full Graphics Display verwendet. Ich stand ziemlich auf dem Schlauch als ich alles hier nach Anleitung durchgeführt habe und mein LCD 2004 nur zwei Reihen weiße Blöcke angezeigt hat. Habe sogar extra einen Testcode auf den Mega2560 gespielt um sicher zu gehen dass noch alles funktioniert.
    Die Lösung ist aber ganz einfach, in der config.h nach folgendem suchen :
    //#define REPRAP_DISCOUNT_SMART_CONTROLLER
    Und die beiden Slash wegzumachen. Habe einen LCD von Reprapdiscount. Vielleicht hilft es ja jemanden. Jetzt wird nämlich der Display erkannt.