تحكم في محرك تيار مستمر باستخدام سائق المحرك 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] شرح كود أرجوينو
- عرض المشروع وقراءات الذبذبات
/*
* 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
الموارد والمراجع
ملفات📁
لا توجد ملفات متاحة.