14. Mai 2018

TMC2130 Steppertreiber in Marlin integrieren

Nach längerer Zeit geht es heute mal weiter mit den TMC2130 und deren Integration per SPI in Marlin. Diese Anleitung bezieht sich auf die Integration ins Ramps/MKS Gen1.4 Board. Andere Boards sind natürlich auch möglich. Es müssen nur die Pins angepasst werden. Pro TMC2130 Treiber wird 1 freier Pin benötigt. Vorteil bei den TMC2130 Treibern ist das man die Vref nicht mehr per Poti einstellen muss und Marlin den Motor automatisch vom Stealthshop in den Spreadcycle Modus schalten kann, je nach benötigter Geschwindigkeit. Außerdem ein sehr nettes Feature ist das Sensorless Homing. Damit benötigt man keine Endstops mehr. Ihr solltest löten können oder jemanden kennen der das für euch erledigen kann. Ihr benötigt folgende Dinge:


TMC2130 Steppertreiber 
Passende Kühlkörper 
Dupont/Jumper Kabel female - female 
Schrumpfschlauch


Als erstes sollten alle Stiftleisten am TMC2130 verlötet werden. Anders als bei den TMC2208 muss diesmal keine Lötbrücke geschlossen werden. Dies bezieht sich nur auf die TMC2130 von Watterott. Diese laufen von Haus aus im SPI Modus. Bei den China TMC2130 von FYSETC zb. müssen 2 Brücken geschlossen und eine geöffnet werden da sie im Autark Modus laufen und so über SPI nicht ansprechbar sind.  Anleitung zu denen folgt bald.









Nun gehts am Ramps/MKS weiter. Dort benötigen wir je Treiber 4 Pins. 3 Pins davon werden unter allen TMC2130 geteilt. Das wäre der eigentliche SPI Port. Nur erhält jeder Treiber zusätzlich einen CS Pin. Beim Ramps sitzt der SPI Port am Display Adapter bzw an AUX-3.


SPI beim Ramps.




SPI Beim MKS Gen 1.4.





Hier mal noch eine kleine Schematic der SPI plus CS Pins Verkabelung am Ramps board. Die CS Pins sind wie hier gezeigt so Standard im Marlin Sketch. Dazu aber mehr später.






Leider hab ich kein Foto von der Verkabelung am Ramps board zur Hand aber eins als Beispiel von einem MKS. Dort sind die SPI sowie die CS und Endstops zu sehen. Das Board läuft mit Sensorless Homing.






Weiter gehts mit der Freischaltung in Marlin.
Also erstes Benötigt ihr die letzte Bugfix Marlin Version und die aktuelle Arduino IDE. Diese anpassen auf euren Drucker. Bitte keine alte Config nehmen sondern die alte mit der neuen Bugfix Config Comparen. Geht am einfachsten mit  Meld oder Winmerge. Es muss nur noch die Bibliothek für die TMC 2130 installiert werden dazu einfach die IDE öffnen dann auf  Sketch -> Bibliothek einbinden -> Bibliotheken verwalten.....






Im nun geöffneten Fenster einfach 2130 ins Suchfeld schreiben und die Bibliothek installieren. So gehts das mit fast jeder Bibliothek die man evtl noch benötig.






Jetzt muss noch einiges in der Configuration_adv.h geändert werden. Je nach Bugfix Version können die angegeben Zeilennummern nicht stimmen. Da dort oft Features hinzukommen oder verschoben werden. Also bitte nicht wundern. In der IDE gibt es aber eine super Suchfunktion.

Als erstes muss in Zeile 1056 der TMC2130 aktiviert werden. Dazu einfach die // entfernen.

#define HAVE_TMC2130

Nun ab Zeile 1058 freischalten auf welchen Achsen die TMC2130 sind. In meinem Fall hab ich sie auf X und Y freigeschaltet.


#define X_IS_TMC2130
//#define X2_IS_TMC2130
#define Y_IS_TMC2130
//#define Y2_IS_TMC2130
//#define Z_IS_TMC2130
//#define Z2_IS_TMC2130
//#define E0_IS_TMC2130
//#define E1_IS_TMC2130
//#define E2_IS_TMC2130
//#define E3_IS_TMC2130
//#define E4_IS_TMC2130

Ab Zeile 1102 sollte nun der RMS Strom für die Treiber eingestellt werden. Hier findet ihr die Rechnenformel. Die Microsteps Einstellung könnt ihr auf 16 lassen. 16 entspricht 1/16 an den A4899/DRV8825 Treibern wenn alle 3 Jumper am Ramps/MKS gesteckt sind. Wenn ihr diese doch ändert bedenkt das die Stepps per mm dann angepasst werden müssen. Mit dem Befehl M906 lässt sich der Strom einstellen ohne das man neu Flashen muss. M906 X1000 stellt den Strom auf 1000ma auf der X Achse. 


