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.
- 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! - 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. - 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. - 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.
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.