Marlin Auto Bed Leveling mit UBL

Unified Bed Leveling – oder kurz UBL – ist die nächste Generation des Mesh-Levelings in der Marlin Firmware für 3D Drucker. Ich schaue mir heute an, was UBL ausmacht und wie man es einrichtet, denn umfangreiche Dokus sind derzeit noch rar und wenn man sie findet, dann auf Englisch.

Was ist Unified Bed Leveling

Zuerst vielleicht die Frage: Was ist überhaupt Auto Bed Leveling oder Mesh-Leveling? Kurz gesagt: Es sind Methoden, die den Nutzer dabei unterstützen über des gesamte Druckbett hinweg einen möglichst gleichen Abstand zwischen Nozzle und Druckbett zu erhalten, für gleichmäßige und gut haftende erste Layer. Die klassische Methode ist ein manuelles Leveling, bei dem in der Regel das Bett mit Hilfe von Schrauben ausgerichtet wird. Leider kann es – insbesondere bei günstigen Druckern – immer wieder vorkommen, dass die Druckoberfläche nicht 100% plan ist und z.B. in der Mitte leicht durchhängt. Das lässt sich manuell kaum kompensieren. Auto Bed Leveling kann solche Abweichungen messen und den Drucker entsprechend darauf reagieren lassen, indem die Nozzle automatisch abgesenkt oder angehoben wird.

Voraussetzung ist natürlich irgendeine Form von Sensor, mit dem die Messung erfolgen kann. Die beliebtesten sind wohl induktive Sensoren, kapazitive Sensoren oder elektromechanische Lösungen, wie der BLTouch, den ich auch an meinem Tornado verbaut habe. Tom hat mal einen sehenswerten Vergleich der Leveling Sensoren gemacht.

In der offiziellen Marlin Doku wird UBL beschrieben als a superset of the previous leveling systems, also als eine Übermenge aller bisherigen Leveling Systeme. UBL vereint also die Stärken bisheriger Methoden in einem Paket. Dabei werden insbesondere vier Vorteile besonders hervorgehoben:

  • Optimierte Algorithmen für die Berechnung der Höhenabweichungen über das gesamte Druckbett
  • Die Möglichkeit ein hochaufgelöstes (sprich aus vielen Messpunkten bestehendes) Netz (Mesh) zu messen und fest im Drucker zu speichern, um es bei jedem Druck abzurufen, sowie die Möglichkeit durch eine schnellere Messung an mindestens drei Punkten vor jedem Druck kleine Abweichungen zum gespeicherten Mesh zu berechnen
  • Berücksichtigung des gesamten Druckbetts, indem nicht messbare stellen rechnerisch angeglichen werden
  • Die Möglichkeit das Mesh jederzeit gezielt zu bearbeiten um bestmögliche Ergebnisse zu erzielen
Lese auch:  TMC2130 Upgrade für Tevo Tornado

Zusammenfassend kann man sagen, dass man mit UBL in Marlin eine sehr genaue, flexible und zeitsparende Möglichkeit hat, ein automatisches Leveling durchzuführen. Zwar kostet die Einrichtung Zeit, insbesondere wenn dabei viele Punkte gemessen werden, dafür ist vor jedem Druck kein Vermessen des gesamten Betts mehr nötig, wie bei anderen Methoden, die das Bett vor jedem Druck komplett vermessen.

Wie richtet man UBL ein

Um Unified Bed Leveling nutzen zu können, benötigst du eine entsprechen angepasste Firmware, die BLTouch Versionen in meinem Downloadbereich sind alle mit aktiviertem UBL ausgestattet. Wenn du deine Firmware lieber selbst anpasst, würde ich empfehlen auf einer aktuellere Version von Marlin zu setzen, da UBL ein vergleichsweise junges Feature ist und in den letzten Versionen noch einige Bugs behoben wurden.

Ist die Firmware installiert, kann es auch schon an die Einrichtung gehen, der erste und wichtigste Schritt ist dabei das Einmessen des Mesh. Grundsätzlich gibt es dafür zwei Wege zum Ziel: Meine Marlin Versionen haben ein eigenes UBL Menü, das direkt über die Controlbox des Druckers aufgerufen werden kann. Ich muss aber dazu sagen, dass ich dieses Menü nur aus anderen Versionen übernommen und nicht weiter getestet habe. Daher werde ich mich auf Variante 2 konzentrieren und das ist über die Eingabe von Gcode Befehlen, z.B. über OctoPrint, Simplify3D oder Pronterface.

