3D-Drucker mit Klipper beschleunigen

Lesedauer 8 Minuten

Heute habe ich es endlich geschafft, den Anycubic i3 Mega „geklippert“ dazu zu bringen, das Bett richtig zu vermessen. Die Glasplatte ist alles andere als eben. Und nicht einmal gleichmäßig uneben. Wie eine Auenlandschaft. Wirklich schlimm. Aber Klipper regelt das.

Installation Klipper

Ich hatte noch einen alten Raspberry 2 hier rumliegen. Für Klipper reicht das dicke. Mit dem Raspberry Pi Imager ist Klipper schnell auf eine SD-Karte kopiert.

OS wählen —> Other specific-purpose OS —> 3D printing —> Mainsail OS

Nun noch auf das Zahnradsymbol klicken und die Grundeinstellungen für den Raspi einstellen.

Vom Gerätenamen über den Account bis zur Einrichtung des WLAN-Zugangs und vor allem den SSH-Zugang kann man hier alles einstellen, sodass man keinen Monitor und keine Tastatur an den Raspi anschließen muss, sondern sich via SSH über das LAN oder das WLAN anmelden kann.

Speichern, die Ziel-SD-Karte auswählen und das Image schreiben lassen.

Any flashen

Den Any schließen wir mit einem USB-Kabel an den Raspi an.  SD-Karte in den Raspi und an das Netzteil anschließen.

Wenn der Raspi gebootet ist, kann man ihn über das Netzwerk erreichen. Die IP-Adresse findet man in seinem WLAN-Router (Fritzbox, Heimnetzwerk, Clients) oder aber mit dem Angry IP Scan das Netzwerk durchsuchen.

Der MAC-Hersteller lautet Raspberry Pi Foundation und wir sehen hier schon den Netzwerknamen „Anycubici3Mega.local“. Wir merken uns die IP-Adresse, öffnen das Terminal (unter Windws benötigt man noch Putty) und geben dort „ssh “Deines-Raspi“  ein:

Natürlich hier den Anmeldenamen Eures Pi und die IP hier eintragen. Es wird nach dem Passwort gefragt, dies bitte eingeben.
Bei der Nachfrage des Systems, ob dem entfernten Rechner mit dem Fingerprint Laberrhabarber vertraut werden soll, bitte „Yes“ eingeben.

Firmware erstellen

Folgendes nun eingeben: „cd klipper“ und in diesem Verzeichnis: „make menuconfig“.

cd klipper
make menuconfig

Es öffnet sich dieses Fenster, in dem eigentlich bereits alles voreingestellt sein sollte:

  • Atmega AVR
  • Atmega2560
  • 16MHz
  • UART0
  • Baudrate 250000

Q wie Quit und in der Befehlszeile „make“ eingeben

make

Der Raspberry fängt an zu rödeln und erstellt uns die Firmware für den Anycubic i3 Mega.
Sie trägt den Namen „klipper.elf.hex“.

Dateien kopieren

Wir verbinden uns mit dem Raspberry via SFTP:

Unter Ubuntu geht das über Dateien, andere Orte. In das Feld „sftp://192.168.141.63/“ eingeben und auf Verbinden klicken.
Gleiches Spiel unter macOS. Im Finder: Gehe zu, mit Serververbinden.
Unter Windows benötigst Du wieder mal ein Tool wie Filezilla. Windows ist wirklich nur noch für MS Office gut.

Wir kopieren die klipper.elf.hex auf unseren Rechner.

Ebenfalls holen wir uns noch die Datei /home/pi/klipper/config/printer-anycubic-i3-mega-2017.cfg auf unseren Rechner und benennen sie in printer.cfg um.

Diese Datei kopieren wir nun zurück auf den Raspberry, und zwar in den Ordner

/home/pi/printer_data/config/

Die Firmware flashen

Wir starten Cura oder den Slicer, den wir sonst mit dem Any verwenden und flashen darüber die Firmware des Druckers.

