Web
	Analytics
برمجة المحرك الخطوي - الجزء 2

برمجة المحرك الخطوي (الجزء 2)

image001

في هذا المقال سنسرد لك كيفية التحكم بالمحرك الخطوي عن طريق ما يسمى كنترولور المحرك.


كنترولور المحرك الخطوي

 

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

 

سنقوم اليوم بالتكلم عن طريقتين للتحكم بالمحرك الخطوي:

l         الطريقة الأولى تعتمد على دارة تسمى H-Bridge

l         والطريقة الثانية تعتمد على دارة إليكترومية تسمى مصفوفة الترنزستورات ULN2003A.

 

هذه الدارتين عبارة عن مركبين اليكترونيين يمكنك شراءها في محلات بيع الاجزاء الاليكترونية.

أما إذا أردت أن تنجز كنترولور المحرك الخطوي بنفسك فغليك الرجوع إلى المقال الأول في هذه الحالة.

  


المحرك الخطوي الأحادي القطب

 

وهو النوع الأكثر شعبية بين هوات الروبوتات، ويتميز بدقة عالية. وغالبا ما يتم التحكم به بواسطة مجموعة من الترنزستوارات (غالبا أربعة انظر إلى المقال الأول) أو مركب إليكتروني يضم العديد من الترنزستورات داخله كما سنرى لاحقا.

  


المحرك الخطوي الثنائي القطبين

 

إنشاء دارة كهربائية تتحكم بهذا النوع صعب شيئا ما. هذا النوع من الدارات يسمى القنطرة أي (H-Bridge). ويفضل استعماله للحصول على عزم أعلى.

  


التحكم بواسطة الكنترولور ULN2003A

 

الدارة الكهربائية

image004 

بالنسبة للدارة الكهربائية سنحتاج للمركبات التالية:

l      بطاقة Arduino

l      المحرك الخطوي: المحرك الخطوي الذي سنستعمله في هذا المثال مأخوذ من قارئ قديم للأقراص المرنة. لهذا المحرك 5 أسلاك موصلة واحدا منها خاص بالتيار الكهربائي (VCC) والأربعة البقية مخصصة للتحكم بزاوية واتجاه دوران المحرك.

l      مقاومة متغيرة (Potentiometer) : ستسعمل لقيادة المحرك نحو الاتجاه المطلوب وكذلك الزيادة في السرعة أو نقصانها.

l      كنترولور المحرك الخطوي ULN2003A: وهو عبارة عن مجموعة من الترنزستورات المتراصة جنبا إلى جنب من أجل تزويد المحرك بشحنة كهربائية كافية.

l      أسلاك كهربائية

  

برمجة

المثال الأول: تطبيق بسيط

نقدم في المثال الأول شيفرة بسيطة لجعل المحرك يدور في اتجاه واحد. نستهدف من خلاله أولئك الذين ليس لهم معرفة مسبقة لهذا النوع من المحركات.

 

/* Stepper motor شيفرة المحرك الخطوي

* ----------------------------------------------

*5'25 disk drive شيفرة للتحكم بمحرك خطوي مأخوذ من قارئ الأقراص المرنة

*Copal Electronicsحسب المرجع الذي وجدت، فإن هذا المحرك مصنوع من طرف شركة

* خطوة 1.8 درجة، و96 أوم

*, with 1.8 degrees per step and 96 ohms

*

* [http://www.cs.uiowa.edu/~jones/step/example.html]

* خو عبارة عن محرك أحادي القطب مزود بـ 5 أسلاك موصلة

*

*

* الأحمر: موصل التيار الكهربائي، بالنسبة لي كانت 5 فولط كافية له

* - البرتقالي والأسود: coil 1

* - البني واﻷصفر: coil 2

*

* http://www.0j0.org | http://arduino.berlios.de

*

* @David Cuartiellesالمؤلف :

* @date: 20 Oct. 2005

* @المترجم: محمد السهلي

* @يناير 13 سنة 2012

*/

 