Im ersten Schritt bringen wir Druckbett und Nozzle auf Temperatur, das ist nicht unbedingt notwendig, wird aber empfohlen, weil sich durch die Hitze durchaus kleine Abweichungen in der Länge der Nozzle oder einer Wölbung des Betts ergeben können, die bei einer gewünschten Genauigkeit im Nullkomma-Millimeter-Bereich durchaus etwas ausmachen können. Zudem laufen mit dem heißen Hotend auch die Lüfter in der Controlbox, was vor allen bei Trinamic Treibern, die recht warm werden, wichtig ist.

M190 S60
M104 S200

Der nächste Schritt ist das allgemeine Homing aller Achsen mit G28. Danach folgt das Vermessen des Betts, das kann einige Zeit dauern:

G29 P1
G29 P3 T

Mit dem zweiten Befehl werden die nicht gemessenen Bereiche ausgefüllt. Die Marlin UBL Doku empfiehlt, diesen Befehl mehrfach auszuführen.

Lese auch:  RGB(W) Beleuchtung als Statusanzeige mit Marlin

Damit ist ein Großteil der Arbeit auch schon erledigt. Es fehlt nur noch das Abspeichern der gerade ermittelten Werte im EEPROM des Druckers.

G29 S0
G29 F 10.0
G29 A
M500

Damit das gespeicherte Mesh bei jedem künftigen Druck verwendet werden kann, muss im Slicer der Start-Gcode angepasst werden. Nach dem G28 für das Homing wird ein G29 L0 eingefügt. In dieser Einstellung misst der Drucker nur an einem Punkt den Nullpunkt der Z-Achse. Sollen drei Punkte gemessen werden, um das Mesh daraufhin anzupassen, folgt noch ein G29 J.

Falls beim ersten Druck mit UBL die Nozzle zu hoch oder zu niedrig ist – was bei mir merkwürdigerweise immer der Fall war – kann man das gesamte Mesh verschieben, um den idealen Nullpunkt zu finden:

G29 P6 C +0.1
G29 S0
G29 A
M500

In der ersten Zeile wird einfach der benötigte Wert, um den das Mesh verschoben werden soll eingetragen, im Beispiel sind es +0,1mm. Wichtig ist, dass hier ein Vorzeichen angegeben und anstelle vom Komma ein Punkt verwendet wird. Die übrigen drei Zeilen speichern die neuen Werte wieder ab.

Falls du trotzdem noch Probleme hast, prüfe ob ein Z-Offset eingestellt ist. Ich habe die besten Ergebnisse erzielt, wenn ich den auf 0 setze.

UBL Feintuning

Wer es ganz genau haben will, kann ein spezielles Testmuster drucken lassen, an dem sich Abweichungen auf den einzelnen Messpunkten erkennen lassen. Bisher war das bei mir nicht nötig, da ich auch so schon mit den Ergebnissen sehr zufrieden war.

