Eigenes Marlin erstellen

Fehler in der Version 1.1.6 haben mich unlängst dazu gebracht, Änderungen vorzunehmen. Ich will diese Version hier nicht länger empfehlen. (Siehe hier)

 

Eigenes Marlin für Creality CR-10 S5 erstellt

Zum ersten Mal programmiere ich Arduino. Ich fand mich sofort zurecht und war trotz mangelhafter IDE schnell zum Ziel gekommen.

Wer auch gern mal ein wenig an seiner Firmware schrauben will kann hier einen ersten Eindruck davon gewinnen. Viel Spaß dabei.

1. Herunterladen des Quellcodes

Es gibt, wie stets, mehrere Möglichkeiten

Die einfachste ist auf die Hersteller Seite zu gehen. Bei mir war das Creality: https://forums.creality3dofficial.com/download/cr-series/cr-10-s5/

Hier habe ich mir die Source Code Version 1.1.6. mit BL-Touch heruntergeladen und dann BL-Touch deaktiviert, aber es könnte durchaus sein, dass ich mir irgendwann den Nivellierungssensor zulege.

Eine weitere wäre sich mit den Firmware Paketen von TH3D zu befassen: https://support.th3dstudio.com/hc/downloads/unified-1-firmware/th3d-unified-1-firmware-package/

Natürlich könnte man auch die neueste Version herunterladen und die bearbeiten, das wäre vielleicht, bei meinen am Ende doch recht umfangreichen Änderungen, sinnvoll gewesen: https://marlinfw.org/meta/download/

Um das ganze sinnvoll zu bearbeiten, sollte man sich das Repository klonen bzw. ein Fork erstellen, so könnte man seine Änderungen für zukünftige Versionen verfügbar werden lassen: https://github.com/MarlinFirmware/Marlin

Doch warum unternahm ich diese Firmware Bearbeitung eigentlich?

Da der Drucker ABS unterstützen sollte habe ich versucht mit ABS zu drucken, mein Drucker der CR10-S5 konnte winzig kleine Teile drucken, aber größere lösten sich ab, weil die Druckbrett Temperatur maximal 70°C erreichte.

Also besorgte ich mir eine Silikon Heizeinheit: yourDroid Professional Heizmatte / Heizbett 220V 1300W 508 x 508mm für CR-10 S5 (Max. 260 °C)

Dazu noch eine 5mm Wärmedämmung sowie ein SSR-40DA für die Spannungsversorgung. Das Relais baute ich direkt in das Druckergehäuse mit ein, Stecker sind verschweißt also mussten die Kabel durchgeschnitten werden, dann sehen auch die Stecker weiterhin schön aus, wenn man nicht versucht etwas aufzuschrauben wo auch mit Gewalt nichts aufzuschrauben geht.

Doch als ich dann auf 110 Grad aufheizen wollte merkte ich schnell, ich kann maximal 125 °C einstellen und hat er diese erreicht, dann steigt der Druck aus, mit der Fehlermeldung er würde überhitzen. Ausserdem erreichte er bei 122 °C keine 80 °C, stabil überall auf der Glasplatte, die ich wegen der fehlenden Mesh Nivellierung bereits absolut plan aufgelegt hatte, indem ich ein Raster auf das Druckbrett druckte, auf welches ich dann die Glasplatte legte. Die Luftkammern isolieren zu stark. Außerdem finde ich es vom Prinzip her falsch, andere Temperaturen im gcode abzuspeichern, als eigentlich vorgesehen sind.

Also blieb nur die Firmware zu erweitern.

Doch Achtung, wer mit Glas arbeitet, zu hohe Temperaturen zerstörte die Glasplatte. Dann besser gleich was Anständiges besorgen: https://www.moralin.net/de/blog/die-richtige-druckplatte

2. Installieren der Arduino IDE

Download:  https://www.arduino.cc/en/software

