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. Arduino ist eine aus Soft- und Hardware bestehende Physical-Computing-Plattform. Beide Komponenten sind im Sinne von Open Source quelloffen. Wikipedia

    2. 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

    3. 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

    4. 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 :)

    5. 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“

    6. 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

    7. @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“

    8. 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

    9. @Alex (6.09.14):
      Ich hatte gerade das gleiche Problem!

      Lösung:
      Der Code passt nicht ganz zum Schaltbild:
      int motor2_A=5; —> int motor2_A=6;
      int motor2_B=4; —> int motor2_B=5;

      Und schon funktioniert es =)

    10. Könnte der Arduino noch zu wenig Strom liefern?
      Aber du meintest ja das der Strom für die Motoren von der Stromquelle kommt, also kann das auch nicht sein oder?

    11. Danke für deine Antwort.
      Also, Schaltung und Strom hab ich nochmal überprüft und beide Motoren laufen jetzt soweit. Hab jetzt ein Netzteil dran.
      Jedoch funktioniert der Quelltext in meinem Projekt nicht mehr.
      Wollte mittels Xbox Controller mit den Tasten RT (R2) und LT (L2) die beiden Motoren steuern. Wenn ich beide gedrückt halte dreht immer nur ein Motor. Wüsstest du woran das noch liegen könnte?
      Quelltext:
      #include
      // Satisfy IDE, which only needs to see the include statment in the ino.
      #ifdef dobogusinclude
      #include
      #endif

      USB Usb;
      XBOXRECV Xbox(&Usb);

      int motor1_A=11;
      int motor1_B=10;
      int motor1_Speed=9;

      int motor2_A=5;
      int motor2_B=4;
      int motor2_Speed=3;

      int a=0;
      int b=0;

      void setup() {
      Serial.begin(115200);
      while (!Serial); // Wait for serial port to connect – used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
      if (Usb.Init() == -1) {
      Serial.print(F(„rnOSC did not start“));
      while (1); //halt

      pinMode(motor1_A,OUTPUT);
      pinMode(motor1_B,OUTPUT);

      pinMode(motor2_A,OUTPUT);
      pinMode(motor2_B,OUTPUT);

      }
      Serial.print(F(„rnXbox Wireless Receiver Library Started“));
      }
      void loop() {
      Usb.Task();
      if (Xbox.XboxReceiverConnected) {
      for (uint8_t i = 0; i < 4; i++) {
      if (Xbox.Xbox360Connected[i]) {
      if (Xbox.getButtonPress(L2, i) && Xbox.getButtonPress(R2, i)) {
      Serial.print("L2: ");
      Serial.print(Xbox.getButtonPress(L2, i));
      Serial.print("tR2: ");
      Serial.println(Xbox.getButtonPress(R2, i));
      //Xbox.setRumbleOn(Xbox.getButtonPress(L2, i), Xbox.getButtonPress(R2, i), i);
      a = 255;
      b = 255;
      }
      else{
      a=0;
      b=0;
      }

      if (Xbox.getButtonClick(A, i))
      Serial.println(F("A"));
      }
      }
      }

      // motor1
      digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
      digitalWrite(motor1_B,LOW);
      analogWrite(motor1_Speed,a); // speed counts from 0 to 255
      // motor2
      digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
      digitalWrite(motor2_B,LOW);
      analogWrite(motor2_Speed,b); // speed counts from 0 to 255
      }

    12. Hallo, ist wirklich eine sehr tolle Seite.
      Nun hab ich aber mal noch eine frage. Und zwar habe ich deine Schaltung wie oben aufgebaut, der Sketch funktioniert auch wunderbar, nur wenn ich die beiden Motoren gleichzeitig laufen lassen will passiert garnichts.
      Wisst ihr woran das liegen kann?
      int motor1_A=11;
      int motor1_B=10;
      int motor1_Speed=9;

      int motor2_A=5;
      int motor2_B=4;
      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
      digitalWrite(motor1_A,HIGH);
      digitalWrite(motor1_B,LOW);
      analogWrite(motor1_Speed,255);

      // motor2
      digitalWrite(motor2_A,HIGH);
      digitalWrite(motor2_B,LOW);
      analogWrite(motor2_Speed,255);

      So sieht der Quelltext aus.

      1. @Alex: Hi Alex, das ist komisch. Vielleicht reicht Dein Strom für beide Motoren nicht aus? Check noch mal die Schaltung, ob die genau so aussieht.

    13. Hallo, finde ich sehr spannend, die Entwickler Möglichkeiten. Direkt auch eine Frage: kann man bei diesem Schaltbild statt des Arduino UNO auch Arduino micro oder Arduione Nano verwenden?
      Macht weiter so, sehr spannend hier auf der Seite, Gruß Alex

    14. Hey hab ne Frage dazu..

      int motor1_A=7;
      int motor1_B=13;
      int motor1_Speed=12;

      int motor2_A=8;
      int motor2_B=9;
      int motor2_Speed=11;

      int Taster1=2; //vorwärts
      int Taster2=4; //links
      int Taster3=3; //rechts
      int Taster4=5; //rückwärts

      int zustand1;
      int zustand2;
      int zustand3;
      int zustand4;
      int zustand5;

      void setup(){
      Serial.begin(9600);
      pinMode(motor1_A,OUTPUT);
      pinMode(motor1_B,OUTPUT);

      pinMode(motor2_A,OUTPUT);
      pinMode(motor2_B,OUTPUT);

      }

      void loop(){
      // motor1

      zustand3=digitalRead (Taster3);
      if (zustand3== HIGH){
      digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
      digitalWrite(motor1_B,LOW);
      analogWrite(motor1_Speed,200); // speed counts from 0 to 255
      digitalWrite(motor2_A,LOW);
      digitalWrite(motor2_B,HIGH);
      analogWrite(motor2_Speed,200);
      }
      /*zustand=digitalRead (Taster3);

      if (zustand3== HIGH){
      digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
      digitalWrite(motor1_B,LOW);
      analogWrite(motor1_Speed,200); // speed counts from 0 to 255
      */
      // motor2
      zustand2=digitalRead (Taster2);
      if (zustand2== HIGH){
      digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
      digitalWrite(motor2_B,LOW);
      analogWrite(motor2_Speed,200); // speed counts from 0 to 255
      digitalWrite(motor1_A,LOW);
      digitalWrite(motor1_B,HIGH);
      analogWrite(motor1_Speed,200);
      }
      /*
      zustand3=digitalRead (Taster2);
      if (zustand3== HIGH){
      digitalWrite(motor2_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
      digitalWrite(motor2_B,LOW);
      analogWrite(motor2_Speed,200); // speed counts from 0 to 255
      }
      */

      // turn vice versa

      // motor1
      zustand1=digitalRead (Taster1);
      if (zustand1== HIGH){
      digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
      digitalWrite(motor1_B,HIGH);
      analogWrite(motor1_Speed,200); // speed counts from 0 to 255
      digitalWrite(motor2_A,LOW);
      digitalWrite(motor2_B,HIGH);
      analogWrite(motor2_Speed,200);
      }

      /*
      zustand3=digitalRead (Taster2);
      if (zustand3== HIGH){
      digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
      digitalWrite(motor1_B,HIGH);
      analogWrite(motor1_Speed,200); // speed counts from 0 to 255
      }
      */
      // motor2
      zustand4=digitalRead (Taster4);
      if (zustand4== HIGH){
      digitalWrite(motor2_A,HIGH); // A = LOW and B = HIGH means the motor will turn left
      digitalWrite(motor2_B,LOW);
      analogWrite(motor2_Speed,200); // speed counts from 0 to 255
      digitalWrite(motor1_A,HIGH); // A = LOW and B = HIGH means the motor will turn left
      digitalWrite(motor1_B,LOW);
      analogWrite(motor1_Speed,200); // speed counts from 0 to 255
      }
      /*
      zustand3=digitalRead (Taster2);
      if (zustand3== HIGH){
      digitalWrite(motor2_A,LOW); // A = LOW and B = HIGH means the motor will turn left
      digitalWrite(motor2_B,HIGH);
      analogWrite(motor2_Speed,200); // speed counts from 0 to 255
      }/*/

      }

      wenn ich die taster drücke, dreht der motor abgeschwächt… lass ich ihn los geht er aus
      ich will dass er wenn ich taster 3 drücke dass er rechts geht… ist da irgendein fehler?(natürlich ist was falsch aber komme nicht drauf was)

    15. @Jürgen: Nee, den gibt es noch nicht, der kann aber nicht so schwierig sein. Irgendwie so ähnlich wie:

      value = analogRead(potPin);
      if (value>512) {
      digitalWrite(motor1_A,LOW);
      digitalWrite(motor1_B,HIGH);
      analogWrite((value-512)/2,i);
      } else {
      digitalWrite(motor1_A,HIGH);
      digitalWrite(motor1_B,LOW);
      analogWrite(value/2,i);
      }

      Ich hoffe, das hilft Dir weiter :)

    16. Hallo,
      ich würde gerne einen DC-Motor über einen Poti in beide Richtungen steuern. Also bei Werten kleiner als Mittelstellung 512 nach links, be Werten größer als 512 nach rechts. In der Umgebung von 512 bräuchte ich wohl einen offset Bereich (vielleicht von 500 bis 524, Motor bleibt aus) wg. umgenauer Mittellage des Potis, dann sollte er aber in beiden Richtungen via Poti beschleunigt werden können.
      Gibt es so ein Programmteil für den Arduino schon?
      Oder ein Tip für die Umsetzung mit dem L293?

      Viele Grüße vom Bodensee
      Jürgen

    17. @Sebastian: Nee, leider nicht und darüber hinaus braucht die H-Bridge auch noch ein paar andere Bauteile. Findest Du aber im Datenblatt. Bestimmt gibt es aber auch noch einfachere Bausteine.

    18. Hallo Stefan,

      bei mir wird der IC zu heiß, deswegen habe ich überlegt eine ähnliche Schaltung mit dem L6205N aufzubauen. Ist die Schaltung und das Programm da einfach übetragbar?

      Gruß
      Sebastian

    19. Hallo Stefan,
      ich hab momentan ein Projekt, in dem ich versuche ein Auto zu steuern (sowohl Lenkung,als auch Geschwindigkeit). Jedoch will ich mein Auto anderst bauen als Sie(Steuerung seperat versuchen mit einem Servo Motor zu lenken).
      Ich hab vor den Motor ebenfalls über eine H-Bridge anzusteuern, jedoch möchte ich nur EINEN Motor benutzen, über den ich dann die Geschwindigkeit regeln kann.
      Meine Frage wäre es dann, wie eine Beispielschaltung dafür aussehen könnte ( einfach Motor 2+Kabel und Lenkung von Motor 1 weglassen), sodass dann nur noch Pin 9 benutzt wird, oder muss das anderst abgeändert werden?
      Eine ähnliche Frage stellt sich dann bei dem Programm (einfach alle Zeilen weglassen, die sich nicht auf die Geschwindigkeit des ersten Motors beziehen?).
      Vielleicht sind diese Fragen jetzt komisch formuliert und unverständlich, jedoch bin ziemlich neu in diesem Forum und weiterhin habe ich gerade erst angefangen mit Elektronik, in Form dieses Projektes, zu arbeiten. Ich hoffe, dass Sie mir bei meinem Problem weiterhelfen können, das würde mich in meinem Projekt ein großes Stück weiterbringen! :)
      Hoffe auf baldige Antwort! ;)
      LG Fadmir

    20. Hey, ich habe die Schaltung oben 1 zu 1 abgebaut, allerdings haben wir 2 6V Motoren dran und nur 4 LR6 Batterien zur Verfügung, im Moment tut sich bei uns gar nichts.
      Gibt es irgendeine Chance, es so zum laufen zu bekommen?

      Viele Grüße
      Anton

    21. Kleine Korrektur: beim Motor 1 (dem oberen im Plan) müsste das grüne Kabel doch zum Output 4 (PIN 14) des L293D gehen, oder?

      Viele Grüsse,
      Mathias

    22. Hallo Stefan,
      vielen Dank für die schnelle Beantwortung und die Aktualisierung des Beitrages! Jetzt funktioniert die Schaltung, bzw. das Programm :-)

      Viele Grüsse,
      Mathias

    23. Hallo Stefan,

      vielen Dank für die sehr hilfreiche Seite. Die Schaltung funktioniert problemlos, allerdings hätte ich eine Frage zur Programmierung: ich möchte gerne einen Getriebemotor in die eine Richtung langsam anlaufen lassen, dann abbremsen bis zum Stop, die Richtung umkehren und dann mit dem gleichen Anfahrverhalten und abbremsen/stoppen in die andere Richtung laufen lassen. Bisher bin ich beim programmieren jedesmal gescheitert, der Motor lief nach dem Umschalten sofort los, bremste etwas ab und fuhr wieder an. Könntest Du mir vielleicht einen Tip geben wie man das programmiert?
      Vielen Dank!

      Grüsse,
      Mathias

    24. Hi Micha, also Pin 1 ist der Enable Pin für die Schaltstufen 1 und 2, Pin 16 ist die Stromversorgung für die Logik (also hier 5V). Der Pin 9 ist der Enable für die Stufen 3 und 4. Der Pin 8 (VCC2) ist die Stromversorgung für den Motor. Kann also 5V oder mehr sein. Liebe Grüße, Stefan“

    25. Hi, habe mir die benötigten Teile gekauft und wollte deine Schaltung nachbauen.
      Du schreibst: „Die äußeren Beinchen sollten mit dem 5V+ verbunden werden.“ Heißt für mich: Pin 1 & Pin 16 auf +5V.
      Nach dem Schaltbild vom L293D ist Pin 1 mit „1,2EN“ bezeichnet und PIN 16 mit VCC1.

      In meinen Augen müssten (zumindest nach Schaltbild) die Pins 8 & 16 mit +5V versorgt werden. Diese sind mit VCC1 und VCC2 im Schaltbild bezeichnet.

      Habe ich jetzt einen Denkfehler?!

      Gruß Micha

    26. @Kevin: Der Fader ist ja eigentlich ein Potentiometer und muss genau so angeschlossen werden, also Plus an Terminal 3, GND an Terminal 1 und der Abgriff (T2) muss mit dem Analog In verbunden werden. Dann bekommst Du beim Arduino einen Wert zwischen 0 und 1023. Liebe Grüße

    27. Das hilft schon mal etwas weiter, jedoch gibts jetzt Probleme, den wiper anzuschließen. Laut Datenblatt ist das einer der vorderen PINs, die jedoch nur 0 oder 1023 bzw 0 und 255 zurückgeben, was ja nicht Sinn der Sache ist. Das Datenblatt ist hier zu finden : http://www.reichelt.de/Schiebepotis/RSA0N11M9-LIN10K/3/index.html?;ACTION=3;LA=5;ARTICLE=73884;GROUPID=3713;artnr=RSA0N11M9-LIN10K;SID=11UOwLs38AAAIAAFoDPBY386576c6b36b4fca83731a99609e6ec8

      Der wiper ist meines Erachtens nach Terminal 2 (Seite 4/7 des pdf-Dokuments). Tut mir leid, ich bin total neu auf diesem Gebiet und hab quasi keine Ahnung von der Hardware ;( Wäre super, wenn ich da Hilfe bekommen würde :)

      LG

    28. Ok, nächste Frage. Kann den Fader fröhlich hoch unter runterfahren lassen mit dem obengegebenen Code. Nu brauch ich allerdings eine bestimmte Position auf dem Slider, wo bekomm ich nun die Daten aus dem Slider her?

    29. Hallo,

      ich versuche gerade den RSA0N11M9-LIN10K Motorfader von ALPS an deine Schaltung anzuschließen, jedoch verzweifle ich ein wenig. Kannst du mir sagen, wo ich das gelbe und grüne Kabel aus deiner ersten Skizze auf dieser Seite anschließen muss?

      Vielen Dank schon einmal im Voraus

      Kevin

    30. hallo ich hab eine Frage
      wir haben den Motor an die H-Bridge angeschlossen wie oben beschrieben.
      Das Problem liegt jetzt nur dabei das die Batterie irgendwie direkt den Motor antreibt ohne das man ihn ohne das man ihn Steuern kann.
      hättst du eine Idee wo der Fehler liegen könnte? Oder vielleicht sogar einen Lösungsvorschlag
      Danke schon mal im Vorraus
      rapper98

    31. @rapper98: Da fehlt mir leider ein bisschen die Zeit, aber sieh Dir mal das Beispiel BlinkWithoutDelay aus der Arduino-Software an. Da werden Timer verwendet und keine Delays. Das wäre vielleicht eine Möglichkeit. Arduino schwächelt ein wenig bei parallelen Aufgaben.

    32. Hallo ich hab eine Frage hierzu ich weis das das nicht wirklich zu diesem Thema passt. Es wäre trotzdem nett wenn du eine Lösung finden könntest ,

      Für unser Arduino haben wir drei Lautsprecher angeschlossen. Nun haben wir verschiedene Probleme.

      1. Wir können die Lautsprecher nicht parallelschalten, sodass mehrere Töne gleichzeitig erklingen.

      2. Wir haben Probleme damit, dass die Töne unterschiedlich lang sind und der Abstand auch unterschiedlich ist.

      Hier ist unser richtiges Programm un das Versuchsprogramm:

      int La1= 0;
      int La2 = 12;
      int La3 = 13;

      void setup (){

      int dauer = 500;

      tone(La1,1760, dauer);

      tone(La1,1976, dauer);
      delay(dauer*1);
      noTone (La1);
      delay (dauer*0.25);

      tone(La2,1976, dauer);
      delay(dauer*1);
      noTone (La2);
      delay (dauer*0.25);

      tone(La3,1976, dauer);
      delay(dauer*1);
      noTone (La3);
      delay (dauer*0.25);

      tone(La1,1976, dauer);
      delay(dauer*2);
      )

      }

      Wir bitten um schnelle Hilfe. Danke schon im Voraus. :)

    33. Wow, krass. Was Du wohl vor hast :) Aber:
      Ja, wenn die Rotoren drehen, ohne durch Strom angetrieben zu werden, induzieren sie einen Strom. Die H-Bridge L293D hat aber z.B. Freilaufdioden integriert, sodass Du Dir da keine Sorgen machen musst.

    34. Hallo Stefan,
      danke für die schnelle Antwort!
      Da ich absoluter Anfänger bin in dieser Materie, weiss ich nun zumindest schon mal, wie ich mich weiterinformieren muss.
      Ich habe mir die Lüfter nochmal genau angesehen.
      Diese haben 4 Anschlußkabel. +,-,eins ist dann wahrscheinlich noch ein Tacho und das andere ein PWM-Anschluß. Es könnte aber auch ein Busanschluß dabei sein. Die Lüfter drehen sich jedenfalls auch in die andere Richtung wenn ich + und – vertausche.

      Fly-By-Diode ist dann wahrscheinlich die Freilaufdiode, die der Spule des Motors bezüglich induzierter Spannung entgegenwirken soll, oder so?

      Hilft das dann auch bei „Gegenwind“, also wenn der Lüfter durch einen externen Luftstrom beeinflußt wird, z.B. so dass er aufgrund des Luftstroms(Gegenwind) dann schneller dreht oder sogar die Drehrichtung ändert, ja nach stärke des „Gegenwinds“ und eingestellter Drehrichtung des Lüfters. Der Lüfter würde ja dann kurzfristig als Generator wirken?

      Gruß Klaus

    35. @Klaus: Probier erstmal aus, ob sich die Lüfter überhaupt anders herum drehen lassen. Manche Lüfter können das nicht. Wenn sie sich nur in einer Richtung drehen lassen sollen könntest Du die Lüfter mit einem TLC5940 (»erweitert« das Arduino um 16 PWM Outputs) und jeweils einem FET als Verstärker pro Kanal betreiben. Parallel zu jedem Motor muss dann eine Fly-By Diode (in Sperrichtung) geschalten werden. Ansonsten nimmst Du anstatt der FETs vier L293D und benutzt den TLC5940 invertiert am Enabled-Pin. Nicht ganz trivial, aber so würde ich das ausprobieren.

    36. Hallo Stefan,

      danke erstmal für die tollen Anleitungen.
      Nun hätte ich jedoch noch weitere Fragen.

      Wie steuere ich am besten 8 Motoren (PC-Lüfter) mit dem Arduino Board, also jeden für sich regelbar in Drehrichtung und Geschwindigkeit?
      Falls die Lüfter „Gegenwind“ bekommen würden, wie kann ich diese el. schützen, falls das überhaupt nötig ist?

      Gruß Klaus

    37. hi ich bin es schon wieder
      kann man mit der Steuerung den motor auch links und rechts drehen oder ist dies nicht möglich?
      mfg rapper98

    38. Hi Stefan,
      ich hab ne Schaltung im Netz gefunden und hätte eine Frage an den Experten.
      Muss ich,wenn ich die Eingänge des L293D (Pin2 und Pin7) mit einem µ-Controller beschalte diese mit Vorwiderständen versehen?
      Zur Spannungsbegrenzung? Macht für mich keinen Sinn, da die Eingänge ja 7V vertragen!
      Besten Dank,
      Gruß Johannes

    39. @Sebastian: Das kann ich mir ehrlich gesagt auch nicht erklären. Hast Du das Netzteil mal ohne Arduino gemessen? Manchmal geben die mehr Spannung aus, als drauf steht.

    40. Hallo, erst mal vielen Dank für die ausführliche Webseite.
      Ich habe eine Frage zu der Motorsteuerung. Allerdings benutze ich das Arduino Motorshield. Das externe Netzteil habe ich auf 9V eingestellt. Am Ausgang messe ich auhc gute ~7,9V. Am Motor selber jedoch plötzlich 12 und mehr. Bei 12V mit dem Netzteil bis zu 18/20V.
      Wieso?

    41. @! 0o: Das ist eine super Idee. Leider ist die Frage nach den richtigen Motoren nicht schnell beantwortet, aber ich packe es auf die Liste. Vielen Dank für die Anregung.

    42. Ich hätte zum Thema Motoransteuerung auch mal eine Frage: Wie findet man denn einen passenden Motor? Worauf muss man achten? Würde meiner Meinung nach gut zu den Ansteuerungs-Artikeln passen.

      Konkret zB für mich: Welche (günstigen DC-) Motoren würde in Verbindung mit der oben genannten H-Bridge einen Asuro-ähnlichen Roboter vernünftig fahren lassen können?

      Ich als elektronisch nur leicht vorgebildeter Laie steh bei solchen Entscheidungen leider total auf dem Schlauch und es lassen sich leider auch fast keine einfach nachvollziehbaren Ressourcen dafür finden. Wieviel Volt, wieviel Ampere, welche Drehzahl wäre sinnvoll? Gibt ja leider ein Meer an Angeboten..

      Ein Artikel dazu würde das Thema hier meiner Meinung nach wirklich sehr gut ergänzen. Und ein großes Lob auch an euch, ihr erklärt die Dinge wirklich sehr verständlich.

      lg

    43. Hallo,

      habe hierzu direkt mal eine Frage:
      Kann ich mit diesem L293D IC bei den beiden
      Motoren auch jeweils die Drehrichtung schalten?
      Also wntweder Links, oder Rechts und zwar Unabhängig?

    44. Wenn ich 2 Motoren anschließen möchte und eine externe Stromquelle benutzte muss der Pin 16 dann auch an die (12V) der Batterie ????

    45. Hallo, vielen Dank für deine coolen Tutorials, mir haben sie bisher schon viel geholfen, wieder in das Thema zurückzukommen :-)

      Ich experimentiere derzeit an einer Motorsteuerung in Verbindung mit einem Distanzsensor. Mir ist beim Testen aufgefallen, dass in deinem Beispiel die fadeValue bei meiner Tamiya Getriebebox (Dual) die Motor bei einem Wert von > ~130 auf voller Leistung einschaltet, sich darunter gar nichts tut. Hast du eine Idee oder ist das eventuell vom Motor-Typ abhängig?

      Vielen Dank!
      Mark

    46. Hallo,

      dein Tutorial ist genau das was ich suche.

      Jedoch reicht die Leistung die deine H-Brücke bringt nicht ganz aus.

      Betreiben möchte ich einen Lego 5292 Motor (höchstmögliche Stromaufnahme (Per Hand festhalten) liegt bei 3 A). So extrem werde ich ihn wahrscheinlich nicht belasten, aber da der L293D maximal 1,2A und dauerhaft 0,6A angegeben ist, werde ich wohl auf was größeres ausweichen müssen.

      Hast du eine Ahnung, ob es diese Brücke auch in einer größeren Ausführung gibt, der meinen Leistungen gerecht wird?

      Gruß

      Robert

    47. Hi Stefan
      Vielen Dank an dieser Stelle für deine ganzen Tutorials. Hab vieles davon schon nachgebaut und ausprobiert und komme meinem Vorverstärker immer näher.
      Jetzt stehen schon Eingangswahlschalter, Lautstärkeregelung und Infrarot-Fernbedienung und einiges davon hab ich von deiner Seite bezogen.
      Mach bitte weiter so. Viele andere Tutorials sind leider nur auf english. Das kann ich zwar gut genug um beim 2. lesen alles zu verstehen, aber es ist so viel mühsamer ;)
      Gruss
      Lars

    48. Hallo,

      erstmal Danke für dein tolles Tutorial :D

      Ich würde gerne deine Schaltung nachbauen, bin mir bei der Auswahl des Motors aber unsicher.
      Darf der Motor maximal eine Nennspannung von 5V und einen Strom bei max. Wirkung von 0,6A besitzen?
      (Bei Stromversorgung über den Arduino)

      Ich finde bis jetzt nur extrem kleine Mikromotoren, die diesen Anforderungen gerecht werden.

      Gruß Matthias

    49. Hallo,

      habe die Schaltung mal an einem Funkfernlenkauto-Motor angeschlossen. Dieser zieht ca. 200 mA Strom bei direkten Anschluss an 4 Akku-Babyzellen (4,8 V).

      Laut Multimeter liegen mit der Schaltung aber nur noch knapp 1 V an und Stromspitzenwerte von 0,6 A.

      Ich habe momentan keine Idee woran es liegen könnte.

      Gruß

    50. Hallo Stephan,
      habe heute Deine Schaltung mit einem L293D nachgebaut. Bin sehr froh über so viel Anleitung, die hier zu finden ist. Ich fange aber erst an mit dem Arduino und bin mir noch komplett unsicher in der Programmierung.
      Kann man den Code für diese Schaltung irgendwo bekommen?
      Vielen Dank
      Grüsse Gerd

    51. Hallo Stefan,

      habe Interesse an der Motorsteuerung mit einem H-Bridge IC, bzw. auch wie der Quell Code dazu aussieht.

      Besten Dank vorab.

      Gruss Stefan

    52. Hallo Stefan,
      auf der „Fritzing-Projektseite“ gibt es eine H-Bridge-Schaltung mit Umschaltung für die Drehrichtung und Drehzahlregelung. Die habe ich mit einem L293NE (externe Dioden) nachgebaut. Im Prinzip funktioniert alles. Bis auf eine Kleinigkeit… Der Motor bekommt in einer Drehrichtung ca. 0,5V mehr Spannung als in die andere Richtung.
      Kannst Du mir einen Tip geben woran das liegen kann? Verdrahtung und Dioden sind in Ordnung.
      Grüße, Rainer

    53. Hallo

      Ich benötige für ein Projekt Motoren, die in beide Drehrichtungen über ein pwm signal gesteuert werden können.

      Wenn ich die Schaltung oben richtig verstanden habe, dann kann mit pin 21 die Drehrichtung des Motors und mit pin 5 (pwm) die Geschwindigkeit gesteuert werden.

      Ist das richtig so?

      Danke und Grüsse
      Thomas

    54. Hallo Stefan,

      vielen Dank für den Hinweis. Ja, ich kann das bestätigen. Der Pin 16 wird (soweit ich es verstanden habe) für die interne Stromversorgung des ICs verwendet …

      Liebe Grüße

    55. hi stefan,
      habe heute versucht deinen aufbau oben nachzubauen, hat erst nicht geklappt… Pin 3 und 6 waren immer tod.

      was fehlte war eine verbindung vom pin 16 des L293D zu +5V. dann hat alles geklappt.

      kannst du das bestätigen, oder funktionierts bei dir auch ohne pin 16 auf +5V?

    Die Kommentarfunktion ist deaktiviert.