Кодты іздеу

Ардуино коды және бейне: L293D тұрақты ток қозғалтқышын басқару (жылдамдықты басқарусыз)

Ардуино коды және бейне: L293D тұрақты ток қозғалтқышын басқару (жылдамдықты басқарусыз)

Бұл оқу құралы Arduino-мен L293D қозғалтқыш контроллерін тұрақты ток қозғалтқышын басқару үшін қалай пайдалану керектігін қамтиды. L293D қозғалтқышты сағат тілімен және сағат тіліне қарсы бағытта айналдыруға мүмкіндік береді. Осы нұсқаулықты орындау арқылы сіз компоненттерді қалай қосу керектігін және қажетті қозғалтқышты басқаруға қол жеткізу үшін Arduino-ны қалай бағдарламалау керектігін үйренесіз.

Бұл жобада біз бір тұрақты ток қозғалтқышын басқару үшін L293D қозғалтқыш драйверін қолданамыз. Қозғалтқыш Arduino кодында берілген пәрмендерге негізделген бағытты ауыстыра алады. Орнату мен кодты нақты түсіну үшін байланысты бейнені көру пайдалы (00:00-дегі бейнеде).

 

Аппараттық түсіндірме

L293D - қозғалтқыштарды басқаруға арналған интегралдық схема. Ол бір уақытта екі тұрақты ток қозғалтқышын немесе бір қадамдық қозғалтқышты басқара алады. Чип қозғалтқышқа қолданылатын кернеудің полярлығын ауыстыру арқылы бағытты басқаруға мүмкіндік беретін H-көпір конфигурациясын пайдаланады. Бұл икемділік оны робототехника мен автоматтандыру жобалары үшін тамаша таңдау етеді.

L293D-ден басқа, біз қозғалтқыш драйверіне басқару сигналдарын жіберу үшін Arduino тақтасын қолданамыз. Arduino қозғалтқышты қосуға және оның айналу бағытын анықтауға қажетті логикалық деңгейлерді жасайды. Орнату сонымен қатар тұрақты ток қозғалтқышын және қозғалтқыштың кернеу талаптарына сәйкес келетін қуат көзін қажет етеді.

Деректер парағының мәліметтері

Өндіруші Texas Instruments
Бөлшек нөмірі L293D
Логика/IO кернеуі 5 В
Қоректендіру кернеуі 4.5 - 36 В
Шығыс тогы (арнаға) 600 мА
Ең жоғары ток (арнаға) 1.2 А
ШИМ жиілігі бойынша нұсқау 20 кГц
Кіріс логикалық шектері 2.5 В (тип.)
Кернеудің төмендеуі / RDS(on) / қанығу 1.5 В (макс)
Жылулық шектер 150 °C (макс)
Қаптама 16-DIP
Ескертулер / нұсқалар Екі қозғалтқышты басқара алады

 

  • Қоректендіру кернеуінің 36 В-тан аспауын қамтамасыз етіңіз.
  • Максималды токқа жақын жұмыс істегенде тиісті жылу таратқышты пайдаланыңыз.
  • Әрқашан Arduino мен қозғалтқыш драйверінің жерін қосыңыз.
  • Полярлықтың кері қосылуын болдырмау үшін сымдарды тексеріңіз.
  • Болашақ жобаларда қажет болса, жылдамдықты басқару үшін ШИМ сигналдарын пайдаланыңыз.

Сым қосу нұсқаулары

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

L293D қозғалтқыш контроллерін Arduino-ға қосу үшін қуат пен жерді қосудан бастаңыз. L293D-нің 4 және 5 түйреуіштерін жерге қосыңыз. Содан кейін 1 түйреуішті (Vcc1) Arduino-ның 5 В шығысына қосыңыз. Vcc2 (8 түйреуіш) үшін оны сыртқы қуат көзіне қосыңыз, оның қозғалтқыш кернеуінің сипаттамасына сәйкес келуін қамтамасыз етіңіз.

