Marlin Firmware auf RUMBA Board installieren

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:
 

 

Auf 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 RUMBA 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:

Wird das RUMBA Board mit dem Rechner verbunden (das Board muss extern mit Strom versorgt werden!), dann versucht Windows einen passenden Treiber zu installieren. Dies schlägt jedoch fehl und wird dementsprechend in der Geräteliste angezeigt.

01-RUMBA-unknown-device

Damit Windows den richtigen Treiber installiert, muss das Programm "RRD_RUMBA_TAURINO_DriverSetup.exe" ausgeführt werden.

02-RUMBA-driver

Jetzt auf "Install" klicken:

03-RUMBA-install

Da der Treiber nicht signiert ist, muss hier die Installation nochmal bestätigt werden:

04-RUMBA-ignore

Wurde der Treiber richtig installiert, so erscheint das RUMBA Board 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.

05-RUMBA-driver-successful

 

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 RUMBA 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 RUMBA 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 Firmware sind alle unterstützten Drucker Boards in der Datei "boards.h" definiert. Für das RUMBA Board gibt es in dieser Datei den folgenden Eintrag:

#define BOARD_RUMBA                   1123  // Rumba

Um das RUMBA Board in der Firmware zu aktivieren muss dann in der Datei "Configuration.h" ab Zeile 130 folgender Eintrag gemacht werden:

#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_RUMBA
#endif

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 RUMBA 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 409 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 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.

// 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,25mm 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,5 = 5120

Werden andere Gewindestangen wie z. B. ein Trapezgewinde 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.

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:

  • 1/16 Stepping
    • 200 * 16 / 38,4216 = 83,2864
  • 1/32 Stepping
    • 200 * 32 / 38,4216 = 166,5729

Eine andere Möglichkeit ist den Pitch (Zahnabstand) des GT2 Pulleys (2mm) mit der Anzahl Zähne des Pulleys zu multiplizieren. Damit müsste dann im Nenner einfach nur der Wert 40 (statt 38,4216) eingesetzt werden. Trotzalledem muss am Ende der Drucker noch kalibriert werden, um genaue Ausdrucke zu bekommen.

Dann ist noch die Einstellung für 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 effektive 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.
In 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.