Schritt für Schritt

Der Pragmatische Architekt  –  0 Kommentare

Schrittmotoren erlauben eine wesentlich präzisere Steuerung als Servo- oder Gleichstrommotoren. Dafür benötigen Sie einen komplexeren Aufbau. Was es mit Schrittmotoren auf sich hat, wie man sie in Schaltungen ansteuert und wofür sie nützlich sind, erläutert die vorliegende Folge.

Sobald Sie Gleichstrommotoren verwenden, erhalten Sie hohe Geschwindigkeiten. Die Nutzung der langsameren Servos erlaubt eine etwas genauere Positionierung und mehr Drehmoment. Brauchen Sie jedoch hohes Drehmoment und Präzision bei der Positionierung, eignen sich dafür weder Gleichstrommotoren noch Servos besonders gut.

In diesen Fällen sind Schrittmotoren die beste Wahl, wie sie zum Beispiel in Druckern und Laufwerken ihre Arbeit verrichten. Die Einsatzgebiete dieses Motortyps sind vielfältig. Dementsprechend viele Arten von Schrittmotoren gibt es. Was also hat es mit Schrittmotoren auf sich?

Funktionsprinzip

Animation eines Schrittmotors (Bild: wikipedia.org)

Der Stator eines Schrittmotors besteht aus mehreren in einem Kreis gleichmäßig verteilten Spulen, der Rotor hingegen aus Weicheisen, Permanentmagneten oder aus einer hybriden Mischung beider Optionen. Einfach ausgedrückt, funktionieren Schrittmotoren, indem sie die am Stator angebrachten Spulen reihum aktivieren und den Rotor durch magnetische Felder Schritt für Schritt mit sich führen.

Im einfachsten Fall besteht der Rotor aus einen Abfolge von alternierend gepolten Permanentmagneten und der Stator aus Spulenpaaren, die jeweils entgegengesetzte Pole besitzen. Durch abwechselnden Stromfluss reihum durch die verschiedenen Spulenpaare entsteht ein Magnetfeld, was den Rotor in Bewegung bringt. Jedes Spulenpaar definiert eine Phase. Die Schrittlänge dieses einfachen Schrittmotors hängt von der Zahl der Spulen ab, hat also systembedingte Grenzen.

Reluktanzmotoren wie der in der Animation sind komplexer, aber leistungsfähiger. Sie besitzen Spulen im Stator und einen gezahnten Rotor aus Weicheisen. Die einzelnen Spulen im Stator sind unterteilt und besitzen dadurch ebenfalls Zähne. Solange kein Strom fließt, existiert auf dem Rotor kein Magnetfeld. Durch Anlegen einer Spannung an einer der Spulen entsteht ein magnetischer Fluss. Die Rotorzähne, die der aktiven Spule des Stators nahe liegen, bewegen sich zum jeweils nächstgelegenen Zahn des Stators, um den magnetischen Widerstand zu reduzieren. Der Rotor legt somit einen Schritt zurück. Die Spulen werden nacheinander zyklisch aktiviert bzw. deaktiviert und bewegen den Rotor Schritt für Schritt.

Normalerweise ergeben sich die Positionen des Rotors also exakt aus den bisherigen Schritten. Ein regelndes Element wie ein Encoder ist im Allgemeinen nicht notwendig. Manchmal kann es durch Überlastung aber dazu kommen, dass der Motor ein paar Schritte überspringt. Das lässt sich verhindern, indem beispielsweise Überlastungen vermieden oder nach übersprungenen Schritten entsprechende Korrekturmaßnahmen ergriffen werden.

Die Spulen eines Stators können unipolar oder bipolar ausgelegt sein. Im ersteren Fall fließt der Strom in den Spulen immer nur in eine Richtung. Der Stator ordnet die Spulen in diesem Fall so an, dass die Magnetfelder der Spulen alternieren. Bei bipolaren Spulen lässt sich in jeder Spule die Stromrichtung und damit das Magnetfeld umdrehen.

Rotor und Stator arbeiten im Schrittmotor berührungslos, haben also keine Bürsten wie ein Gleichstrommotor, um die Rotorspulen unter Strom zu setzen. Hier ist von "brushless motors" die Rede. Bürstenlose Motoren haben weniger Verschleiß und sind leiser.

Artenvielfalt und Anwendungsgebiete

Einige Schrittmotoren erlauben, die angelegten Spannungen zu variieren, um dadurch noch feinere "Zwischenschritte" zu ermöglichen. Es gibt also ein weites Spektrum unterschiedlicher Bauarten von Schrittmotoren, was im Übrigen auch für ihre Preisspanne zutrifft.

Der Branchenverband NEMA (National Electrical Manufacturers Association) hat Schrittmotoren genormt und durchnummeriert (NEMA1-2011). Die Motoren unterscheiden sich dort nach Flanschmaß (Innendurchmesser einer Manschette, die den zylindrischen Motor der Breite nach umschließen kann) und dem charakteristischen Haltemoment.