Nach der Installation und dem Entpacken des Marlin Archives, braucht man nur die Datei "Marlin.ino" zu öffnen. Nun trifft man beim Kompelieren evtl. noch auf zweierlei: Eine Meldung fehlender IO-Ports die behoben wird indem man unter  "Werkzeuge", "Board" und "Prozessor" einstellt auf: "Arduino Mega oder  Mega 2560" und "ATmega2560 (Mega 2560)". Dann fehlt eine Bibliothek, ich habe mich damit nicht näher befasst und sie einfach schnell besorgt: "u8glib_arduino_v1.18.1.zip" (zum Beispiel von https://github.com/pedrogramos/White-OLED-128x64-I2C). Die "u8glib" kann man aber auch einfach unter "Werkzeuge", "Bibliotheksverwalter" mittels Suchbegriff finden und eine aktuelle Version installieren.

Sind diese Hürden genommen, kann das Herumwursteln im Quellcode beginnen, damit meine ich natürlich das professionelle Weiterentwickeln.

3. Eigene Version erzeugen

Das wichtigste zuerst: In der Datei "_Bootscreen.h" hinterlegt man sein eigenes Logo. Dazu kann man etwas Hilfe in Anspruch nehmen, folgender Converter ist dafür praktisch: https://www.digole.com/tools/PicturetoC_Hex_converter.php das Benutzer Startlogo muss man wie alles andere erst aktivieren, dazu müssen diverse Zeilen Code einkommentiert werden.

Je nachdem was man will. Was von vornherein drin sein sollte ist das Nivellieren mittels mehrerer Punkte, die Netz oder Mesh Nivellierung. Schließlich besorgt man sich keinen großen Drucker um dann nur begrenzt im Zentrum drucken zu können und die Druckplatte entspricht nunmal den Alpen von ihrer Planheit her. Ausserdem habe ich bei mir die Statistik mit reingenommen, einzelnes Achsen Homing, Chinesisch durch Deutsch ersetzt und das Beste zum Schluss, die Themeratur Korrektur eingefügt, die ich sonst nirgends fand.

Diese Bed Temperatur Kompensation funktioniert wie folgt:

  1. Druck starten oder Bed Temperatur einstellen, zum Beispiel 110 °C
  2. Aufheizen lassen bis angeblich die Temperatur erreicht ist, und weiter warten bis die Hitze an der Oberfläche stabil ist
  3. Temperatur an der Oberfläche messen, dafür verwende ich ein IR-Termometer
  4. Unter "Einstellungen"-"Temperatur"-"Bett Temperatur" die gemessene Temperatur eingeben
  5. Nun wird ein Faktor errechnet und das Bett heizt weiter auf, bis maximal 260 °C
  6. Es sollte die Zieltemperatur relativ genau erreicht werden, abhängig von der Richtigkeit der Eingaben

Es sollte spätestens nun klar sein, dass man wissen sollte, was man tut, wenn man damit arbeitet. Hat man eine zu große Differenz zwischen Messwert und Zielwert, wird es nicht mehr funktionieren. Auch fehlerhafte Eingaben würden zu falschen Ergebnissen führen.

Deaktivieren der Kompensation erfolgt indem eine Temperatur für die gemessene Druckbrett Temperatur kleiner oder gleich 15 °C eingegeben wird. Der Multiplikator wird dann auf 1.0 gesetzt.

Wer gern einen Blick hineinwerfen will, kann sich meine Version herunterladen:

4. USB Verbindung zum Drucker herstellen

Die richtigen Treiber sind entscheident. Ich fand glücklicher Weise sehr schnell nach endlosen Stunden eine "CDM21228_Setup.exe" die mir die selben Treiber installierte, die ich längst runter geladen hatte, aber der ohne das Setup einfach nicht laufen wollte.

U.a. habe ich das Setup hier gefunden: https://www.datasec-electronic.com/index.php/downloads-zutrittskontrolle-sicherheitskonzept/treiber

Damit wird über USB ein virtueller COM Port eingerichtet.

5. Einspielen der eigenen Version

Wenn man eine Verbindung aufgebaut hat, kommt Cura zwar in Frage scheint aber manchmal Schwierigkeiten mit der zu haben. Wenn man nicht gerade über die Arduino IDE die Firmware einspielt, dann eignet sich der Creality Slicer, hier kann man den COM Port auswählen und die ".hex" Datei hochladen, das hat bei mir immer funktioniert.

Ist das geschafft kann die Kalibrierung beginnen. Zu erst Kalibrierte ich das Bett, genauer gesagt die Temperaturregelung.

>>> M303 E-1 C8 S110
SENDING:M303 E-1 C8 S110
PID Autotune start
 bias: 101 d: 101 min: 109.74 max: 110.42
 bias: 92 d: 92 min: 109.80 max: 110.23
 bias: 87 d: 87 min: 109.77 max: 110.23 Ku: 479.10 Tu: 12.94
 Classic PID
 Kp: 287.46 Ki: 44.42 Kd: 465.11
 bias: 100 d: 100 min: 109.76 max: 110.23 Ku: 541.08 Tu: 13.27
 Classic PID
 Kp: 324.65 Ki: 48.93 Kd: 538.55
 bias: 92 d: 92 min: 109.82 max: 110.23 Ku: 568.99 Tu: 11.80
 Classic PID
 Kp: 341.39 Ki: 57.88 Kd: 503.38
 bias: 95 d: 95 min: 109.77 max: 110.20 Ku: 565.62 Tu: 11.96
 Classic PID
 Kp: 339.37 Ki: 56.75 Kd: 507.37
 bias: 87 d: 87 min: 109.81 max: 110.25 Ku: 506.32 Tu: 13.27
 Classic PID
 Kp: 303.79 Ki: 45.78 Kd: 503.96
 bias: 94 d: 94 min: 109.75 max: 110.23 Ku: 490.76 Tu: 13.93
 Classic PID
 Kp: 294.45 Ki: 42.29 Kd: 512.61
PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
#define  DEFAULT_bedKp 294.45
#define  DEFAULT_bedKi 42.29
#define  DEFAULT_bedKd 512.61
...
>>> M304 P294.45 I42.29 D512.61
SENDING:M304 P294.45 I42.29 D512.61
echo: p:294.45 i:42.29 d:512.61
>>> M500
SENDING:M500
echo:Settings Stored (562 bytes; crc 33144)

Fett markiert sind die Befehle die ich ausführen lies, aber womit eigentlich? Pronterface (http://www.pronterface.com/) ist es womit ich die Befehle ausgeführt habe.

Dann kalibrierte ich etwas völlig anderes: Das Bett, genauer gesagt die Druckhöhe.

Die Nivellierung habe ich übers Menü gestartet und mit einen Stück Papier zwischen gesäuberter Druckkopf Düse und Druckbett geprüft, ob die Düse die Oberfläche schon gut berührt, aber das Papier noch knitterfrei bewegbar ist.

Die Einstellung in meiner Version läuft 5x5 Einstellpunkte an. Maximum wäre 7x7, aber so lange ich kein BL-Touch Sensor zur automatischen Nivellierung habe reichen mir 25 Punkte.

Mit dem Ergebnis bin ich bisher auf jeden Fall zufrieden, der Druck ist nun an allen Seiten plan, nichts hebt sich mehr ab oder verzieht sich.

Fazit

Ein günstiges Gerät hat viel Potential. Die Nivellierung hätte, zu dem in der Höhe mehrere Millimeter abweichenden Bett, definitiv dazu gehört und hätte im Menü auswählbar sein müssen.

Ich hätte mir zumindest etwas mehr Dokumentation gewünscht. Vor allem zu Treibern und Code in Deutsch oder Englisch, um eine Nivellierung hinzufügen zu können. So kostete alles viel Recherchearbeit.

Da das mitgelieferte Druckbrett eine völlig inhomogene Temeraturverteilung aufweist, empfielt es sich eine gefräste Aluminiumplatte von 510x510x10 mm gleich anderen Orts mitzubestellen, Gewinde unterwärts zu schneiden und Silikondämpfer einzusetzen. Dann verbessert man die Wärmeverteilung von ca. 20 °C Differenz auf < 5 °C vom Zentrum zum äußeren Rand. Ich fand eine gute Beratung und Platte bei https://metall-fachhandel.de.

Kommentare

Alles prima beschrieben dafür meinen Respekt, ich wollte nur die Displaysprache in deutsch ändern an meinem Ender 5pro mit der Version 4.2.7 marlin V 1.3.1.

das ist eine Bin Datei und kann nicht von arduino geöffnet werden.

Gibt es eine einfache Variante die Displaysprache in deutsch zu ändern?

Ich wäre ihnen sehr zu Dank verpflichtet.

Mit freundlichen Grüßen

Andreas Buse

Kommentar schreiben

* Diese Felder sind erforderlich