Yamies Ender 3 bekommt Klipper

Yamie

fpv-racing-forum Flüchtling
#1
Wie die Überschrift es schon sagt, habe ich mich mal wieder mit Klipper beschäftigt. Dafür gab es zwei Gründe, zum einem war ich neulich nochmal tief in das Thema Ghosting eingetaucht und wollte um das endlich mal richtig auszuloten auch dem Klipper Inputshaper mal versuchen. Und zum anderen hatte ich nun endlich ein richtig gutes Display für den PI bekommen um das alte TFT35 vom SKR Mini abzulösen.

Für mein Klipper Pi musste ich dann die Position verändern, da das neue Display direkt auf dem Pi sitzen würde.




https://www.amazon.de/gp/product/B07PLXP77Z

Bei dem Waveshare 5.5inch handelt es sich um ein 1920x1080 AMOLED Touch Display, welches für einen RP4 auch schon mit den richtigen Adaptern kommt, die für den RP3 sind aber auch dabei.

Der RP4 bekommt bei mir auch wieder diesen Kühler, der hat sich auch schon beim alten RP3 bewiesen.


https://www.amazon.de/gp/product/B07JGNF5F8

Zum Anschließen noch ein neues gewinkeltes USB Kabel, das war mir immer ein Dorn im Auge, sowie für den Pi einen 90° USB A Adapter.


https://www.amazon.de/gp/product/B00GJLV512


https://www.amazon.de/gp/product/B0734JC4J2


Der neue Pi kommt an die Stelle wo zuvor das alte Touch war.
1663282399271.png
Dazu habe ich ein Gehäuse für Pi mit Touch und einen Halter gezeichnet, wir dann einfach zusammen an den Drucker geschraubt.

1663282439256.png

Das Kabel zur Kamera musste verlängert werden, hier habe ich einfach ein neues Flachbandkabel auf Länge geschnitten und noch schön verpackt ;)

1663282489601.png

Außerdem wurden einige Kabel aufgeräumt, erneuert und korrigiert.
Der alte Pi wurde entfernt, zusammen mit dem alten TFT.

1663282531551.png
1663282627192.png
Das Display wird aufgeschraubt und bekommt einen USB Adapter für Touch und einen HDMI fürs Signal.
Muss danach noch im OS des Pis aktiviert werden, das funktioniert aber sofort entsprechend der Anleitung.
5.5inch HDMI AMOLED - Waveshare Wiki

1663282637040.png
1663282651137.png

Damit der Pi Strom bekommt habe ich auf einen USB C Lötstecker einfach einen XT30 aufgelötet, an den kommt dann das Kabel was hinten vom 5V BEC kommt. Bei der Gelegenheit habe ich den 5V BEC noch getauscht und die Kabel erneuert.

1663282717624.jpeg
1663282743871.jpeg

Einige Stunden später ist alles verlegt und sieht ordentlich aus.

1663282761572.png
Der neue gewinkelte Mini USB gefällt mir auch deutlich besser :)

1663282784919.png
Für den Inputshaper führe ich schon mal ein Kabel vom Pi raus, hier I2C mit 5V und GND.
So komme ich auch in Zukunft relativ einfach dran, falls ich den Prozess wiederholen muss.

1663284088941.png

Für die Accelerometer hatte ich vorab Mounts designed und gedruckt.

1663282868021.png
1663282879084.png

Separat für X und Y, ist halt ein Bettschubser.


Genutzt habe ich das MPU-6050: https://www.amazon.de/gp/product/B07NP2WF7J

Es gab früher wohl noch Probleme damit und I2C, heute funktioniert das aber alles gut und wie in der Doku beschrieben.
https://www.klipper3d.org/Measuring_Resonances.html



Soviel erstmal zur Hardware, nun muss aber die Software auch laufen....

Ich habe mich dabei erstmal für das fertige Klipper Mainsail Moonraker Image durch den RP Imager entschieden, die Einrichtung lief erstmal Problemlos :)

Da ich dieses mal auf nichts verzichten wollte habe ich mir vorgenommen Klipper vollständig mit allen Funktionen die ich von meiner Marlin Octoprint Kombi kannte zu übernehmen.
Das war allerdings alles andere als einfach und hat mich mehrere Abende gekostet.
Die Doku ist teilweise nicht sehr vollständig, es fehlen Kommentare und manches ist schwierig zu finden, hat sich im Laufe der Jahre geändert etc. Die Community ist deutlich kleiner und das spürt man auch. Hier war mein etwas älteres SKR Mini E3 V1.2 auf einmal eine Rarität. Informationen musste man sich sehr Mühsam zusammensuchen.