8 Gedanken zu “Marlin Auto Bed Leveling mit UBL”

  1. Hi Kevin,

    verstehe ich nicht ganz mit dem Z-Offset. Momentan benutze ich nicht das UBL sondern das normale ABL mit 20 Messpunkten. Mein Z-Offset habe ich auf -1.15 gesetzt.
    Bei UBL soll das Z-Offset auf 0 gesetzt werden ?
    Mit verschieben durch G29 P6 C +0.1 bekomme ich dann die Nozzle weiter weg vom Druckbett und mit – näher ran?

    Gruß
    Silvio

    PS: Die 20 Messpunkte nerven einfach vor jedem Druck , mit UBL sollte das ABL ja schneller gehen.

    1. Das geht auf jeden Fall schneller. Ist als wenn du ganz normal druckst. Einmal in der Bettmitte Z messen und los gehts. Das mit dem Z-Offset auf 0 scheint auch n Ding gewesen zu sein, was da in den frühen Versionen von UBL problematisch war. Mit neueren Versionen ist das – würde ich sagen – auch etwas einfacher und unkritischer geworden. Aber an sich wäre es bei 100% passender Konfiguration trotzdem richtig, denn du definierst ja schon beim Einrichten des BLTouch welche Abstände der in X, Y und Z-Richtung von der Nozzle hat. Wenn das Z da auf den mm richtig gesetzt ist, bräuchte es keinen zusätzlichen Offset mehr.
      G29 P6 macht das Finetuning, genau so, wie du sagst, positive Werte mehr nach oben, negative näher ans Bett.
  2. Hallo Kevin,
    ich habe Deinen Beitrag zu UBL Leviling gelesen.
    Bei mir wird zwar das UBL Leveling durchgeführt, jedoch kann ich beim Ausdruck keine Änderungen erkennen.
    Das Heizbett ist nicht ganz eben und trotz UBL Leveling ist die Düse zu nah (Filamentstau) oder zu weit entfernt keine gute Haftung.

    Ich habe einen JGAurora A5 mit BLtouch Marlin Firmware 1.1.9 .
    Als Slicer verwende ich Simplify3D.
    Den Offset habe ich ermittelt und in der Firmware eingetragen.
    Werden bei Dir die ermittelten Werte in den Ausdruck übernommen?
    Vielleich habe ich ja was beim Start Script nicht beachtet.
    Hier mein Start Script.
    M502 ; Reset settings to configuration defaults…
    M500 ; …and Save to EEPROM. Use this on a new install.
    M501 ; Read back in the saved EEPROM.
    G29 P1 T ; Do automated probing of the bed.
    G29 P3 T ; Repeat until all mesh points are filled in.
    G29 T ; View the Z compensation values.
    G29 P5
    M420 S1
    G29 S1 ; Save UBL mesh points to EEPROM.
    G29 F 10.0 ; Set Fade Height for correction at 10.0 mm.
    G29 A ; Activate the UBL System.
    M500
    G1 X20 Y5 Z0.45 F3000 ; get ready to prime
    G1 X20 Y5 F3000 ; get ready to prime
    G92 E0 ; reset extrusion distance
    G1 X200 E20 F600 ; prime nozzle
    G1 X180 F5000 ; quick wipe

    Als denn ich sage schon mal Danke.

    Gruß Andreas

    1. Hallo Andreas,

      das Problem ist, dass du den ganzen initialen UBL-Kram, den man eigentlich nur einmalig durchführen muss, in dein Startscript gepackt hast. Abgesehen davon, dass es unendlich lange dauert, bis du mal drucken kannst, würde das wahrscheinlich sogar funktionieren, wenn dann nicht das entscheidende Laden des Meshs mit G29 L0 (bzw. in deinem Fall G29 L1) fehlen würde.

      Diesen kompletten Abschnitt musst du nur einmal manuell ausführen. Am besten auch nicht am Stück, sondern Zeilenweise von Hand, damit alles richtig klappt:
      M502 ; Reset settings to configuration defaults…
      M500 ; …and Save to EEPROM. Use this on a new install.
      M501 ; Read back in the saved EEPROM.
      G29 P1 T ; Do automated probing of the bed.
      G29 P3 T ; Repeat until all mesh points are filled in.
      G29 T ; View the Z compensation values.
      G29 P5
      M420 S1
      G29 S1 ; Save UBL mesh points to EEPROM.
      G29 F 10.0 ; Set Fade Height for correction at 10.0 mm.
      G29 A ; Activate the UBL System.
      M500

      Und dann kommt dein eigentlicher Start-Gcode, den du in Simplify eintragen musst, ergänzt um zwei entscheidende Zeilen:
      G28
      G29 L1
      G1 X20 Y5 Z0.45 F3000 ; get ready to prime
      G1 X20 Y5 F3000 ; get ready to prime
      G92 E0 ; reset extrusion distance
      G1 X200 E20 F600 ; prime nozzle
      G1 X180 F5000 ; quick wipe

      Hoffe, das hilft dir weiter.
      Viel Spaß beim Drucken!

  3. Hallo Kevin,
    recht herzlichen Dank, jetzt funktioniert das UBL.
    Ich sehe wie sich die Z Achse anpasst, eine tolle Sache.

    Nochmal alles Gute und Danke

  4. Hallo Kevin,
    Danke für den Artikel, der hat mir Licht ins Dunkel gebracht.
    UBL läüft einwandfrei.
    Genial ist, dass man mit dem G29 P6 C +- live im Druck die höhe anpassen kann. das macht das Z-offset überflüssig. Eine riesen Erleichterung.
    Jetzt muss ich nur noch sehen, wie ich diese Befehle (oder auch die gesamte Mesh erstellung) als Buttons in Octoprint einfügen kann. Das wäre sehr Komfortabel, wenn der Drucker mal wieder Service benötigt.

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.