[Am 27.02.2018 um 15:10 Uhr aktualisiert]
Hallo allerseits,
Hallo allerseits,
da es scheinbar doch ein etwas größeres Interesse an den TMC Schrittmotortreibern für den Anycubic i3 Mega gibt, beschreibe ich hier einmal meine Vorgehensweise bei dem Einbau der TMC2130.
Diese "Anleitung" funktioniert nur bei den alten Anycubic i3 Mega Modellen mit dem 16 Bit Atmega 2560 Trigorilla Board.
Es gibt, wie bei vielen Dingen nicht nur eine Lösung, weshalb dieses Tutorial als ein optional anpassbarer Leitfaden gesehen werden kann. Da es sich hierbei um ein Forum handelt und somit der Austausch von Wissen eine Thema ist, freue ich mich natürlich über Meinungen, konstruktive Kritik oder eine Beschreibung, wie ihr den Einbau vielleicht realisiert habt.
Bei den TMC2130 handelt es sich, im Vergleich z.B. zu den TMC2208, um Schrittmotortreiber, welche in beide Richtungen mit dem Mikrocontroller kommunizieren können. Die dafür nötige Variante, mit Anschluss an das SPI, wird hier beschrieben.
Die TMC2130 könnt ihr von diversen Anbietern beziehen. Unter anderen gearbest oder auch der Firma Watterott, von denen ich meine gekauft habe. Hierbei gibt es Varianten mit fertig gelöteten Stiftleisten und welche, bei denen diese noch nicht gelötet sind. Es empfiehlt sich hierbei die zweite Version zu kaufen, da die Stifte nicht alle in die gleiche Richtung zeigen dürfen. Solltet ihr dennoch die fertig gelöteten erwischt haben, könnt ihr diese natürlich auch nachträglich wieder entfernen. Da es selbst mit Entlötpumpe oder Entlötlitze schwierig ist alle 8 Pins komplett frei zu bekommen, kann man auch versuchen das schwarze Verbindungsstück vorsichtig von den Stiften zu ziehen. Damit können anschließend alle einzeln ausgelötet werden.
Ich verwende bei den nach oben gerichteten eine abgewinkelte Stiftleiste, womit es keine Probleme mit dem darüber befindlichen Lüfter gibt. Hierbei muss ich aber erwähnen, dass ich den Originallüfter gegen einen 60x60x15 mm ersetzt habe und somit etwas andere Platzbedingungen herrschen.
Der Halter wurde hierbei durch folgenden ausgetauscht:
Nach unten zeigen die Pins:
GND, VIO, M1B, M1A, M2A, M2B, GND, VM
Dir, Step, En
Nach oben gerichtet:
SDO, CS, SCK, SDI, evt. Diag1 (optional)
Das Foto zeigt den E1 Treiber, bei dem aus Platzgründen jedoch gerade Stifte verwendet werden sollten.
Diag1, welcher nicht separat beschriftet ist, wird benötigt, wenn man SENSORLESS_HOMING verwenden möchte.
Darauf gehe ich später noch ein.
Wer es besonders kompakt haben möchte, kann auch komplett auf die Stiftleisten nach oben verzichten und die Drähte direkt auf die Treiberplatine löten. Man muss nur berücksichtigen, dass dann alle verbauten Treiber fest miteinander verbunden sind.
Jetzt sollte es in etwa so aussehen.
Vergesst nicht die Montage der Kühlkörper. Hierbei könnt ihr separat erhältliche Kühlkörper (z.B. die schwarzen) oder einfach die von euren alten Treibern verwenden. Mit einem ausreichend starken Lüfter direkt darüber sollten die ICs auch nicht überhitzen. Die Treiber laufen ja in der Regel weit unter ihrem maximal möglichen Strom und die TMC2130 verfügen zudem noch über eine Haltestromabsenkung, welche wiederum die Temperatur dieser und der Schrittmotoren reduziert.
Wie an den unter der Platine heraus schauenden Kabeln bereits zu erahnen, geht es weiter mit dem Anschluss der nach oben gelöteten Pins. Was die TMC2130 besonders von den TMC2208 unterscheidet, ist die Möglichkeit sie an das SPI anzuschließen.
Hierbei werden die SDO, SCK und SDI Pins jeweils parallel geschaltet. Bei den CS Pins benötigt jeder eine eigene Leitung.
Die nachfolgenden zwei Bilder sind aus einem Video von Thomas Sanladerer entnommen und veranschaulichen die Verkabelung.
Verwendet man weniger Treiber oder noch den E1, kann dieser Schaltplan einfach erweitert oder reduziert werden.
Der Anycubic i3 Mega hat hierbei jedoch den Nachteil, dass diese Pins vom Trigorila-Board bereits für das Display verwendet werden, weshalb wir hier etwas löten müssen. Bei den CS-Pins ist man relativ frei, da man nur einen ungenutzten Pin des Atmega benötigt, welcher anschließend in der FW als CS Pin definiert wird.
In meinem Fall habe ich alle Pins an die Unterseite, direkt unter der Aufsteckplatine, gelötet. Die SDO, SCK und SDI Pins könnte man aber auch einfach an die Oberseite dieser Platine löten. Eben wie es einem besser gefällt.
Da sie bei mir steckbar bleiben sollen, habe ich Buchsenleisten an die entsprechenden Pins gelötet.
Der ganze Spaß wird dann noch nach dem oben gezeigten Schaltplan verkabelt.
Hier sieht man auch nochmal den Grund, warum bei dem E0 Treiber keine gewinkelten Stiftleisten Anwendung finden.
Der Lüfter passt natürlich auch noch dazwischen.
Falls jemand für die X-Achse SENSORLESS_HOMING verwenden möchte, muss er noch die Diag1 Pins des entsprechenden Treibers anschließen. Ein einfacher und sehr schneller Weg ist hierbei direkt auf der Aufsteckplatine.
Ich verwende diese Funktion aktuell bei der X-Achse. Der Standard-Endschalter ist hierfür X_min. Vergesst nicht den bisherigen Endschalter ab zu klemmen, da dieser eine invertierte Logik besitzt. Ansonsten bewegt sich die X-Achse nur in eine Richtung. Zu den nötigen Marlin Einstellungen später mehr.
Wenn ihr den Drucker eh schon offen habt, könnt ihr beim Zusammenbauen auch gleich die Grundplatte umdrehen. Die fehlenden Aussparungen bei dem Trigorilla-Board-Lüfter sind nicht gerade förderlich für die Kühlung.
Auf gehts zur Programmierung.
Benötigt werden eine Programmieroberfläche, wobei sich Arduino IDE als ein einfacher Einstieg anbietet. Wer sich mehr mit dem Programmieren befassen möchte, dem kann ich auch Atmel Studio mit der Arduino Erweiterung empfehlen. Dort ist es wesentlich leichter zwischen verschiedenen Programmdateien zu wechseln, wenn man z.B. in den Code einer verwendeten Funktion schauen oder alle Aufrufe einer solchen finden möchte.
Als Marlin Grundlage verwende ich eine bereits für den Anycubic I3 Mega angepasste Version.
Ihr benötigt hierbei den kompletten Marlin Ordner.
Nach der Installation der Arduino IDE öffnet ihr die enthaltene Marlin.ino, mit der alle anderen Dateien geöffnet werden.
Für uns sind die drei Dateien configuration.h, configuration_adv.h und pins_TRIGORILLA.h interessant.
Die von mir folgenden Codeänderungen gelten für die Verwendung von fünf TMC2130, wobei die X-Achse ohne Endschalter auskommt.
Bei anderen Konfigurationen ist einfach der entsprechende Code nicht einzufügen bzw. die Auskommentierung nicht aufzuheben.
Um zu erkennen, in welcher Weiße sich der Code geändert hat, zeige ich immer den ursprünglichen Code (bisher) gefolgt von den Anpassungen (jetzt).
Änderungen in der configuration.h
Zeile 500
bisher
#define X_MIN_ENDSTOP_INVERTING true
jetzt
#define X_MIN_ENDSTOP_INVERTING false
Zeile 552
bisher
#define DEFAULT_MAX_ACCELERATION {3000, 3000, 60, 10000}
jetzt
#define DEFAULT_MAX_ACCELERATION {2000, 1500, 60, 10000}
Zeile 562 ff
bisher
#define DEFAULT_ACCELERATION 3000
#define DEFAULT_RETRACT_ACCELERATION 3000
#define DEFAULT_TRAVEL_ACCELERATION 3000
jetzt
#define DEFAULT_ACCELERATION 2000
#define DEFAULT_RETRACT_ACCELERATION 1500
#define DEFAULT_TRAVEL_ACCELERATION 2000
#define DEFAULT_RETRACT_ACCELERATION 1500
#define DEFAULT_TRAVEL_ACCELERATION 2000
Mit den Beschleunigungswerten kann man noch etwas spielen. Je höher der Treiberstrom, desto größer kann auch dieser Wert sein.
Bei 900 mA bei der X-Achse hat auch 3000 funktioniert, war aber an der Grenze. Am besten mal selbst probieren. Mein Dual-Hotend dürfte etwas schwerer sein, als das Original, damit muss ich den Wert sowieso niedriger wählen.
Bei 900 mA bei der X-Achse hat auch 3000 funktioniert, war aber an der Grenze. Am besten mal selbst probieren. Mein Dual-Hotend dürfte etwas schwerer sein, als das Original, damit muss ich den Wert sowieso niedriger wählen.
Y-Achse hat selbst mit 900 mA Steps verloren. Das merkt ihr daran, wenn beim Drucken Schichten verschoben sind.
Zeile 756 ff
bisher
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
jetzt
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR true
Zeile 767
bisher
#define INVERT_E0_DIR false
jetzt
#define INVERT_E0_DIR true
Änderungen in der configuration_adv.h
Zeile 987
bisher
//#define HAVE_TMC2130
jetzt
#define HAVE_TMC2130
Zeile 1004 ff
bisher
//#define X_IS_TMC2130
//#define Y_IS_TMC2130
//#define Z_IS_TMC2130
//#define Z2_IS_TMC2130
//#define E0_IS_TMC2130
jetzt
#define X_IS_TMC2130
#define Y_IS_TMC2130
#define Z_IS_TMC2130
#define Z2_IS_TMC2130
#define E0_IS_TMC2130
Ab Zeile 1032 sind die Einstellungen für den Betrieb der TMC2130. Die Werte sind ein grober Richtwert. Sollte der Schrittmotor Steps überspringen, ist entweder der entsprechende Strom oder der HOLD_MULTIPLIERER zu erhöhen.
An sich kann für den Anfang alles gelassen werden.
Höchstens den HOLD_MULTIPLIER würde ich etwas anpassen.
Zeile 1033
bisher
#define HOLD_MULTIPLIER 0.5
jetzt
#define HOLD_MULTIPLIER 0.3
Zeile 1086 ff
bisher
//#define MONITOR_DRIVER_STATUS
#if ENABLED(MONITOR_DRIVER_STATUS)
#define CURRENT_STEP_DOWN 50 // [mA]
#define REPORT_CURRENT_CHANGE
#define STOP_ON_ERROR
#endif
#if ENABLED(MONITOR_DRIVER_STATUS)
#define CURRENT_STEP_DOWN 50 // [mA]
#define REPORT_CURRENT_CHANGE
#define STOP_ON_ERROR
#endif
jetzt
#define MONITOR_DRIVER_STATUS
#if ENABLED(MONITOR_DRIVER_STATUS)
#define CURRENT_STEP_DOWN 50 // [mA]
#define AUTO_ADJUST_MAX 1300 // [mA]
#define REPORT_CURRENT_CHANGE
#define STOP_ON_ERROR
#endif
Zeile 1128 ff
bisher
//#define SENSORLESS_HOMING
#if ENABLED(SENSORLESS_HOMING)
#define X_HOMING_SENSITIVITY 8
#define Y_HOMING_SENSITIVITY 8
#endif
#define X_HOMING_SENSITIVITY 8
#define Y_HOMING_SENSITIVITY 8
#endif
jetzt
#define SENSORLESS_HOMING
#if ENABLED(SENSORLESS_HOMING)
#define X_HOMING_SENSITIVITY 8
#define Y_HOMING_SENSITIVITY 8
#define X_HOMING_SENSITIVITY 8
#define Y_HOMING_SENSITIVITY 8
#define X_HOME_BUMP_MM 0
#define Y_HOME_BUMP_MM 0
#endif
#define Y_HOME_BUMP_MM 0
#endif
Änderungen in der pins_TRIGORILLA.h
Zeile 23 ff
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y2_STEP_PIN 36
#define Y2_DIR_PIN 34
#define Y2_ENABLE_PIN 30
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z2_STEP_PIN 36
#define Z2_DIR_PIN 34
#define Z2_ENABLE_PIN 30
#define E0_STEP_PIN 26
#define E0_DIR_PIN 28
#define E0_ENABLE_PIN 24
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y2_STEP_PIN 36
#define Y2_DIR_PIN 34
#define Y2_ENABLE_PIN 30
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z2_STEP_PIN 36
#define Z2_DIR_PIN 34
#define Z2_ENABLE_PIN 30
#define E0_STEP_PIN 26
#define E0_DIR_PIN 28
#define E0_ENABLE_PIN 24
jetzt
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_CS_PIN 29
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_CS_PIN 29
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_CS_PIN 25
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_CS_PIN 25
#define Y2_STEP_PIN 36
#define Y2_DIR_PIN 34
#define Y2_ENABLE_PIN 30
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Y2_DIR_PIN 34
#define Y2_ENABLE_PIN 30
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z_CS_PIN 16
#define Z2_STEP_PIN 36
#define Z2_DIR_PIN 34
#define Z2_ENABLE_PIN 30
#define Z2_CS_PIN 37
#define Z2_STEP_PIN 36
#define Z2_DIR_PIN 34
#define Z2_ENABLE_PIN 30
#define Z2_CS_PIN 37
#define E0_STEP_PIN 26
#define E0_DIR_PIN 28
#define E0_ENABLE_PIN 24
#define E0_DIR_PIN 28
#define E0_ENABLE_PIN 24
#define E0_CS_PIN 35
Das war es schon mit den Änderungen.
Jetzt nur noch auf den Drucker überspielen. Dazu diesen per USB an den PC anschließen.
Achtet darauf, dass keine anderen Programme, wie z.B. Cura geöffnet sind, da diese teilweise einen COM-Port zum Drucker öffnen, welcher dann blockiert ist und nicht mehr für das Programmieren zur Verfügung steht.
In der Arduino IDE müsst ihr folgendes auswählen:
Unter dem Menüpunkt: Werkzeuge
Board: "Arduino/Genuino Mega or Mega 2560"
Prozessor: "ATmega2560 (Mega 2560)"
Port: der, an dem der Drucker angeschlossen ist (gegebenenfalls im Gerätemanager nachschauen)
Anschließend könnt ihr mit dem Haken-Symbol das Programm kompilieren. Damit seht ihr, ob euch ein Programmierfehler, z.B. verschrieben, unterlaufen ist.
Wenn kein Fehler gefunden wird kommt die Meldung: "Kompilieren abgeschlossen".
Dann kann mit dem "Pfeil nach rechts" Symbol das Programm auf den Drucker überspielt werden.
Wartet, bis der Text "Hochladen abgeschlossen" erscheint.
Bevor ihr mit dem ersten Druck startet, solltet ihr jede Achse sowie den Extruder überprüfen, ob die Laufrichtung stimmt.
Hierzu kann man das Touch-Screen verwenden oder eine Software wie Repetier-Host. Diese hat noch den Vorteil, dass man die Achsen einzeln in die Home-Position bringen kann. Zudem gibt es einen Notstopp-Knopf, falls ungewollte Kontakte mit dem Druckbett oder ein nicht funktionierender Endschalter auftreten.
Sollten bei dem Kompilieren des Programm Fehler auftreten, diese bitte mit der angezeigten Fehlermeldung hier posten. Mein Drucker hat mittlerweile nicht mehr die oben beschriebene Software 1:1 aufgespielt, wodurch ich nicht 100% sicher bin, dass ich nicht ein oder zwei Zeilen vergessen habe zu erwähnen.
Ich hoffe, dass dieses kleine Tutorial dem einen oder anderen bei der Installation der TMC2130 weiter hilft und freue mich über Rückmeldungen.
Beste Grüße und ein erfolgreiches Drucken
Feal