Wir wählen die Firmware klipper.elf.hex aus und flashen den Drucker damit.

Erster Start

Im Browser geben wir die IP-Adresse unseres Druckers ein. Es öffnet sich die Mainsail-Oberfläche.

In der alten Printer.cfg für den Any sind keine aktuellen Konfigurationsanweisungen für Mainsail gespeichert. Die kopieren wir uns ber selbst hinein.

Maschine —> Config —> mainsail.cfg

Doppelt darauf klicken und im Editor Strg-A und Strg-C drücken.

Auf das X rechts oben klicken und in der Dateiübersicht doppelt auf die printer.cfg klicken.

Nach unten scrollen, den Cursor dort platzieren und Strg-V.

„Speichern und Neustart“ anklicken.

Nun startet Klipper und wir sind soweit fertig.

Anpassungen

2208?

Die leisen Treiber lassen die Motoren in die gegensätzliche Richtung drehen. Ich wollte die Stecker auf dem Mainboard des Anycubic i3 Mega nicht umdrehen, also musste ich dies in der Software machen. In der printer.cfg änderte ich die folgenden Einträge:

[stepper_x]
step_pin: PF0
dir_pin: PF1
enable_pin: !PD7
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PE5
position_min: -5
position_endstop: -5
position_max: 210
homing_speed: 30.0

[stepper_y]
step_pin: PF6
dir_pin: !PF7
enable_pin: !PF2
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PL7
position_endstop: 0
position_max: 210
homing_speed: 30.0

[stepper_z]
step_pin: PL3
dir_pin: !PL1
enable_pin: !PK0
microsteps: 16
rotation_distance: 8
endstop_pin: ^!PD3
position_min: -1.5
position_max: 205
homing_speed: 5.0

[stepper_z1]
step_pin: PC1
dir_pin: !PC3
enable_pin: !PC7
microsteps: 16
rotation_distance: 8
endstop_pin: ^!PL6
enable_pin = !PC7

Es geht um die Einträge mit dem Ausrufezeichen (!). Dies ändert die Drehrichtung der Motoren.

BL-Touch

Der X-Y-Offset des BL-Touchs muss ermittelt werden. Das ist der Abstand zwischen der Postition der Nozzle und des Stiftes des BL-Touchs. Klipper muss an der Stelle messen, wo sich die Düse befinden soll.

Ich habe mich an diese Anleitung gehalten.

Wenn man den BL-Touch mit dem Knutwurst-Halter mittig im Druckopfgehäuse befestigt hat, beträgt der Offset in etwa X: 1 und y -23. In der printer.cfg tragen wir das ein.

[bltouch]
sensor_pin = ^PE4
control_pin = PB5
# do your own measurement
x_offset = 1
y_offset = -23
#z_offset = 2.460
stow_on_each_sample = False
probe_with_touch_mode = True

Los geht’s!

Ich wollte direkt los drucken, musste mich aber bremsen. Zuerst musste ich wenigstens das Bett leveln.

Bett ins Wasser bringen

Gestern habe ich noch einmal das Bett mithilfe des Befehls SCREWS_TILT_CALCULATE ganz exakt ausgerichtet. Die vordere links Ecke sollte nur halbwegs stimmen, sodass die Nozzle nicht ins Heizbett rammt, wenn er auf Nullposition ist. An dieser Schraube richten sich alle anderen von der Höhe.

Wo sind denn die Schrauben?

Bei einem serienmäßigen Ai3M befinden sich die Schrauben nach meiner Messung ungefähr hier:

[screws_tilt_adjust]
screw1: 0,30
screw1_name: front left screw
screw2: 210,30
screw2_name: front right screw
screw3: 210,210
screw3_name: rear right screw
screw4: 0,210
screw4_name: rear left screw
speed: 80.
screw_thread: CW-M3

Das kann man so in seine printer.cfg kopieren. Es ist klar, dass die hinteren Schrauben durch den Druckkopf nicht erreicht werden können, da sie sich außerhalb des Druckbereichs befinden.

