Klipper Firmware auf dem Creality Ender 3 (Pro)

Dieser Artikel ist ein Teil meiner Serie zum Creality Ender 3 Pro. Für die Auflistung aller bisherigen Artikel der Serie hier klicken!

Heute kommt die für mich logische Fortsetzung zu meinen Anleitungen „Einbau vom SKR Mini E3 im Ender 3 (Pro)“ sowie „Octoprint (Octopi) auf dem Raspberry Pi am Ender 3 (Pro)„, da diese quasi nur Vorbereitungen darauf waren: Die Installation der Klipper Firmware auf dem Ender 3 (Pro)! Wieso sollte man auch ein 32 Bit-Board in seinem Drucker haben, einen Raspberry zur Steuerung nutzen und dann weiter die im Vergleich lahme Firmware Marlin nutzen? Das wird heute geändert! ACHTUNG: Die Abarbeitung der beiden oben genannten Anleitungen setze ich in diesem Schritt als erledigt voraus!

WICHTIG: Wer in der Standard-Firmware des Ender 3 (Pro) bereits Einstellungen bezüglich der Steps vorgenommen hat, sollte diese jetzt notieren! Wer es nicht weiß, den betrifft es nicht 😉

Bei Klipper handelt es sich um eine alternative Firmware für 3D-Drucker. Der Vorteil an dieser ist, dass der Drucker dadurch deutlich schneller wird und die Qualität auch noch ein wenig steigt… Leider gibt es selten Vorteile ohne Nachteile: in diesem Fall ist es der Bedarf an einem Raspberry Pi☆, welcher damit fest an den Drucker gebunden ist. Bisher wurden sämtliche Berechnungen für den Druck auf dem Mainboard vorgenommen. Bei Klipper erledigt diese Arbeit der Raspberry Pi. Dieser leitet quasi nur noch deren Ergebnisse an das Mainboard weiter, welches die Motoren sowie Extruder ansteuert. Das Ergebnis bemerkt man recht schnell: Der Drucker wird schneller! Durch die besseren Berechnungen und einige Eigenschaften von Klipper wird auch das Druckbild noch ein wenig schöner! ACHTUNG: ohne den Raspberry ist der Drucker dann aufgrund der Verteilung der Aufgaben nicht mehr benutzbar! Also die Anleitung bitte nicht mit einem Raspberry durchführen, der eigentlich eine andere Verwendung hat und wieder dort gebraucht wird!

Voraussetzung für die Installation von Klipper ist, dass die OctoPi-Version 0.16.0 oder höher und OctoPrint 1.3.12 oder höher installiert ist. Bei einem neu installierten OctoPrint ist dies natürlich der Fall (bei älteren Versionen an dieser Stelle bitte einfach ein Update durchführen).

Nun verbinden wir uns per SSH mit dem Raspberry (ich verwende hierzu das Programm MobaXterm, es geht aber natürlich genauso gut mit PuTTY oder anderen Programmen).

Zuerst laden wir uns die Klipper-Software runter

git clone https://github.com/KevinOConnor/klipper#

Dann starten wir die Installation mit dem Befehl

./klipper/scripts/install-octopi.sh

Nun folgen zur Erstellung der Firmware für den Ender 3 (Pro) folgende Befehle:

cd ~/klipper/
make menuconfig

Im jetzt erscheinenden Menü nehmen wir die Einstellungen gemäß der beiden Abbildungen vor (zum vergrößern anklicken):

In der obersten Zeile der Punkt „Enable extra low-level configuration options“ wird mit der Leertaste aktiviert. Beim Punkt „GPIO pins to set at micro-controller startup“ wird im Eingabefeld „!PC13“ eingetragen.

Nach dem verlassen des Konfigurations-Assistenten führen wir folgenden Befehl aus:

make

