Elektromotoren können relativ einfach gesteuert werden, indem sie mit einer Spannungsquelle verbunden werden. Dabei gibt es nur zwei Zustände: der Motor dreht sich rechts herum oder links herum, je nach dem wie die Anschlüsse gepolt werden.
Um die Richtung des Motors zu wechseln, muss der Stromfluss in der Spule umgekehrt werden. Um dies ohne manuelles umpolen der Spannungsquelle zu erreichen, ist eine spezielle Schaltung erforderlich, die auf geschickte Art das automatische Umpolen ermöglicht. Die Schaltung hat ihren Namen von der Form wie die Schalter angeordnet sind. Da sie wie ein „H“ aus sieht wird sie als H-Schaltung oder H-Brücke bezeichnet. Eine solche H-Brücke sieht schematisch so aus:
Die rote Linie zeigt den Stromweg für die jeweilige Drehrichtung. Sind die Schalter 1 und 4 geschlossen, so dreht sich der Motor rechts herum. Schliesst man die Schalter 2 und 3 dreht sich der Motor in die andere Richtung. Wobei zu beachten ist, dass nicht alle theoretisch möglichen Schalterstellung zugelassen werden, um beispielsweise Kurzschlüsse zu vermeiden. Die Betriebsspannung U ist die Spannung für den Motor, die meist unabhängig von der Logik ist und auch höher gewählt werden kann als 12 V.
Die Geschwindigkeit eines Motors ist direkt proportional zur angelegten Spannung. Dies ermöglicht eine Geschwindigkeitsregulierung, indem eine Puls-Weiten-Modulation (PWM) verwendet wird.
Pulsweitenmodulation oder PWM ist eine Technik, die digitale Methoden verwendet, um analoge Ergebnisse zu erhalten. Bei der Pulsweitenmodulation nimmt man ein Rechtecksignal mit einer festen Frequenz und variiert die Breite der jeweiligen Pulse. Den Abstand zweier aufeinander folgender Pulse bezeichnet man als Periodendauer, die Breite des aktiven Pulses als Pulsweite. Das Verhältnis von Pulsweite zu Periodendauer bezeichnet man auch als "Duty Cycle"(also die Zeit, in der der Pin im Dienst ist). Geschwindigkeitsregelung an einem Gleichstrommotor ist möglich, weil die Geschwindigkeit eines Motors direkt proportional zur angelegten Spannung ist. Somit ermöglicht die Veränderung der Spannung über das erzeugte Verhältnis T1 zu T1+T2 die Geschwindigkeitsregulierung am Motor.
Um also selbst ein PWM Signal zu erzeugen benötigt man einen Ausgangsport und die Festlegung einer konstanten Periodendauer z.B. T = 1000ms. Anschliessend legt man fest, wie das Verhältnis zwischen eingeschaltetem Signal und ausgeschaltetem Signal sein soll (das ist genau der sogenannten Dutycycle DC) z.B. $t_{ein} = 500 ms$ und $t_{aus} = 500 ms$, was in unserem Beispiel dann zu einem DC-Wert von 0,5 oder 50% führt. Also das Signal gleich lange an- und ausgeschaltet ist: $U_m = V_{cc} \cdot DC = 0,5 \cdot V_{cc} $, wodurch ein Motor sich mit der Hälfte der maximalen Drehzahl drehen müsste.
Der Arduino bietet von Haus aus die Möglichkeit an bestimmten Pins ein PWM Signal zwischen 0V und 5V auszugeben. Der Befehl AnalogWrite(...) ermöglicht PWM-Signale mit einer Auflösung von 8 Bit und einer PWM-Frequenz von 490 Hz an die Pins D3, D9, D10 und D11 bzw. mit 980 Hz an Pin D5 und D6 auszugeben.
In der Praxis verwendet man keine einzelnen Transistoren sondern hochintegrierte Schaltkreise, die sämtliche Bauteile für eine Motorsteuerung enthalten. Ein Beispiel wäre der Baustein L293 D, der über 600mA Strom liefern kann. Daneben gibt es noch weit leistungsstärkere wie den L298 D der mit über 2A Motoren steuern kann. Im nachfolgenden Blockschaltbild ist der prinzipielle Aufbau schematisch dargestellt:
Die Ansteuerung eines Motors ist damit relativ unkompliziert machbar. Wichtig ist dabei auf die unterschiedlichen Spannungsversorgungen zu achten. Der Baustein kann ohne Probleme mit 5V Spannung vom Arduino betrieben werden. Da die zu steuernden Motoren aber meist größere Spannungen benötigen, besteht die Möglichkeit eine externe Spannungsquelle an PIN 8 des Bausteins anzuschliessen. Der Masse Anschluss wird dagegen von beiden Spannungen verwendet.
Die Steuerung des Motors erfolgt über die beiden Eingänge IN1 und IN2 die mit den digitalen Ausgängen des Arduinos verbunden werden. Dabei können folgende vier Zustände auftreten:
Die einfachste Steuerung des Motors mit einem Arduino kann mit folgendem Programm umgesetzt werden. Dabei wird auf eine Geschwindigkeitssteuerung verzichtet. Der Motor wir so angesteuert, dass eine vorwärts und rückwärts Bewegung erfolgt:
// Arduino steuert einen DC Motor
// über den L923 Baustein
const int PIN_A = 7;
const int PIN_B = 8;
void setup () {
Serial.begin(9600);
pinMode(PIN_A , OUTPUT);
pinMode(PIN_B , OUTPUT);
// Motor nach rechts drehen
digitalWrite(PIN_A, LOW);
digitalWrite(PIN_B, HIGH);
// Motor nach links drehen
digitalWrite(PIN_A, HIGH);
digitalWrite(PIN_B, LOW);
void loop() { }
Um die Geschwindigkeit mit einem L293 Baustein zu steuern, stehen zwei Eingänge für ein PWM Signal bereit: Für die Ansteuerung von Motor 1 und Motor 2 wird der PIN1 (EN1) verwendet und für die Motoren 3 und 4 erfolgt erfolgt das über den PIN 9 (EN2). Ein Blick in das Datenblatt des Schaltkreises zeigt das im Detail. Durch Anlegen eiens PWM-Signals kann dann die Drehzahl des Motors verändert werden.
Um ein PWM-Signal zu erzeugen, geht man von folgender Überlegung aus: ein Pulsweiten-moduliertes Signal (kurz PWM) ist ein Rechtecksignal mit konstanter Periodendauer, das zwischen zwei verschiedenen Spannungspegeln oszilliert. Prinzipiell wird das Signal also in schneller Folge ein- und ausgeschaltet. Die Mittlere-Spannung die somit erzeugt wird, berechnet sich nach folgender Formel: \begin{equation} \begin{aligned} U_m = U_{aus} \cdot (U_{ein}-U_{aus})\cdot (\frac{t_{ein}} {t_{ein}+t_{aus}}) \end{aligned} \end{equation} Da in den meisten Fällen direkt zwischen 0 V und Vcc umgeschaltet wird, lässt sich die Formel wie folgt umschreiben: $$ U_m = V_{cc} \cdot (\frac{t_{ein}} {t_{ein}+t_{aus}}) = V_{cc} \cdot DC $$ D.h. die mittlere Spannung ist direkt vom sogenannten Dutycycle abhängig, und ist ein Maß für die Leistung mit der ein Verbraucher angesteuert wird. Dadurch können beispielsweise Glühlampen und Elektromotoren gedimmt bzw. in ihrer Drehzahl beeinflusst werden.
Um also selbst ein PWM Signal zu erzeugen benötigt man einen Ausgangsport und die Festlegung einer konstanten Periodendauer z.B. T = 1000ms. Anschliessend legt man fest, wie das Verhältnis zwischen eingeschaltetem Signal und ausgeschaltetem Signal sein soll (das ist genau der sogenannten Dutycycle DC)z.B. $t_{ein} = 500 ms$ und $t_{aus} = 500 ms$, was in unserem Beispiel dann zu einem DC-Wert von 0,5 oder 50% führt: $$ U_m = V_{cc} \cdot DC = 0,5 \cdot V_{cc} $$ Was dazu führt, dass ein Motor sich mit der Hälfte der maximalen Drehzahl drehen wird. Ändert man diesen Faktor, ändert sich die Geschwindigkeit des Motors.