Zum Inhalt springen
Arduino Motorsteuerung H-Bridge L293

Motorsteuerung mit einem H-Bridge IC

    Made with Fritzing.org
    Made with Fritzing.org

    H-Bridge steuert einen Motor

    Da eine selbst gebaute H-Bridge relativ viele Teile benötigt, bietet es sich an, einen IC zu verwenden. Gängiges Modell ist der L293D, der zwei Motoren unabhängig voneinander steuern kann. Es handelt sich um einen IC im DIL16 Gehäuse, d.h. er hat 16 Beinchen.

    Auf einer Platine werden die inneren Beinchen (Pin 4,5,12,13) mit dem GND verbunden und dienen der Wärmeableitung. Auf dem Breadboard muss nur eines der vier mit dem GND verbunden werden.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Im Beispiel werden zwei Motoren vom Arduino gesteuert. Der Strom kommt aus einer Batterie. Natürlich kann hier auch Netzteil verwendet werden. Wenn es sich um kleine Motoren handelt (z.B. Vibrationsmotoren), können diese auch direkt vom Arduino mit Strom versorgt werden. Hierfür muss in der Schaltung lediglich das orange Kabel an der H-Brigde mit dem 5V+ verbunden werden.

    Die H-Bridge L293D hält einen kurzzeitigen Strom von 1,2 A und einen dauerhaften Storm von 600 mA pro Kanal aus.

    Ein großer Vorteil der L293D sind die integrierten Dioden, die Induktionsströme abfangen, die beim Nachdrehen des Motors entstehen.

    Sollten höhere Ströme erreicht werden, sollte man auf die Verwendung eines alternativen ICs zurückgreifen. Hier bietet sich z.B. der L6205N an.

    Ein Beispielcode:

    int motor1_A=11;
    int motor1_B=10;
    int motor1_Speed=9;
     
    int motor2_A=6;
    int motor2_B=5;
    int motor2_Speed=3;
     
    void setup(){
      pinMode(motor1_A,OUTPUT);
      pinMode(motor1_B,OUTPUT);
     
      pinMode(motor2_A,OUTPUT);
      pinMode(motor2_B,OUTPUT);
    }
     
    void loop(){
      // motor1
      for (int i=0; i>256; i+=5){
        digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
        digitalWrite(motor1_B,LOW);
        analogWrite(motor1_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
      for (int i=255; i>0; i-=5){
        digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
        digitalWrite(motor1_B,LOW);
        analogWrite(motor1_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
      // motor2
      for (int i=0; i<256; i+=5){
        digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
        digitalWrite(motor2_B,LOW);
        analogWrite(motor2_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
      for (int i=255; i>0; i-=5){
        digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
        digitalWrite(motor2_B,LOW);
        analogWrite(motor2_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
     
      // turn vice versa
     
      // motor1
      for (int i=0; i<256; i+=5){
        digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
        digitalWrite(motor1_B,HIGH);
        analogWrite(motor1_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
      for (int i=255; i>0; i-=5){
        digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
        digitalWrite(motor1_B,HIGH);
        analogWrite(motor1_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
      // motor2
      for (int i=0; i<256; i+=5){
        digitalWrite(motor2_A,LOW); // A = LOW and B = HIGH means the motor will turn left
        digitalWrite(motor2_B,HIGH);
        analogWrite(motor2_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
      for (int i=255; i>0; i-=5){
        digitalWrite(motor2_A,LOW); // A = LOW and B = HIGH means the motor will turn left
        digitalWrite(motor2_B,HIGH);
        analogWrite(motor2_Speed,i); // speed counts from 0 to 255
        delay(20);
      }
    }

    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    87 Gedanken zu „Motorsteuerung mit einem H-Bridge IC“

    1. Hallo Stefan,
      ich habe die Schaltung nachgebaut, allerdings mit nur einem Motor. Die Schaltung funktioniert auch, aber wenn ich die Motorbatterie abklemme, bekommt der Motor trotzdem Strom, dann wohl nur die 5V vom Arduino. Ich hätte erwartet, dass er dann trotz Enable Pin ausgeschaltet bleibt.
      Wenn ich beide Batterien anschliesse (die für den Arduino und die separate Motorbatterie) scheint sich die Voltzahl sogar zu addieren. Kann das sein ? Oder ist mir der IC durchgebrannt ?
      Gruss,
      Achim

    2. Hallo Stefan,

      Ich habe eine kurze Verständnisfrage zur oben abgebildeten Schaltung: warum ist der GND des L293D sowohl mit dem GND des arduino als auch der Stromquelle verbunden? Reicht die Verbindung zur Stromquelle nicht aus?

      Schöne grüße,
      Konne

    3. Hallo Stefan,
      ich möchte einen Aufzug bauen, der von einem Arduino-Board gesteuert wird.
      Als Motor verwende ich den Mini Motor (Leerlaufdrehzahl: ca. 9.500 U/min, Maximale Stromaufnahme: 0,65 A, max. Drehmoment: ca. 0,4 Ncm) von Fischertechnik. Da die Spannung von den Pins des Arduinos für den Motor zu klein ist, möchte ich eine 9-Volt-Batterie über die H-Brücke L293D anschließen.
      Dazu hätte ich noch ein paar Fragen:
      Für das Ansteuern von einem Motor kann ich doch den Aufbau aus Deinem Video „Wie steuert man einen Motor mit Arduino“ verwenden?
      Ist die H-Brücke ausreichend? (Ich habe gelesen, dass die L293D nur bis zu einer Stromstärke von 0,6A funktioniert und man bei einer höheren Stromstärke eine andere H-Brücke bräuchte.)
      Lassen sich weitere Bauteile wie Taster an den 5 Volt Pin anschließen und muss ich noch etwas beachten (Vorwiderstand…)?

      Ich hoffe Du kannst mir helfen :)

    4. Hallo Sara,

      also im ersten Teil dreht der erste Motor rechts schneller und dann wieder langsamer werdend. Danach passiert das gleiche mit dem zweiten Motor.

      Im zweiten Teil passiert noch mal genau das selbe, jedoch drehen sich die Motoren in entgegengesetzter Richtung – erst der eine, dann der andere.

      Viel Spaß beim Nachbauen.

      Liebe Grüße

      Stefan”

    5. Hallo Stefan,
      ich hab vor deine Schaltung genau nach zubauen, aber was genau bewirkt dein Beispielcode? Fangen die Motoren dann an zulaufen? Beide gleichzeitig?

      Danke Liebe Grüße Sara

    6. @Max: Kann mir gerade nicht genau vorstellen, wie Ihr das vorhabt, aber wären da Servo-Motoren nicht geeigneter und leichter anzubauen?

      Liebe Grüße

      Stefan”

    7. Hallo Stefan,
      wir haben so ein Roboter-Arm den wir auf einem Fahrgestell (magician chassis dg007) montieren wollen. Würde das eventuell funktionieren ?
      lg Max

    Die Kommentarfunktion ist deaktiviert.