Tafuta Msimbo

Kodi ya Arduino na Video: Kidhibiti cha Motor cha DC cha L293D (bila udhibiti wa kasi)

Kodi ya Arduino na Video: Kidhibiti cha Motor cha DC cha L293D (bila udhibiti wa kasi)

Mafunzo haya yanashughulikia jinsi ya kutumia kidhibiti cha motor cha L293D na Arduino kudhibiti motor ya DC. L293D inakuwezesha kuzungusha motor kwa mwelekeo wa saa na kinyume cha saa. Kwa kufuata mwongozo huu, utajifunza jinsi ya kuunganisha vifaa na kupanga Arduino kufikia udhibiti wa motor unaotakiwa.

Katika mradi huu, tutatumia kiendesha motor cha L293D kudhibiti motor moja ya DC. Motor itaweza kubadilisha mwelekeo kulingana na maagizo yaliyotolewa katika msimbo wa Arduino. Kwa uelewa wazi zaidi wa usanidi na msimbo, ni vyema kutazama video inayohusiana (katika video saa 00:00).

 

Vifaa Vimeelezwa

L293D ni sakiti iliyounganishwa iliyoundwa kwa ajili ya kuendesha motors. Inaweza kudhibiti motors mbili za DC kwa wakati mmoja au motor moja ya stepper. Chip hii hutumia usanidi wa daraja la H kuruhusu udhibiti wa mwelekeo kwa kubadilisha polarity ya voltage inayotumika kwa motor. Unyumbufu huu hufanya iwe chaguo bora kwa miradi ya robotiki na otomatiki.

Mbali na L293D, tutatumia bodi ya Arduino kutuma ishara za udhibiti kwa kiendesha motor. Arduino itazalisha viwango muhimu vya mantiki kuwezesha motor na kuamua mwelekeo wake wa kuzunguka. Usanidi pia utahitaji motor ya DC na usambazaji wa nguvu unaolingana na mahitaji ya voltage ya motor.

Maelezo ya Datasheet

Mtengenezaji Texas Instruments
Nambari ya sehemu L293D
Voltage ya mantiki/IO 5 V
Voltage ya usambazaji 4.5 - 36 V
Mkondo wa pato (kwa kila chaneli) 600 mA
Mkondo wa kilele (kwa kila chaneli) 1.2 A
Mwongozo wa mzunguko wa PWM 20 kHz
Viwango vya kizingiti cha mantiki ya pembejeo 2.5 V (typ.)
Kushuka kwa voltage / RDS(on) / kueneza 1.5 V (max)
Mipaka ya joto 150 °C (max)
Kifurushi 16-DIP
Vidokezo / lahaja Inaweza kudhibiti motors mbili

 

  • Hakikisha voltage ya usambazaji haizidi 36 V.
  • Tumia uondoaji wa joto unaofaa wakati wa kufanya kazi karibu na mkondo wa juu.
  • Daima unganisha ardhi ya Arduino na kiendesha motor.
  • Angalia wiring ili kuepuka miunganisho ya polarity iliyogeuzwa.
  • Tumia ishara za PWM kudhibiti kasi ikiwa inahitajika katika miradi ya baadaye.

Maagizo ya Wiring

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

Ili kuunganisha kidhibiti cha motor cha L293D kwa Arduino, anza kwa kuunganisha nguvu na ardhi. Unganisha pin 4 na pin 5 za L293D kwenye ardhi. Kisha, unganisha pin 1 (Vcc1) kwenye pato la 5 V la Arduino. Kwa Vcc2 (pin 8), unganisha kwenye usambazaji wa nguvu wa nje, ukihakikisha unalingana na specifikojeni ya voltage ya motor.

Ifuatayo, unganisha pin ya kuwezesha (pin 1) kwenye pin 8 ya Arduino kudhibiti nguvu ya motor. Kwa pembejeo za udhibiti wa motor, unganisha pin 2 (1A) ya L293D kwenye pin 2 ya Arduino na pin 7 (2A) kwenye pin 7 ya Arduino. Hatimaye, unganisha vituo vya motor kwenye pin 3 (1Y) na pin 6 (2Y) za L293D.

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb

Mifano ya Msimbo & Maelekezo

Msimbo ufuatao huanzisha pini na kuweka udhibiti wa motor. Vitambulisho vinavyotumika vinajumuisha P1A kwa pini ya kwanza ya udhibiti wa motor na EN12 kwa pini ya kuwezesha. Kazi ya setup inasanidi pini kama matokeo.

void setup() {
  Serial.begin(9600); // sanidi Serial Monitor kuonyesha taarifa
  pinMode(P1A, OUTPUT); // fafanua pini kama OUTPUT kwa P1A
  pinMode(P2A, OUTPUT); // fafanua pini kama OUTPUT kwa P2A
  pinMode(EN12, OUTPUT); // fafanua pini kama OUTPUT kwa 1,2EN kuwezesha
}

Katika kitanzi, motor inaamriwa kuzunguka kwa mwelekeo wote kwa kuchelewesha katikati. Hali ya motor inachapishwa kwenye serial monitor kwa kutumia Serial.println.

void loop() {
  Serial.println("Inazunguka CW");
  digitalWrite(EN12, HIGH); // Wezesha 1A na 2A 
  digitalWrite(P1A, HIGH); // tuma ishara ya HIGH kwa P1A
  digitalWrite(P2A, LOW); // tuma ishara ya LOW kwa P2A
  delay(3000); // motor inaendesha kwa sekunde 3
  digitalWrite(EN12, LOW); // Zima 1A na 2A
}

Sehemu hii inaonyesha jinsi ya kudhibiti mwelekeo wa kuzunguka kwa motor kwa kubadilisha viwango vya mantiki vinavyotumwa kwa P1A na P2A. Motor inaendesha kwa sekunde 3 kabla ya kusimama na kubadilisha mwelekeo.

Hapa ni jinsi viendesha daraja la nusu vya L293D vinavyotumika:

L293D as halft bridge CW
L293D kama daraja la nusu CW
L293D as halft bridge CCW
L293D kama daraja la nusu CCW

Maonyesho / Nini cha Kutarajia

Wakati usanidi ukikamilika na msimbo kupakiwa, unapaswa kuona motor ikizunguka upande mmoja kwa sekunde 3, ikisimama kwa sekunde 2, na kisha ikizunguka upande wa pili kwa sekunde nyingine 3. Hali ya motor itachapishwa kwenye serial monitor, ikithibitisha vitendo (katika video saa 12:00).

Makosa ya kawaida ni pamoja na kuhakikisha voltage sahihi inatolewa kwa motor na kuthibitisha kwamba miunganisho ya motor ni sahihi. Ikiwa motor haijibu, angalia mara mbili wiring na miunganisho ya usambazaji wa nguvu.

Vidokezo vya Muda wa Video

  • 00:00 - Utangulizi
  • 02:30 - Maelezo ya wiring
  • 05:00 - Ufafanuzi wa msimbo
  • 10:00 - Onyesho la udhibiti wa motor

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).
Språk: 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)
Språk: 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

Tänker att du kanske behöver

Resurser och referenser

Inga resurser än.

Filer📁

Datablad (pdf)