Einstellprozedur

Die Ausgabe des Befehls ist tatsächlich eine Angabe, um wie viele Stunden und Minuten man das Levelrad in welche Richtung drehen soll. Ich beließ es bei mir mit einer Genauigkeit von je einer Minute.

Akzeptieren klicken und ein SAVE_CONFIG in die Konsole eingeben, damit der Wert auch gespeichert wird.

Schau Mama! Keine Federn!

Warum nicht auch noch diese Minute einstellen? Nun, eigentlich hat der Any, so wie alle anderen alten Drucker auch, solche Federn, die das Bett nach oben drücken und die Schrauben, die es nach unten ziehen.

Da mein Bett aber so krumm war, war die hintere linke Schraube immer lose. Also habe ich mir diese STL als neue, große Bedlevelschrauben genommen und in diese eine kleine M3-Mutter geklebt:

Als Ersatz für die Federn drücken nun Kontermuttern das Bett nach oben:

Nun wird das Bett mit Gewalt auf der korrekten Höhe gehalten. Es gibt aber auch nicht mehr nach, wenn die Nozzle zu weit herunterfährt.

Das Einstellen wird durch je zwei Einstellräder nicht einfacher. Erst das große Rad lösen, dann die Kontermutter nach Anweisung Klippers drehen und dann mit der unteren Mutter wieder kontern. Dabei hat man schnell zu fest oder zu locker gekontert. Wie dem auch sei: Die paar Minuten Arbeit ist das Ergebnis alle Male wert gewesen.

Klinkt erst nach einem totalen overkill, aber das ist es wirklich nicht. Tolle Funktion in Klipper.

Endstopps (Z-Offset) kalibrieren

Nun kalibrierte ich die Endstopps. Der Anycubic hat je einen Motor pro Z-Achsenspindel. Beide sind nicht mit einem Zahnriemen miteinander synchronisiert, sodass nach einigen Druckjobs die Z-Achsen unterschiedlich hoch stehen. Das schlecht. Nix gut.

Mit dem BL-Touch könnte man das zwar vor jedem Druck zeitaufwendig leveln, aber man kann sich auch die Hose mit einer Kneifzange anziehen. Der i3 Mega hat schließlich zwei Endstopschalter, die hervorragend funktionieren. Der Drucker sollte aber wissen, wie weit die Nozzle vom Druckbett entfernt ist, wenn die Endstopschalter auslösen.

Der Zwischenraum sollte in der Regel 0,1 mm betragen. Womit könnte man das messen? Mit einem Blatt DIN-A4-Kopierpapier. Das hat 0,1 mm Stärke! Mit dem Befehl Z_ENDSTOP_CALIBRATE stellte ich diesen Abstand ein.

Ich mag es beim Any etwas strammer eingestellt. Bei mir sollte ein DIN A4- Blatt gerade so unter der Düse nach hinten geschoben werden können, dass das Papier sich dabei nicht nach oben wölbt.

Die Ausgabe zeigt im Beispielbild die Position meines Homes an. Das ist nicht wie beim originalen bei 0,0,0, sondern bei 105, 105, 5. Dies ist die Mitte des Betts und die Düse steht 5 mm über der Endstopposition.

Ich fuhr die Z-Achse über „–“ soweit noch unten, bis das Papier klemmte. Dann langsam mit „+“ wieder nach oben, bis das Blatt Papier locker unter der Nozzle verschoben werden kann.

Nun mit den Babysteps soweit nach unten, bis es mir vom Gefühl her passte. Wenn das beim Druck später entweder zu niedrig oder zu stramm ist, kann man es im laufenden Druck im Fenster „Werkzeugkopf“ *sic* über den Z-Offset (Z-Versatz *sic*) noch ändern. Nur sollte man dann nicht vergessen, den Wert zu speichern: SAVE_CONFIG.

Ich war zufrieden mit meiner Einstellung. Schön ist, dass man durch dieses SCREWS_TILT_CALCULATE nur einmal einstellen muss. Der Rest wird vom Bedleveling angeglichen.