Hierdurch wird nun die Firmware entsprechend unserer Einstellungen kompiliert und im Pfad ~/klipper/out/kipper.bin abgelegt. Von dort kopieren wir sie über SCP oder FTP (das oben genannte Programm MobaXterm kann das parallel zur SSH-Sitzung!) auf unseren lokalen Computer. Hier wird die Datei von klipper.bin in firmware.bin umbenannt. Diese kopieren wir nun auf eine sonst komplett leere MicroSD-Karte, welche wir in unseren ausgeschalteten Ender 3 (Pro) einlegen. Beim einschalten wird die Firmware dann automatisch auf das Mainboard des Druckers kopiert und dort aktiviert. Einfach ca. eine Minute warten. Nicht wundern, das Display bleibt dabei leer, da wir nun Klipper als Firmware installiert haben und dessen Display-Ausgabe erst noch konfiguriert werden muss. Ob das kopieren erfolgreich war kann man kontrollieren, indem man die Speicherkarte wieder am PC auf ihren Inhalt kontrolliert. Die firmware.bin wird nach dem Update gelöscht (und eine andere Daten gespeichert, diese brauchen wir aber nicht).

Für die weitere Konfiguration benötigen wir als Grundlage eine Konfigurations-Datei mit den Einstellungen für den Ender 3 (Pro). Meine Datei befindet sich hier als Grundlage für diese Anleitung (nach dem Download bitte von printer.txt umbenennen zu printer.cfg). Wer bereits die Steps unter Marlin geändert hat, kann diese in dieser Datei gleich anpassen (Parameter step_distance). Der Wert muss jedoch passend umgerechnet werden, indem 1 durch den Marlin-Wert dividiert wird:

<WertInKlipper> = 1 / <WertInMarlin>

Das Ergebnis wird auf 6 Stellen nach dem Komma gerundet und dann an der entsprechenden Stelle in der Konfiguration eingetragen. ACHTUNG: Statt einem Komma muss natürlich ein Punkt zur Trennung genutzt werden!

Jetzt sind noch Einstellungen in OctoPrint zu machen. Zuerst müssen wir uns auf das Web-Frontend einloggen und die Einstellungen öffnen (Schraubenschlüssel-Icon oben rechts). Hier installieren wir im Plugin-Manager zuerst das „OctoKlipper-Plugin“. Danach muss bei den seriellen Verbindungen ein zusätzlicher serieller Port angelegt werden: /tmp/printer

Nach dem abspeichern werden die Einstellungen erneut aufgerufen und der soeben angelegte serielle Port wird in den Einstellungen für den Drucker ausgewählt.

Nun wird im Verhalten-Tab noch der Punkt „Laufende Druckaufträge abbrechen, aber mit dem Drucker verbunden bleiben“ ausgewählt und wieder abgespeichert.

Auf der OctoPrint-Hauptseite wird nun oben links die Verbindung mit dem Drucker über den neu angelegten tmp-Port aufgebaut. Ich empfehle hier gleich die Einstellungen zu speichern sowie die Verbindung beim Start automatisch herstellen zu lassen. Spart in Zukunft ein paar Klicks.

Nun öffnen wir testweise den Terminal-Tab und geben in die Eingabezeile den Befehl „status“ ein. Nun muss eine Fehlermeldung kommen, dass die Konfiguration nicht geöffnet werden konnte. Das ist ein gutes Zeichen, die Verbindung zu Klipper funktioniert! Sollte diese Meldung nicht kommen, nochmal alle Schritte oben genau nachprüfen!

Nun verbinden wir uns wieder über unser SSH-Programm mit dem Drucker-Raspi und führen folgenden Befehl aus:

