كود البحث

تحكم في محرك تيار مستمر باستخدام سائق المحرك L293D مع PWM من أردوينو

تحكم في محرك تيار مستمر باستخدام سائق المحرك L293D مع PWM من أردوينو

يظهر هذا المشروع كيفية التحكم في سرعة واتجاه محرك تيار مستمر باستخدام شريحة سائق المحرك L293D وقدرات تعديل عرض النبضة (PWM) في أردوينو. يسمح هذا الإعداد بالتحكم الدقيق في المحرك، مما يجعله مناسبًا لمجموعة متنوعة من التطبيقات.

إليك بعض أفكار المشاريع باستخدام هذا الإعداد:

  • الروبوتات:تحكم في حركة عجلات الروبوت الصغير.
  • الأجهزة الآلية:إنشاء ستائر آلية، أو مصاريع، أو حزام ناقل صغير.
  • التحكم في المروحة:اضبط سرعة مروحة التبريد بناءً على قراءات درجة الحرارة.
  • متتبعات شمسية:قم بتركيب الألواح الشمسية الصغيرة لمتابعة الشمس طوال اليوم.

الأجهزة / المكونات

  • أردوينو أونو (أو لوحة متوافقة)
  • دوائر التشغيل لمحرك L293D
  • محرك تيار مستمر (مصنف لجهد وشروط تيار L293D، حتى 600 مللي أمبير)
  • مزود طاقة 9ف (للمحرك)
  • توصيل الأسلاك
  • لوحة التجارب (موصى بها)

دليل الأسلاك

تعمل شريحة L293D كواجهة بين الأردوينو والمحرك المستمر. إنها تتيح للأردوينو التحكم في سرعة المحرك واتجاهه. تتطلب الشريحة مصدر طاقة منفصل للمحرك لأن الأردوينو لا يمكنه تزويد المحركات بمعظم التيار اللازم. (في الفيديو في 04:04)

%%تَوْصِيل%%

شرح الكود

يتحكم كود أردوينو في وحدة التحكم L293D، التي بدورها تتحكم في المحرك DC. يستخدم الكود تقنية PWM لتغيير سرعة المحرك، وإشارات رقمية لتبديل الاتجاه.

إليك المعلمات الرئيسية القابلة للتكوين في الكود:


#define P1A 10 // Arduino pin connected to L293D input 1A
#define P2A 11 // Arduino pin connected to L293D input 2A
#define EN12 9 // Arduino pin connected to L293D enable pin (1,2EN)

const int speedStep = 15; // Increment for speed changes
const int speedDelay = 1000; // Delay between speed steps (in milliseconds)

المL293D()تتحكم الدالة في اتجاه المحرك وسرعته. 'L' تضبط المحرك للدوران مع عقارب الساعة، و'R' تضبطه للدوران عكس عقارب الساعة.spdتتحكم المعلمة في السرعة (0-255) وenيُمكّن (1) أو يُعطّل (0) المحرك. (في الفيديو في 09:24)


void L293D(char dir,int spd, int en)
{
  if(dir =='L') // Clockwise rotation
  {
    // ...
    analogWrite(P1A,spd); // Set speed using PWM
    digitalWrite(P2A,LOW); 
  }else{ // Counter-clockwise rotation
    // ...
    digitalWrite(P1A,LOW);
    analogWrite(P2A,spd); // Set speed using PWM
  }
}

مشروع حي / عرض توضيحي

يوضح الفيديو المشروع أثناء العمل، مظهرًا سرعة المحرك وتغييرات الاتجاه. تقرأ قياسات جهاز الأوسيلوسكوب إشارات PWM التي تتحكم في المحرك. (في الفيديو عند 11:07)

فصول

  • مقدمة في التحكم بمحرك التيار المستمر باستخدام L293D
  • [00:30] عرض المشروع وشرحه
  • نظرة عامة على سائق المحرك L293D
  • [02:08] مواصفات محرك التيار المستمر
  • [02:30] شرح ورقة بيانات L293D
  • [04:40] شرح وأسلمة الأسلاك
  • [07:05] شرح كود أرجوينو
  • عرض المشروع وقراءات الذبذبات