Beispiele:

  • NEMA 08, 20x20, 0,036 Nm
  • NEMA 11, 28x28, 0,1 Nm
  • NEMA 14, 35x35, 0,3 Nm
  • NEMA 17, 42x42, 0,5 Nm

Die Vorteile von Schrittmotoren sind, wie gesagt, ihre Präzision und der große Drehmoment. Ein Nachteil sind die typischen, ruckartigen Bewegungen. Schrittmotoren finden sich in Druckern, 3D-Druckern, und Laufwerken, falls Sie einmal die Gegend auf der Suche nach ihnen durchforsten wollen. Und der "Motor" Ihrer Quarzuhr ist ebenfalls ein Schrittmotor.

Pololu 1207 als Beispiel

Beispiel für einen Schrittmotor:der Pololu 1207 (Bild: pololu.com)

Es gibt fast so viele Schrittmotoren wie Sand am Meer. Ich verwende für die Schaltung dieser Folge einen Pololu 1207 vom Typ NEMA-14. Es handelt sich um einen bipolaren hybriden Schrittmotor mit 200 Schritten pro Umdrehung. Jeder Schritt bedeutet eine Drehung um 1,8°. Das ist ein guter Wert und für die meisten Zwecke völlig ausreichend.

Der Motor enthält zwei Spulen, deren Stromkreise mit je zwei Kabeln nach außen geführt sind. Nötig sind als Stromversorgung 7,4 V als Spannung und 280 mA per Spule. Dafür reicht der Stromversorgung durch den Arduino bei weitem nicht aus. Wir brauchen daher zum einen eine externe Stromquelle und zum anderen einen Motortreiber oder besser ein Motor-Shield.

Beispiel

Ohne Motor-Treiber-IC oder Motor-Shield ist der Einsatz von Schrittmotoren nicht empfehlenswert, weil dazu eine Schaltung nötig ist, die mehrere Transistoren, mindestens zwei Half-Bridges, dazu Kondensatoren, Dioden und Widerstände erfordert. Im Endeffekt bauen sich Entwickler dann ihr eigenes, recht voluminöses Motor-Shield selbst. Auch der größere Programmieraufwand spricht dagegen. Sind zwei Schrittmotoren im Spiel, erhöht sich der Gesamtaufwand entsprechend. Für den Arduino Uno verwende ich das Adafruit Motor-Shield Version 1.x, das als Nachbau ab 4 Euro zu erwerben ist.

Schrittmotoren für kleinere Projekte haben entweder vier Anschlüsse (bipolarer Schrittmotor) oder fünf (unipolarer Schrittmotor). Im letzteren Fall ist der mittlere Anschluss für gemeinsames GND. Im Datenblatt des Schrittmotors sehen Sie, welche Spulen es gibt, und über welche Anschlüsse sie gesteuert werden. Beim Pololu 1207 gibt es laut Datenblatt zwei Spulen.

Die zwei Spulen des Pololu 1207 Steppers mit Anschlusskabeln in Schwarz, Grün, Rot und Blau

Wir verbinden der Reihe nach das schwarze und das grüne Kabel mit den Anschlüssen für Motor 1 (auf dem Motor-Shield), das rote und das blaue Kabel mit den Anschlüssen für Motor 2 (auf dem Motor-Shield). Einen zweiten Stepper würden Sie dementsprechend an Motor 3 und 4 anschließen.

Anschluss des bipolaren Schrittmotors Pololu 1207 an das Adafruit Motorshield V1

Am externen Stromeingang des Shields bringen Sie am besten die Ausgänge eines geregelten, schaltbaren Netzteils an.

Motor Shield per Bibliothek

Die Hersteller von Motor-Shields stellen Bibliotheken zur Verfügung, um die angeschlossenen Motoren anzusprechen. Im Beispiel von Adafruit Motorshield V1 erfolgt der Download über Github. Ausführliche Information finden Sie in einem dafür bereitgestellten Dokument. Dort finden Sie auch einen Sketch zum Testes des Steppers. Im Sketch habe ich lediglich die Informationen für den Pololu eingefügt und die Kommentare ins Deutsche übersetzt. Sie sehen im Code, wie sich ein Schrittmotor auf verschiedene Weise ansteuern lässt.

Sobald Sie Schrittmotoren über das Adafruit Motor-Shield steuern, braucht das Shield folgende Pins des Arduino:

  • Digitaler Pin 11: Gleichstrommotor #1 / Schrittmotor #1 (Aktivierung/Geschwindigkeitsregelung)
  • Digitaler Pin 3: Gleichstrommotor #2 / Schrittmotor #1 (Aktivierung/Geschwindigkeitsregelung)
  • Digitaler Pin 5: Gleichstrommotor #3 / Schrittmotor #2 (Aktivierung/Geschwindigkeitsregelung)
  • Digitaler Pin 6: Gleichstrommotor #4 / Schrittmotor #2 (Aktivierung/Geschwindigkeitsregelung)
  • Digitale Pins 4, 7, 8 und 12 verwendet, um den Gleichstrommotor/Schrittmotor mittels Shiftregister 74HC595 anzusteuern