int motorPin1 =8;

int motorPin2 =9;

int motorPin3 =10;

int motorPin4 =11;

int delayTime =500;

 

void setup()

{

  pinMode(motorPin1, OUTPUT);

  pinMode(motorPin2, OUTPUT);

  pinMode(motorPin3, OUTPUT);

  pinMode(motorPin4, OUTPUT);

}

 

void loop()

{

  digitalWrite(motorPin1, HIGH);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, LOW);

  delay(delayTime);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, HIGH);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, LOW);

  delay(delayTime);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, HIGH);

  digitalWrite(motorPin4, LOW);

  delay(delayTime);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, LOW);

  digitaWrite(motorPin3, LOW);

  digitalWrite(motorPin4, HIGH);

  delay(delayTime);

}

 

المثال الثاني: تطبيق متقدم

تقوم هذه الشيفرة بالتحكم بسرعة واتجاه دوران المحرك باستعمال المقاومة المتغيرة. 

/* Stepper motor شيفرة المحرك الخطوي

* -------------

*5'25 disk drive شيفرة للتحكم بمحرك خطوي مأخوذ من قارئ الأقراص المرنة

*Copal Electronicsحسب المرجع الذي وجدت، فإن هذا المحرك مصنوع من طرف شركة

* خطوة 1.8 درجة، و96 أوم

*, with 1.8 degrees per step and 96 ohms

*

* [http://www.cs.uiowa.edu/~jones/step/example.html]

* خو عبارة عن محرك أحادي القطب مزود بـ 5 أسلاك موصلة

*

*

* الأحمر: موصل التيار الكهربائي، بالنسبة لي كانت 5 فولط كافية له

* - البرتقالي والأسود: coil 1

* - البني واﻷصفر: coil 2

*

* http://www.0j0.org | http://arduino.berlios.de

*

* @David Cuartielles المؤلف :

* @date: 20 Oct. 2005

* @المترجم: محمد السهلي

* @يناير 13 سنة 2012

*/

 

int motorPins[]={8, 9, 10, 11};

int count =0;

int count2 =0;

int delayTime =500;

int val =0;

 

void setup()

{

 for(count =0; count <4; count++)

 {

   pinMode(motorPins[count], OUTPUT);

  }

}

 

void moveForward()

{

  if((count2 ==0)|| (count2 ==1)){ count2 =16;}

  count2>>=1;

  for(count =3; count >=0; count--)

  {

    digitalWrite(motorPins[count], count2>>count&0x01);

   }

   delay(delayTime);

}

 

void moveBackward()

{

  if((count2 ==0)|| (count2 ==1)){ count2 =16; }

  count2>>=1;

  for(count =3; count >=0; count--)

  {

  digitalWrite(motorPins[3 - count], count2>>count&0x01);

  }

  delay(delayTime);

}

 

void loop()

{

  val = analogRead(0);

  if(val >540)

  {

/*  كلما كانت قيمة المقاومة المتغيرة قوية كلما كان التحرك أسرع*/ 

   delayTime =2048-1024* val /512+1;

   moveForward();

   }

  elseif(val <480)

  {

     /* كلما كانت قيمة المقاومة المتغيرة ضعيفة كلما كان التحرك أسرع*/ 

    delayTime =1024* val /512+1;

    moveBackward();

   }

  else

   {

     delayTime =1024;

   }

}

  


التحكم بواسطة H-bridge والمصفوفة  U2004 Darlington

 

تقديم 

سنستعمل في هذا الجزء مقاومة متغيرة (أو مقياس الجهد الانزلاقي Potentiometer) لنتحكم يديويا بالمحرك الخطوي كما فعلنا في الجزء السابق. 

الجميل هنا هو أننا سنستعمل شيفرة صغيرة تتحكم بالمحرك كيفما كان نوعه ونوع الكنترولور أيضا.

كنترولور المحرك الخطوي الأحادي القطب هو: المصفوفة U2004 Darlington

كنترولور المحرك الخطوي الثنائي القطب هو: القنطرة SN754410NE

 

