3D-Drucker | Artikel | Reviews

Prusa i3 MK3S Mod: 3D-Drucker selber bauen


Firmware (MK3-Version)

Für die drei Modifikationen Zaribo 420/320/220 (Releases) gibt es bereits angepasste Firmwares in Form von HEX-Dateien auf den entsprechenden Githubs. Natürlich kann auch der originale Prusa i3 MK3S Quellcode bezogen und modifiziert werden.

Das Flashen der Hardware gestaltet sich recht einfach, vorausgesetzt es ist ein Bootloader vorhanden. Prusa3D hat seit einiger Zeit in seiner Firmware einen „read-only“ Bootloader, so dass im Ernstfall noch etwas zu retten ist. Der Hersteller Ultimachine stattet seine Boards übrigens mit einem eigenen Bootloader aus. Der Bootloader kann aber genau so gut neu installiert oder aktualisiert werden. Wenn das Mainboard im Originalzustand von Prusa3D oder Ultimachine erworben wurde, ist üblicherweise ein Bootloader installiert. Gleiches gilt beim Kauf im Zaribo-Shop.

Für den Flashvorgang unter Windows ist zunächst die Installation eines Treibers erforderlich, um überhaupt mit dem RAMBo kommunizieren zu können. Wer bereits einen Prusa i3 MK2S/MK3S besitzt, findet auf der Prusa3D-Downloadseite alle relevanten Treiber. Für neue Mainboards, die direkt beim Hersteller Ultimachine bezogen wurden, gibt es einen anderen Treiber. Abhängig davon in welcher Form die Firmware vorliegt, ist die Installation entsprechender Tools erforderlich. Während HEX-Dateien mithilfe von Tools geflashed werden können, müssen Header- und Source-Dateien zunächst kompiliert und danach erst auf die Hardware geschrieben (geflashed) werden.

Schritt 1: Arduino IDE installieren

Als erstes gilt es die neuste Arduino IDE herunterzuladen zu installieren, um den Programmcode für die 3D-Drucker-Boards zu schreiben und zu kompilieren. Aktuell (Stand 13.02.2019) wird die Version 1.8.5 empfohlen, wobei auch die Version 1.8.8 funktionieren dürfte. Das Installationsverzeichnis ist in der Regel C:\Programme (x86)\Arduino. Bei den MK2(S) kann es zu Konflikten kommen, weshalb das Verzeichnis LiquidCrystal unter C:\Programme (x86)\Arduino\libraries umbenannt werden sollte.  

Schritt 2: RAMBo Board in der IDE einrichten

In der Arduino IDE muss zunächst das Ultimachine RAMBo Board eingebunden werden. Die Arduino-Plugin-Ordner machen zusätzliche Pins in der Arduino-IDE verfügbar und können manuell eingebunden werden. Wesentlich einfacher geht das mit der folgenden URL: https://raw.githubusercontent.com/ultimachine/ArduinoAddons/master/package_ultimachine_index.json

Diese URL wird in der Arduino IDE unter Datei > Voreinstellungen im Feld „Zusätzliche Boardverwalter-URLs“  eingebunden. Im angegebenen Sketchbook-Speicherort (Firmware-Quelldateien werden in diesem Ordner entpackt) sollten die Firmware-Dateien liegen.

prusai3mk3_eigenbau_3

Als nächste geht es über Werkzeuge > Board: XYZ > Boardverwalter auf die Suche nach dem Begriff „rambo„. Anschließend sollte das Ultimachine RAMBo Board in der Liste erscheinen und installiert werden. Nach der Installation sollte das RAMBo Board, das zur Arduino IDE hinzugefügt wurde, über Werkzeuge > Board  ausgewählt werden können. 

prusai3mk3_eigenbau_4 prusai3mk3_eigenbau_5 prusai3mk3_eigenbau_6

Schritt 3: Die richtige Firmware

Für 3D-Drucker-Modifikationen und Eigenbauten wird oftmals die aktuelle Marlin-Fassung verwendet oder aber wie in unserem Fall die offizielle Prusa i3 MK3S Firmware. Da unser Mod auf den Original Prusa i3 MK3S basiert, können die meisten Parameter übernommen werden. Dennoch können die folgenden Schritte teilweise auch auf die Standard-Marlin-Firmware angewendet werden. 