Bedleveling starten

Diese Funktion benötigt wieder einen Eintrag in der printer.cfg, damit Klipper weiß, wie groß das Bett überhaupt ist. Das vom Anycubic i3 Mega ist 210 x 210 groß.

[bed_mesh]
speed = 200
horizontal_move_z = 2.460
mesh_min = 2,2
mesh_max = 210,187
probe_count =5,5
#fade_start = 1.0
#fade_end = 10.0
algorithm = bicubic

25 Messpunkte sollten reichen, als setzte ich den probe_count auf 5,5. Hier kann man Werte ab 3,3 bis … keine Ahnung … eingeben. 5×5 reicht für einen Drucker dieser Größe locker aus.

Vor dem Kalibrieren des Druckbetts müssen wir die Achsen homen. Auf das orange Haus klicken. Dann auf „Kalibrieren“, wenn das durchgelaufen ist, müssen wir die ganze Nummer wieder speichern.

Die Glasplatte ist alles andere als eben. Und nicht einmal gleichmäßig uneben. Wie eine Auenlandschaft. Wirklich schlimm. Aber egal, er hat den Bedleveltest sehr zufriedenstellend ausgedruckt. BL-Touch regiert. 🙂

Bedmesh laden

Ich wollte mich nicht müde machen und immer mein funktionierendes geleveltes Bett (default_funzt) in den Start Gcode des Slicers eintragen, oder das Bett vor jedem Druck neu zu leveln, deswegen änderte ich die printer.cfg wie folgt:

[delayed_gcode bed_mesh_init]
initial_duration: .01
gcode:
  BED_MESH_PROFILE LOAD=default_funzt

Dadurch wird immer dieses Mesh geladen. Ein Nobrainer ab jetzt.

PID-Tuning

Nun will ich noch, dass das Hotend und das Bett schneller aufgeheizt werden und die Temperatur präziser gehalten wird. Das erreichte ich mit dem Befehl PID_CALIBRATE HEATER=extruder TARGET=210

Mit 210 Grad drucke ich vermutlich die meisten Filamente. Nach Eingabe des Befehls in die Konsole arbeitet der Drucker einige Zeit und erhitzt dabei immer wieder das Hotend, bis der Algorithmus gelernt hat, wie den Über- und Unterschwingern im Temperaturverlauf am besten beizukommen ist. Wann muss mit wie viel Prozent geheizt werden, damit die Temperatur nicht zu stark fällt? Wann muss wieder ausgeschaltet werden, damit die Temperatur nicht über das Soll hinausgießt?

Analog gibt es einen solchen Befehl auch für das Heizbett:  PID_CALIBRATE HEATER=heater_bed TARGET=60

Erster Druck

Fertig soweit. Also gab ich ihm einen Weihnachtsbaum als Testdruck. Statt der maximalen 60 mm/s habe ich aber stumpf 90 mm/s eingestellt. Mal sehen, was dabei herauskommt, denn immerhin ist das Gerät – bis auf eine selbst gedruckte Komponentenkühlung, die leisen Treiber und den BL-Touch – serienmäßig.

Tut mir leid, die Kamera in meinem Telefon stellt nichts mehr scharf. Es ist wohl einmal zu oft heruntergefallen in den vergangenen sechs Jahren. 🙁

Ai3M Weihnachtsbaum OWL PLA, 90 mm/s, Klipper
Ai3M Weihnachtsbaum OWL PLA, 90 mm/s, Klipper
Ai3M Weihnachtsbaum OWL PLA, 90 mm/s, Klipper
Ai3M Weihnachtsbaum OWL PLA, 90 mm/s, Klipper
Ai3M Weihnachtsbaum OWL PLA, 90 mm/s, Klipper
Ai3M Weihnachtsbaum OWL PLA, 90 mm/s, Klipper

