3D-Drucker: Trinamic TMC2130 Schrittmotortreiber
Passen Sie den Phasenstrom an, drehen Sie den Mikroschritt hoch und vergessen Sie es – das ist es, was die meisten Menschen von einem Schrittmotor-Treiber-IC erwarten. Obwohl sie die meisten unserer CNC-Maschinen und 3D-Drucker als monolithische Lösungen antreiben, um sie „zum Drehen zu bringen“, schenken wir ihnen oft nicht viel Aufmerksamkeit.
In diesem Artikel werde ich mir den Schrittmotortreiber Trinamic TMC2130 ansehen, der mehr Schnickschnack bietet, als Sie jemals brauchen könnten. Einerseits kann dieser Treiber über seine SPI-Schnittstelle so konfiguriert werden, dass er für praktisch jede Anwendung geeignet ist, die einen Schrittmotor verwendet. Andererseits können Sie auch direkt auf die Spulenstromregister schreiben und so den Einsatzbereich weit über Motoren hinaus erweitern.
Letzten Monat haben wir uns das Mikrostepping auf gängigen Schritttreiber-ICs genauer angesehen, aber diejenigen ausgelassen, die wir eigentlich verwenden wollen: die intelligenten. Trinamic bietet einige der intelligentesten Schrittmotortreiber auf dem Markt, und seit der deutsche Hacker-Shop Watterott seine SilentStepStick-Breakout-Boards für den TMC2100 und TMC2130 herausgebracht hat, setzen sie auch einen neuen Standard für DIY-3D-Drucker, Fräsen und Pick-and-Place Roboter. Ich habe kürzlich ein Set von beidem für meinen 3D-Drucker Prusa i3 erworben und der TMC2130 mit seiner SPI-Konfigurationsschnittstelle hat meine Aufmerksamkeit wirklich erregt.
Der TMC2130 SilentStepStick sollte nicht mit der – weitaus populäreren – TMC2100-Variante verwechselt werden. Wie der Name schon sagt, ist es ein StepStick-kompatibles Breakout-Board und verfügt wie sein berühmtes Geschwister über einen Trinamic-IC auf der Unterseite der kleinen Platine. Mehrere Durchkontaktierungen und Kupferspritzer leiten die Wärme vom mittleren Pad des IC ab, sodass ein Kühlkörper auf der Oberseite den Treiber effektiv kühlen kann.
Im Gegensatz zum TMC2100 lässt dieser Ihre Motoren jedoch nicht sofort durchdrehen. Sie haben zwei Möglichkeiten: Sie können ihn im Standalone-Modus fest verdrahten, was ihn praktisch in einen TMC2100 verwandelt, oder Sie schließen ihn an seine SPI-Schnittstelle an und wählen sich ein, wenn Sie möchten, dass Ihr Schrittmotor geschüttelt oder gerührt wird. Tatsächlich machen die zahlreichen Konfigurationsregister den TMC2130 zu einem extrem hackbaren Chip, sodass ich nicht einmal daran denke, die Lötbrücke auf der Unterseite des SilentStepSticks zu überbrücken, die den Standalone-Modus aktiviert.
Wie gesagt, bevor der Treiber etwas unternimmt, muss er konfiguriert werden, und es ist erwähnenswert, dass alle Konfigurationsregister von Natur aus flüchtig sind. Wenn ich sie also in meinem 3D-Drucker verwenden möchte, muss ich sie als Teil des Druckerstarts konfigurieren Routine.
Der RAMPS 1.4 auf meinem 3D-Drucker unterbricht die Hardware-SPI-Schnittstelle des zugrunde liegenden Arduino über seinen AUX3-Pin-Header, zusammen mit zwei zusätzlichen digitalen Pins (D53 und D49), die ich für die Kabelauswahlsignale verwendet habe. Nachdem ich ein Kabel gecrimpt hatte, um zwei TMC2130 mit dem AUX3-Header zu verbinden, konnte ich mich mit der Software befassen.
Watterott stellt eine Beispielskizze bereit, die eine Grundkonfiguration in die Register des Treibers schreibt und einen angeschlossenen Schrittmotor dreht. Tolle Sache, aber das Datenblatt beschreibt 23 Konfigurationsregister, die auf eine Feinabstimmung warten, und 8 weitere, aus denen Diagnose- und Statusdaten gelesen werden können. Also habe ich eine kleine Arduino-Bibliothek geschrieben, die die zahlreichen Konfigurationsparameter auf praktischere Weise verfügbar machen würde. Von dort aus könnte ich meine Bibliothek einfach in die Firmware des Marlin-RC7 3D-Druckers einbinden, die ich verwende. Glücklicherweise bietet der aktuelle Marlin-Release Candidate bereits Unterstützung für TMC26X-Treiber, sodass ich einen Teil seines Codes wiederverwenden konnte, um einen Marlin-Fork zusammenzustellen, der 59 Parameter des TMC2130 in seinen definitionsbasierten Konfigurationsdateien enthält. Und dann könnte ich mit den kleinen Freunden eine Spritztour machen.
Nachdem die Hardware eingerichtet war und die Software wie erwartet funktionierte, habe ich ein paar Tests zur Vernunft durchgeführt: Parameter ein- und ausschalten und prüfen, wie sich das Verhalten des Treibers während des Druckens ändert. Da Sie mit dem TMC2130 fast alles optimieren können, was er tut, ist das ein guter erster Schritt, der dabei hilft, einige Variablen zu eliminieren und andere auszuwählen, die einen genaueren Blick wert sind. Die meisten Einstellungen können im laufenden Betrieb und während des Druckens geändert werden, jedoch können nicht alle Parameter tatsächlich sicher geändert werden, während die Motoren laufen.
Um die Treiber tatsächlich für eine bestimmte Anwendung abzustimmen, stellt Trinamic im Datenblatt eine Kurzanleitung sowie detaillierte Informationen zu jedem Parameter und deren Interaktion zur Verfügung. Grundsätzlich besteht der erste Schritt darin, den RMS-Spulenstrom mithilfe des integrierten Potentiometers der SilentStepSticks anzupassen. Dann müssen wir den analogen Eingangspin als Stromskalierungsreferenz auswählen, um das Potentiometer tatsächlich nutzen zu können. Mit der genannten Bibliothek kann ich dies durch eine einfache Methode tun:
Der Lauf- und Haltestrom sind die ersten wirklichen Parameter, die abgestimmt werden sollten, wobei der Laufstrom typischerweise auf dem gewünschten Maximalstrom und der Haltestrom auf 70 % dieses Wertes liegt. Die Verzögerung zwischen einem Stillstand und dem Übergang von Laufstrom zu Haltestrom kann zwischen 0 und 4 Sekunden eingestellt werden, ich habe sie vorerst auf 4 Sekunden eingestellt und damit die Stromreduzierung bei laufendem 3D-Drucker praktisch deaktiviert. Die drei Werte teilen sich ein schreibgeschütztes Register, sodass der entsprechende Methodenaufruf wie folgt aussieht:
und setzt den Laufstrom auf 100 % (≙ 31), den Haltestrom auf etwa 70 % dieses Wertes (≙ 22) und die Verzögerung zwischen den beiden auf 4 Sekunden (≙ 5).
Ich möchte Drehmoment, damit ich StealthChop deaktiviert lassen kann. Das Datenblatt schlägt einige Startwerte für die Konfiguration der Ausschaltzeit des Choppers und der Leerzeiteinstellungen des Komparators vor. Da es sich jedoch um einen wichtigen Kompromiss zwischen Schaltgeräusch und Drehmoment handelt, ist es sinnvoll, auch andere Werte zu durchlaufen. Die Bibliotheksmethoden für die beiden Werte sehen folgendermaßen aus:
Und schließlich muss ich eine Mikroschrittauflösung auswählen und entscheiden, ob ich die 256-Mikroschritt-Interpolationsfunktion nutzen möchte, die später in diesem Artikel behandelt wird:
Ich muss noch den gesamten Abstimmungsvorgang durchlaufen, der die Überwachung des Spulenstroms am Oszilloskop und die Beseitigung von Verzerrungen im Nulldurchgang umfasst, aber ich bekomme einen Eindruck vom Potenzial des Treibers.
Sein maximaler Dauer-RMS-Strom von etwa 1,2 A pro Spule (zumindest im QFN-Gehäuse der SilentStepSticks) lässt ihn wie einen Niedrigstromtreiber aussehen, der den üblichen A4988 und DRV8825 unterlegen ist. In der Praxis übertrifft es beide, indem es eine Spitzenstrommarge von 2,5 A intelligent nutzt. Dies gibt ihm mehr als genug Drehmoment für den 3D-Druck. Ich würde jedoch nicht empfehlen, sie auf über 0,9 A RMS zu bringen, da der IC vorübergehend mehr Strom ziehen wird, wenn er mehr benötigt. Für SilentStepStick-Benutzer ist das ein Vref von 0,88 V. Über die SPI-Schnittstelle können Sie wählen, wie viel Strom Sie durch die Motorspulen senden möchten, wenn er sich dreht und wenn er im Leerlauf ist. Sie können wählen, nach wie vielen Sekunden der Strom im Stillstand des Motors auf einen niedrigeren Haltestrom und anschließend auf einen noch niedrigeren Leerlaufstrom abgesenkt wird. Und natürlich können Sie ihn auch so einstellen, dass aus allem der maximale Saft herausgepresst wird.
Interessant wird es erst bei Einstellungen wie dem Hochgeschwindigkeitsmodus. Oberhalb einer konfigurierbaren Geschwindigkeitsschwelle bietet Ihnen der Treiber die Möglichkeit, den Chopper automatisch auf eine schnellere Abklingzeit umzuschalten, um etwas mehr Geschwindigkeit herauszuholen. Sie können die Gänge auch buchstäblich wechseln, indem Sie den Fahrer intern vom Mikroschrittmodus in den Vollschrittmodus umschalten lassen, sobald er die richtige Geschwindigkeit erreicht hat.
Die Wahl einer feineren Mikroschrittauflösung sorgt für eine gleichmäßigere Bewegung des Schrittmotors, reduziert Vibrationen und erhöht manchmal sogar die Positionierungsgenauigkeit. Allerdings vervielfacht es auch die Belastung des Mikrocontrollers, der 16, 32 oder 256 Mal mehr Schrittimpulse pro Sekunde erzeugen muss. Mit dem TMC2130 können Sie eine Eingangsauflösung zwischen 1 und 256 Mikroschritten pro Vollschritt auswählen und haben dann die Möglichkeit, die Ausgangsauflösung auf 256 Mikroschritte zu interpolieren. Dies ermöglicht einen reibungslosen Betrieb auch auf immer älter werdenden 8-Bit-AVR-Motion-Controllern, die keine hohen Schrittfrequenzen liefern können. Wenn Sie außerdem die Schnittstelle des TMC2130 für Doppelflanken-Schrittimpulse konfigurieren, können Sie die Schrittfrequenz nahezu kostenlos mindestens verdoppeln. Angesichts der Tatsache, dass der moderne IC immer noch über die klassische Schritt-/Richtungsschnittstelle und sogar einen Aktivierungspin verfügt, machen ihn diese wenigen zusätzlichen Funktionen tatsächlich zu einem praktischen Upgrade für weniger aktuelle CNC- und 3D-Druckerelektronik.
Genau wie der TMC2100 verfügt der TMC2130 über zwei effiziente und leise Antriebsmodi: SpreadCycle und StealthChop. Ersteres liefert ein hohes Drehmoment bei relativ geringen Geräuschemissionen, letzteres ist nahezu unhörbar, und es gibt ziemliche Verwirrung darüber, ob sich das auf das Drehmoment auswirkt oder nicht: Einige Benutzer erleben ein drastisch reduziertes Drehmoment, während in der Studie von Trinamic zu diesem Thema das Gegenteil behauptet wird . Unter 300 U/min (typische 3D-Druckgeschwindigkeiten) sollte StealthChop das Drehmoment überhaupt nicht beeinflussen. Schuld daran könnte laut Stephan Watterott das Double- und Quad-Stepping sein, wie es in den meisten 3D-Drucker-Firmwares zum Einsatz kommt.
In jedem Fall können Sie mit dem flexiblen TMC2130 den Zerkleinerer selbst optimieren, um das richtige Gleichgewicht zwischen Drehmoment, Geräuschentwicklung und Effizienz für Ihre Anwendung zu finden. Eine der bemerkenswerteren Optionen in diesem Zusammenhang ist die Möglichkeit, die Ausschaltzeit des Hubschraubers zufällig festzulegen. Da der größte Teil des hörbaren Geräuschs dadurch entsteht, dass der Chopper fleißig die Spulen des Schrittmotors schaltet, verteilt diese Option das Geräusch über einen größeren Frequenzbereich, um den Schrittmotor subjektiv leiser zu machen.
Der TMC2130 erkennt, wenn der Motor blockiert ist und Schritte verliert, indem er die Gegen-EMK des Motors misst. Unterwegs zählt es verpasste Schritte und ermöglicht es der Steuerung, andernfalls irreversible Schrittverluste auszugleichen. Es ist auch eine großartige Möglichkeit, auf Hindernisse zu reagieren, anstatt mit voller Wucht auf sie zu stoßen, und natürlich kann die Funktion als Endanschlag für die Achse verwendet werden. Trinamic nennt diese Funktion StallGuard und ist wie alles andere in diesem Motortreiber hochgradig konfigurierbar.
Anstatt den Motortreiber alles für Sie erledigen zu lassen, können Sie auch den Direktmodus wählen. Dieser Modus verwandelt den Treiber praktisch in eine zweikanalige, bipolare Konstantstromquelle mit SPI-Schnittstelle. Sie können es weiterhin als Motortreiber verwenden, aber die Möglichkeiten gehen weit darüber hinaus. Es ist erwähnenswert, dass das Datenblatt hier etwas verwirrend sein könnte und das entsprechende XDIRECT-Register tatsächlich zwei vorzeichenbehaftete 9-Bit-Ganzzahlen (nicht 8 Bit) für jede Spule akzeptiert und wie erwartet innerhalb eines numerischen Bereichs von natürlich ± 254 (nicht ±) arbeitet 255), um den Strom zwischen ± Imax/RMS zu variieren.
Ungefähr ein halbes Jahr nach der Veröffentlichung des Breakout-Boards von Watterott weckte das Potenzial intelligenterer Schrittmotortreiber die Neugier der 3D-Druck-Community, doch bei der Umsetzung hat sich nicht viel getan. Zugegebenermaßen erfordert es einige Anstrengung, sie zum Laufen zu bringen. Wenn Sie noch damit beschäftigt sind, die Temperatur an Ihrem 3D-Drucker einzustellen, möchten Sie sicherlich nicht ein paar Dutzend neue Variablen hinzufügen, aber wenn Sie das Beste daraus machen möchten, hat der TMC2130 viel zu bieten : geräuscharmer Druck, Hochgeschwindigkeitsdruck, Druckunterbrechung bei Fehler und Wiederherstellung nach verlorenen Schritten. Da der Treiber-IC so hackbar ist, ist er eindeutig darauf ausgelegt, auf bestimmte Anwendungen abgestimmt zu werden. Wenn man es auf einen Allzweck-Prüfstand wirft, wird man wahrscheinlich keine aussagekräftigen Allzweck-Ergebnisse erzielen.
Ich hoffe, es hat Ihnen Spaß gemacht, einen Blick auf einen Schrittmotortreiber zu werfen, der intelligenter als üblich ist, als eine der neuen Grenzen des DIY-3D-Drucks und als interessante Komponente für viele andere Anwendungen. Wenn Sie darüber nachdenken, mit diesem IC oder dieser Breakout-Platine in Ihrem 3D-Drucker zu experimentieren, können Sie zum Einstieg gerne meine Marlin-Gabel ausprobieren. Wenn Sie etwas völlig anderes bauen, hilft Ihnen die zugrunde liegende Arduino-Bibliothek weiter. Wer nutzt dieses Teil noch? Ich freue mich über Ihre Ideen, Anwendungen und Erfahrungen in den Kommentaren!