Nr. 47 – DC-Motor mit Propeller ansteuern

DC-Motor per Arduino Ansteuern, am Beispiel eines Propeller-Moduls

Material: Arduino Mikrocontroller, Propellermodul, Breadboardkabel

Kleine Elektromotoren sind in der Regel Gleichstrommotoren. Die englische Bezeichnung für Gleichstrom ist „Direct current“. Daher werden kleine E-Motoren auch DC-Motor genannt. Das Kürzel „DC“ steht dabei für „Direct Current“. Diese Motoren sind Häufig Bestandteil von Arduinoprojekten, zum Beispiel in Form von Antrieben für kleine Roboter oder Propeller.

Elektromotoren gibt es in allen Größen und Formen. Bereits sehr kleine Motoren haben oft einen hohen Strombedarf. Neben der Spannung spielt auch die Stromstärke eine wichtige Rolle. Die digitalen Ausgänge der Arduino-Mikrocontroller liefern nur maximal 50 Milliampere (50mA) bzw. 0,05A. Das reicht gerade aus, um kleine Solarmotoren in eine Drehbewegung zu versetzen.

Daher werden Motoren in der Regel nicht direkt mit den Ausgangspins von Mikrocontrollern verbunden, sondern über einen separaten elektronischen Baustein mit separater Spannungsversorgung. Ein solches Modul wird auch H-Brücke genannt.

H-Brücken gibt es als einzelne Bauteile zu kaufen, jedoch ist die Verkabelung von einzelnen Chips umständlich. Daher befinden sich diese H-Brücken im Arduinobereich üblicherweise auf einer Platine mit vorkonfektioniertem Anschlüssen für eine separate Spannungsversorgung und für die Anschlüsse des Mikrocontrollers. Diese fertigen Module heißen dann bspw. Mototreiber oder Motortreibershield.

Möchte man im Arduino-Bereich einen Gleichstrommotor betreiben, dann muss man sich also mit der Ansteuerung einer H-Brücke auseinandersetzen. Für die ersten Versuche gibt es schöne Module, die einen Motor und eine H-Brücke kombinieren. Für diese Anleitung verwenden wir ein Motor-Propeller-Modul mit der L9110 H-Brücke.

Verkabelung

Das Propeller-Modul verfügt über 4 Pins mit den Bezeichnungen GND, VCC, INA und INB.

Der Pin GND wird mit GND des Arduinos verbunden.

Der Pin VCC wird mit 5V des Arduinos verbunden.

Der Pin INA wird mit Pin10 des Arduinos verbunden.

Der Pin INB wird mit Pin11 des Arduinos verbunden.

Ansteuerung

Diese H-Brücke nutzt als Eingangssignal ein PWM-Signal, welches vom Arduino-Mikrocontroller erzeugt wird. Am Beispiel des UNO-Mikrocontrollers ist ein PWM-Signal an den Pins 3, 5, 6, 9, 10 und 11 möglich. Am Mikrocontroller erkennt man das an der Welle, die neben dem jeweiligen Pin aufgedruckt ist. Das PWM Signal kann mit 256 Abstufungen an die H-Brücke gesendet werden (Zahlenwerte 0 bis 255). Dafür wird der Befehl für die analoge Ansteuerung verwendet: „analogWrite(MotorA, 255);“. „MotorA“ steht dabei für den in diesem Fall verwendeten Pin10 und die Zahl 255 für die maximale Ansteuerung mit dem Wert „255“.

Geschwindigkeit und Drehrichtung werden durch die beiden Werte von „MotorA“ und „MotorB“ beeinflusst. Je höher die Differenz der Beiden Werte ist, desto schneller dreht sich der Motor. Die Drehrichtung hängt davon ab, welcher der beiden Werte höher ist.

Beispiele für die Ansteuerung des Motors

Drehrichtung: Rechts / Geschwindigkeit: 100%:

analogWrite(MotorA, 0);
analogWrite(MotorB, 255);

Drehrichtung: Links/ Geschwindigkeit: 100%:

analogWrite(MotorA, 255);
analogWrite(MotorB, 0);

Drehrichtung: Rechts / Geschwindigkeit: 50%:

analogWrite(MotorA, 0);
analogWrite(MotorB, 128);

Drehrichtung: Links/ Geschwindigkeit: 50%:

analogWrite(MotorA, 128);
analogWrite(MotorB, 0);

Der folgende Sketch erzeugt 100% Geschwindigkeit, Drehrichtung Rechts.

int MotorA=10; //Pin INA am digitalen PWM Pin D5
int MotorB=11; //Pin INB am digitalen PWM Pin D6

void setup() 
{ 
pinMode(MotorA,OUTPUT); // Pin 10 (Motor-A) als Ausgang definieren
pinMode(MotorB,OUTPUT); // Pin 11 (Motor-B) als Ausgang definieren
} 
 
void loop() 
{
analogWrite(MotorA, 0); // Zahl zwischen 0 und 255. Je höher die Differenz zwischen Motor-A und Motor-B ist, desto schneller dreht der Motor.
analogWrite(MotorB, 255); // Zahl zwischen 0 und 255. Je höher die Differenz zwischen Motor-A und Motor-B ist, desto schneller dreht der Motor.
}

Erweiterung

Die Ansteuerung des Moduls kann auch in Abhängigkeit eines externen Signals erfolgen. Zum Beispiel durch einen Schieberegler oder Drehregler (Potentiometer) der die Umdrehungsgeschwindigkeit steuern soll.

Im folgenden Sketch haben wir am Analogport A0 des Arduino Mikrocontrollers ein Potentiometer (Schieberegler) angeschlossen.

int MotorA=10; //Pin INA am digitalen PWM Pin D5
int MotorB=11; //Pin INB am digitalen PWM Pin D6
int eingang= A0; //Das Wort „eingang“ steht jetzt für den Wert „A0“ (Bezeichnung vom Analogport 0). Hier wird das Signal des Potentiometers angeschlossen.
int sensorwert = 0; //Variable für den Sensorwert mit 0 als Startwert
int Geschwindigkeit = 0; //Variable für die Geschwindigkeit mit 0 als Startwert


void setup() 
{ 
pinMode(MotorA,OUTPUT); // Pin 10 (Motor-A) als Ausgang definieren
pinMode(MotorB,OUTPUT); // Pin 11 (Motor-B) als Ausgang definieren
} 
 
void loop() 
{
sensorwert =analogRead(eingang); //Die Spannung am Drehregler wird auslesen und als Zahl zwischen 0 und 1023 unter der Variable „sensorwert“ gespeichert.
Geschwindigkeit= map(sensorwert, 0, 1023, 0, 255); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls. Der Befehl wandelt den Sensorwert im Bereich 0-1023 um in einen Zahlenwert zwischen 0 und 255. Dadurch kann der Wert "Geschwindigkeit" direkt zur Ansteuerung im Befehl "analogWrite" verwendet werden. 

analogWrite(MotorA, 0); // Der Wert bleibt bei 0. Die Veränderung des Wertes "MotorB" führt in diesem Sketch zur Veränderung der Motorgeschwindigkeit.
analogWrite(MotorB, Geschwindigkeit); // Durch die Variable "Geschwindigkeit" erfolgt je nach vorherig erfasstem Sensorwert des Potentiometers eine Veränderung der Motorgeschwindigkeit.
}