Controlar un motor de CC con hélice mediante Arduino

FunduinoÚltima actualización el

Geschwindigkeit und Drehrichtung eines Gleichstrommotors über eine H-Brücke steuern

Kleine Elektromotoren sind fast immer Gleichstrommotoren – im Englischen „Direct Current“, kurz DC. In Arduino-Projekten treiben sie Roboter, Propeller oder Lüfter an. Schon kleine Motoren brauchen aber mehr Strom, als ein digitaler Ausgang des Mikrocontrollers liefern kann. Deshalb steuerst du sie nicht direkt an, sondern über eine H-Brücke mit eigener Spannungsversorgung.

In dieser Anleitung baust du eine solche Schaltung auf, lässt den Motor in beide Richtungen drehen und regelst seine Geschwindigkeit anschließend mit einem Potentiometer.

Breakout-Board mit L9110-Motortreiber, Gleichstrommotor und Propeller
Das Modul mit L9110-H-Brücke, Motor und Propeller

Warum ein Motor eine H-Brücke braucht

Kleine Elektromotoren sind in der Regel Gleichstrommotoren. Die englische Bezeichnung für Gleichstrom lautet „Direct Current“ – daher der Name DC-Motor. Solche Motoren stecken in vielen Arduino-Projekten, etwa als Antrieb für kleine Roboter oder Propeller.

Schon kleine Motoren brauchen oft viel Strom. Die digitalen Ausgänge eines Arduino liefern aber nur wenige Milliampere – das reicht gerade für einen winzigen Solarmotor. Deshalb schließt man Motoren nicht direkt an die Ausgangspins an, sondern über einen eigenen elektronischen Baustein: die H-Brücke.

H-Brücken gibt es als einzelne Bauteile, aber deren Verkabelung ist umständlich. Im Arduino-Bereich sitzen sie deshalb meist fertig auf einer Platine – mit Anschlüssen für die Spannungsversorgung und für den Mikrocontroller. Solche Module heißen Motortreiber oder Motortreibershield.

Für die ersten Versuche gibt es Module, die Motor und H-Brücke gleich zusammen mitbringen. Hier verwenden wir ein Motor-Propeller-Modul mit der H-Brücke L9110.

Anschlüsse des Moduls

Das Propeller-Modul hat vier Pins:

  • GND – an den GND-Pin des Arduino
  • VCC – an den 3,3V-Pin des Arduino
  • INA – an Pin 10 des Arduino
  • INB – an Pin 11 des Arduino

Dieses kleine Propeller-Modul kommt mit der Versorgung vom Arduino aus. Sobald du größere Motoren betreibst, gilt aber, was oben steht: Dann braucht die H-Brücke eine eigene Spannungsquelle, deren Masse du mit dem GND des Arduino verbindest.

Breakout-Board mit L9110-Motortreiber, Gleichstrommotor und Propeller
Das Modul mit L9110-H-Brücke, Motor und Propeller

Richtung und Geschwindigkeit steuern

Die H-Brücke erwartet ein PWM-Signal, das der Arduino erzeugt. Beim UNO können das die Pins 3, 5, 6, 9, 10 und 11 – auf dem Board sind sie mit einer Wellenlinie (~) gekennzeichnet.

Das Signal kennt 256 Abstufungen, also Werte von 0 bis 255. Gesendet wird es mit analogWrite(MotorA, 255): „MotorA“ steht für den verwendeten Pin, die Zahl für die Stärke der Ansteuerung.

Geschwindigkeit und Drehrichtung ergeben sich aus dem Zusammenspiel beider Werte: Je größer der Unterschied, desto schneller dreht der Motor. Welcher der beiden Werte größer ist, bestimmt die Richtung.

  • Rechts, volle Geschwindigkeit: MotorA = 0, MotorB = 255
  • Links, volle Geschwindigkeit: MotorA = 255, MotorB = 0
  • Rechts, halbe Geschwindigkeit: MotorA = 0, MotorB = 128
  • Links, halbe Geschwindigkeit: MotorA = 128, MotorB = 0

Der folgende Sketch lässt den Motor mit voller Geschwindigkeit nach rechts drehen.

Motor mit voller Geschwindigkeit nach rechts drehen
int MotorA = 10;  // Pin INA am digitalen PWM-Pin 10
int MotorB = 11;  // Pin INB am digitalen PWM-Pin 11

void setup()
{
  pinMode(MotorA, OUTPUT);  // Pin 10 (Motor-A) als Ausgang definieren
  pinMode(MotorB, OUTPUT);  // Pin 11 (Motor-B) als Ausgang definieren
}

void loop()
{
  // Beide Werte liegen zwischen 0 und 255. Je größer der Unterschied zwischen
  // Motor-A und Motor-B, desto schneller dreht der Motor.
  analogWrite(MotorA, 0);
  analogWrite(MotorB, 255);
}

Erweiterung: Geschwindigkeit per Drehregler

Das Modul lässt sich auch von einem externen Signal steuern – zum Beispiel von einem Schiebe- oder Drehregler, der die Drehzahl vorgibt.

Im folgenden Sketch hängt ein Potentiometer am analogen Eingang A0. Sein Wert wird mit map() auf den Bereich 0 bis 255 umgerechnet und direkt an die H-Brücke weitergegeben.

Geschwindigkeit über ein Potentiometer regeln
int MotorA = 10;  // Pin INA am digitalen PWM-Pin 10
int MotorB = 11;  // Pin INB am digitalen PWM-Pin 11

// Das Wort "eingang" steht jetzt für A0. Dort hängt das Signal des Potentiometers.
int eingang = A0;

int sensorwert = 0;       // Variable für den Sensorwert, Startwert 0
int Geschwindigkeit = 0;  // Variable für die Geschwindigkeit, Startwert 0

void setup()
{
  pinMode(MotorA, OUTPUT);  // Pin 10 (Motor-A) als Ausgang definieren
  pinMode(MotorB, OUTPUT);  // Pin 11 (Motor-B) als Ausgang definieren
}

void loop()
{
  // Die Spannung am Drehregler wird ausgelesen und als Zahl zwischen 0 und 1023
  // unter "sensorwert" gespeichert.
  sensorwert = analogRead(eingang);

  // Der map-Befehl wandelt den Bereich 0 bis 1023 in 0 bis 255 um. Damit lässt
  // sich der Wert direkt an analogWrite weitergeben.
  Geschwindigkeit = map(sensorwert, 0, 1023, 0, 255);

  // Dieser Wert bleibt bei 0 - die Änderung von MotorB regelt die Geschwindigkeit.
  analogWrite(MotorA, 0);
  analogWrite(MotorB, Geschwindigkeit);
}
Calificar la guía

Comentarios

Haz una pregunta o comparte tu experiencia

Schreib uns, wenn etwas nicht funktioniert. Nenne dabei dein Board und die Fehlermeldung.

Revisamos cada comentario antes de publicarlo. Tu dirección de correo electrónico permanece con nosotros.