Suchcode

Arduino-Code und Video: L293D DC-Motorsteuerung (ohne Geschwindigkeitsregelung)

Arduino-Code und Video: L293D DC-Motorsteuerung (ohne Geschwindigkeitsregelung)

In diesem Tutorial erfahren Sie, wie Sie den Motorcontroller L293D mit einem Arduino verwenden, um einen Gleichstrommotor zu steuern. Der L293D ermöglicht es, den Motor sowohl im Uhrzeigersinn als auch gegen den Uhrzeigersinn zu drehen. Wenn Sie dieser Anleitung folgen, lernen Sie, wie Sie die Komponenten verdrahten und den Arduino programmieren, um die gewünschte Motorsteuerung zu erreichen.

In diesem Projekt verwenden wir den L293D-Motortreiber, um einen einzelnen Gleichstrommotor zu steuern. Der Motor kann die Richtung anhand der im Arduino-Code gegebenen Befehle wechseln. Für ein klareres Verständnis des Aufbaus und des Codes ist es hilfreich, das dazugehörige Video anzusehen (im Video bei 00:00).

Hardware erklärt

L293D ist ein integrierter Schaltkreis, der zum Ansteuern von Motoren entwickelt wurde. Er kann zwei Gleichstrommotoren gleichzeitig oder einen Schrittmotor steuern. Der Chip verwendet eine H-Brücken-Konfiguration, um die Drehrichtung zu kontrollieren, indem die Polarität der an den Motor angelegten Spannung umgeschaltet wird. Diese Flexibilität macht ihn zu einer ausgezeichneten Wahl für Robotik- und Automatisierungsprojekte.

Zusätzlich zum L293D werden wir ein Arduino-Board verwenden, um Steuersignale an den Motortreiber zu senden. Das Arduino erzeugt die notwendigen Logikpegel, um den Motor zu aktivieren und seine Drehrichtung zu bestimmen. Für den Aufbau werden außerdem ein Gleichstrommotor und eine Stromversorgung benötigt, wobei die Stromversorgung mit den Spannungsanforderungen des Motors kompatibel sein muss.

Details zum Datenblatt

Hersteller Texas Instruments
Teilenummer L293D
Logik-/I/O-Spannung 5 V
Versorgungsspannung 4,5 - 36 V
Ausgangsstrom (pro Kanal) 600 mA
Spitzenstrom (pro Kanal) 1.2 A
Hinweise zur PWM-Frequenz 20 kHz
Eingangslogik-Schwellenwerte 2,5 V (typ.)
Spannungsabfall / RDS(on) / Sättigung 1,5 V (max.)
Thermische Grenzwerte 150 °C (max.)
Paket 16-poliges DIP
Notizen / Varianten Kann zwei Motoren steuern.

  • Stellen Sie sicher, dass die Versorgungsspannung 36 V nicht überschreitet.
  • Sorgen Sie für eine geeignete Wärmeableitung, wenn Sie in der Nähe des maximalen Stroms arbeiten.
  • Verbinden Sie stets die Masse des Arduino mit der des Motortreibers.
  • Überprüfen Sie die Verkabelung, um Verpolungen zu vermeiden.
  • Verwenden Sie PWM-Signale, um die Geschwindigkeit zu steuern, falls dies in zukünftigen Projekten erforderlich ist.

Verdrahtungsanleitung

Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver

Um den L293D-Motortreiber an den Arduino anzuschließen, beginnen Sie damit, Versorgungsspannung und Masse zu verbinden. Verbinden Sie Pin 4 und Pin 5 des L293D mit der Masse. Dann verbinden Sie Pin 1 (Vcc1) mit dem 5 V-Ausgang des Arduino. Für Vcc2 (Pin 8) verbinden Sie ihn mit einer externen Stromversorgung und stellen Sie sicher, dass diese der Motorspannungsspezifikation entspricht.

Als Nächstes verbinden Sie den Enable-Pin (Pin 1) mit Pin 8 am Arduino, um die Stromversorgung des Motors zu steuern. Für die Motorsteuer-Eingänge verbinden Sie Pin 2 (1A) des L293D mit Pin 2 am Arduino und Pin 7 (2A) mit Pin 7 am Arduino. Schließlich verbinden Sie die Motorklemmen mit Pin 3 (1Y) und Pin 6 (2Y) am L293D.

L293D Steckbrett-Pin 1
L293D Steckbrett-Pin 1
L293D_Steckbrettverdrahtung_bb

Codebeispiele und Schritt-für-Schritt-Anleitung

Der folgende Code initialisiert die Pins und richtet die Motorsteuerung ein. Die verwendeten Bezeichner umfassenP1Afür den ersten Steuerpin des Motors undEN12Für den Enable-Pin. Die Setup-Funktion konfiguriert die Pins als Ausgänge.

void setup() {
  Serial.begin(9600); // setup Serial Monitor to display information
  pinMode(P1A, OUTPUT); // define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT); // define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT); // define pin as OUTPUT for 1,2EN enable
}

In der Loop-Funktion wird der Motor angewiesen, sich in beide Richtungen zu drehen, mit Verzögerungen dazwischen. Der Zustand des Motors wird im seriellen Monitor mithilfe vonSerial.println.

void loop() {
  Serial.println("Rotating CW");
  digitalWrite(EN12, HIGH); // Enable 1A and 2A 
  digitalWrite(P1A, HIGH); // send HIGH signal to P1A
  digitalWrite(P2A, LOW); // send LOW signal to P2A
  delay(3000); // motor runs for 3 seconds
  digitalWrite(EN12, LOW); // Disable 1A and 2A
}

Dieser Auszug zeigt, wie man die Drehrichtung des Motors durch Ändern der an ihn gesendeten Logikpegel steuert.P1AundP2A. Der Motor läuft 3 Sekunden, bevor er anhält und die Richtung wechselt.