Wie schonmal im März geschrieben waren mir diese Features wichtichtig:
  • Der 4.7MΩ Dyze Design Sensor
  • BLT ABL Sensor
  • S-Curve Acceleration
  • Babystepping
  • Linear Pressure Control
  • G2/G3 Arc Support
  • Sensorless Homing
  • Webcam Support
  • Touch am Drucker
Davon wird manches sofort erfüllt, anderes gar nicht.
Vorab, Arc Welder G2/G3 gibts nicht, Klipper kann keine Arcs, es gibt ein Plugin, welches diese wieder in Linearbewegungen umrechnet.
Ist kein Beinbruch, aber das herauszufinden hat etwas Zeit gekostet. Auch manche anderen G Codes werden nicht vorab unterstützt oder erst später durch Makros, dazu später mehr.

Pressure Advance, das Gegenstück zu Linear Advance ist 1 zu 1, es bedarf nur anderer Cura Plugins, die Werte sind soweit ich das weiß aber identisch, also muss ich nichts neu justieren. Auch Flow und alle anderen Materialabhängigen Werte blieben identisch.

Acceleration Controll ist bei Klipper besser durch den Input Shaper, darauf gehe ich auch nochmal separat ein.

Sensorless Homing geht, war aber eine schwere Geburt, vor allem wegen der Fehlenden Dokumentation zu meinem "exotischen" Board....

Jedoch bin ich nach einigem Suchen auf dieses Pinout gestoßen, wo die für Klipper relevanten Pins beschrieben sind!
1663283560074.png

Damit kann man dann endlich alle Pins in der Klipper Config beschriften.
Das half dann auch den ABL bzw BLT zum Laufen zu bekommen.

Ebenfalls etwas Mühe war mein Temp Sensor, da dieser bis 500°C aber vorallem zuverlässig um 300°C messen kann ist es etwas unüblicher. Klipper kannte den nicht und ich musste herausfinden wie und mit welchen Werten ich diesen hinterlegen konnte.

Code:
[thermistor  T-D500]
temperature1: 200
resistance1: 8000
beta: 5300
Der Webcam Support war wieder recht einfach, sehr ähnlich zu dem bei Octoprint.
Den RP Cam Support in der Config aktivieren und in der webcam.txt:

Code:
camera_raspi_options="-x 1280 -y 720 -fps 10"
Und nun noch das Tochscreen am Drucker, hierbei habe ich über den kiauh Installer KlipperScreen installiert, den Tipp hatte ich noch von @un!t :)
GitHub - th33xitus/kiauh: Klipper Installation And Update Helper
GitHub - jordanruthe/KlipperScreen: GUI for Klipper

Hier meine Config dazu, in erster Linie Preheat temps:

Code:
[printer Yamie Ender]
[preheat Cooldown]
gcode: M107
[preheat ColdPull]
extruder: 140
heater_bed: 0
[preheat PLA]
extruder: 200
heater_bed: 70
[preheat TPU]
extruder: 220
heater_bed: 50
[preheat TPUx]
extruder: 230
heater_bed: 70
[preheat CPE]
extruder: 260
heater_bed: 100
[preheat PC]
extruder: 270
heater_bed: 130
[preheat PA]
extruder: 290
heater_bed: 130
Klipper Screen funktioniert gut mit dem von mir gewählten Display und sieht gut aus.
Es gibt verschiedene Designs aber alle erfüllen meine Ansprüche und haben die Funktionen die ich per Touch am Drucker brauche.

Was ich nun nicht mehr kann, ist von einer SD Karte drucken, das habe ich aber eh nie.
Wie früher auch, habe ich in Cura nun ein Plugin, nicht nur für die Klipper eigenen Settings, auch für Moonraker, um meine Files direkt aus dem Slicer an den Drucker zu schicken.

GitHub - jjgraphix/KlipperSettingsPlugin: Ultimaker Cura plugin to enable various settings and features specific to Klipper firmware.
GitHub - emtrax-ltd/Cura2MoonrakerPlugin: Ultimaker Cura 2 Mooraker Upload Plugin