Der folgende, modifizierte Sketch demonstriert die Kontrolle des Schrittmotors (Pololu 1207) über Arduino Uno und Adafruit Motor-Shield v1.x.

#include <AFMotor.h>

// Anschluss eines Schrittmotors Pololu 1207 mit
// 200 Schritten per Umdrehung (d.h., 1.8°)
// Anschluss an Motor-Port #1 (M1 und M2)
AF_Stepper motor(200, 1);
// Ein zweiter Stepper dieser Bauart würde an M3,M4 angeschlossen
// Definition wäre AF_Stepper motor2 AF_Stepper(200, 2);

void setup() {
Serial.begin(9600); // Geschwindigkeit 9600 Baud
Serial.println("Schrittmotoren Test!");

motor.setSpeed(10); // 10 Umdrehungen/Minute
}

void loop() {
Serial.println("100 Schritte mit einer Spule");
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);

Serial.println("100 Schritte mit zwei Spulen");
motor.step(100, FORWARD, DOUBLE);
motor.step(100, BACKWARD, DOUBLE);

Serial.println("100 Schritte mittels Interleaving");
motor.step(100, FORWARD, INTERLEAVE);
motor.step(100, BACKWARD, INTERLEAVE);

Serial.println("100 Mikroschritte");
motor.step(100, FORWARD, MICROSTEP);
motor.step(100, BACKWARD, MICROSTEP);
}

Sie wundern sich sicher über die verschiedenen Parameter SINGLE, DOUBLE, INTERLEAVE und MICROSTEP im Sketch. Damit hat es folgende Bewandtnis:

  • SINGLE: Immer nur eine Spule ist aktiv.
  • DOUBLE: Beide Spulen sind gleichzeitig im Einsatz.
  • INTERLEAVE: Alternierend sind eine oder zwei Spulen aktiv, um Halbschritte zu erreichen, wodurch sich aber die Geschwindigkeit halbiert.
  • MICROSTEP: Aufeinanderfolgende Spulen werden gezielt ein- und ausgeschaltet, um kleinere Microsteps zu ermöglichen, was aber einen Verlust an Drehmoment nach sich zieht.

Ein großer Schritt für den Maker, ein kleiner für Johnny-Five

Leider unterstützt Johnny-Five keine Schrittmotoren mit Anschluss über Adafruits Motor Shield Version 1.x. Wer trotzdem Schrittmotoren über JavaScript und Arduino steuern will, ist auf eine andere Lösung angewiesen. In unserem Beispiel kommt der EasyDriver zum Einsatz.

Ein einfaches Breakout-Board zum Anschluss eines Steppers

Die in der Johnny-Five-Dokumentation vorgeschlagene Schaltung schaut wie folgt aus:

Nutzung von EasyDriver zum Anschluss eines Schrittmotors über Johnny-Five (Bild: johnny-five.io)

Das Skript steuert über Arduino Digital-Pin 3 die Schritte und über Pin 2 die Richtung des Schrittmotors.

// j5-steppertest.js
var board = new five.Board();

board.on("ready", function() {
var stepper = new five.Stepper({
type: five.Stepper.TYPE.DRIVER,
stepsPerRev: 200,
pins: [3, 2]
});

stepper.rpm(180).ccw().step(2000, function() {
console.log("done");
});
});

StandardFirmata ist für das Steuern von Schrittmotoren unzureichend. Stattdessen benötigen Sie entweder AdvancedFirmata auf Ihrem Arduino oder Sie erzeugen sich – als bevorzugte Option – mit dem Firmata Builder eine entsprechende Version. Sie erinnern sich vielleicht noch, dass Sie im letzteren Fall vorher die Bibliothek ConfigurableFirmata in die Arduino IDE laden müssen, sollten Sie das noch nicht getan haben.

Übertragen Sie also erst das geeignete Firmata auf Ihren Arduino, und rufen dann das folgende Skript auf:

       node j5-steppertest.js

Und experimentieren Sie wie immer mit dem Skript, um ein Gefühl für das Zusammenspiel von Hardware und API zu bekommen. Das macht Spaß und ist lehrreich.

Zusammenfassung

Damit schließen wir vorläufig unsere Betrachtung von Motoren. Kennengelernt haben wir in den vergangenen drei Folgen Gleichstrommotoren, Servomotoren und Schrittmotoren. Deren Einsatz erfolgt am besten über ein Motor-Shield. Direkt am Arduino sollten Sie Motoren nicht betreiben, da eine externe Stromversorgung unverzichtbar ist. Zumindest eine Half-Bridge mit entsprechender Leistungsfähigkeit ist von Nöten.

Natürlich gibt es noch eine ganze Reihe weiterer Motortypen, etwa Linearmotoren, Synchronmotoren, Asynchronmotoren, Wechselstrommotoren. Deren Besprechung würde ein ganzes Buch erfordern. Außerdem spielen diese Motorarten bei IoT bzw. Arduino-Anwendungen eine sehr untergeordnete Rolle.