ls /dev/serial/by-id/*

In der Liste der USB-Geräte suchen wir den Drucker und kopieren uns dessen Anschluss-Pfad (theoretisch sollte außer unserem Drucker hier überhaupt nichts anderes erscheinen). Diesen kopieren wir nun in unsere printer.cfg-Daten an diese Stelle (der Anschluss-Pfad ist nur exemplarisch und kann bei jedem anders lauten!) nach serial:

[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_12345-if00

Die Konfigurations-Datei ist damit fertig erstellt und deren vollständigen Inhat kopieren wir in Octoprint unter Einstellungen -> OktoKlipper -> Klipper Configuration und speichern ab. Nun können wir OctoPrint neu starten…

Im Terminal-Fenster von OctoPrint geben wir nun erneut den Befehl „status“ ein. Hier sollte nun die Meldung kommen, dass Klipper ready ist. Sollte das nicht der Fall sein, auch die Firmware nochmal mit dem Terminal-Befehl „restart“ neu starten. Erneut prüfen und dann läuft es! Sollte das nicht der Fall sein, nochmal die Schritte dieser Anleitung genau prüfen…

Wenn man nun drucken möchte, läuft das genauso wie zuvor mit OctoPrint. Die Dateien werden also einfach auf den Druckerserver geladen und von dort gestartet. Mit dem Ender 3 Pro drucke ich problemlos bei 100 mm/s, mehr habe ich noch nicht getestet, soll jedoch auch problemlos möglich sein…

Hier noch ein paar Links mit Schritten, die nach der Installation empfohlen werden (aber nicht zwingend notwendig sind):

26 Kommentare

  1. Hallo, ich würde auch gerne auf Klipper umstelle, Raspi und Octoprint sind schon im Einsatz. Ich habe allerdings das Original silent Board „ Creality Original V1.1.5 Silent Board“ bei mir im Einsatz, kann ich trotzdem die Anleitung so übernehmen oder geht es mi5 diesem Board vielleicht gar nicht. Würde mich freuen ein Feedback zu erhalten. Vielen Dank schon mal im Voraus. Gruß Mathias

    • Sorry für die späte Antwort, bist im Spam-Filter gelandet. Ich kann zum Silent Board nichts sagen, da ich es nicht habe. Wüsste aber nicht, was dagegen spricht. Kann halt nur sein, dass Du die Steps für das Board anpassen musst…

      Gruss Daniel

      • Hallo Daniel, danke für deine Antwort.

        Da ich noch nicht sehr lange mit einem 3D Drucker etwas mache, kannst du mir vielleicht sagen (bevor ich es umstellen würde) wie man am besten die Steps anpasst.

        Vielen Dank im Voraus

        Gruß Mathias

  2. Hallo nochmal 😉

    Nachdem ich nun aufgerüstet hab und auf Klipper umgestiegen bin, tritt bei mir leider ein kleines Problem auf. Es sind immer wieder mehrere Schichten Entlang der X-Achse versetzt. Das Problem hatte ich nicht von Anfang an, aber nach etwa 5-6 Drucken trat es seit dem konstant auf. Ist der Fehler bekannt? Ist schon mal jemanden ähnliches untergekommen.

    • Hallo Chris, ich hatte das Problem auch.
      Mehr oder weniger durch Zufall habe ich das Problem anscheinend gelöst.
      Ich habe das Betriebssystem vom Raspberry auf den aktuellsten Stand gebracht, danach war das Problem bei mir gelöst, zusätzlich kam aber auch eine neue Version von Klipper heraus.
      Auf jeden Fall tritt nach beiden Updates das Problem bei mir nicht mehr auf.

  3. Hallo Chris, ich hatte das Problem auch.
    Mehr oder weniger durch Zufall habe ich das Problem anscheinend gelöst.
    Ich habe das Betriebssystem vom Raspberry auf den aktuellsten Stand gebracht, danach war das Problem bei mir gelöst, zusätzlich kam aber auch eine neue Version von Klipper heraus.
    Auf jeden Fall tritt nach beiden Updates das Problem bei mir nicht mehr auf.

    • Hallo Chris, danke für das Update, ich sende dir mal meine Klipper Konfiguration, vielleicht kann dir das helfen, achte darauf das ich auch den BL-Touch bei mir eingebunden habe, solltest du diesen nicht haben.
      ———————
      [bltouch]
      sensor_pin: ^PC2
      control_pin: PA1
      pin_move_time: 0.500
      pin_up_reports_not_triggered: True
      pin_up_touch_mode_reports_triggered: False
      x_offset: -47.0
      y_offset: -5.0
      z_offset: 1.9
      speed: 5.0
      samples: 2
      sample_retract_dist: 10.0
      samples_result: average
      samples_tolerance: 0.100
      samples_tolerance_retries: 1

      [bed_mesh]
      speed: 100
      horizontal_move_z: 12
      probe_count: 4,4
      fade_start: 1
      fade_end: 10
      fade_target: 0
      # mesh_min: 35,6
      # mesh_max: 240,198
      mesh_min: 5,10
      mesh_max: 149,214
      mesh_pps: 2,2
      algorithm: lagrange
      bicubic_tension: 0.2

      [stepper_x]
      step_pin: PB13
      dir_pin: !PB12
      enable_pin: !PB14
      step_distance: .0125
      endstop_pin: ^PC0
      position_endstop: 0
      position_max: 235
      homing_speed: 50

      [tmc2209 stepper_x]
      uart_pin: PB15
      microsteps: 16
      run_current: 0.580
      hold_current: 0.500
      stealthchop_threshold: 250

      [stepper_y]
      step_pin: PB10
      dir_pin: !PB2
      enable_pin: !PB11
      step_distance: .0125
      endstop_pin: ^PC1
      position_endstop: 0
      position_max: 235
      homing_speed: 50

      [tmc2209 stepper_y]
      uart_pin: PC6
      microsteps: 16
      run_current: 0.580
      hold_current: 0.500
      stealthchop_threshold: 250

      [stepper_z]
      step_pin: PB0
      dir_pin: PC5
      enable_pin: !PB1
      step_distance: .002511
      # endstop_pin: ^PC2
      endstop_pin: probe:z_virtual_endstop
      position_min: -2
      # position_endstop: 1
      position_max: 250
      homing_speed: 5

      [tmc2209 stepper_z]
      uart_pin: PC10
      microsteps: 16
      run_current: 0.580
      hold_current: 0.500
      stealthchop_threshold: 5

      [extruder]
      step_pin: PB3
      dir_pin: !PB4
      enable_pin: !PD2
      step_distance: 0.010526
      nozzle_diameter: 0.400
      filament_diameter: 1.750
      heater_pin: PC8
      sensor_type: EPCOS 100K B57560G104F
      sensor_pin: PA0
      control: pid
      pid_Kp: 21.527
      pid_Ki: 1.063
      pid_Kd: 108.982
      min_temp: 0
      max_temp: 250

      [tmc2209 extruder]
      uart_pin: PC11
      microsteps: 16
      run_current: 0.650
      hold_current: 0.500
      stealthchop_threshold: 5

      [heater_bed]
      heater_pin: PC9
      sensor_type: ATC Semitec 104GT-2
      sensor_pin: PC3
      control: pid
      pid_Kp: 54.027
      pid_Ki: 0.770
      pid_Kd: 948.182
      min_temp: 0
      max_temp: 130

      [fan]
      pin: PA8

      [mcu]
      serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_30FFD6054242323410611657-if00

      [printer]
      kinematics: cartesian
      max_velocity: 300
      max_accel: 3000
      max_z_velocity: 5
      max_z_accel: 100

      [static_digital_output usb_pullup_enable]
      pins: !PC13

      [board_pins]
      aliases:
      # EXP1 header
      EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=,
      EXP1_2=PB6, EXP1_4=, EXP1_6=PB9, EXP1_8=PB7, EXP1_10=

      [display]
      lcd_type: st7920
      cs_pin: EXP1_7
      sclk_pin: EXP1_6
      sid_pin: EXP1_8
      encoder_pins: ^EXP1_5, ^EXP1_3
      click_pin: ^!EXP1_2
      #kill_pin: ^!EXP2_8

      [output_pin beeper]
      pin: EXP1_1

      [homing_override]
      set_position_z:0
      gcode:
      G1 Z10 F600
      G28 X Y
      G1 X166 Y120 F6000
      G28 Z

      [gcode_macro G29]
      gcode:
      BED_MESH_CALIBRATE

      [gcode_macro START_PRINT]
      gcode:
      M117 Antiblob retract…
      G92 E0 ; Reset Extruder distance to 0
      G1 E-3 ; Retracts filament to prevent blobs during probing
      G92 E0 ; Reset Extruder distance to 0
      M117 Homing.
      G28 ; home all axes
      M117 Leveling bed.
      BED_MESH_PROFILE LOAD=default
      M117 Heaters Stabilizing…
      G4 S5; wait for heaters to recover
      M117 Purging extruder…
      G92 E0 ; reset extruder
      G1 Z1.0 F3000 ; move z up little to prevent scratching of surface
      G1 X0.1 Y40 Z0.3 F5000.0 ; move to start-line position
      G1 X0.1 Y100.0 Z0.3 F500.0 E15 ; draw 1st line
      G1 X0.4 Y100.0 Z0.3 F5000.0 ; move to side a little
      G1 X0.4 Y40 Z0.3 F500.0 E30 ; draw 2nd line
      G92 E0 ; reset extruder
      G1 Z1.0 F3000 ; move z up little to prevent scratching of surface

      [gcode_macro END_PRINT]
      gcode =
      G1 Y190 F1500; bring Y up front
      G10 ; set tool offset? or retract?
      G91; Relative Positioning
      G1 Z+10; Move Z up so it doesn’t hit anything
      G1 E-10 F300; Retrack-10
      G90; Absolute Positioning
      G1 X10 Y220 F2000; Move to X10, Y220
      G91
      G1 E-20 F7200
      G1 E-50 F80
      M104 S0; Turn off Extrude (set it to 0)
      M140 S0; Turn off Bed (set it to 0)
      M106 S0; turn off cooling fan
      M84; Disable steppers
      ————————–
      Guten Rutsch ins neue Jahr.

      Gruß Mathias

      • Hallo nochmal,

        danke für die Config. Bis auf den BLT und die damit, wie ich vermute, zusammen hängenden Einstellungen am Stepper Z, sowie den Macros am Ende und dem Auto Homing, ist die Config identisch zu meiner.

        Ich werde in nächster Zeit mal ein wenig den Drucker beobachten, wenn ich dazu komme und Schritt für Schritt die Geschwindigkeit erhöhen. Bei „Standard“-Geschwindigkeit scheint das Probem nicht aufzutreten. Ich melde mich wieder ;D

        Ich wünsche auch einen Guten Rutsch ins neue Jahr

  4. Hallo 🙂
    Ich habe die Anleitung befolgt, die Firmware auch auf dem Ender 3 Pro installiert bekommen- alles lief perfekt bis dahin.
    nach dem ersten mal Status eingeben, erschien die Fehlermeldung wegen der fehlenden Config..
    habe dann den Port ausgelesen und in der cfg eingetragen, alles neu gestartet aber beim Auslesen des Status erhalte ich immer den folgenden Fehler :

    Unable to connect
    Once the underlying issue is corrected, use the
    „FIRMWARE_RESTART“ command to reset the firmware, reload the
    config, and restart the host software.
    Error configuring printer
    Klipper state: Not ready

    Was kann ich machen?

    • Hallo Ben, ein paar Fragen zu deiner Installation.

      Welches Board hast du verbaut . Ver. 1.2 oder Ver. 2.0, da bei 2.0 etwas anders vorgegangen werden.
      Hast du den Raspi mit dem Board verbunden gehabt?

      Gruß Mathias

  5. Hi ich hab doch noch mal eine Frage.. ich hab das alles hinbekommen mit Klipper und OctoPI, ich kann auch problemlos drucken.. wenn der Druck fertig ist, nehme ich das gedruckte Teil vom Druckbett.
    Starte ich jetzt einfach einen neuen Druck, fährt der Drucker zwar in die Startposition – bricht dann aber IMMER ab.
    Erst ein Neustart des gesamten System löst das Problem, dafür muss ich aber dann jedesmal erst wieder aufheizen etc.
    Woran kann das liegen? Ich vermute irgend welche Steuerbefehle am Ende des Drucks..

    • Das Problem hatte ich bei auch. Bei mir lag es an dem Raspi in der Version 2, ich habe jetzt einen Raspi 4 mit 4GB Ram verbaut (habe nur die SD Karte umgesteckt), seitdem habe ich es nicht mehr und kann sofort mit dem nächsten Druck starten.

        • Ich habe einen Freund gefragt, der den Raspi 3b im Einsatz hat, er hat mir mitgeteilt, dass dieses Problem mal sporadisch vorkommt aber nicht jedesmal.

          • Danke für die Rückmeldung, ich spiele mit dem Gedanken die Klipper Firmware wieder gegen Marlin zu tauschen.
            Ich würde gern die Filament-Wechsel Funktion während des Druckens nutzen, um mehrfarbig zu drucken. das geht wohl mit Klipper nicht so einfach. auch wenn Klipper wohl von der Geschwindigkeit her besser zu sein scheint.

  6. Hättest du da nen Guide oder Erfahrung damit, wie man das wieder zurück auf Merlin bekommt – Octoprint würde ich ja trotzdem weiterhin nutzen können.

    • Das weiß ich leider nicht, ich mach den Filamentwechsel bei mir so, das ich auf Pause gehe, das Filament entferne und das andere wieder hinzufüge und danach nehme ich die Pause wieder raus, das funktioniert bei mir recht gut.

      Die Geschwindigkeit unter Klipper ist nicht zu verachten, auch druckt (zumindest bei mir) der Ender 3 Pro wesentlicher sauberer mit der hohen Geschwindigkeit (bis zu 150 stelle ich ein) als mit Marlin.

      • wenn du auf pause gehst, fährt der extruder in die Ausgangsposition? weil wenn er über dem Druckobjekt stehen bleibt wäre das nicht optimal – es würde verkleben bzw bei Farbwechsel ja auch einen Moment dauern bis das neue filament durchläuft

        • Bisher bleibt er bei mir stehen, da ich dann recht schnell das Filamentwechsel habe ich hier bisher keine Probleme gehabt, ich wollte aber mal schauen ob es die Möglichkeit gibt bei Pause Klipper mitzuteilen das der Druckkopf ein wenig in die höhe fährt, das habe ich aber noch nicht umgesetzt bzw. geschaut ob das so möglich ist.

  7. Es ist zum verzweifeln.
    Nachdem ich ein paar Probleme mit der Z-Achse hatte, die ich durch eine dual Axis behebe konnte, habe ich nun Layer shifts in Y-Richtung… Irgendwas stimmt da nicht. Meine Config passt denke ich, an den belts wird es auch nicht liegen, Geschwindigkeit ist nur bei sanften 50…

    • Ich hatte nur shifts, wenn ich mehrere Teile hinter einander drucken wollte, ohne das ich den Drucker ausgeschaltet habe und Octoprint neu gestartet habe. Das kam aber nur manchmal vor und derzeit überhaupt nicht mehr. Das einzige was ich in letzter Zeit geändert habe ist das ich zum einen das Linux auf den aktuellsten Stand gebracht habe und alle Updates für Octoprint und die AddOns eingespielt habe. Das mit der doppelten Z-Achse habe ich auch umgesetzt, das hat bei mir in der Qualität eine Menge gebracht, zusätzlich setze ich Arc Welder zum einen unter Octoprint als auch unter Cura als AddOn ein, vielleicht hilft das, da die Dateien wesentlich kleiner werden und auch die Kurven sehr sauber gedruckt werden. Meine Geschwindigkeit habe ich wie folgt eingestellt. 150 für alles ausser den Außenbereich, für Außen drucke ich dann mit 75-100, damit druckt der Ender 3 Pro bei mir am besten.

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


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