144-Arduino source for L293D motor driver (loop)
اللغة: C++
/*
 * This is the Arduino code to control the speed of a motor using an L293D DC motor driver.

Watch instructions for this video: https://youtu.be/akQoGNUzhHI

 // Written for Robojax.com video 

 * Code is available at http://robojax.com/learn/arduino

 * 
 // Written by Ahmad S. for Robojax.com on 
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable

const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment

void setup() {
  // L293 Motor Control Code by Robojax.com 20180811
  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

  Serial.println("Robojax");
  Serial.println("L293D Motor Speed Control");
  
  // L293 Motor Control Code by Robojax.com 20180811   
}

void loop() {
  // L293D Motor Control Code by Robojax.com 20180811

 for(int speed=0; speed<=255; speed +=speedStep)
 {
  L293D('L',speed, 0);// 
  delay(speedDelay);// delay between each step
 }

  delay(50);// 50 millisecond delay
  // L293D Motor Control Code by Robojax.com 20180810 
}//loop end




/*
 * L293D(char dir,int spd, int en)
 * dir is a character: 'L' for clockwise direction
 *  or 'R' for counter-clockwise direction
 *  en is an integer: 1 to rotate, 0 to stop
 *  spd is the speed value from 0 to 255
 */
void L293D(char dir,int spd, int en)
{
  if(dir =='L')
  {
    if(en ==0){
       Serial.println("CW Motor Stopped");
    }else{
       Serial.print("Rotating CW: "); 
       Serial.println(spd);//print actual speed value        
    }
    digitalWrite(EN12 ,en);// Enable 1A and 2A 
    analogWrite(P1A,spd);// send PWM with spd value to P1A
    digitalWrite(P2A,LOW);// LOW signal to P2A       
   
  }else{
    if(en ==0){
       Serial.println("CCW Motor Stopped");
    }else{
       Serial.print("Rotating CCW: "); 
       Serial.println(spd);//print actual speed value     
    }    
    digitalWrite(EN12 ,en);// Disable 1A and 2A    
    digitalWrite(P1A,LOW);// Keep this pin LOW
    analogWrite(P2A,spd);// send PWM with spd value to  P2A  
  }
}//L293D end
145-Source for a simple L293D motor controller using Arduino (CW, CCW, and STOP)
اللغة: C++
++
/*

 * This is the Arduino code to control the speed of a motor using an L293D DC motor driver.
 * This code will control the motor with different directions and speed.

Watch instructions for this video: https://youtu.be/akQoGNUzhHI

 // Written for Robojax.com video 

 * Code is available at http://robojax.com/learn/arduino

 * 
 // Written by Ahmad Shamshiri for Robojax.com on 
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada.
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable

const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment

void setup() {
  // L293 Motor Control Code by Robojax.com 20180811
  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

  Serial.println("Robojax");
  Serial.println("L293D Motor Speed Control");
  
  // L293 Motor Control Code by Robojax.com 20180811   
}

void loop() {
  // L293D Motor Control Code by Robojax.com 20180811


  L293D('L',255, 1);// maximum speed to the LEFT
  delay(3000);// wait for 3 seconds

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  L293D('L',127, 1);// half speed to the LEFT
  delay(3000);// wait for 3 seconds  

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  L293D('R',90, 1);// slow to the RIGHT
  delay(3000);// wait for 3 seconds  

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  // L293D Motor Control Code by Robojax.com 20180810 
}//loop end




/*
 * L293D(char dir,int spd, int en)
 * dir is a character: 'L' for clockwise (CW) direction
 *  or 'R' for counter-clockwise (CCW) direction.
 *  en is an integer: 1 to rotate, 0 to stop.
 *  spd is the speed value from 0 to 255.
 */
void L293D(char dir,int spd, int en)
{
  if(dir =='L')
  {
    if(en ==0){
       Serial.println("CW Motor Stopped");
    }else{
       Serial.print("Rotating CW: "); 
       Serial.println(spd);//print actual speed value        
    }
    digitalWrite(EN12 ,en);// Enable 1A and 2A 
    analogWrite(P1A,spd);// send PWM with spd value to P1A
    digitalWrite(P2A,LOW);// LOW signal to P2A       
   
  }else{
    if(en ==0){
       Serial.println("CCW Motor Stopped");
    }else{
       Serial.print("Rotating CCW: "); 
       Serial.println(spd);//print actual speed value     
    }    
    digitalWrite(EN12 ,en);//enable 1A and 2A    
    digitalWrite(P1A,LOW);// Keep it LOW P1A
    analogWrite(P2A,spd);// send PWM with spd value to  P2A  
  }
}//L293D end

ملفات📁

لا توجد ملفات متاحة.