Prusa3D bietet auf seinem GitHub sowohl fertige Firmwares als auch nicht kompilierte Quelldateien an. Es sollte prinzipiell stets die letzte stabile Version verwendet werden. Die Quelldateien können im Sketch-Ordner (z.B. C:\Dokumente\Arduino) entpackt werden. Nicht wundern, wenn in dem Verzeichnis bereits das Unterverzeichnis „libraries“ angelegt ist. Gleiches Vorgehen gilt auch für die Standard-Marlin-Firmware bzw. deren Quelldateien. Nach dem Entpacken gibt es eine wichtige Datei, in der üblicherweise alle relevanten Einstellungen vorgenommen werden: Configuration.h. Bei der Prusa-Firmware gibt es jedoch eine Besonderheit. Im Verzeichnis C:\Documents\Arduino\Prusa-Firmware-x.x.x\Firmware\variants befinden sich verschiedenen Header-Dateien. Für unseren Prusa i3 MK3 Mod mit Ultimachine RAMBo Board wählen wir die Datei 1_75mm_MK3-EINSy10a-E3Dv6full.h aus und benennen diese in Configuration_prusa.h um. Anschließend wird die Datei in das übergeordnete Verzeichnis /../Firmware/ verschoben bzw. kopiert. 

prusai3mk3_eigenbau_7

Die Quelldateien der Firmware können geladen werden, indem die Datei Firmware.info in der Arduino IDE geöffnet wird. Während für die Marlin-Firmware lediglich die Configuration.h relevant ist, spielen im Falle der Prusa-Firmware sowohl die Datei Configuration.h als auch die Configuration_prusa.h eine wichtige Rolle.

 Schritt 4: Firmware anpassen

Bevor die Quelldateien der Prusa i3 MK3 Firmware überprüft und kompiliert werden können, sind ein paar wichtige Änderungen erforderlich. Zunächst sollte die Unterstützung für float printf aktiviert werden. Dazu wird die Datei platform.txt im Installationsverzeichnis der Arduino IDE als Administrator geöffnet. Üblicherweise befindet sich die Datei im Verzeichnis C:\Program Files (x86)\Arduino\hardware\arduino\avr. Folgende Zeile wird vor dem sogenannten Flag -Wl,–gc-sections in der Zeile compiler.c.elf.flags= gesetzt: -Wl,-u,vfprintf -lprintf_flt -lm

prusai3mk3_eigenbau_8

Ohne diese Änderung könnte es zu merkwürdigen Zeichen auf dem LCD-Display des 3D-Druckers kommen. Übrigens wird diese Datei mit jeder neuen Arduino-IDE-Update überschrieben. 

3ddrucker_eigenbau_lcd2

