تعلم الوحدات · الدرس 2.23
محركات التيار المستمر (DC Motors)
العودة إلى الدروسالمحرك ومزود الطاقة
ستتحكم بمحرك التيار المستمر (DC Motor) صغير باستخدام UNO R3 ودائرة قيادة المحرك (L293D IC). قد يحتاج المحرك قدرة أكبر مما يتحمله المنفذ الرقمي؛ توصيله مباشرة قد يتلف اللوحة، لذلك نستخدم وحدة تغذية (Power Supply Module).
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3) ولوحة تجارب (Breadboard) 830 نقطة.
- دائرة قيادة المحرك (L293D IC).
- ريشة مروحة (Fan Blade) ومحرك (3-6V Motor).
- خمسة أسلاك ذكر إلى ذكر (Male to Male Jumper Wires).
- وحدة تغذية (Power Supply Module) ومحول طاقة (9V1A Adapter).
وحدة تغذية لوحة التجارب (Breadboard Power Supply)
- مفتاح تشغيل وإطفاء ثابت ومؤشر LED للطاقة.
- دخل DC بين 6.5 و 9V، بمقبس 5.5×2.1mm.
- خرج 3.3V أو 5V، وتيار أقصى 700mA.
- تحكم مستقل لقضيبي اللوحة، باختيارات 0V و 3.3V و 5V.
- رؤوس خرج للاستخدام الخارجي وموصل USB لتغذية جهاز خارجي.
- أبعاد 2.1×1.4 بوصة.

يمكن ضبط خرج اليمين واليسار مستقلين بنقل الوصلات. إذا كانتا في OFF فلن يعمل مؤشر الطاقة ولا قضبان التغذية.

وضع وحدة الطاقة (Power Supply Module) ودائرة قيادة المحرك (L293D IC)

L293D
تتحكم بمحركين مستقلين. نستخدم نصفها فقط هنا؛ معظم أطراف اليمين للمحرك الثاني.

المواصفات: منتجات L293 و L293D من Unitrode لدى Texas Instruments؛ تغذية 4.5–36V؛ تغذية مستقلة لمنطق المداخل؛ حماية ESD؛ إيقاف حراري؛ مداخل عالية المناعة للضجيج؛ تشابه وظيفي مع SGS L293 و L293D. تيار كل قناة 1A في L293 و 600mA في L293D؛ والذروة 2A و 1.2A على الترتيب. تضم L293D صمامات تثبيت لكبح النبضات الناتجة عن الأحمال الحثية.

عمل الجسر H
L293 و L293D أربع مراحل نصف جسر H عالية التيار. يقود الأول تيارًا ثنائي الاتجاه حتى 1A، والثاني حتى 600mA، عند 4.5–36V. يستخدمان للمرحلات والملفات اللولبية ومحركات التيار المستمر (DC Motors) والمحركات الخطوية (Stepper Motor) ثنائية القطب والأحمال مرتفعة التيار والجهد ذات التغذية الموجبة.
المداخل متوافقة مع TTL. لكل خرج مرحلة Totem-pole، بترانزستور Darlington للسحب و Pseudo-Darlington للإمداد. يمكّن 1,2EN المرحلتين 1 و 2، و 3,4EN المرحلتين 3 و 4. عند HIGH تكون المخارج نشطة وتوافق المداخل؛ وعند LOW تتعطل وتصبح عالية الممانعة. يشكل كل زوج مع بيانات التحكم المناسبة جسر H كاملًا قابلًا للعكس لقيادة ملف أو محرك.
ترتيب التوصيل
يوضح الدرس ثلاثة أسلاك تحكم إلى Arduino، وسلكين إلى المحرك، واتصالًا بتغذية البطارية. يسار الشريحة للمحرك 1، ويمينها للمحرك 2؛ ويمكن تشغيل محرك واحد فقط.

وصّل M1 PWM بمنفذ PWM، مثل 5 في UNO. القيم 0 للإطفاء و 128 لنصف السرعة و 255 للأقصى. وصّل مدخلي اتجاه M1 بمنفذين رقميين؛ HIGH و LOW يديران المحرك في اتجاه، وعكسهما LOW و HIGH يعكس الاتجاه.
توصيل الدائرة


البرنامج والتجربة
تتولى L293D قيادة المحرك وعزل منافذ التحكم عن تياره. اتبع مخطط التوصيل لتغذية المحرك من وحدة الطاقة (Power Supply Module)، مع توصيل الأرضي المشترك بلوحة أردوينو (UNO R3 Board).

افتح ملف البرنامج DC_Motor.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.
إذا تعذر نقل البرنامج إلى اللوحة، فراجع قسم «رفع البرنامج ومعالجة خطأ الاتصال» في الدرس 1.5 «وميض LED وإضافة المكتبات» للتحقق من اتصال USB واختيار نوع اللوحة والمنفذ التسلسلي في بيئة Arduino IDE.
شغّل مفاتيح الطاقة بعد الرفع. يتحرك المحرك قليلًا مع عقارب الساعة وعكسها خمس مرات، ثم يدور بسرعة في اتجاه، ويتوقف قليلًا ثم يعكس الاتجاه. بعد ذلك يخفض PWM سرعته تدريجيًا من الأقصى إلى الأدنى ويرفعها مجددًا، ثم يتوقف 10 ثوانٍ قبل الدورة التالية.
الكود
DC_Motor/DC_Motor.ino
//www.elegoo.com
//2016.12.12
/************************
Exercise the motor using
the L293D chip
************************/
#define ENABLE 5
#define DIRA 3
#define DIRB 4
int i;
void setup() {
//---set pin direction
pinMode(ENABLE,OUTPUT);
pinMode(DIRA,OUTPUT);
pinMode(DIRB,OUTPUT);
Serial.begin(9600);
}
void loop() {
//---back and forth example
Serial.println("One way, then reverse");
digitalWrite(ENABLE,HIGH); // enable on
for (i=0;i<5;i++) {
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
delay(500);
digitalWrite(DIRA,LOW); //reverse
digitalWrite(DIRB,HIGH);
delay(500);
}
digitalWrite(ENABLE,LOW); // disable
delay(2000);
Serial.println("fast Slow example");
//---fast/slow stop example
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
delay(3000);
digitalWrite(ENABLE,LOW); //slow stop
delay(1000);
digitalWrite(ENABLE,HIGH); //enable on
digitalWrite(DIRA,LOW); //one way
digitalWrite(DIRB,HIGH);
delay(3000);
digitalWrite(DIRA,LOW); //fast stop
delay(2000);
Serial.println("PWM full then slow");
//---PWM example, full speed then slow
analogWrite(ENABLE,255); //enable on
digitalWrite(DIRA,HIGH); //one way
digitalWrite(DIRB,LOW);
delay(2000);
analogWrite(ENABLE,180); //half speed
delay(2000);
analogWrite(ENABLE,128); //half speed
delay(2000);
analogWrite(ENABLE,50); //half speed
delay(2000);
analogWrite(ENABLE,128); //half speed
delay(2000);
analogWrite(ENABLE,180); //half speed
delay(2000);
analogWrite(ENABLE,255); //half speed
delay(2000);
digitalWrite(ENABLE,LOW); //all done
delay(10000);
}