Search Code

Arduino kod i video: L293D DC motor kontroler (bez kontrole brzine)

Arduino kod i video: L293D DC motor kontroler (bez kontrole brzine)

Ovaj vodič objašnjava kako koristiti L293D kontroler motora s Arduino pločom za upravljanje DC motorom. L293D vam omogućava rotaciju motora u smjeru kazaljke na satu i suprotno od kazaljke na satu. Prateći ovaj vodič, naučit ćete kako povezati komponente i programirati Arduino za postizanje željene kontrole motora.

U ovom projektu koristit ćemo L293D drajver motora za upravljanje jednim DC motorom. Motor će moći mijenjati smjer na osnovu komandi datih u Arduino kodu. Za bolje razumijevanje postavke i koda, korisno je pogledati prateći video (u videu na 00:00).

 

Objašnjenje hardvera

L293D je integrirani krug dizajniran za pokretanje motora. Može kontrolirati dva DC motora istovremeno ili jedan koračni motor. Čip koristi H-most konfiguraciju koja omogućava kontrolu smjera promjenom polariteta napona primijenjenog na motor. Ova fleksibilnost čini ga odličnim izborom za robotiku i automatizacijske projekte.

Osim L293D-a, koristit ćemo Arduino ploču za slanje kontrolnih signala drajveru motora. Arduino će generirati potrebne logičke nivoe za omogućavanje motora i određivanje smjera njegove rotacije. Postavka će također zahtijevati DC motor i napajanje kompatibilno s naponskim zahtjevima motora.

Detalji iz tehničke dokumentacije

Proizvođač Texas Instruments
Oznaka dijela L293D
Logički/IO napon 5 V
Napon napajanja 4.5 - 36 V
Izlazna struja (po kanalu) 600 mA
Maksimalna struja (po kanalu) 1.2 A
Smjernice za PWM frekvenciju 20 kHz
Pragovi ulaznog logičkog napona 2.5 V (tip.)
Pad napona / RDS(on) / zasićenje 1.5 V (maks.)
Toplotna ograničenja 150 °C (maks.)
Pakovanje 16-DIP
Napomene / varijante Može kontrolirati dva motora

 

  • Osigurajte da napon napajanja ne prelazi 36 V.
  • Koristite odgovarajuće hlađenje kada radite blizu maksimalne struje.
  • Uvijek povežite uzemljenje Arduina i drajvera motora.
  • Provjerite ožičenje kako biste izbjegli obrnuti polaritet spojeva.
  • Koristite PWM signale za kontrolu brzine ako je potrebno u budućim projektima.

Upute za ožičenje

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

Za povezivanje L293D kontrolera motora s Arduinom, počnite spajanjem napajanja i uzemljenja. Spojite pin 4 i pin 5 L293D-a na uzemljenje. Zatim spojite pin 1 (Vcc1) na 5 V izlaz Arduina. Za Vcc2 (pin 8), spojite ga na vanjsko napajanje, osiguravajući da odgovara specifikaciji napona motora.

Zatim spojite enable pin (pin 1) na pin 8 na Arduinu za kontrolu napajanja motora. Za ulaze za kontrolu motora, spojite pin 2 (1A) L293D-a na pin 2 na Arduinu i pin 7 (2A) na pin 7 na Arduinu. Na kraju, spojite terminale motora na pin 3 (1Y) i pin 6 (2Y) na L293D-u.

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb

Primjeri koda i objašnjenje

Sljedeći kod inicijalizira pinove i postavlja kontrolu motora. Korišteni identifikatori uključuju P1A za prvi kontrolni pin motora i EN12 za enable pin. Funkcija setup konfigurira pinove kao izlaze.

void setup() {
  Serial.begin(9600); // postavljanje Serial Monitora za prikaz informacija
  pinMode(P1A, OUTPUT); // definiranje pina kao IZLAZ za P1A
  pinMode(P2A, OUTPUT); // definiranje pina kao IZLAZ za P2A
  pinMode(EN12, OUTPUT); // definiranje pina kao IZLAZ za 1,2EN enable
}

U petlji, motoru se naređuje rotacija u oba smjera s pauzama između. Stanje motora se ispisuje na serijski monitor koristeći Serial.println.

void loop() {
  Serial.println("Rotiranje u smjeru kazaljke na satu");
  digitalWrite(EN12, HIGH); // Omogući 1A i 2A 
  digitalWrite(P1A, HIGH); // pošalji HIGH signal na P1A
  digitalWrite(P2A, LOW); // pošalji LOW signal na P2A
  delay(3000); // motor radi 3 sekunde
  digitalWrite(EN12, LOW); // Onemogući 1A i 2A
}

Ovaj izvod pokazuje kako kontrolirati smjer rotacije motora promjenom logičkih nivoa poslanih na P1A i P2A. Motor radi 3 sekunde prije zaustavljanja i promjene smjera.

Evo kako se koriste L293D polumostni drajveri:

L293D kao polumost u smjeru kazaljke na satu
L293D kao polumost u smjeru kazaljke na satu
L293D kao polumost suprotno od kazaljke na satu
L293D kao polumost suprotno od kazaljke na satu

Demonstracija / Šta očekivati

Kada je podešavanje završeno i kod je uploadovan, trebali biste primijetiti da se motor okreće u jednom smjeru 3 sekunde, staje 2 sekunde, a zatim se okreće u suprotnom smjeru još 3 sekunde. Stanje motora bit će ispisano na serijskom monitoru, potvrđujući radnje (u videu na 12:00).

Uobičajene zamke uključuju osiguravanje ispravnog napona koji se dovodi na motor i provjeru da su priključci motora ispravni. Ako motor ne reagira, provjerite ožičenje i priključke napajanja.

Vremenske oznake videa

  • 00:00 - Uvod
  • 02:30 - Objašnjenje ožičenja
  • 05:00 - Pregled koda
  • 10:00 - Demonstracija upravljanja motorom

Images

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

Things you might need

Resources & references

No resources yet.

Files📁

Datasheet (pdf)