1663284313679.png
1663284323970.png

An meinem Workflow musste sich also nichts ändern.
Auch das Mainsail Web Interface konnte ich mir sehr ähnlich meinem OctoPrint Interface gestallten:

1663284044100.png

Als theoretisch alles Durckbereit war wollte ich auch schon loslegen, noch bevor ich den Inputshaper installiert hätte.
Aber hier gingen die Probleme dann weiter, erstmal herausfinden, wie ich meine alten Makros für Start, End und Abort Print übernehme.

Dazu gab es viele Videos usw....
Wichtig ist aber auch, dass sich Namen teilweise geändert haben und wichtige Hinweise manchmal einfach übersprungen wurden.
Es fehlte mindestes immer ein Schritt.
Hier aber nun meine fertigen Makros:

Code:
[gcode_macro PRINT_START]
gcode:
  {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
  {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %}
  M140 S{BED_TEMP}
  M104 S{EXTRUDER_TEMP}
  G90
  G28
  BED_MESH_CALIBRATE
  G92 E0
  M190 S{BED_TEMP}
  M109 S{EXTRUDER_TEMP} 
  G1 Z6.5 F3000 ;
  G1 X3 Y70 Z0.4 F5000.0
  G1 E10 F500;
  G1 X3 Y190.0 Z0.4 F1500.0 E23
  G1 X3.3 Y190.0 Z0.4 F5000.0
  G1 X3.3 Y70 Z0.4 F1500.0 E36
  G92 E0
  M117 Druck in Arbeit!


[gcode_macro PRINT_END]
gcode:
  M140 S0
  M104 S0
  M106 S0
  G91
  G1 E-15 F1000
  G92 E0
  G1 Z20 F3000
  G90
  G1 X0 Y200 F2000
  M84
  M117 Abgeschlossen!


[gcode_macro CANCEL_PRINT]
gcode:
  M106 S0
  G91
  G1 E-15 F1000
  G92 E0
  G1 Z20 F3000
  G28 X Y;
  G90
  G1 X0 Y200 F2000
  M84
  M117 Abgebrochen!
Wichtig auch noch, dass bis auf CANCEL_PRINT Beide in Cura hinterlegt werden müssen...
1663284345998.png

Mit weitergabe der Variablen, so zB für Start: PRINT_START BED_TEMP={material_bed_temperature_layer_0} EXTRUDER_TEMP={material_print_temperature_layer_0}

Es waren immer wieder solche Details die mich lange aufhielten und viel zum Suchen zwangen...

So eben im besonderen Sensorless Homing, und ABL, hier die Pins richtig zu belegen war nicht nett : /
Hier aber einmal meine ganze Config:

https://www.klipper3d.org/Config_Reference.html#micro-controller-configuration

# This file contains common pin mappings for the BIGTREETECH SKR mini
# E3 v1.2. To use this config, the firmware should be compiled for the
# STM32F103 with a "28KiB bootloader" and USB communication. Also,
# select "Enable extra low-level configuration options" and configure
# "GPIO pins to set at micro-controller startup" to "!PC13".
[include mainsail.cfg]
[include macros.cfg]
[include accel.cfg]
[mcu rpi]
serial: /tmp/klipper_host_mcu
[mcu]
# ls /dev/serial/by-id/*
serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_31FFD6054242363125682457-if00
baud: 250000
[input_shaper]
shaper_freq_x: 44.4
shaper_type_x: ei
shaper_freq_y: 32.0
shaper_type_y: mzv
[printer]
kinematics: cartesian
max_velocity: 250
max_accel: 3000
max_z_velocity: 15
max_z_accel: 100
[stepper_x]
step_pin: PB13
dir_pin: !PB12
enable_pin: !PB14
microsteps: 16
full_steps_per_rotation: 400
rotation_distance: 40
#endstop_pin: ^PC0
endstop_pin: tmc2209_stepper_x:virtual_endstop
position_endstop: -4
position_min: -4
position_max: 235
homing_speed: 40
homing_retract_dist: 0
[tmc2209 stepper_x]
uart_pin: PB15
diag_pin: PC0
run_current: 0.800
stealthchop_threshold: 5000
driver_SGTHRS: 154
[stepper_y]
step_pin: PB10
dir_pin: !PB2
enable_pin: !PB11
microsteps: 16
full_steps_per_rotation: 400
rotation_distance: 40
#endstop_pin: ^PC1
endstop_pin: tmc2209_stepper_y:virtual_endstop
position_endstop: -3
position_min: -3
position_max: 235
homing_speed: 40
homing_retract_dist: 0
[tmc2209 stepper_y]
uart_pin: PC6
diag_pin: PC1
run_current: 0.780
#sense_resistor: 0.110
stealthchop_threshold: 5000
driver_SGTHRS: 146
[stepper_z]
step_pin: PB0
dir_pin: PC5
enable_pin: !PB1
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop # For bltouch
position_min: -2
position_max: 200
[tmc2209 stepper_z]
uart_pin: PC10
run_current: 1.300
stealthchop_threshold: 999999
[thermistor T-D500]
temperature1: 200
resistance1: 8000
beta: 5300
[extruder]
step_pin: PB3
dir_pin: !PB4
enable_pin: !PD2
microsteps: 16
rotation_distance: 7.619
nozzle_diameter: 0.400
filament_diameter: 1.750
min_extrude_temp: -100
heater_pin: PC8
sensor_type: T-D500
sensor_pin: PA0
#control: pid
#pid_Kp: 20
#pid_Ki: 1.7
#pid_Kd: 59
min_temp: -100
max_temp: 500
[verify_heater extruder]
check_gain_time: 60
[tmc2209 extruder]
uart_pin: PC11
run_current: 0.660
stealthchop_threshold: 999999
[heater_bed]
heater_pin: PC9
sensor_type: ATC Semitec 104GT-2
sensor_pin: PC3
#control: pid
#pid_Kp: 28.000
#pid_Ki: 5.300
#pid_Kd: 98.000
min_temp: -100
max_temp: 180
[verify_heater extruder]
check_gain_time: 240
[fan]
pin: PA8
########################################################################
######################## ABL ################################
########################################################################
[bed_mesh]
speed: 100
horizontal_move_z: 4
mesh_min: 60, 60
mesh_max: 175, 175
probe_count: 3, 3
[bltouch]
sensor_pin: ^PC2
control_pin: PA1
pin_up_touch_mode_reports_triggered: False
x_offset: -17.3
y_offset: -6
#z_offset: 0
speed: 10
sample_retract_dist: 4.0
pin_move_time: 0.68
samples: 2
[safe_z_home]
home_xy_position: 134, 123 # Change coordinates to the center of your print bed
speed: 100
z_hop: 10 # Move up 10mm
z_hop_speed: 10

########################################################################
######################## Other ################################
########################################################################


[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=<GND>,
EXP1_2=PB6, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB7, EXP1_10=<5V>
# See the sample-lcd.cfg file for definitions of common LCD displays.
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bltouch]
#*# z_offset = 1.040
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# -0.080000, -0.052500, -0.055000
#*# -0.012500, -0.005000, -0.026250
#*# 0.020000, 0.041250, 0.025000
#*# x_count = 3
#*# y_count = 3
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = lagrange
#*# tension = 0.2
#*# min_x = 60.0
#*# max_x = 175.0
#*# min_y = 60.0
#*# max_y = 175.0
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 68.802
#*# pid_ki = 2.520
#*# pid_kd = 469.570
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 22.643
#*# pid_ki = 1.348
#*# pid_kd = 95.102

Auch das ermitteln der driver_SGTHRS war nicht ganz so einfach.
Bei Marlin wird die FW aufgesetzt, für meine Changes habe ich ein Dokument um diese automatisch zu übernehmen, wenn eine neue Version kommt, danach wird die FW geflasht. Ich weiß dass das Aufsetzten nicht für jeden einfach ist, aber wenn das einmal richtig eingestellt ist, und die Dokumentation ist bedeutend besser als bei Klipper, dann ist es immer das selbe :)
Auch die größere Community um Marlin macht vieles einfacher, vor allem das Finden von Informationen.
Zu Klipper heißt es, die FW ist ganz einfach, und das stimmt auch, danach muss man sich aber wie bei Marlin auch mit Config Files rumschlagen. Und hier gibt es einen Unterschied. Wenn Marlin geflasht ist, kann man alle Parameter live in der Console ändern und anpassen, bis es passt. Bei Klipper muss man die Config ändern, die FW neu laden und dann wieder testen. Ich empfand das als deutlich umständlicher als bei Marlin. Es mag sein, dass es für Default Umbauten schneller ist Klipper zu installieren als Marlin. Aber am Ende ist doch alles das selbe. Beides ist im Detail umständlich.

