Archive for September, 2016

Stromregler als Ursache für Positionierfehler im Mikroschritt

Sonntag, September 4th, 2016

Schrittmotor-Treiber ICs werden immer leistungsfähiger, kleiner und preiswerter. Mikroschrittauflösungen von 1/16 oder 1/32 sind heute bereits Standard, Auflösungen bis 1/256 eines Vollschritts sind ebenfalls verfügbar. Dass diese höhere Auflösung nicht mit der erreichbaren Positioniergenauigkeit gleichzusetzen ist, wurde hier bereits im Beitrag „Die Bedeutung des Lastwinkels bei Schrittmotoren“ diskutiert. Neben den mechanischen Einflüssen wie der angetrieben Last und der Fertigungsqualität des Schrittmotors gibt es aber einen weiteren, nicht zu unterschätzenden Einflussfaktor: Die Schrittmotorsteuerung selbst.

In verschiedenen Foren zu den Themen 3D-Druck und low-cost CNC finden sich Hinweise, dass es speziell bei einigen mit A4988 oder DRV8825 bestückten „Shields“, z.B. von Pololu und deren Nachbauten (z.B. StepStick), Genauigkeitsprobleme bei langsam laufenden Motoren gibt. Dabei scheint der Motor einen Mikroschritt auszulassen bzw. zu überspringen. Besonders kleine Motoren mit niedrigen Strömen sind für diesen Effekt anfällig. Eine kontroverse Diskussion dazu findet sich z.B. im deutschen Teil des Reprap-Forums unter dem Titel „A4899 / DRV8825 Decay Hack“ (Achtung, Zahlendreher im Thread-Titel. Richtig ist A4988!). Ein übersprungener 1/16-Schritt scheint auf den ersten Blick kein großes Problem zu sein. Der dabei entstehende Winkelfehler beträgt lediglich 0,1125°, was besonders bei mechanisch einfachen Aufbauten wenig erscheint. Wie sehr sich dieser Fehler z.B. beim 3D-Druck auf die Oberflächen-Qualität auswirken kann, zeigt das Beispiel des Reprap-Users „lukie80“ aus o.g. Diskussion. Anhand der gedruckten Musterbeispiele erkennt man deutlich den Einfluss der Treiber-Einstellungen auf die Bauteilqualität, wenn der Extruder von einem Treiber angesteuert wird, der das hier besprochene Problem aufweist.