Әрі қарай, қозғалтқыштың қуатын басқару үшін қосу түйреуішін (1 түйреуіш) Arduino-дағы 8 түйреуішке қосыңыз. Қозғалтқышты басқару кірістері үшін L293D-нің 2 түйреуішін (1A) Arduino-дағы 2 түйреуішке және 7 түйреуішті (2A) Arduino-дағы 7 түйреуішке қосыңыз. Соңында, қозғалтқыш терминалдарын L293D-дегі 3 түйреуішке (1Y) және 6 түйреуішке (2Y) қосыңыз.

L293D breadboard pin 1
L293D макет тақтасының 1 түйреуіші
L293D_макет_тақтасы_сымы_bb

Код мысалдары & түсіндірме

Келесі код түйреуіштерді инициализациялайды және қозғалтқышты басқаруды орнатады. Қолданылатын идентификаторларға бірінші қозғалтқышты басқару түйреуіші үшін P1A және қосу түйреуіші үшін EN12 кіреді. Орнату функциясы түйреуіштерді шығыс ретінде конфигурациялайды.

void setup() {
  Serial.begin(9600); // ақпаратты көрсету үшін Serial Monitor орнату
  pinMode(P1A, OUTPUT); // P1A үшін түйреуішті ШЫҒЫС ретінде анықтау
  pinMode(P2A, OUTPUT); // P2A үшін түйреуішті ШЫҒЫС ретінде анықтау
  pinMode(EN12, OUTPUT); // 1,2EN қосу үшін түйреуішті ШЫҒЫС ретінде анықтау
}

Циклде қозғалтқышқа арасында кідірістермен екі бағытта да айналуға пәрмен беріледі. Қозғалтқыштың күйі Serial.println көмегімен сериялық мониторға басып шығарылады.

void loop() {
  Serial.println("СБ бағытында айналу");
  digitalWrite(EN12, HIGH); // 1A және 2A қосу
  digitalWrite(P1A, HIGH); // P1A-ға ЖОҒАРЫ сигнал жіберу
  digitalWrite(P2A, LOW); // P2A-ға ТӨМЕН сигнал жіберу
  delay(3000); // қозғалтқыш 3 секунд жұмыс істейді
  digitalWrite(EN12, LOW); // 1A және 2A өшіру
}

Бұл үзінді P1A және P2A-ға жіберілген логикалық деңгейлерді өзгерту арқылы қозғалтқыштың айналу бағытын қалай басқаруға болатынын көрсетеді. Қозғалтқыш тоқтап, бағытты ауыстырмас бұрын 3 секунд жұмыс істейді.

L293D жартылай көпір драйверлерінің қалай қолданылатыны:

L293D as halft bridge CW
L293D жартылай көпір ретінде СБ
L293D as halft bridge CCW
L293D жартылай көпір ретінде СБ-қарсы

Демонстрация / Не күтуге болады

Орнату аяқталғаннан кейін және код жүктелгеннен кейін, мотордың бір бағытта 3 секунд айналып, 2 секунд тоқтап, содан кейін қарама-қарсы бағытта тағы 3 секунд айналатынын байқауыңыз керек. Мотордың күйі сериялық мониторда басып шығарылады, бұл әрекеттерді растайды (бейнеде 12:00-де).

Жиі кездесетін қателіктерге моторға дұрыс кернеу берілуін қамтамасыз ету және мотор қосылымдарының дұрыстығын тексеру жатады. Егер мотор жауап бермесе, сымдарды және қуат көзінің қосылымдарын қайта тексеріңіз.

Бейне уақыт белгілері

  • 00:00 - Кіріспе
  • 02:30 - Сымдарды қосу түсіндірмесі
  • 05:00 - Кодты шолу
  • 10:00 - Моторды басқаруды көрсету

Суреттер

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).
Тіл: 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)
Тіл: 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

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Әлі ресурстар жоқ.

Файлдар📁

Техникалық сипаттама (pdf)