TRONXY X5SA-400 PRO: Klipper mit dem Octopus PRO F429, Treiber TMC2209, 4. Teil

Hier geht es jetzt um die Hardware, – speziell um die Treiberchips. Ich verwende die TMC2209. Dabei sollen die Stärken dieser Treiber möglichst vollständig genutzt werden.

Mittlerweile habe ich Einiges dazugelernt. Deshalb wurde der Beitrag größtenteils umgeschrieben und angepasst. Die erste Anpassung fand in KW46 2022 statt.

Nachtrag vom 24.03.2023: Die hier dargestellten Überlegungen zur Firmware sind prinzipiell richtig, – bedürfen aber teilweise einer Anpassung. Das vollständige printer.cfg und Erklärungen dazu gibt es in Teil 9- Inbetriebnahme.

Ich habe zuerst auf den BigTreeTech-Seiten das Manual für das Octopus Pro gesucht. Das findet man hier. Alle möglichen Verbindungen zu Sensoren, Spannungsversorgungen, Aktoren usw. sind recht gut erklärt. Wie schon bei anderen Boards ist auch hier das Thema TMC2209 nicht ganz so einfach. Deshalb ein paar Grundgedanken.

  1. Wie viele Treiber muss ich eigentlich einsetzen?
    Für X und Y natürlich jeweils einen. Z wird schon mit zwei Steppern angetrieben. Also 2 Treiber? Das Board bietet auch die Möglichkeit beide Z-Stepper an einen Treiber anzuschließen. Wenn ich meiner eigenen Dokumentation zum SKR 1.4 am „alten“ Tronxy glauben darf, habe ich dort je Stepper einen eigenen Treiber genutzt. Das sollte auch hier das Ziel sein. Natürlich ist das auch eine Konfigurationsfrage bei Klipper. Last not least fehlt dann noch der Exturdermotor. Gemäß dieser Zählung kommen wir auf 5. Das Board könnte 8!
  2. In welchem Modus betreibe ich den TMC2209?
    Es gäbe Standalone, UART und SPI. Der TMC2209 läuft im UART-Modus! Da kommen dann auch Begriffe wie microstepping, interpolation, motor current, StealthChop vs Spreadcycle ins Spiel. All das wird dann nämlich durch Software steuerbar. Auch der nächste Punkt ist davon aufgrund StallGuard abhängig.
  3. Baue ich Endstopps ein?
    Nein! Die X- und Y-Achsen sollen mit sensorless Homing arbeiten. Die Z-Achse wird über den BL-Touch gesteuert. Der Extrudermotor benötigt kein Homing.
  4. Die Frage zum Display. Da habe ich mir so ein schönes TFT70 V3.0 von BIGTREETECH gleich dazugekauft und muss nun feststellen, dass ich es gar nicht nutzen kann, wenn ich Klipper wähle. Schade! Vermutlich wird es dann Klipper Screen werden. Aber zunächst sollte ja auch alles ohne Display funktionieren, da ja OctoPi den Drucker steuert.

Für die Konfiguration wird, wie schon beschrieben, die pinter.cfg angepasst. Die hat ja noch eine Grundkonfiguration bis auf die serielle Adresse des Boards.

 

Es geht los mit den grundsätzlichen Angaben und den Informationen zur Erstellung des Kernels:

# This file contains common pin mappings 
# for theBigTreeTech OctoPus PRO.
# To use this config, the firmware should
# be compiled for the STM32F429 with a
# "32KiB bootloader" and 8MHz
# STM32F446 needs 12MHz
# Enable "extra low-level configuration options"
# after running "make", copy the generated
# "klipper/out/klipper.bin" file to a
# file named "firmware.bin" on an SD card
# and then restartthe OctoPus with that SD card.
# See docs/Config_Reference.md for a description of parameters.

Da das schon in den ersten beiden Teilen besprochen wurde, gehe ich hier nicht mehr darauf ein.

