کنترل یک موتور 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] نمایش پروژه و خوانشهای اسیلوسکوپ
/*
* 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
++
/*
* 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
منابع و مراجع
فایلها📁
هیچ فایلی موجود نیست.