Archive for Mai, 2014

Ansteuern von Schrittmotoren mit Arduino

Montag, Mai 5th, 2014

Ein Arduino Controller kann verwendet werden, um eigenständige interaktive Objekte zu steuern oder um mit Softwareanwendungen auf Computern zu interagieren (z. B. Adobe Flash, Processing, diverse Skriptsprachen, Terminal etc.). Arduino wird beispielsweise auch an Kunsthochschulen genutzt, um interaktive Installationen aufzubauen. Die Hardware besteht aus einem einfachen I/O-Board mit einem Mikrocontroller und analogen und digitalen Ein- und Ausgängen. Die Entwicklungsumgebung verwendet die Programmiersprache Processing, die auch technisch weniger Versierten den Zugang zur Programmierung und zu Mikrocontrollern erleichtern soll. [Quelle: Wikipedia]

Um es Einsteigern in die Welt von Elektronik und Mikrocontrollern möglichst einfach zu machen, gibt es für die Arduino-Plattform eine große Vielfalt an steckbaren Erweiterungsmodulen, so genannte „Shields“. Auch für die Ansteuerung von Motoren sind diverse Shields erhältlich. Sie bestehen oft nur aus einem Treiberchip mit der minimalen Basisbeschaltung. Über die kleine Platine kann kaum Verlustleistung abgeführt werden, zudem fehlt es für größere Motoren an ausreichend dimensionierten Pufferelkos. Auch Schutzbeschaltungen (Kurzschlussschutz, Optokoppler in Richtung Controller) sind die absolute Ausnahme. Das Experimentieren mit Motoren kann so schnell zu einem frustrierenden Erlebnis werden, wenn mit den Motoren „reale“ Lasten angetrieben werden sollen. Im folgenden Beitrag wird gezeigt, wie man mit einem Arduino mit Hilfe der AccelStepper-Bibliothek über wenige I/Os nahezu alle Schrittmotorsteuerungen mit Takt-/Richtungsinterface ansteuern kann.

Zur Arduino Entwicklungsumgebung gehört auch eine einfache Bibliothek zur Ansteuerung von Schrittmotoren. Sie geht jedoch davon aus, dass die Motorwicklungen direkt oder mittels zwischengeschalteter Transistoren über die I/Os des Prozessors angesteuert werden (Verwendung von zwei Ausgängen je Motorwicklung, insgesamt 4 Ausgänge). Beschleunigungs- und Bremsrampen sind nicht vorgesehen. Durch diese einfache Ansteuerung lässt sich nur ein geringes Drehmoment bei niedrigen Drehzahlen erreichen. Die AccelStepper-Library unterstützt dagegen auch so genannte 2- und 3-Draht Interfaces sowie den Typ „Driver“. Gemeint ist damit die Ansteuerung von integrierten Treibern über Takt- und Richtungssignale. Es ist auch möglich, eigene Interface-Definitionen einzuführen, wie im Beispiel zu diesem Beitrag gezeigt wird. Wie der Name andeutet, implementiert die Lib außerdem Beschleunigungs- und Bremsrampen. Über die Bibliothek können zudem mehrere Motoren gleichzeitig angesteuert werden, was die Anwendungsmöglichkeiten von Arduino für Projekte mit Motoren deutlich erweitert.

Anschluss der Tiny-Step Endstufe an den Arduino Controller

Anschluss der Tiny-Step Endstufe an den Arduino Controller

Das Bild zeigt den Anschluss der Takt-Richtungsendstufe Tiny-Step II, welche auf dem A3979 von Allgero Micro basiert. Der Treiber realisiert Motorströme bis 2,25A bei bis zu 35V bei Mikroschritt-Auflösungen bis 1/16. Durch das durchdachte Kühlkonzept werden die genannten Leistungsdaten auch im Dauerbetrieb sicher erreicht. Der integrierte, selbstrückstellende Kurzschlussschutz sichert die Schaltung vor Schäden durch falsche Beschaltung. Neben den Anschlüssen für Takt und Richtung (grün und gelb) werden auch Ausgänge für Enable (Einschalten der Endstufe) und Stromabsenkung ausgegeben sowie ein Fehlersignal von der Endstufe über einen Eingang eingelesen. Diese Signale sind optional. Der fertige Aufbau ist im folgenden Bild zu sehen, angeschlossen ist ein Nema17 Motor mit 0,5Nm Haltemoment. Auch kleinere Nema23 Motoren können mit diesem Aufbau angesteuert werden.

Testaufbau mit Arduino, Tiny-Step und Schrittmotor von Nidec Servo

Testaufbau mit Arduino, Tiny-Step und Schrittmotor von Nidec Servo

Nach dem gleichen Prinzip und hier sogar mit der identischen I/O-Beschaltung lassen sich aber auch deutlich leistungsfähigere Endstufen an den Arduino anbinden. Das folgende Bild zeigt einen Aufbau mit einer Endstufe vom Typ LAM DS1078 (bis 14A bei bis zu 90V), die einen Nema34 Motor mit 3,1Nm antreibt. Die DS10-Serie ist eine industrietaugliche Serie von Schrittmotorendstufen mit SPS-kompatiblen I/Os. Durch den Einsatz dieser Kraftpakete ergeben sich mit dem Arduino ganz neue Möglichkeiten.

Testaufbau mit LAM DS1078

Testaufbau mit LAM DS1078

Das Programmierbeispiel (Arduino-Projekte werden auch Sketch genannt) ist auf Git-Hub frei zum Download verfügbar. Ich würde mich über Rückmeldungen zum Einsatz der Accellib freuen.