Das ist der erste Ausdruck mit Klipper. Ich habe bis auf das Bett nichts kalibriert. Keine E-Steps, kein Fluss, nichts. Ist das vier Jahre alte PLA von Owl, das will ich nur noch Wegdrucken.

Aber, ich nehme ihn gerade noch einmal in die Hand … 90 mm/s? Ein alter i3M? PLA von Owl? Verdammt, das Ding sieht richtig gut aus. Ich bin wirklich zufrieden.

Na ja … 90 mm/s sind okay, aber 120 mm/s sind besser! Doppelt so schnell wie das Original. Bisschen an allen anderen Geschwindigkeiten gedreht und auch die Beschleunigungswerte hochgesetzt. Noch einen Baum gedruckt, diesmal etwas größer. 1:48 h Druckdauer.

Der alte Any gab Gas als gäbe es kein Morgen. Mir war nicht klar, dass der so hohe Beschleunigungswerte erreichen kann. Sieht schon fast wie ein moderner Drucker aus.

Anycubic i3 Mega, Klipper, 120 mm/s
Anycubic i3 Mega, Klipper, 120 mm/s

Das ist ein sehr erfreuliches Ergebnis. Gut, der Baum ist sicher kein guter Testdruck. Ich wollte aber eben das grüne Filament verdrucken. Ich benötige ein neues Smartphone mit einer guten Kamera, dann mache ich noch einmal richtige Bilder.

Und sonst?

Endlich stimmt auch die Lautstärke. Kein Heulen und Singen der Motoren mehr. Ein wirklich angenehmer Sound, auch wenn der originale Bauteillüfter anspringt, der mittlerweile einen beginnenden Lagerschaden hat. Der Drucker klingt nun wesentlich … massiver, wertiger.

Fazit

Bis auf eine kleine Unperfektheit am Boden des Baumes war auch der schnelle Druck ein voller Erfolg. 1:48 h dauerte er.

Natürlich ist mein Qidi auch im Schongang mit 200 mm/s immer noch doppelt so schnell (55 min), was auf die wesentlich höheren Beschleunigungswerte zurückzuführen ist.

Schön, dass mein erster 3D-Drucker durch Klipper doch noch ein zweites Leben erhalten hat.

Also: Klipper auf dem alten Anycubic? Ja, klar, sicher! Gerne und immer wieder!
Hat sie die Arbeit gelohnt? Absolut!

Update

Und schon gibt es ein Update! Aktuell rennt der Drucker problemlos mit 150 mm/s und einer Beschleunigung von 6.000 mm/s². Die Lager des Betts jaulen dabei sporadisch, wenn der Kopf von einer Ecke in die andere fährt. Der Ausdruck sieht noch völlig normal aus.

Natürlich kann man die 150 mm/s nicht mit denen eines aktuellen Druckers vergleichen. Mit dem Qidi drucke ich meistens nur 200 mm/s, aber selbst damit ist er noch doppelt so schnell wie der Any mit 150 mm/s. Das resultiert eben aus den enormen Beschleunigungswerten, die heutige Drucker durch ihren Leichtbau erreichen.

Trotzdem ist das Ergebnis top für so einen alten Herren, oder nicht?

Aussicht

Immer, wenn was läuft, will man mehr. Mit einem BMG-Extruder und einem V6 Hotend aufgerüstet, soll der Any bis zu 250 mm/s schaffen.

Ich komme ins Grübeln …

Merklisten

Hardware

2208 Treiber (verbaut)

E3d v6 Hotend Clone

Direct MK4 Extruder: BMG-Clone

V6 Slikon-Skocken

Einstellungen Slicer lt. div. Quellen

  • Infill 1st Layer: 200 mm/s
  • perimeter 300
  • external perimeter 250
  • infill 250
  • top shell 200
  • travel: 300
  • max_accel and max_accel_to_decel 4000
    (ab 7000 jaulen die Lager, ab 10.000 rutschen die Riemen durch)

Schreibe einen Kommentar

Ich bin mit der Datenschutzerklärung und der Speicherung meiner eingegebenen Daten einverstanden.