Wie genau ist Mikroschritt wirklich?
Schrittmotoren unterteilen eine vollständige Umdrehung in Hunderte diskreter Schritte und eignen sich daher ideal für die präzise Steuerung von Bewegungen, sei es in Autos, Robotern, 3D-Druckern oder CNC-Maschinen. Die meisten Schrittmotoren, die Sie in Heimwerkerprojekten, 3D-Druckern und kleinen CNC-Maschinen finden, sind bipolare 2-Phasen-Hybrid-Schrittmotoren, entweder mit 200 oder – in der hochauflösenden Variante – mit 400 Schritten pro Umdrehung. Daraus ergibt sich ein Schrittwinkel von 1,8° bzw. 0,9°.
In gewisser Weise sind Schritte die Pixel der Bewegung, und oft reicht die gegebene physikalische Auflösung nicht aus. Das harte Schalten der Spulen eines Schrittmotors im Vollschrittmodus (Wellenantrieb) führt dazu, dass der Motor von einer Schrittposition zur nächsten springt, was zu Überschwingern, Drehmomentschwankungen und Vibrationen führt. Außerdem möchten wir die Auflösung eines Schrittmotors erhöhen, um eine genauere Positionierung zu ermöglichen. Moderne Schrittmotortreiber verfügen über Mikroschritte, eine Antriebstechnik, die eine beliebige Anzahl von Mikroschritten in jeden einzelnen Vollschritt eines Schrittmotors einfügt, was Vibrationen spürbar reduziert und (angeblich) die Auflösung und Genauigkeit des Schrittmotors erhöht.
Einerseits handelt es sich bei Mikroschritten tatsächlich um Schritte, die ein Schrittmotor physikalisch auch unter Last ausführen kann. Andererseits tragen sie normalerweise nicht zur Positionierungsgenauigkeit des Schrittmotors bei. Microstepping wird zwangsläufig Verwirrung stiften. In diesem Artikel geht es darum, das ein wenig aufzuklären, und da es eine sehr treiberabhängige Angelegenheit ist, vergleiche ich auch die Mikroschrittfähigkeiten der häufig verwendeten Motortreiber A4988, DRV8825 und TB6560AHQ.
Bei einem Hybrid-Schrittmotor passt ein mikroschrittfähiger Motortreiber den Strom in den Statorspulen an, um den Permanentmagnetrotor in einer Zwischenposition zwischen zwei aufeinanderfolgenden Vollschritten zu positionieren. Ein Vollschritt wird dann in mehrere Mikroschritte unterteilt, und jeder Mikroschritt wird durch die beiden Spulenströme erreicht.
Viele ältere Industriemotortreiber verfügen nur über 4 Mikroschritte (Viertelschrittmodus), heute sind es jedoch häufig 16, 32 und sogar 256 Mikroschritte pro Vollschritt. Wenn wir vorher einen Schrittmotor mit 200 Schritten pro Umdrehung hatten, haben wir jetzt ein Wunder mit 51.200 Schritten pro Umdrehung. In der Theorie.
In der Praxis haben wir es immer noch mit Open-Loop-Treibern zu tun, was bedeutet, dass der Motortreiber die genaue Winkelposition der Motorwelle nicht kennt und Abweichungen nicht korrigiert. Reibung, das Eigenbremsmoment des Motors und vor allem die äußere Belastung, die auf den Rotor einwirkt, bleiben für den Fahrer unbemerkt. Ohne den Kreis über einen Encoder und einen anspruchsvolleren Spezialtreiber zu schließen, können wir bestenfalls davon ausgehen, dass sich der Motor etwa ± 2 Vollschritte (ja, so schlimm) in der Nähe seiner Zielposition befindet, die der maximalen Auslenkung vor dem Rotor entspricht rastet in der falschen Vollschrittposition ein, was zu einem Schrittverlust führt.
Das inkrementelle Drehmoment von einem Mikroschritt zum nächsten beträgt – bestimmt durch gnadenlose Trigonometrie – nur einen Bruchteil des dynamischen Drehmoments des Motors. Um sicherzustellen, dass sich die Motorwelle tatsächlich innerhalb von +/- 1 Mikroschritt einstellt, müssen wir auch die Last entsprechend reduzieren. Das Überschreiten dieses kleineren, inkrementellen Drehmoments führt nicht zu einem Schrittverlust, verursacht aber den gleichen absoluten Positionierungsfehler von bis zu ± 2 Vollschritten. Die folgende Tabelle zeigt die verheerende Beziehung.
Quelle: Technischer Hinweis zum Schrittmotor: Microstepping Myths and Realities von Micromo
Die gute Nachricht ist, dass, solange wir einen Motortreiber verwenden, der stark genug ist und wir dieses inkrementelle Drehmoment nicht überschreiten, sei es durch eine externe Last oder die interne Trägheit des Motors, die einzige theoretische Grenze für das Erreichen einer Mikroschritt-Positionierungsgenauigkeit besteht die innere Reibung und das Rastmoment des Motors. Diese Werte hängen stark vom Motortyp ab, sind aber im Allgemeinen eher niedrige (fast vernachlässigbare) Werte. Beispielsweise ist der im folgenden Test verwendete Motor mit einem Rastmoment von 200 g·cm spezifiziert. Das sind lediglich 5 % des Haltemoments von 4000 g·cm. Gemäß der obigen Tabelle sollte dieser Motor eine genaue Positionierung mit 16 Mikroschritten pro Vollschritttreiber ermöglichen.
Gilt diese Theorie also? Und liefern alle Mikroschrittmotortreiber die gleiche Leistung in Bezug auf die Genauigkeit der Mikroschrittpositionierung? Ich hatte kürzlich die Gelegenheit, einige Motortreiber für ein Projekt zu testen und war von den Ergebnissen ziemlich überrascht.
Für den Testaufbau habe ich mir den roten Laserpointer von meinem IR-Thermometer ausgeliehen und ihn über eine 3D-gedruckte Halterung am Motor befestigt. Eine 3D-gedruckte Spiegelhalterung befestigt einen ersten Oberflächenspiegel an der Motorwelle und verfügt über zwei Hebel mit einer Länge von jeweils 100 mm, um den Motor mit einer bestimmten Masse zu belasten. Für den Belastungstest habe ich an einem Hebel eine Masse von 100 g befestigt, was zu einem Lastimpuls von 1000 g cm durch den Hebel führt. Das ist ein Viertel des Haltemoments des für diesen Test verwendeten Motors: Ein Wantai 42BYGHW609 mit 1,7 A pro Phase, 4000 g·cm Haltemoment und 200 Schritten pro Umdrehung.
Ich montierte die Motorbaugruppe auf einer starren Fensterbank und positionierte sie so, dass der Laserpointerpunkt quer durch den Raum auf einen Zollstock projiziert wurde, der an der gegenüberliegenden Wand in etwa 6 Metern Entfernung befestigt war. Der optische Hebel vergrößert die Schritte für genaue Messwerte. Ursprünglich hatte ich geplant, die Messwerte einfach manuell zu notieren, aber dann wurde mir schnell klar, dass das Schreiben eines kleinen Java-Bildverarbeitungsskripts zum Extrahieren der Messwerte aus Fotos in einem Bruchteil der Zeit erledigt werden konnte. Also wurde eine DSLR-Kamera an meine Testelektronik – ein Arduino und ein RAMPS 1.4 – angeschlossen, um sie für die Erfassung der Positionswerte auszulösen. Ich hätte den Laser auf jeden Fall auf die saubere, weiße Wand neben dem Lineal richten sollen, aber eine einfache Schwelle auf dem roten Kanal hat gute Arbeit geleistet, um den leuchtend roten Laserpunkt genau vom Lineal zu extrahieren. Aus der Ablesung auf dem Lineal und dem Abstand an der Wand habe ich später die Winkelposition der Motorwelle berechnet.
Alle Schrittmotortreiber wurden im 16-Mikroschritt-pro-Vollschritt-Modus getestet. Vor der Messung wurde der Schrittmotor in eine Vollschritt-Raststellung gebracht und der Spiegel auf einen Strahl senkrecht zur Wand ausgerichtet. Anschließend wurden 16 Mikroschritte in eine Richtung ausgeführt, wobei nach jedem Schritt die Kamera ausgelöst wurde. Anschließend wurden 16 Mikroschritte in umgekehrter Richtung ausgeführt, wodurch der Schrittmotor wieder in seine ursprüngliche Position gebracht wurde. Auch hier wurde die Kamera nach jedem Schritt ausgelöst. Die Messung der Position in beide Richtungen sollte es mir ermöglichen, eine Vorstellung vom gedämpften Spiel des Motors (falls vorhanden) zu bekommen, ergab aber interessantere Erkenntnisse als erwartet. Diese Testsequenz wurde für jeden Fahrer durchgeführt, sowohl unbelastet als auch mit 1000 g cm belastet. Die stärkeren Fahrer verursachten bei den Belastungstests ein leichtes Überschwingen, sodass ihnen Zeit zum Ausruhen gegeben wurde, bevor ein Foto ausgelöst wurde.
Es ist erwähnenswert, dass alle folgenden Ergebnisse aus demselben Motor und demselben physikalischen Motorschritt stammen, um die Vergleichbarkeit zu gewährleisten. Außer der Berechnung des Wellenpositionswinkels wurde nichts gemittelt oder anderweitig verarbeitet. Allerdings wurden alle Tests mehrmals auf unterschiedlicher Hardware durchgeführt (z. B. dem gleichen Treiber-IC, aber unterschiedlichen Breakout-Boards aus unterschiedlichen Quellen), um die Verlässlichkeit der Ergebnisse sicherzustellen. Sogar die skurrilen Ergebnisse (wie beim DRV8825) waren auf verschiedenen Setups reproduzierbar. Bitte beachten Sie, dass die folgenden Grafiken den falschen Eindruck einer zeitkontinuierlichen Messung erwecken können. Sie zeigen tatsächlich eine Reihe diskreter Messungen an den Markierungen auf der x-Achse, und nur das Liniendiagramm sollte es einfacher machen, die Nichtlinearitäten auf einen Blick zu erkennen.
Der Allegro A4988 auf einem Pololu-ähnlichen Schritttreiber-Breakout-Board schnitt sowohl unbelastet als auch unter Last am besten ab. Obwohl es nur 1 A pro Phase liefert, erreichte es im unbelasteten Test sehr lineare, gleichmäßig verteilte Mikroschritte mit kleinen, aber reproduzierbaren Abweichungen von der Idealposition innerhalb von ± 1 Mikroschritt. Interessanterweise zeigt der A4988 seine größte Abweichung bei der Halbschrittposition.
Es überrascht nicht, dass sich die Schaftposition unter Last deutlich verlagert: mehr als einen halben Vollschritt. Da verschwindet der Traum von unendlicher Auflösung. Allerdings zeigt die Grafik auch, dass auch die Vollschrittstellungen von dieser Auslenkung nicht verschont bleiben, obwohl sie durch das leichte Rastmoment des Motors unterstützt werden.
Der DRV8825 von Texas Instruments auf einem Pololu-ähnlichen Schritttreiber-Breakout-Board schnitt am schlechtesten ab. Ich habe die Messung mehrmals mit verschiedenen Breakout-Boards aus unterschiedlichen Quellen wiederholt, alle ergaben Kurven, die fast identisch mit dieser waren. Da der Treiber jedoch in der Lage ist, dem Motor einen höheren Strom von 2,2 A zuzuführen, zeigt er bei Voll- und Halbschritt-Stellung eine deutlich geringere Auslenkung unter Last.
Sowohl beladen als auch unbeladen funktioniert der DRV8825 gut, bis er den Halbtonschritt erreicht. Dann springt es innerhalb eines einzigen Mikroschritts fast zur nächsten Vollschrittposition. In umgekehrter Richtung funktioniert es wieder gut, bis es den Halbton erreicht – dieses Mal in der anderen Hälfte des Volltons –, bevor es in die ursprüngliche Volltonposition zurückfällt. Das Verhalten ist schwer zu erklären. Zumindest Mängel im Stromerfassungspfad des Motors sollten sich gleichmäßiger auf die Positionierung auswirken. Ich bin sicher, dass Hackaday-Leser dazu beitragen können, dieses Verhalten des DRV8825 zu erklären, zu bestätigen oder zu widerlegen, oder vielleicht auf Fehler im Messaufbau hinweisen, die diese Ergebnisse verursacht haben könnten.
Ich muss zugeben, dass ich von der billigen, roten ST6560T4-Treiberplatine mit vier Toshiba TB6560AHQ 3A-Motortreiberkanälen nicht viel erwartet habe, aber es ist ein großartiger Treiber-IC und hat überraschend gut funktioniert. Die Treiber wurden für diesen Test auf 2,25 A eingestellt und erreichten im unbelasteten Zustand eine gute Linearität über die gesamte Mikroschrittsequenz mit einer Abweichung von ± 2 Mikroschritten.
Allerdings gab es reproduzierbare Nichtlinearitäten an der oberen Vollschrittposition, die der A4988 nicht zeigte, und das Verhalten des TB6560AHQ unter Last weicht deutlich vom Leerlaufverhalten ab. Überraschend ist auch, dass der Motor unter der Last um mehr als einen halben Vollschritt ausgelenkt wird, da der höhere Strom das Motordrehmoment ähnlich wie beim DRV8825 erhöhen sollte.
Ich hoffe, dieser Artikel und die Messergebnisse helfen Ihnen bei Ihren Designentscheidungen und bei der Arbeit mit diesen sehr verbreiteten Treibern. Ich habe diese Tests für einen eher engen Anwendungsbereich durchgeführt und sie sollten nicht zu sehr verallgemeinert werden. Obwohl ich folgende Schlussfolgerung wage:
Schrittmotoren in schwereren Maschinen wie CNC-Fräsmaschinen, die Mikroschritt mit offenem Regelkreis nutzen, profitieren vor allem von den reduzierten Vibrationen und der geringeren Drehmomentwelligkeit des Mikroschrittmodus. Sie können sich nicht auf Mikroschritte als Mittel zur Erhöhung der Positionierungsgenauigkeit verlassen (zumindest nicht ohne große Drehmomentmargen beizubehalten), da eine Last die Position der Achse immer noch um mehr als einen Vollschritt verfälschen kann.
Allerdings können kleine und leichte Anwendungen mit geringer Last und geringer Reibung tatsächlich auf Mikroschritt als kostengünstigen Trick zurückgreifen, um mehr Genauigkeit aus einem Standard-Schrittmotor herauszuholen. Selbst mit einem billigen Motortreiber mit geringem Stromverbrauch, wie zum Beispiel dem sehr leistungsstarken A4988, ist eine genaue Winkelpositionierung möglich, solange die Last niedrig gehalten wird, idealerweise innerhalb des inkrementellen Drehmoments eines Mikroschritts.
Wie immer freue ich mich über Ihre Gedanken, Meinungen und Erfahrungen zum Thema dieses Beitrags. Was ist mit meinen DRV8825s los? Auf welche Schrittmotortreiber verlassen Sie sich am häufigsten? Lass es uns in den Kommentaren wissen!