[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f429xx_230041001451303439373431-if00
restart_method: command

Auch die Adresse wurde schon besprochen.

[printer]
kinematics: corexy
# Werteauswahl für CoreXY aus Beispielfile example-corexy.cfg
max_velocity: 300
max_accel: 3000
max_z_velocity: 25
max_z_accel: 30

Schon interessanter. Der Typ des Druckers, – der X5SA ist ein CoreXY, wird angegeben. Es gibt im Klipper-Repository ein Beispielfile für den Tronxy. Hier kann man Einiges ablesen.

Jetzt geht es mit der Stepper-Sektion los. Dafür habe ich mir die Daten des verbauten Steppers geholt und als Info mit in die Konfiguration gepackt:

# Stepper Info fuer TRONXY X5SA 400 alle Achsen
# Stepper Typ: SL42STH40-1684A-23
# NEMA17
# Phase Curret 1,68 A
# Number of windigs 4
# Step Angle: 1.8deg
# Full Steps per Rotation 200
# Motor Length: 40mm
# Inductance accuracy: +-20%
# Resistance accuracy: +-10%
# Step angle accuracy: +-5%(full step,not load)
# Temperature rise: 80deg Max(rated current,2 phase on)
# Ambient temperature: -20℃~+50℃
# Insulation resistance: 100MΩ Min,500V DC
# Insultion strength: 500V AC for one minute
# Weight	0.325 kg = 0.7165 lb = 11.4640 oz

Zudem noch die Info, wie ich die Treiber nutzen will.

# XY-Richtung
# Sensorless Homing mit TMC2209

Ab hier wird es richtig spannend. Es geht zunächst mal an die Parameter der X und Y Treiber.

[stepper_x]
#DRIVER0
step_pin: PF13
dir_pin: PF12
enable_pin: !PF14
microsteps: 16
rotation_distance: 40  # laut printer-tronxy-x5sa-pro-2020.cfg
endstop_pin: tmc2209_stepper_x:virtual_endstop
position_endstop: 0
position_max: 220
homing_speed: 50

[tmc2209 stepper_x]
#DRIVER0
uart_pin: PC4
run_current: 1.3
#stealthchop_threshold: 0
driver_SGTHRS: 30
diag_pin: ^PG6

#driver_SGTHRS: 0
#   Set the given register during the configuration of the TMC2209
#   chip. This may be used to set custom motor parameters. The
#   defaults for each parameter are next to the parameter name in the
#   above list.
#diag_pin:
#   The micro-controller pin attached to the DIAG line of the TMC2209
#   chip. The pin is normally prefaced with "^" to enable a pullup.
#   Setting this creates a "tmc2209_stepper_x:virtual_endstop" virtual
#   pin which may be used as the stepper's endstop_pin. Doing this
#   enables "sensorless homing". (Be sure to also set driver_SGTHRS to
#   an appropriate sensitivity value.) The default is to not enable
#   sensorless homing.

In den BTT-Dokumenten im GITHUB findet man ein pdf mit dem PIN-Layout. Die wichtigsten Teile stelle ich hier bereit.

Es sind diverse Parameter einzugeben und ein paar davon werde ich erst später genauer definieren können. Speziell die Endpositionen und Maximalpositionen, sowie die Geschwindigkeiten und Beschleunigungen. Was man aber schon jetzt sicher eingeben kann, sind die ganzen PINs. Ein Ausrufezeichen vor einer Anschlussbezeichnung kennzeichnet eine Invertierung. Ein ^ kennzeichnet einen Pull-Up-Widerstand und eine Tilde (~) kennzeichnet einen Pull-Down-Widerstand. Aus der Dokumentation von Klipper und des Octopusboards kann man das meist ermitteln.

Ich habe die Einstellung der Mikroschritte bei 16 belassen. Allgemein wird im Internet davon ausgegangen, dass höhere Werte keinen Gewinn bringen, aber gegebenenfalls das Drehmoment verschlechtern könnten.

Neu wird für viele der Begriff rotation_distance sein. Seit einiger Zeit ersetzt er den alten Step-basierenden Ausdruck. Es soll, laut Klipperdoku, eine Erleichterung sein, da man jetzt nicht mehr umrechnen muss. Das passiert nun intern.

Neben der Grundkonfiguration des Steppers [stepper_x] ist noch die spezielle Treiberkonfiguration für den UART-Betrieb aufzubauen [tmc2209 stepper_x]. Wichtig ist hier der richtige UART-Pin. Die Stromstärke (run_current] habe ich von meinem alten Drucker abgeschrieben.

Die wirkliche „Magie“, – sensorless homing, wird durch Angabe des DIAG-Pins in Kombination mit der Empfindlichkeitseinstellung SGTHRS ermöglicht. Dadurch entsteht dann auch der virtuelle Endstop, der weiter oben in der Basiskonfiguration des Treibers eingetragen wird: tmc2209_stepper_x:virtual_endstop

Die Konfiguration für Y basiert auf den gleichen Überlegungen:

[stepper_y]
#DRIVER1
step_pin: PG0
dir_pin: PG1
enable_pin: !PF15
microsteps: 16
rotation_distance: 40
endstop_pin: tmc2209_stepper_y:virtual_endstop
position_endstop: 0
position_max: 250
homing_speed: 50

[tmc2209 stepper_y]
#DRIVER1
uart_pin: PD11
run_current: 1.3
#stealthchop_threshold: 0
driver_SGTHRS: 30
diag_pin: ^PG9

 

 

Die Z-Achse soll zwar kein Sensorless Homing nutzen, aber auch hier gibt es Besonderheiten. Zum Einen wird die Z-Achse über zwei unabhängige Stepper bewegt und zum anderen kommt ein BL-Touch (3D-Touch) zum Einsatz.

Unabhängige Stepper sollen es deshalb sein, weil dadurch die Stärken einer Bed-Abtastung optimal genutzt werden können. Damit können sich die beiden Antriebe für die Druckbetthöhe nicht nur parallel sondern auch unabhängig voneinander bewegen. Das geht aber eben nicht, wenn sie beide am gleichen Treiber hängen. Ich benutze Treiber 2 und Treiber 4. Wenn an einer Achse mehr als ein Motor werkelt, gibt man einen Index hinzu.

[stepper_z]
#DRIVER2
step_pin: PF11
dir_pin: PG3
enable_pin: !PG5
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
# position_endstop: bei BL-Touch nicht in Gebrauch
position_max: 200
homing_speed: 12
second_homing_speed: 1

[tmc2209 stepper_z]
#DRIVER2
uart_pin: PC6
run_current: 0.8
#stealthchop_threshold: 0
#driver_SGTHRS: 0
#diag_pin: kein Sensorless Homing deshalb nicht aktiv


[stepper_z1]
#DRIVER4
step_pin: PF9
dir_pin: PF10
enable_pin: !PG2
microsteps: 16
rotation_distance: 8
# endstop_pin: probe:z_virtual_endstop   muss wohl nur beim primären Z definiert werden
# position_endstop: bei BL-Touch nicht in Gebrauch
position_max: 200
homing_speed: 12
second_homing_speed: 1

[tmc2209 stepper_z1]
#DRIVER4
uart_pin: PF2
run_current: 0.8
#stealthchop_threshold: 0
#driver_SGTHRS: 0
#diag_pin: kein Sensorless Homing deshalb nicht aktiv

Der Diagnose-PIN ist nicht aktiv, da Sensorless Homing nicht aktiv ist. Dadurch braucht auch SGTHRS, die Empfindlichkeit nicht angegeben zu werden. Trotzdem finden wir auch hier beim stepper_z einen virtuellen Endstop. Der kommt durch die Definition des BL-Touch hinzu.

# 3D-Touch V3.0 an Octopus (links nach rechts)
# GND - Grün - GND, 5V - Rot - 5VDC, S (Control) - Gelb - PB6
# GND - Schwarz - GND, Z- (Sensor) - Weiß - PB7
# Obiges speziell für meine Situation, evtl. anpassen!

[bltouch]
sensor_pin: ^PB7
#   Pin connected to the BLTouch sensor pin. Most BLTouch devices
#   require a pullup on the sensor pin (prefix the pin name with "^").
#   This parameter must be provided.
control_pin: PB6
#   Pin connected to the BLTouch control pin. This parameter must be
#   provided.
# If the BL-Touch will be used to home the Z axis then set endstop_pin: probe:z_virtual_endstop

Für den BL-Touch gibt es übrigens auf dem Octopus Pro Board einen eigenen Anschluss.

Anschlüsse am 3D-Touch
Anschlüsse am 3D-Touch mit eingestecktem Kabel
3D-Touch-Stecckplatz auf dem Octopus Pro Board
Rückseite der Octopus Pro Platine

Jetzt fehlt als letzter Treiber noch der Extruder. Der kommt an Anschluss 3.

[extruder]
#DRIVER3
step_pin: PG4
dir_pin: PC1
enable_pin: !PA0
heater_pin: PA2 # HE0
sensor_pin:  PF4 # T0
microsteps: 16
rotation_distance: 33.500   # das wird noch zu überprüfen sein !!
#   Distance (in mm) that the axis travels with one full rotation of
#   the stepper motor (or final gear if gear_ratio is specified).
#   This parameter must be provided.
nozzle_diameter: 0.400
filament_diameter: 1.750
# komplette PID-Daten laut printer-tronxy-x5sa-pro-2020.cfg
sensor_type: ATC Semitec 104GT-2
control: pid
pid_Kp: 18.831
pid_Ki: 0.821
pid_Kd: 108.044
min_temp: 0
max_temp: 290
min_extrude_temp: 170
#   The minimum temperature (in Celsius) at which extruder move
#   commands may be issued. The default is 170 Celsius.

[tmc2209 stepper_extruder]
#DRIVER3
uart_pin: PC7
run_current: 1.1
#stealthchop_threshold: 0
#driver_SGTHRS: 0
#diag_pin: 

Das ist jetzt nichts Besonderes mehr, nachdem die Erläuterungen von oben bekannt sind. Einen Endstop gibt es beim Extruder natürlich nicht. Die max_temp für das Hotend richtet sich natürlich nach den persönlichen Bedürfnissen, sprich: Welches Filament soll gedruckt werden. Zudem gibt es natürlich Grenzen des verbauten Hotends.  Damit keine Extrusion bei kaltem Hotend stattfindet und sich der Antrieb langsam ins Filament frisst, gibt es noch die min_extrude_temp. Das ist die unterste Temperatur bei der die Firmware eine Bewegung des Extruder-Motors zulässt.

An dieser Stelle gibt es mal wieder eine kleine Pause. Im nächsten Abschnitt kommen dann noch Konfigurationen für das Druckbett.

5 1 vote
Article Rating
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments