Warum überhaupt

Auf das Thema gestoßen bin ich, da ich allgemein schon die Überlegung hatte, das Mainboard an meinem Drucker zu wechseln. Hauptsächlich für eher unwichtigere Themen wie einen Thermistor-Eingang für die Chamber-Temperatur und die Möglichkeit das Licht/den Abzuglüfter per Klipper schalten zu können. Für den bisschen Spielkram natürlich total überzogen. Aber, ich hatte auch noch stellenweise Probleme mit dem Y-Stepper. Immer wieder hatte ich teilweise Layer-Shifts in der Y-Richtung. Möglichkeit 1 wäre jetzt, die Spannung für die einzelnen Stepper am Mainboard über einen Poti nachzuregeln. Ist aber ein ziemliches gefummel und macht auch nicht wirklich Spaß, grade wenn man das mehrfach machen muss. Drucker aus der Einhausung raus, Boden aufschrauben, mit Multimeter am Poti drehen, alles wieder zurück. Ne danke, das muss besser gehen.

Die Theorie

Mit etwas Recherche zum Thema habe ich schon gefunden, das am normalen Ender 3 der UART-Mod quasi schon zum Inventar gehört. Auch, das die Beschriftung des SD-Slots einen Hinweis auf die verbauten Stepper Driver gibt. Beim Ender 3 S1 Mainboard scheinen das hauptsächlich TMC2208 zu sein, erkennbar an einem T8 Aufkleber auf dem SD-Slot. Als Bezeichnung ist auf meinem Mainboard nur CR-FDM-v24S1_301 angegeben. Auf Reddit habe ich auch schon einen Post zum Thema gefunden, das es beim S1 auch funktionieren soll.

Die Umsetzung

Eine Empfehlung vorab, da ich definitiv zu lang gewartet hab damit. Tut euch den Gefallen und baut das Board dazu aus. Ich war anfangs zu Faul, damit habe ich eins der Pads abgerissen, auf die die Stepper Verkabelung laufen soll. Zum Glück sind die UART-Pins aber auch auf anderen Widerständen vorhanden. Das wurde zwar auf Reddit auch erwähnt, aber nicht klar, welche damit gemeint sind. Also habe ich mir das einmal selber raus gemesesen, mit einem Pinout des TMC2208 als Referenz.

Der UART-Pin des Drivers wird sowohl an 1 als auch 2 durchgeschleift. Sollte also bei euch auch ein Problem mit dem Pad bei 2 auftreten, könnt ihr auch das Pad auf 1 verwenden. Wichtig ist hier nur, auf der Seite zu löten, die näher am Driver liegt.

Pins Treiber

Damit Klipper die Pins auch ansprechen kann, müssen wir diese irgendwie an den MCU des Ender Mainboards weitergeben. Da das originale Display mit Klipper sowieso nicht mehr funktioniert, lassen sich die Pins des Display Anschlusses dafür verwenden. Diese werden wie folgt belegt, SD-Slot links unten

• E (lila) • • Z (blau) X (gelb) Y (grün) • • •

Display Pins

So sieht das ganze dann wieder verbaut aus

Mainboard verbaut

Konfiguration

Als letzten Schritt muss noch Klipper wissen, über welche Pins welcher Stepper Driver angesteuert werden soll. Hier habe ich auch einmal die Grundwerte aus dem Reddit Post übernommen, aber in meinem Fall die Stromstärke schon etwas angepasst. Der Block muss dann in eure printer.cfg


######### TMC Stepper UART #########

[tmc2208 stepper_x]
uart_pin: PA13
sense_resistor: 0.150
run_current: 0.6
interpolate: True
stealthchop_threshold: 999999

[tmc2208 stepper_y]
uart_pin: PA14
sense_resistor: 0.150
run_current: 0.8
interpolate: True
stealthchop_threshold: 999999

[tmc2208 stepper_z]
uart_pin: PB1
sense_resistor: 0.150
run_current: 0.8
interpolate: True
stealthchop_threshold: 999999

[tmc2208 extruder]
uart_pin: PA3
sense_resistor: 0.150
run_current: 0.6
interpolate: True
stealthchop_threshold: 999999

Test

Um zu prüfen ob das ganze geklappt hat, könnt ihr dann die Stepper mit folgendem Befehl in der Konsole abfragen DUMP_TMC STEPPER=*Bezeichnung*. Der Output sollte dann in etwa so aussehen


// ========== Write-only registers ==========
// IHOLD_IRUN: 00081414 ihold=20 irun=20 iholddelay=8
// TPWMTHRS: 00000000
// TPOWERDOWN: 00000014 tpowerdown=20
// ========== Queried registers ==========
// GCONF: 000001c0 pdn_disable=1 mstep_reg_select=1 multistep_filt=1
// GSTAT: 00000001 reset=1(Reset)
// IFCNT: 00000006 ifcnt=6
// OTP_READ: 0000000f otp_fclktrim=15
// IOIN@TMC220x: 2000014d enn=1 ms1=1 ms2=1 pdn_uart=1 sel_a=1(TMC220x) version=0x20
// FACTORY_CONF: 0000000f fclktrim=15
// TSTEP: 000fffff tstep=1048575
// MSCNT: 00000018 mscnt=24
// MSCURACT: 00f40024 cur_a=36 cur_b=244
// CHOPCONF: 34030050 hstrt=5 tbl=2 vsense=1 mres=4(16usteps) intpol=1 dedge=1
// DRV_STATUS: c0140000 cs_actual=20 stealth=1 stst=1
// PWMCONF: c80d0e24 pwm_ofs=36 pwm_grad=14 pwm_freq=1 pwm_autoscale=1 pwm_autograd=1 pwm_reg=8 pwm_lim=12
// PWM_SCALE: 00000017 pwm_scale_sum=23
// PWM_AUTO: 000e0024 pwm_ofs_auto=36 pwm_grad_auto=14

weiteres Troubleshooting

Bis zum Punkt oben dachte ich, alles wäre gut und das würde so laufen wie es soll. Falsch gedacht, der Dump des stepper_z lief zwar problemlos, aber drucken, bzw. überhaupt homen konnte ich trotzdem nicht. Ich wurde jedes mal hiervon begrüßt: ! Unable to read tmc uart 'stepper_z' register DRV_STATUS Also den Drucker wieder raus aus der Einhausung, nochmal komplett zerlegt und alles 5x geprüft. Verkabelung vom Mainboard zum Stepper war ok. UART zum Display-Pin augenscheinlich auch. Ich hab dann viel mit den Microsteps, Stealthchop an/aus, Interpolation an/aus rumgespielt. Stellenweise hab ich den Drucker dann auch dazu gebracht erfolgreich alle 3 Achsen zu homen, nach 2-3 Minuten kam der Fehler aber wieder. Nachdem ich dann nochmal die Verkabelung der UART Pins geprüft hab, ist mir der Fehler endlich aufgefallen. Die Lötstelle vom Kabel für den Z-Driver war nicht wirklich gut.