So werden L293D-Halbbrücken-Treiber verwendet:

L293D als Halbbrücke CW
L293D als Halbbrücke CW
L293D als Halbbrücke gegen den Uhrzeigersinn
L293D als Halbbrücke gegen den Uhrzeigersinn (CCW)

Demonstration / Was Sie erwartet

Wenn die Einrichtung abgeschlossen ist und der Code hochgeladen wurde, sollten Sie beobachten, dass der Motor für 3 Sekunden in eine Richtung dreht, für 2 Sekunden stoppt und dann für weitere 3 Sekunden in die entgegengesetzte Richtung dreht. Der Zustand des Motors wird im seriellen Monitor ausgegeben, wodurch die Aktionen bestätigt werden (im Video bei 12:00).

Häufige Fallstricke sind sicherzustellen, dass dem Motor die richtige Spannung zugeführt wird, und zu überprüfen, dass die Motoranschlüsse korrekt sind. Reagiert der Motor nicht, kontrollieren Sie noch einmal die Verkabelung und die Anschlüsse der Stromversorgung.

Video-Zeitstempel

  • 00:00- Einleitung
  • 02:30- Erläuterung der Verkabelung
  • 05:00Code-Durchgang
  • 10:00- Demonstration der Motorsteuerung

Bilder

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb
L293D_breadboard_wiring_bb
L293D as halft bridge CCW
L293D as halft bridge CCW
L293D as halft bridge CW
L293D as halft bridge CW
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver
79-Arduino code L293 DC motor driver (Advanced).
Sprache: C++
++
/*
 * This is the Arduino code L293 DC motor driver (Advanced).
 Using this code you can control a motor to rotate in both directions: clockwise (CW) 
 and counter-clockwise (CCW).

 *  * 
 // Written by Ahmad S. for Robojax.com on 
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 

 * watch L293 video for details https://youtu.be/jAmDliHcTJ0
 * Code is available at http://robojax.com/learn/arduino

 * 

*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable



// DC motor 2 control 
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable

/*
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

void setup() {
  // L293 Motor Control Code by Robojax.com 2018025
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
   
  pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
  pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
  pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN   
  // L293 Motor Control Code by Robojax.com 2018025   
}

void loop() {
  // L293 Motor Control Code by Robojax.com 2018025


    Serial.println("Rotating CW");
    digitalWrite(EN12 ,HIGH);// Enable 1A and 2A 
    digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
    digitalWrite(P2A,LOW);// send - or LOW signal to P2A       
    delay(3000);// motor runs for 3 seconds
    digitalWrite(EN12 ,LOW);// Disable 1A and 2A
    delay(2000);// motor stop for 3 seconds 
    Serial.println("Motor Stopped"); 

  // L293 Motor Control Code by Robojax.com 2018025
    // now changing the direction of rotation of motor
    Serial.println("Rotating CCW");
    digitalWrite(EN12 ,HIGH);// Enable 1A and 2A     
    digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
    digitalWrite(P2A,HIGH);// send - or LOW signal to P2A  
    delay(3000);// motor runs for 3 seconds
    digitalWrite(EN12 ,LOW);// Disable 1A and 2A
    delay(2000);// motor stop for 3 seconds    
    Serial.println("Motor Stopped");   
     

  Serial.println("=========== Loop done"); 
  delay(500);
  // L293 Motor Control Code by Robojax.com 2018025 
}
80-Arduino code: L293 DC motor driver (Advanced)
Sprache: C++
/*


 * This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW) 
and counter-clockwise (CCW).

 *  * 
 // Written by Ahmad S. for Robojax.com on 
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 

* Watch L293 video for details: https://youtu.be/jAmDliHcTJ0
 * Code is available at: http://robojax.com/learn/arduino

 * 

*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable


// DC motor 2 control 
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable

/*
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

void setup() {
  // L293 Motor Contro Code by Robojax.com 2018025
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
   
  pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
  pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
  pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN 

  // L293 Motor Contro Code by Robojax.com 2018025   
}

void loop() {

 if(value == 45){
  rotateMA("CW",HIGH); // start motor in CW
 }
  delay(3000); 
  rotateMA("CW",LOW); // stop motor
  delay(2000);

  rotateMA("CCW",HIGH); // start motor in CCW
  delay(3000); 
  rotateMA("CW",LOW); /// stop motor
  delay(2000);  
  
  // L293 Motor Contro Code by Robojax.com 2018025 
}// loop ends


/**
 * function: rotateMA(String di,int action)
 * Sends power to motor A
 * di is a string and can be "CW" or "CCW"
 * to use: 
 * rotateMA("CW",HIGH);// to rotate motor  CW
 * rotateMA("CCW",HIGH);// to rotate motor CCW
 *  to stop the motor:
 * rotateMA("CW",LOW);// to stop motor 
 */
void rotateMA(String di,int endis)
{
    // L293 Motor Contro Code by Robojax.com 2018025
 if(di =="CW"){
    Serial.println(" Rotating CW");
    digitalWrite(EN12 ,endis);// Enable 1A and 2A 
    digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
    digitalWrite(P2A,LOW);// send - or LOW signal to P2A       
  

 }else{
  // L293 Motor Contro Code by Robojax.com 2018025
    // now changing the direction of rotation of motor
    Serial.println(" Rotating CCW");
    digitalWrite(EN12 ,endis);// Enable 1A and 2A  
    digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
    digitalWrite(P2A,HIGH);// send - or LOW signal to P2A  

 }   
   // L293 Motor Contro Code by Robojax.com 2018025
}//rotateMA ends here

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Noch keine Ressourcen vorhanden.

Dateien📁

Keine Dateien verfügbar.