#define X_CURRENT         1000  // rms current in mA. Multiply by 1.41 for peak current.
#define X_MICROSTEPS        16  // 0..256


Wenn ihr die TMC nun im super leisen Stealthshop Modus laufen lassen wollt aktiviert Zeile 1149. Solltet ihr das Sensorless Homing nutzen wollen muss diese Zeile aktiviert werden.


#define STEALTHCHOP

Um wichtige Warnungen vom Treiber zu erhalten oder die Strom Einstellungen über Terminal zu ändern muss Zeile 1162 und 1214 freigeschaltet werden. Dadurch könnt ihr mit
M906 den Strom verstellen M906 X800 stellt den X Treiber auf 800 milliampere
M122 gibts einige Informationen nützliche Infos aus.


#define MONITOR_DRIVER_STATUS
#define TMC_DEBUG

Jetzt schalten wir noch die automatische Geschwindigkeitseinstellung ein. Marlin kann so eingestellt werden das der Treiber ab einer gewissen Geschwindigkeit in den Spreadcycle Modus geschaltet wird. Dadurch hat er mehr Kraft aber wird auch etwas lauter. Das ist zb bei schnellen verfahren interessant, im Stealthshop kann es nämlich passieren das schritte verloren gehen. Dazu Zeile 1176 Aktivieren und ab Zeile 1178 den Speed einstellen ab wann der Spreadcycle Modus zuschaltet.

#define HYBRID_THRESHOLD

#define X_HYBRID_THRESHOLD      120  // [mm/s]
#define X2_HYBRID_THRESHOLD    100
#define Y_HYBRID_THRESHOLD      120
#define Y2_HYBRID_THRESHOLD    100
#define Z_HYBRID_THRESHOLD       30
#define Z2_HYBRID_THRESHOLD     30
#define E0_HYBRID_THRESHOLD     20
#define E1_HYBRID_THRESHOLD     30
#define E2_HYBRID_THRESHOLD     30
#define E3_HYBRID_THRESHOLD     30
#define E4_HYBRID_THRESHOLD     30

Jetzt fehlt nur noch das Sensorless Homing. Dank dieser Funktion benötigt man keine Endschalter mehr. Interessant vor allem bei Drucker Neubau. Dazu in Zeile 1202 Die Funktion freischalten.  

#define SENSORLESS_HOMING // TMC2130 only

Damit ist es aber nicht getan. In Zeile 370 und 371 muss der Bump auf 0 gesetzt werden.

#define X_HOME_BUMP_MM 0
#define Y_HOME_BUMP_MM 0

Auch müssen die Endstops in der Configuration.h Zeile 538 und 539 invertiert werden. Vergisst man das denkt Marlin das die Endstops ausgelöst sind und verfährt die Achsen nicht ins Negative.

#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.

Die Homing Sensitivity solltet ihr vorerst niedrig lassen. Das kann man später über den M914 Befehl einstellen. M914 X10 setzt den Wert für X zb. auf 10. Danach ein M500 zum Speichern. Sensorless Homing macht natürlich nur auf X und Y wirklich sinn. Für Z wurde die Funktion zwar auch mittlerweile eingebaut aber damit habe ich mich derzeit noch nicht beschäftigt.

#define X_HOMING_SENSITIVITY  11
#define Y_HOMING_SENSITIVITY  9

Jetzt fehlt nur noch eins und das wäre das anpassen der Pins für CS. Das Ramps und MKS board nutzen beide dafür die Pins_RAMPS.h. Die Pins für X, Y, Z und Extruder sind fest vorgegeben. Sollten diese aber schon anderweitig belegt sein kann man einfach leere Pins nutzen und dort eintragen.  Hier nur ein Beispiel für die X Achse.

#define X_STEP_PIN         54
#define X_DIR_PIN          55
#define X_ENABLE_PIN       38
#ifndef X_CS_PIN
  #define X_CS_PIN         53
#endif

Anhand der Bilder kann man freie Pins einfach rausfinden und im Sketch eintragen.








Sollte man ein RepRapDiscount Full Graphic Smart Controller nutzen muss entweder der CS Pin für Y geändert werden oder einfach die Automatische SD Karten Erkennung in Zeile 545 abschalten. Über das Menü lässt sich die SD Karte dann aber problemlos einhängen und von Drucken.

//#define SD_DETECT_INVERTED

Nun sollte alles soweit funktionieren. Bei fragen oder Anregungen bitte hinterlasst einfach einen Kommentar.

Keine Kommentare:

Kommentar veröffentlichen

Neuer Kommentar im Blog