Ich bin jedenfalls froh, dass nun alles läuft.
Die meisten meiner Maschinenparameter konnte ich direkt übernehmen

Nun aber zum Spaß, dem Input Shaper, und wahrscheinlich meinem Hauptgrund für den Umbau.
Denn nachdem ich den Drucker fertig hatte und alles wieder lief, war alles wie zuvor. Hier hatte ich ein paar Testfiles gedruck, also Marlin + Octo vs. Klipper ohne IS. Da tat sich wirklich nichts.
Deswegen musste der IS etwas bringen, sonst wäre alles für die Katz...

1663285155687.jpeg

Hierbei war ich auch der Anleitung gefolgt, und ausser ein paar üblicher Schwierigkeiten mit Linux und der I2C Baudrate klappte alles problemlos.

https://www.klipper3d.org/Measuring_Resonances.html
https://www.klipper3d.org/RPi_microcontroller.html

Erst wurde die X Achse gemacht.
1663285283893.jpeg
1663285327021.png
(hier ist Y = X weil das so verbaut wurde ^^)

Dann die Y Achse.
1663285296526.jpeg
1663285365198.png

Und nachdem ich die Werte übernommen hatte, habe ich meinen RingingTest gedruckt.
Nun mit 3000er Accel nicht mehr 1000.
1663285402757.jpeg

