شِفر (کود) جستجو

کنترل یک موتور DC با استفاده از درایور موتور L293D و PWM آردوینو

کنترل یک موتور DC با استفاده از درایور موتور L293D و PWM آردوینو

این پروژه نشان می‌دهد که چطور می‌توان سرعت و جهت یک موتور جریان مستقیم (DC) را با استفاده از یک تراشه درایور موتور L293D و قابلیت‌های مدولاسیون عرض پالس (PWM) آردوینو کنترل کرد. این تنظیمات کنترل دقیق موتور را امکان‌پذیر می‌سازد و آن را برای انواع مختلفی از کاربردها مناسب می‌کند.

در اینجا چند ایده پروژه با استفاده از این پیکربندی آمده است:

  • رباتیک:حرکت چرخ‌های یک ربات کوچک را کنترل کنید.
  • دستگاه‌های خودکار:پرده‌ها، کرکره‌ها یا یک نوار نقاله کوچک خودکار ایجاد کنید.
  • کنترل فن:سرعت یک فن خنک‌کننده را بر اساس خوانش‌های دما تنظیم کنید.
  • ترک‌های خورشیدی:پنل‌های خورشیدی کوچک را طوری قرار دهید که در طول روز از خورشید پیروی کنند.

سخت‌افزار/قطعات

  • آردوینو اونو (یا برد سازگار)
  • مدار گازی موتور L293D
  • موتور DC (بر اساس ولتاژ و محدودیت‌های جریان L293D، تا 600 میلی‌آمپر)
  • منبع تغذیه 9 ولت (برای موتور)
  • اتصالات سیم‌ها
  • بورد آزمایشی (پیشنهاد شده)

راهنمای سیم‌کشی

چیپ L293D به عنوان یک رابط بین آردوینو و موتور DC عمل می‌کند. این چیپ به آردوینو اجازه می‌دهد تا هم سرعت و هم جهت موتور را کنترل کند. چیپ به یک منبع تغذیه جداگانه برای موتور نیاز دارد زیرا آردوینو نمی‌تواند برای اکثر موتورها جریان کافی تأمین کند. (در ویدیو در ۰۴:۰۴)

%%WIRING%%

توضیح شِفر (کود)

شِفر (کود) آردوینو درایور 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' موتور را بر clockwise چرخانده و 'R' آن را بر counter-clockwise می‌چرخاند. موتورspdپارامتر سرعت (۰-۲۵۵) را کنترل می‌کند و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 کنترل کننده موتور را تجسم می‌کند. (در ویدیو در ۱۱:۰۷)

فصل‌ها

  • مقدمه‌ای بر کنترل موتور DC با L293D
  • [00:30] نمایش و توضیح پروژه
  • بررسی درایور موتور L293D :12
  • مشخصات موتور DC
  • توضیح داده‌های L293D [02:30]
  • [04:40] توضیحات و نمایش اتصالات
  • توضیحات شِفر (کود) آردوینو
  • [11:07] نمایش پروژه و خوانش‌های اسیلوسکوپ
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

فایل‌ها📁

هیچ فایلی موجود نیست.