Durch Mikroschritt-Abweichungen verursachte Artefakte beim 3D-Druck [Quelle: Reprap-Forum, user

Durch Mikroschritt-Abweichungen verursachte Artefakte beim 3D-Druck [Quelle: Reprap-Forum, user „lukie80“]

Was ist nun eigentlich die Ursache für dieses Problem? Vereinfacht gesagt schafft es das Treiber-IC nicht, den Wicklungsstrom in der Nähe des Nulldurchgangs fein genug zu regeln. Der für den ersten Mikroschritt nach dem Nulldurchgang nötige geringe Strom fällt dadurch zu hoch aus, so dass der Motor bereits beim ersten Mikroschritt weiter dreht als eigentlich gewünscht. Beim nächsten Mikroschritt fällt die Bewegung entsprechend kleiner aus. Neben der Positionsabweichung kann der ungleichmäßige Lauf auch zu störenden Geräuschen und Vibrationen der angetrieben Mechanik führen. Allegro MicroSystems weist im Datenblatt des A4988 explizit auf diese Problematik hin und liefert gleich eine mögliche Lösung mit. Einen Hinweis darauf gab es bereits 2012 im Blog von Hydraraptor. Die dort diskutierte Verlängerung der Ausschaltzeit t_off führt dazu, dass der Stromregler so langsam wird, dass er im hörbaren Bereich arbeitet. Beim A3977 oder dem in der Tiny-Step II verwendeten Nachfolger A3979 kann dagegen über ein RC-Glied auch die minimale Einschaltzeit (und die Dauer der Fast-Decay Phase) beeinflusst werden, wodurch die Schaltfrequenz höher ausfallen kann und der Effekt abgemildert wird.

Abweichung vom Stromsollwert nach dem Nulldurchgang bei Slow-Decay [Quelle: Datenblatt A4988].

Abweichung vom Stromsollwert nach dem Nulldurchgang bei Slow-Decay [Quelle: Datenblatt A4988].

Ob dieses Problem auftritt, hängt also davon ab, welche Art der Stromregelung das verwendete IC in welcher Phase benutzt. Moderne Treiber-ICs unterstützen verschiedene Betriebsarten der Stromregelung (Slow-, Mixed- und Fast-Decay) und müssen vom Schaltungsentwickler entsprechend auf den jeweiligen Motor angepasst werden. Bei der Entwicklung universell einsetzbarer Schrittmotorsteuerungen (die also nicht für einen konkreten Motor entwickelt werden), muss ein geeigneter Kompromiss zwischen den Vor- und Nachteilen der verschiedenen Betriebsarten gefunden werden. Eine nachträgliche Anpassung durch den Anwender ist in der Regel nicht vorgesehen und würde viele Benutzer wohl auch überfordern. Beim L297 konnte man den Effekt beim Wechsel von slow decay auf fast decay (dort noch Phase bzw. Inhibit chopping genannt) leicht durch Ausprobieren herausfinden, z.B. auf der 3D-Step durch Änderung des Jumpers „MODE“. Heutige Treiber unterstützen deutlich mehr unterschiedliche Einstellungen, die z.T. durch Anpassen von Bauteilwerten justiert werden müssen. Die Unterschiede im Regelungsverhalten treten außerdem nicht mehr so deutlich zu Tage wie beim L297.

Bei den Motorshields mit A4988 und DRV8825 wurden die Hinweise in den Datenblättern offenbar übersehen, nicht verstanden oder aus anderen Gründen nicht umgesetzt. Im Blog von Cabristor findet sich eine Problemanalyse zum Thema. Als Abhilfe-Maßnahme werden dort zusätzliche Dioden in den Zuleitungen zum Motor eingesetzt, was aber entsprechende Verluste in den Dioden verursacht, die effektiv an der Wicklung liegende Spannung reduziert und somit letztlich die Dynamik des Motors reduziert. Wirksamer ist unter Umständen eine Anpassung direkt auf dem Motorshield. Anwendern der betroffenen Module bleibt damit die Möglichkeit, selbst zum Lötkolben zu greifen und die Shields zu patchen, wie es auch im Reprap-Forum beschrieben ist. Beim A4988 muss der Pin ROSC auf Masse (GND) gelegt werden, um Mixed-Decay auch in Phasen des Stromaufbaus zu aktivieren. Diesen Betrieb unterstützt der DRV8825 nicht. Es bleibt nur die Möglichkeit, vollständig auf Fast-Decay umzuschalten, indem Pin19 (DECAY) auf +5V gezogen wird. Nachteil ist ggf. ein höheres Betriebsgeräusch der Motoren durch den höheren Ripple-Anteil im Motorstrom. Bei offenem Pin arbeitet der Treiber zwar mit Mixed-Decay, allerdings nur in Phasen in denen der Strom abgebaut werden soll.

Inzwischen sollen Motorshields mit den genannten Treibern erhältlich sein, die bereits entsprechend geändert sind. Ob die Änderungen für größere Schrittmotoren ebenfalls optimal sind, muss man im Zweifelsfall ausprobieren. Bei Motor-Treibern mit Konfigurationsmöglichkeit über eine digitale Schnittstelle (wie SPI oder I²C) bieten sich je nach konkreter Realisierung der Schrittmotorsteuerung auch für den Endanwender Möglichkeiten, den Treiber an den verwendeten Motor anzupassen. Bei ICs mit externer H-Brücke bzw. externen FETs kann sogar das Zeitverhalten der H-Brücke angepasst werden. Interessante Konfigurationsmöglichkeiten bietet z.B. der DRV8711 von TI, den ich auf meinem neuen Schrittmotor-Treibermodul smOOver.drv einsetze. Durch die guten Einstellmöglichkeiten ergibt sich bei optimaler Anpassung auf den verwendeten Motor ein besonders weicher und ruhiger Motorlauf.