Und ja, das Ergebnis ist deutlich besser, viel besser als alles was ich in Marlin geschafft habe.
1663285433984.png
(Klipper + IS)


(Marlin Tests)

Nun ist das hier auch ein Extrembeispiel und bei den Meisten Drucken wird man kaum einen Qualitätsunterschied bemerken.
Die höhere Accel reduziert die Druckzeit auch noch etwas. Bei einem Benchy ging die Zeit bei selben Settings von 1:18 auf 1:05 runter. Minimal mach das schnellere Bettleveling da auch was. Bei meinem Ringing Test waren es nur 2 Minuten, aber der dauert auch nur 20 min :)

Mein Ziel war es aber auch nicht unbedingt schneller zu drucken. Die Accel ist zwar höher, aber an der Geschwindigkeit habe ich nichts verändert. Diese ist bei mir auf die Filamente und die Stabilität getuned. Natürlich könnte ich schneller drucken, vielleicht auch ohne Qualität zu verlieren, aber nicht ohne Stabilität zu verlieren. Hier muss auch je nach Druckteil immer mal wieder angepasst werden.
Was jedoch die Reduktion beim Ghosting anbelangt bin ich sehr zufrieden!

1663285664956.png Hier noch eine Reihe von Benchys, Links Marlin Octo, Mitte Klipper, Rechts Klipper + IS

1663285708953.png
Und nochmal direkt Marlin vs. Klipper + IS

Ich kann da quasi keine Unterschiede feststellen. Aber ein Benchy ist auch nicht so Ghosting anfällig ;)
Btw, die Schornsteine hab ich abgebrochen um ein Gefühl für die Stabilität zu bekommen. Da hat sich nichts verändert.


Alles in allem bin ich zufrieden und werde es nun erstmal auf Klipper lassen, bis ich vielleicht ein Problem bekomme....
Da ich die FW für Marlin fertig habe und sonst nur die SD Karte im Pi wechseln muss ist auch ein Wechsel zurück nun sehr schnell gemacht. Lediglich das Anschließen des TFT fällt noch zusätzlich an.


Ich hoffe meine Reise kann dem ein oder anderen helfen.
Insbesondere auf der Suche nach den Pins vom SKR Mini E3 V1.2
 

Anhänge

un!t

Well-known member
#2
Willkommen in der Zukunft (ja absoluter Klipper Fanatiker 😅)!

Wenn du noch Fragen offen hast, dann schreib mir, ich habe noch einen guten Draht zu der mainsail crew und habe schon so einige Probleme lösen können.

Gerade wenn du komplexe Makros machen willst, hilft jinja2 ungemein, damit kannst du alles erschlagen, was du dir ausdenken kannst.
 
FPV1

Banggood

Oben Unten