Arduino-code en video: L293D-gelijkstroommotorcontroller (zonder snelheidsregeling)
Deze tutorial behandelt hoe je de L293D-motorcontroller met een Arduino gebruikt om een gelijkstroommotor aan te sturen. De L293D stelt je in staat om de motor zowel met de klok mee als tegen de klok in te laten draaien. Door deze handleiding te volgen, leer je hoe je de componenten bedraadt en de Arduino programmeert om de gewenste motorregeling te bereiken.
In dit project gebruiken we de L293D-motor driver om een enkele gelijkstroommotor aan te sturen. De motor kan van richting wisselen op basis van de commando's in de Arduino-code. Voor een beter begrip van de opstelling en code is het nuttig om de bijbehorende video te bekijken (in video op 00:00).
Hardware uitgelegd
De L293D is een geïntegreerde schakeling ontworpen voor het aansturen van motoren. Het kan twee gelijkstroommotoren tegelijkertijd aansturen of één stappenmotor. De chip gebruikt een H-brugconfiguratie om richtingsregeling mogelijk te maken door de polariteit van de spanning op de motor om te schakelen. Deze flexibiliteit maakt het een uitstekende keuze voor robotica- en automatiseringsprojecten.
Naast de L293D gebruiken we een Arduino-bord om stuursignalen naar de motor driver te sturen. De Arduino genereert de benodigde logische niveaus om de motor in te schakelen en de draairichting te bepalen. De opstelling vereist ook een gelijkstroommotor en een voeding die compatibel is met de spanningsvereisten van de motor.
Datasheet-details
| Fabrikant | Texas Instruments |
|---|---|
| Onderdeelnummer | L293D |
| Logica/IO-spanning | 5 V |
| Voedingsspanning | 4,5 - 36 V |
| Uitgangsstroom (per kanaal) | 600 mA |
| Piekstroom (per kanaal) | 1,2 A |
| PWM-frequentierichtlijn | 20 kHz |
| Ingangslogische drempels | 2,5 V (typ.) |
| Spanningsval / RDS(on) / verzadiging | 1,5 V (max) |
| Thermische limieten | 150 °C (max) |
| Behuizing | 16-DIP |
| Opmerkingen / varianten | Kan twee motoren aansturen |
- Zorg ervoor dat de voedingsspanning niet hoger is dan 36 V.
- Gebruik geschikte koeling bij gebruik nabij de maximale stroom.
- Verbind altijd de aarde van de Arduino en de motor driver.
- Controleer de bedrading om omgekeerde polariteitsaansluitingen te voorkomen.
- Gebruik PWM-signalen om de snelheid te regelen indien nodig in toekomstige projecten.
Bedradingsinstructies


Om de L293D-motorcontroller met de Arduino te bedraden, begin je met het aansluiten van de voeding en aarde. Verbind pin 4 en pin 5 van de L293D met de aarde. Verbind vervolgens pin 1 (Vcc1) met de 5 V-uitgang van de Arduino. Voor Vcc2 (pin 8) sluit je een externe voeding aan, zorg ervoor dat deze overeenkomt met de motorspecificatie.
Verbind vervolgens de enable-pin (pin 1) met pin 8 op de Arduino om het vermogen van de motor te regelen. Voor de motorregelingsingangen verbind je pin 2 (1A) van de L293D met pin 2 op de Arduino en pin 7 (2A) met pin 7 op de Arduino. Sluit ten slotte de motorklemmen aan op pin 3 (1Y) en pin 6 (2Y) van de L293D.
Codevoorbeelden & uitleg
De volgende code initialiseert de pinnen en stelt de motorregeling in. De gebruikte identificaties omvatten P1A voor de eerste motorregelingspin en EN12 voor de enable-pin. De setup-functie configureert de pinnen als uitgangen.
void setup() {
Serial.begin(9600); // setup Serial Monitor om informatie weer te geven
pinMode(P1A, OUTPUT); // definieer pin als OUTPUT voor P1A
pinMode(P2A, OUTPUT); // definieer pin als OUTPUT voor P2A
pinMode(EN12, OUTPUT); // definieer pin als OUTPUT voor 1,2EN enable
}
In de loop wordt de motor gecommandeerd om in beide richtingen te draaien met pauzes ertussen. De staat van de motor wordt naar de seriële monitor geprint met Serial.println.
void loop() {
Serial.println("Roteren met de klok mee");
digitalWrite(EN12, HIGH); // Schakel 1A en 2A in
digitalWrite(P1A, HIGH); // stuur HOOG signaal naar P1A
digitalWrite(P2A, LOW); // stuur LAAG signaal naar P2A
delay(3000); // motor draait 3 seconden
digitalWrite(EN12, LOW); // Schakel 1A en 2A uit
}
Dit fragment laat zien hoe je de draairichting van de motor regelt door de logische niveaus naar P1A en P2A te wijzigen. De motor draait 3 seconden voordat hij stopt en van richting wisselt.
Hier is hoe L293D half-brug drivers worden gebruikt:
Demonstratie / Wat te verwachten
Wanneer de setup is voltooid en de code is geüpload, zou je moeten zien dat de motor 3 seconden in één richting draait, 2 seconden stopt, en vervolgens nog eens 3 seconden in de tegenovergestelde richting draait. De status van de motor wordt op de seriële monitor weergegeven, wat de acties bevestigt (in video op 12:00).
Veelvoorkomende valkuilen zijn onder meer het zorgen voor de juiste spanning op de motor en het controleren dat de motorverbindingen correct zijn. Als de motor niet reageert, controleer dan opnieuw de bedrading en de voedingsaansluitingen.
Video-tijdstempels
- 00:00 - Introductie
- 02:30 - Uitleg over bedrading
- 05:00 - Doorloop van de code
- 10:00 - Demonstratie van motorregeling
++
/*
* 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
}
/*
* 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
Dingen die je misschien nodig hebt
-
AmazonPurchase L293D motor driver ICamzn.to
-
AliExpressPurchase L293D motor driver IC from AliExpresss.click.aliexpress.com
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Datasheet (pdf)
-
robojax_L293D_motor_shield_manual.pdf
robojax_L293D_motor_shield_manual.pdf0.16 MB -
L293d datasheet
L293d_datasheet.pdf0.34 MB