المركبات اللازمة

العربية

الانجليزية 

بطاقة أردوينو

مقاومة متغيرة

محرك خطوي

مصفوفة U2004 Darlington

القنطرة H ذي الرمزSN754410NE 

بطاقة بلاستيكية مساعدة

أسلاك كهربائية

Arduino Board

Potentiometer

Stepper motor

U2004 Darlington Array

SN754410NE H-Bridge

breadboard

hookup wire

 

خطاطة المركب U2004 Darlington

05  image005 

 

خطاطة المركب  SN754410NE H-Bridge  

 06  image006

 

الدارات الكهربائية لكلا المحركين

 

تجد فيما يلي الدارتين الكهربائيتين لكلا صنفي المحرك الخطوي. من الأحسن أن تزودهم بطاقة كهربائية باستعمال بطاريات أو محول كهربائي.

للمقاومة المتغيرة 10Kثلاث مرابط، قم بإيصالهم كالتالي:

l         صل مربطي الطاقة بـ  5V و GND(في بطاقة Arduino)

l         صل المربط المتبقي بالمربط التناظري 0 (Analog pin 0) لبطاقة Arduino.

 

إذا كنت قد اضطلعت على المقال الأول ستجد أننا تكلمنا عن طريقتين لربط المحرك الخطوي بالبطاقة (باستعمال سلكين أو باستعمال 4 أسلاك كهربائية). في الأمثلة أسفله سنستعمل فقط 4 أسلاك كهربائية وبالتالي سنحتاج لأربعة مرابط في البطاقة Arduino.

 

المحرك الخطوي أحادي القطب 

المحرك الخطوي ثنائي القطب 

برمجة

/*(شيفرة للدارتين)
 * MotorKnob
 *
 *
سيتحرك المحرك وفق دوران المقاومة المتغيرة

 * (ويمكنك استعمال مستشعر اليكتروني آخر غيرها كذلك)

 *  المقاومة متصلة مع بطاقة أردينو من خلال المربط التناظري 0

 *
 * http://www.arduino.cc/en/Reference/Stepper
 *
هذا المثال هو للكل

 */

#include <Stepper.h>

//
لكل محرك عدد أقصى للخطوات، لهذا قم بتغيير العدد التالي حسب محركك
#define STEPS 100

//
قم بتعريف متغير للمحرك الخطوي وأشر
//
إلى عدد الخطوات وارقام المربط المتصل بها مع بطاقة أردوينو

Stepper stepper(STEPS, 8, 9, 10, 11);

// لحفظ القيمة السابقة التي فرأت من المقاومة المتغيرة
int previous = 0;

void setup()
{
  
// 30 RPMs سرعة دوران المحرك هي
  stepper.setSpeed
(30);
}

void loop()
{
  
//
قراءة قيمة المقاومة المتغيرة
  
int val = analogRead(0);

  
// عدد الخطوات اللازم على المحرك أن ينجزها هي الفارق بين القيمتين
  stepper.step
(val - previous);

  
// حفظ القيمة الحالية لتتستعمل كقيمة سالفة في المرة التالية
  previous 
= val;
}

 


تأليف محمد السهلي 

 

 


المراجع

http://arduino.cc/hu/Tutorial/StepperUnipolar

http://www.azega.com/controlling-a-stepper-motor-with-an-arduino/

http://en.wikipedia.org/wiki/Red-legged_Honeycreeper

http://arduino.cc/it/Tutorial/MotorKnob

http://ar.wikipedia.org/wiki/%D9%85%D8%AD%D8%B1%D9%83_%D8%AE%D8%B7%D9%88%D9%8A

http://en.wikipedia.org/wiki/Stepper_motor#Unipolar_motors

http://www.me.umn.edu/courses/me2011/arduino/technotes/dcmotors/L293/L293.html

http://www.remserv.ru/cgi/magazine/issue/120/home/2358 


 

 

أضف تعليق


كود امني
تحديث


Go to top