Prusa3D empfiehlt außerdem in der config.h die mehrsprachige Untertützung zu deaktivieren (Wert auf NULL setzen: #define LANG_MODE 0). Wer einen Haribo 3030 oder einen Zaribo 420&320/220 besitzt, der kann theoretisch zu Schritt 5 springen und die Firmware bauen und flashen. Dennoch dürften die folgenden Abschnitte für den ein oder anderen interessant sein. 

Die wichtigste Datei in der Standard-Marlin-Firmware ist die Configuration.h, in der alle relevanten Einstellungen vorgenommen werden. Lediglich die Firmware für Prusa-basierende 3D-Drucker beinhaltet zusätzlich die Configuration_prusa.h

Parameter für Motoren und Extruder

Die Bewegungseinstellungen der einzelnen Motoren sind druckerspezifisch und müssen anhand der vorliegenden Hardware ermittelt werden. Für die Kalibrierung eines neuen Extruder-Motors gibt es auf der E3D-Online-Wiki eine sehr gute Anleitung. Für die x- und y-Schritte sind vor allem Größe und Anzahl der Zähne relevant. Mit dem Prusa Calculator können die Parameter für die Firmware anhand der messtechnisch ermittelten Werte errechnet werden. Gleiches gilt für die z-Achse (Trapezspindel oder auch Lead screw genannt), was die Einstellung auch bei einem Upgrade interessant macht. Denn wer seinen 3D-Drucker modifizieren möchte, kann theoretisch jede beliebige Trapezspindel nehmen, muss die Geometrien jedoch in die Firmware mit einfließen lassen. 

Hinweis: Für den Zaribo 220/320/420 Mod wird eine modifizierte Halterung für den Schrittmotor der y-Achse verwendet, wodurch die Achse gespiegelt wird. Dazu muss die Laufrichtung des Motors invertiert werden. Entweder wird der entsprechende Parameter in der Firmware invertiert (#define INVERT_Y_DIR 1) oder aber der DuPont-Stecker verkehrt herum angeschlossen. Prusa3D hat in seiner Firmware jedoch einen Bug, der bei einer Invertierung der Motorparameter zu Problemen während der Kalibrierung der Achsen führt. Dazu gibt es jedoch einen Fix in der Zaribo-Firmware ab v.3.5.9-RC1. Mittlerweile sollte die hier erwähnten Probleme der Vergangenheit angehören. (Stand: August 2019).

E3D V6 Hotend
Die Firmware von Prusa 3D beinhaltet unter anderem die Configuration_prusa.h Datei, in der unter anderem einige vordefinierte Parameter für die Sensoren hinterlegt sind. In der Standard-Marlin-Version sind diese Parameter für die Kennlinien der verschiedenen Temperatursensoren in der Configuration.h zu finden. Üblicherweise sind die thermische Parameter für Hotend und Heizbett hinterlegt. In einigen Fällen finden sich sogenannte #if/#elif/#else Bedingungen, die prüfen, ob beispielsweise ein E3D PT100 Thermistor mit AMP definiert wurde, was in unserem Fall aber im Programmcode auskommentiert ist. PT100 arbeiten sehr viel genauer als Standard-Thermistoren und werden üblicherweise nachgerüstet, um höhere Temperaturen erreichen zu können. Für das E3D V6 Hotend und den thermischen Sensor für das Original Prusa i3 MK3 Heizbett sind folgende Parameter definiert:

#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_PINDA 1

Die Parameter #define TEMP_SENSOR_1 0 und #define TEMP_SENSOR_2 0 sind auf NULL gesetzt, da die Pins auf dem Mainboard nicht mit Sensoren belegt sind. Die maximale Temperatur wird ebenfalls in dieser Datei eingestellt. Marlin zieht jedoch 15°C von der gesetzten Temperatur ab, um mögliche Temperaturschwankungen zu berücksichtigen. Wenn der Sensor beispielsweise für 285°C ausgelegt ist, wird ein Wert von 300°C festgelegt:

#define HEATER_0_MAXTEMP 300

Weitere Informationen zum Thema E3D V6 Hotend gibt es auf der E3D-Online Wiki-Webseite

LCD-Display
Die meisten Prusa i3 3D-Drucker verwenden den RepRap Discount Smart Controller, der mithilfe von vordefinierten Macros bereits in Marlin implementiert ist. Erweiterte Einstellungen werden in der Configuration_adv.h vorgenommen. 

Schritt 5: Firmware überprüfen und kompilieren

Über den Button „Überprüfen“ wird zunächst getestet, ob alles einwandfrei kompiliert wurde. Zuvor sollte man sich jedoch vergewissern, dass auch das korrekte RAMBo-Board unter „Werkzeuge„ausgewählt ist. Nach dem Kompiliervorgang kann unter Sketch > Kompilierte Binärdatei exportieren die HEX-Datei gespeichert werden. Jetzt sollte im Firmware-Verzeichnis die Datei Firmware.ino.rambo.hex vorhanden sein. Wenn zusätzlich ein Bootloader kompiliert wurde, sollte auch die Datei Firmware.ino.with_bootloader.rambo.hex erzeugt und exportiert worden sein. 

Hinweis: Bevor eine beliebige Marlin-Firmware oder eine Prusa-Firmware auf das Board geflashed wird, sollten die entsprechenden 3D-Drucker-Parameter angepasst werden. Wir möchten außerdem darauf hinweisen, dass alle in diesem Artikel beschriebenen Schritte zum Thema „Flashen“ auf eigene Gefahr geschehen. Durch einen falschen Flashvorgang kann das Board unbrauchbar gemacht werden. Auch zu den Themen „Zusammenbau“ und „Elektronik“ geschieht jeder Schritt auf eigenes Risiko. 

Schritt 6: Fertige Firmware (HEX-Datei) flashen

Die HEX-Dateien können unter anderem mit XLoader, Cura, OctoPi oder der Slic3r-Software von Prusa3D geflashed werden.  

prusai3mk3_eigenbau_2

Für Windows- und Linux-Anwender hat sich außerdem AVRDude bewährt. Letzteres wird über Kommandos gesteuert und ermöglicht auch den Backup der aktuellen Firmware, bevor eine neue aufgespielt wird:

#Backup der aktuellen Firmware 
avrdude -v -p m2560 -c wiring -P COMx -U flash:r:backup_myfile.hex:i -D

#Flashen der neuen Firmware
avrdude -v -p m2560 -c wiring -P COMx -U flash:w:myfile.hex:i -D

Folgende Fehlermeldungen können wärend dem Flashvorgang auftreten:

  • Timeout-Fehler:
    Möglicherweise wurde die Platine am USB-Port angeschlossen, jedoch noch nicht eingeschaltet. 
  • Read-Fehler:
    avrdude: reading input file „Zaribo_MK3-320_FW321-576-1_75mm_EINSy10a-E3Dv6full.hex“
    avrdude: ERROR: No valid record found in Intel Hex file „Zaribo_MK3-320_FW321-576-1_75mm_EINSy10a-E3Dv6full.hex“
    avrdude: read from file ‚Zaribo_MK3-320_FW321-576-1_75mm_EINSy10a-E3Dv6full.hex‘ failed

    Möglicherweise ist die Datei fehlerhaft oder nicht korrekt heruntergeladen worden. 

4 Kommentare zu Prusa i3 MK3S Mod: 3D-Drucker selber bauen

  1. André

    Hallo PC-Pointer,
    lohnt der Selbstbau wirklich? Außer den von euch verbauten Noctua-Lüftern erkenne ich keinen Unterschied zum Zaribo 220 MK3s Rel. 3 den man nach meiner Überschlagsrechnung eurer Stückliste zum etwas gleichen Preis bekommt. Oder übersehe ich etwas komplett?

  2. TigerClaw

    Hi,
    die Idee haben wir parallel zum Zaribo ins Leben gerufen, wussten zuvor jedoch nicht, dass es den Zaribo überhaupt gibt. Während der Recherche nach passenden Sponsoren sind wir dann auch auf den Zaribo gestossen und unterstützen durch die Einkaufsliste den Shop. Die Teile sind jedoch nicht alle von Zaribo.

    Das Zusammensuchen der Teile ist hilfreich, um sich Erfahrungen im 3D-Druck anzueignen. Natürlich kann der Zaribo auch als Komplettpaket bezogen werden. Aus dem Paket ist die genaue Artikelbezeichnung jedoch nicht ersichtlich und oftmals ist es hilfreich zu wissen, was genau in einem 3d Drucker steckt. Eventuell möchte man bestimmte Komponenten durch andere ersetzen. Eine Einkaufsliste ist lediglich eine Orientierung, die nichts über den tatsächlichen Preis sagt. Man kann sich genauso gut eine Uhr mit Temperaturmesser kaufen oder der Einkaufsliste für einen Raspberry Pi mit Sensoren folgen das bleibt jedem selbst überlassen.

    Wir haben uns beispielsweise für ein Heatbed von Prusa3D entschieden, die Aluprofile und die Wellen sowie Kugellager sind von Misumi direkt bezogen worden. Es kommt natürlich immer darauf, was man kaufen möchten. Wir wollten spezielle hitzebeständige Silikon Kabel von Voelkner bestellen, haben daher auch das Netzteil (unschlagbar günstig) sowie den Kaltgerätestecker und weiteres Zubehör dort bestellt und dank Gutschein Code zusätzlich Geld gespart. Daher hat sich der separate Einkauf zur richtigen Zeit gelohnt. Das Upgrade von MK3 zu MK3S gab es bei Zaribo damals noch nicht. Also haben wir die Teile bei Prusa3D bestellt und das Heizbett mit Druckplatte ebenfalls dort bestellt. Wenn man also mehrere Komponenten unabhängig vom Drucker bestellen möchte, lohnt es sich einzeln einzukaufen. Oder aber wenn man sparen möchte. Wer sich die Arbeit jedoch nicht machen möchte, für den bietet sich der Zaribo Shop an. Wir haben mittlerweile auf das Magnum hotend umgestellt. In der Zwischenzeit wird es von Zaribo sicherlich passende Lösungen geben.

    Der Artikel sollte viel mehr als zusätzliche Unterstützung dienen, da dieser detaillierte Infos zum Thema beinhaltet. So muss man sich beispielsweise nicht separat zum Aufbau Tutorials zum Thema Firmware oder ähnliches zusammensuchen. Die Einkaufsliste ist nur ein kleiner Teil davon 😉

  3. crix

    Bei der Beschreibung der Motoren redet ihr die ganze Zeit von Spannung, die Ihr dann in Ampere angebt. Ich nehme mal an ihr meint den WicklungsSTROM, der wird in A (Ampere) angegeben. Eine Spannung würde in V (Volt) angegeben und macht in dem Zusammenhang keinen Sinn.

  4. TigerClaw

    Danke für den Hinweis. Tatsächlich hat sich die Ampere Einheit ganze 2 Mal eingeschlichen. Natürlich sollte es Volt heissen.

Leave a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.