قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 29-12-2019, 04:49 PM المشاركة 1   
افتراضي الاردوينو والمحركات : DC motor ، Brushless DC Motor ، Servo Motor ، Stepper Motor Twitter FaceBook Google+



الاردوينو والمحركات : DC motor ، Brushless DC Motor ، Servo Motor ، Stepper Motor
التحكم فى سرعة محرك تيار مستمر DC motor باستخدام الاردوينو ومقاومة متغيرة Potentiometer :


محرك التيار المستمر DC motor هو المحرك الأكثر استخدامًا في مشاريع الروبوتات والإلكترونيات. للتحكم في سرعة محرك التيار المستمر ، لدينا طرق مختلفة ، ولكن في هذا المشروع ، نتحكم في سرعة محرك التيار المستمر باستخدام تقتية تديل رض النبضة PWM. في هذا المشروع ، سنتمكن من التحكم في سرعة محرك التيار المستمر باستخدام مقاومة متغيرة ، ويمكننا ضبط السرعة عن طريق دوران مقبض المقاومة المتغيرة .

تعديل عرض النبضة PWM :
ما هو تعديل عرض النبضة ؟ هي تقنية باستخدامها يمكننا التحكم في الجهد أو القدرة . لفهم الأمر بشكل أكثر بساطة ، إذا كنت تستخدم 5 فولت لتشغيل محرك ، فسيتحرك المحرك بسرعة معينة ، والآن إذا قمنا بتخفيض الجهد المطبق بمقدار 2 يعني أننا نطبق 3 فولت على المحرك عندئذ تقل سرعة المحرك أيضًا. يستخدم هذا المفهوم في المشروع للتحكم في الجهد باستخدام PWM.

كود:
 % Duty cycle = (TON/(TON + TOFF)) *100
Where, TON = HIGH time of the square wave
             TOFF = LOW time of square wave



الآن إذا كان المفتاح في الشكل مغلقًا بشكل مستمر على مدار فترة زمنية ، فسيتم تشغيل ON المحرك بشكل مستمر خلال ذلك الوقت. إذا تم إغلاق المفتاح لمدة 8 مللي ثانية وفتح لمدة 2 مللي ثانية على مدار دورة 10 مللي ثانية ، فسيكون المحرك في وضع التشغيل فقط خلال 8 مللي ثانية. الآن ، الجهد المتوسط خلال فترة 10 مللي ثانية يساوى

كود:
 Turn ON time/ (Turn ON time + Turn OFF time)

وهذا ما يسمى دورة التشغيل duty cycle وهو 80% (8/ (8+2)) ، وبالتالي فإن متوسط جهد الخرج سيكون 80% من جهد البطارية. الآن ، لا يمكن للعين البشرية رؤية أن المحرك يعمل لمدة 8 مللي ثانية ، ثم لا يعمل لمدة 2 مللي ثانية ، لذلك سيبدو أن المحرك يدور بسرعة 80% .
في الحالة الثانية ، يتم إغلاق المفتاح لمدة 5 مللي ثانية ويفتح لمدة 5 مللي ثانية على مدار فترة 10 مللي ثانية ، وبالتالي فإن متوسط جهد الخرج سيكون 50% من جهد البطارية. إذا كان الجهد الكهربي للبطارية هو 5 فولت ودورة التشغيل 50% ، فإن متوسط الجهد الكهربي الطرفي سيكون 2.5 فولت.
في الحالة الثالثة ، تكون دورة التشغيل 20% ومتوسط الجهد الطرفي 20% من جهد البطارية.

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



البرنامج :


كود:
int pwmPin = 12; // assigns pin 12 to variable pwm
int pot = A0; // assigns analog input A0 to variable pot
int c1 = 0;   // declares variable c1
int c2 = 0;   // declares variable c2

void setup()  // setup loop
{
  pinMode(pwmPin, OUTPUT); 
  pinMode(pot, INPUT);  
}
void loop()
{
  c2= analogRead(pot); 
  c1= 1024-c2;         // subtracts c2 from 1000 ans saves the result in c1
  digitalWrite(pwmPin, HIGH); //ON
  delayMicroseconds(c1);//ON Time   
  digitalWrite(pwmPin, LOW); //OFF 
  delayMicroseconds(c2);  //OFF Time
}

شرح البرنامج :
في الكود أعلاه ، يتم تهيئة المتغير c1 و c2 وتعيين الطرف التناظري A0 لخرج المقاومة المتغيرة و الطرف 12 لخرج PWM .

كود:
 int pwmPin = 12;
int pot = A0;
int c1 = 0;  
int c2 = 0;

فى الدالة setup ، يتم تحديد الطرف A0 كدخل ، والطرف 12 كخرج :

كود:
void setup()  {
  pinMode(pwmPin, OUTPUT); // declares pin 12 as output
  pinMode(pot, INPUT);  // declares pin A0 as input
}

الآن ، في الدالة loop ، نقرأ القيمة التناظرية (من A0) باستخدام analogRead(pot) ، ونحفظها في المتغير c2. ثم ، نطرح قيمة c2 من 1024 ونحفظ النتيجة في c1. ثم نجعل الطرف 12 الخاص بخرج PWM بالحالة المرتفعة HIGH ثم بعد تأخير بالقيمة c1 نجعل هذا الطرف LOW. مرة أخرى ، بعد تأخير بالقيمة c2 تستمر الحلقة.
سبب طرح قيمة التناظرية من 1024 ، هو أن المحول من تناظرى لرقمى فى الاردوينو بدقة 10 بت (وبالتالي فإن قيم الأعداد الصحيحة 0 - 2^10 = 1024 قيمة ). هذا يعني أنه سيتم توزيع جهود الدخل بين 0 و 5 فولت إلى قيم أعداد صحيحة بين 0 و 1024 . لذلك إذا ضربنا anlogValue فى (5/1024) ، نحصل على القيمة الرقمية لجهد الدخل .

كود:
void loop()
{
  c2= analogRead(pot);
  c1= 1024-c2;           
  digitalWrite(pwmPin, HIGH); // sets pin 12 HIGH
  delayMicroseconds(c1);   // waits for c1 uS (high time)
  digitalWrite(pwmPin, LOW);  // sets pin 12 LOW
  delayMicroseconds(c2);   // waits for c2 uS (low time)
}

شرح العمل:
في هذه الدائرة ، للتحكم في سرعة محرك التيار المستمر ، نستخدم مقاومة متغيرة 100 كيلو أوم لتغيير دورة التشغيل duty cycle لإشارة PWM. يتم توصيل المقاومة المتغيرة إلى طرف الدخل التناظرى A0 للاردوينو أونو ويتصل المحرك DC بالطرف 12 من الاردوينو (وهو طرف خرج PWM). عمل البرنامج بسيط للغاية ، لأنه يقرأ الجهد من الطرف التناظرى A0. الجهد التناظرى يتغير باستخدام المقاومة المتغيرة . بعد القيام ببعض الحسابات اللازمة ، يتم ضبط دورة التشغيل وفقًا لذلك.
على سبيل المثال ، إذا قمنا بإدخال جهد يناظر القيمة 256 إلى المدخل التناظرى ، فسيكون وقت التشغيل المرتفع HIGH time 768ms (1024-256) وسيكون وقت الفصل المنخفض LOW time مللي ثانية. لذلك ، فهذا يعني ببساطة أن دورة العمل هي 75% . لا تستطيع أعيننا رؤية مثل هذا التذبذب عالي التردد ويبدو أن المحرك يعمل ON باستمرار بقيمة 75% من السرعة. هكذا يمكننا التحكم في السرعة باستخدام المقاومة المتغيرة .

احصائية الشكر والاعجاب - 3 شكراً, 0 عدم اعجاب, 3 اعجاب
شكراً عبدالله حجازى, عريبى محمود, سعيد قادر ( شكر العضو على هذه المشاركة )
اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 29-12-2019, 05:04 PM المشاركة 2   
افتراضي


التحكم فى سرعة واتجاه محرك التيار المستمر باستخدام الدائرة المتكاملة L293D واستخدام PWM مع الاردوينو :

قبل المضي قدمًا ، نحتاج إلى مناقشة دائرة القنطرة H-BRIDGE. هذه الدائرة لها وظيفتان أساسيتان ، الأولى هى التشغيل والتحكم فى سرعة محرك التيار المستمر من إشارات التحكم ذات القدرة المنخفضة ، والآخرى هى تغيير اتجاه دوران محرك التيار المستمر.




نعلم جميعًا أنه بالنسبة لمحرك DC ، لتغيير اتجاه الدوران ، نحتاج إلى تغيير قطبية جهد تغذية المحرك . لذلك لتغيير القطبية نستخدم القنطرة H-bridge . الآن في الشكل أعلاه لدينا أربع مفاتيح .



كما هو مبين في الشكل ، لدوران المحرك يتم إغلاق المفاتيح A1 و A2. لذلك ، يمر التيار عبر المحرك من اليسار إلى اليمين ، كما هو موضح في الجزء الايسر من الشكل . الآن اعتبر أن المحرك يدور في اتجاه عقارب الساعة clockwise . الآن إذا تم فتح المفاتيح A1 و A2 ، ويتم إغلاق المفاتيح B1 و B2. يمر التيار عبر المحرك من اليمين إلى اليسار كما هو موضح في الجزء الأيمن من الشكل . اتجاه مرور التيار عكس إتجاه مروره فى الحالة الأولى وبالتالي نرى جهد معكوس عند طرف المحرك بالنسبة للحالة الأولى ، وبالتالي فإن المحرك يدور بعكس عقارب الساعة anti clock wise . هذه هي الطريقة التي تعمل بها القتطرة H-BRIDGE. ومع ذلك ، يمكن تشغيل محركات القدرة المنخفضة بواسطة الدائرة المتكاملة
H-BRIDGE IC L293D .
الدائرة المتكاملة L293D هى H-BRIDGE مصممة لتشغيل محركات التيار المستمر منخفضة القدرة كما فى الشكل أدناه تتكون هذا الدائرة المتكاملة من قنطرتين ، وبالتالي يمكنها تشغيل محركين DC. لذلك يمكن استخدامها لتشغيل محركات الروبوت من إشارات المتحكم الدقيق .



كما ذكرنا ، هذه الدائرة المتكاملة لديها القدرة على تغيير اتجاه دوران محرك التيار المستمر . يتم تحقيق ذلك من خلال التحكم في مستويات الجهد على INPUT1 و INPUT2.



لذلك ، كما هو موضح في الشكل أعلاه ، للدوران في اتجاه عقارب الساعة يجب أن يكون 2A مرتفعًا ويجب أن يكون 1A منخفضًا. وبالمثل بالنسبة لعقارب الساعة 1A يجب أن يكون مرتفعا و 2 A يجب أن تكون منخفضا .

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



فى البداية ، نحتاج إلى اختيار طرف إخراج PWM من ستة أطراف ، بعد ذلك نحتاج إلى تعيين هذا الطرف كخرج .
بعد ذلك ، نحتاج إلى تمكين خاصية PWM في الاردوينو أونو عن طريق استدعاء الدالة “analogWrite(pin, value)” . حيث يمثل "pin" رقم الطرف حيث نحتاج إلى إخراج PWM ، ولقد وضعناه على أنه "3". لذلك على الطرف PIN3 نحصل على خرج PWM.
القيمة value هي دورة التشغيل ON duty cycle ، وهى بين 0 (off دائمًا) و 255 (on دائمًا). نحن بصدد زيادة increment هذا العدد وخفضه decrement عن طريق الضغط على زر.
لدى الاردوينو أونو حد أقصى للدقة resolution هو "8" ، لا يمكنك أن تذهب أبعد من هنا ومن ثم تكون القيم 0-255 . ومع ذلك ، يمكنك تقليل دقة PWM باستخدام الأمر “analogWriteResolution()” ، عن طريق إدخال قيمة من 4-8 في الأقواس ، يمكننا تغيير قيمتها من أربعة بت PWM إلى ثمانية بت PWM.
المفتاح SW1 لتغيير اتجاه دوران محرك التيار المستمر .


البرنامج :

كود:
int i=0;//initializing a integer for incrementing and decrementing duty ratio.
void setup()
{
                pinMode(3, OUTPUT);   // sets the pin3 as output
                pinMode(0, INPUT);// sets the pin0 as output
                pinMode(1, INPUT);// sets the pin1 as output
}
 
void loop()
{
                analogWrite(3, i);  // analogWrite values from 0 to 255
                if (digitalRead(0)==LOW)
                {
                                if (i<255)
                                {
                                                i++;//if pin0 is pressed and the duty ratio value is less than 255
                                                delay(30);
                                }
                }
                if (digitalRead(1)==LOW)
                {
                                if (i>0)
                                {
                                                i--;// if pin1 is pressed and the duty ratio value is greater than 0
                                                delay(30);
                                }
                }
}

احصائية الشكر والاعجاب - 3 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً Mistake, عبدالله حجازى, عريبى محمود ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 29-12-2019, 05:12 PM المشاركة 3   
افتراضي


التحكم فى سرعة واتجاه محرك التيار المستمر DC motor باستخدام الدائرة المتكاملة L298 والاردوينو :

عن طريق توصيل الدائرة المتكاملة (القتطرة) L298 إلى الاردوينو ، يمكنك التحكم في محرك التيار المستمر DC.
محرك التيار المستمر ، هو أكثر أنواع المحركات شيوعًا. محركات التيار المستمر لها عادة طرفان ، طرف موجب والآخر سالب . إذا قمت بتوصيل هذين الطرفين مباشرة بالبطارية ، فسيتم دوران المحرك. إذا قمت بتبديل الطرفين ، فسيتم دوران المحرك في الاتجاه المعاكس.
للتحكم في اتجاه دوران محرك DC ، دون تغيير طريقة توصيل الأطراف ، يمكنك استخدام دائرة تسمى H-Bridge. هذه القنطرة عبارة عن دائرة إلكترونية يمكنها قيادة المحرك في كلا الاتجاهين. تُستخدم قنطرة H في العديد من التطبيقات المختلفة ، أحد أكثرها شيوعًا هو التحكم في المحركات في الروبوتات. يطلق عليها قتطرة (جسر) H-لأنها تستخدم أربعة ترانزستورات متصلة بطريقة تشبه "H" .
يمكنك استخدام الترانزستورات المنفصلة لإنشاء هذه الدائرة ، ولكن في هذا التدريب ، سنستخدم الدائرة المتكاملة L298. يمكن للدائرة المتكاملة L298 التحكم في سرعة واتجاه محركات التيار المستمر DC motors ومحركات الخطوة stepper motors ويمكنها التحكم في محركين في وقت واحد. معدل تيارها هو2Aلكل محرك. عند هذه التيارات ، سوف تحتاج إلى استخدام مصارف الحرارة heat sinks .
الشكل أدناه يبين توزيع أطراف الدائرة المتكاملة L298 :



هناك ثلاثة أطراف دخل لكل محرك ، هى Input1 (IN1), Input2 (IN2), Enable1 (EN1) للمحرك Motor1 و Input3, Input4, and Enable2 للمحرك Motor2.
نظرًا لأننا سنتحكم في محرك واحد فقط في هذا التدريب ، فسوف نوصل بين Arduino و IN1 (الطرف 5) و IN2 (الطرف 7) و Enable1 (الطرف6) من الدائرة المتكاملة L298. تعتبر الاطراف 5 و 7 مداخل رقمية ، أي تشغيل ON أو إيقاف OFF ، بينما يحتاج الطرف 6 إلى إشارة معدلة بعرض النبضة (PWM) للتحكم في سرعة المحرك.
يوضح الجدول التالي اتجاه دوران المحرك وفقًا للقيم الرقمية لكل من IN1 و IN2.




يتم توصيل الطرف IN1 من L298 إلى الطرف 8 من Arduino بينما يتم توصيل الطرف IN2 إلى الطرف 9 . هذه الأطراف الرقمية من Arduino تتحكم في اتجاه المحرك. ويتم توصيل الطرف EN A من الدائرة المتكاملة إلى الطرف PWM pin 3 من Arduino. هذا الطرف سوف يتحكم في سرعة المحرك.
لتعيين قيم أطراف الاردوينو 8 و 9 ، سوف نستخدم الدالة digitalWrite() ، ولتعيين قيمة الطرف 3 ، سوف نستخدم الدالة analogWrite() .

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




البرنامج :

كود:
const int pwm = 3 ;	//initializing pin 3 as pwm
const int in_1 = 8 ;
const int in_2 = 9 ;

//For providing logic to L298 IC to choose the direction of the DC motor 

void setup()
{
pinMode(pwm,OUTPUT) ;  	//we have to set PWM pin as output
pinMode(in_1,OUTPUT) ; 	//Logic pins are also set as output
pinMode(in_2,OUTPUT) ;
}

void loop()
{
//For Clock wise motion , in_1 = High , in_2 = Low

digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,LOW) ;
analogWrite(pwm,255) ;

/*setting pwm of the motor to 255
we can change the speed of rotaion
by chaning pwm input but we are only
using arduino so we are using higest
value to driver the motor  */

//Clockwise for 3 secs
delay(3000) ; 		

//For brake
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,HIGH) ;
delay(1000) ;

//For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH
digitalWrite(in_1,LOW) ;
digitalWrite(in_2,HIGH) ;
delay(3000) ;

//For brake
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,HIGH) ;
delay(1000) ;
 }

يجب أن يدور المحرك أولاً في اتجاه عقارب الساعة (CW) لمدة 3 ثوانٍ ثم عكس اتجاه عقارب الساعة (CCW) لمدة 3 ثوانٍ.

احصائية الشكر والاعجاب - 4 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً مسلم11, Mistake, عبدالله حجازى, عريبى محمود ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 01-01-2020, 07:13 PM المشاركة 4   
افتراضي محرك السيرفو


محركات السيرفو Servo Motors
التحكم فى الموضع باستخدام محرك السيرفو والاردوينو :


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



لمحرك السيرفو ثلاث أسلاك : اثنان لتزويده بالطاقة (ground، Vcc)، والسلك الثالث يتم من خلاله تطبيق إشارة التحكم (نبضات PWM). في العادة لون سلك Vcc أحمر، ولون سلك الأرضي ground أسود أو بني، أما لون سلك إشارة التحكم أصفر أو أبيض أو برتقالي.
يتكون محرك السيرفو من الأجزاء التالية ، كما هو موضح في الشكل أدناه :






1- محرك تيار مستمر DC motor .
2- عامود الخرج output shaft (ذرا ع محرك السرفو).
3- سلسلة من التروس gears التي تصل محرك DC بعامود الخرج. الهدف منها تقليل سرعة محرك DC لتصبح مناسبة.
4- نظام تحكم الكتروني بمكان المقبض ذو تغذية عكسية مغلقة، ويتكون مما يلي:
أ‌- مقاومة متغيرة potentiometer: تتصل مع عامود الخرج أو في مكان ما من سلسلة التروس، تعطى جهدا متناسيا مع موضع العامود .
ب‌- مبدل (محول) converter نبضات تعديل عرض النبضة PWM إلى جهد.
ت‌- مقارن comparator: يعمل على مقارنة الجهد الناتج عن المقاومة المتغيرة مع الجهد الناتج عن المبدل.

كيف يعمل محرك السيرفو :
1- يطبق على المحرك إشارة تحكم على شكل إشارة تعديل عرض النبضة pulse width modulation ((PWM والتي ترددها 50 Hz (أي تتكرر الإشارة كل 1/50 = 20ms ) . عرض هذه النبضات هو الذي سيتحكم بزاوية الدوران كما سنرى.
2- يتم تحويل هذه النبضات إلى جهد مكافئ عن طريق مبدل PWM. كلما كان عرض هذه النبضات أكبر كلما كان الجهد الناتج أكبر.
3- تقدم المقاومة المتغيرة جهدا يتناسب مع مكان عامود الخرج .
4- يعمل المقارن على مقارنة الجهد الناتج عن المبدل والجهد الناتج عن المقاومة المتغيرة. الاختلاف ما بين الإشارتين يعرف بإشارة الخطأ error signal، والتي يتم تضخيمها، وتستخدم لقيادة محرك التيار المستمر DC.
5- يتحرك محرك DC، وعامود الخرج، وبالتالي الجهد الناتج عن المقاومة المتغيرة بحيث تؤدي العملية إلى إنقاص أو حذف إشارة الخطأ.
6- عندما يتم حذف إشارة الخطأ يكون عامود الخرج قد وصل إلى المكان أو الزاوية المطلوبة، ويتوقف محرك DC تبعا لذلك .
7- عند تغيير عرض نبضات PWM، سيتغير الجهد الناتج عن مبدل PWM وتنتج إشارة خطأ، ليتحرك المحرك وعامود الخرج إلى زاوية أخرى مطلوبة، ويتوقف عندها.
يبين الشكل أدناه العناصر الداخلية لمحرك السيرفو.





معظم محركات السيرفو تدور ضمن 180&#186;، وبعض منها ضمن 360&#186;. يتم التحكم بالزاوية الدقيقة من خلال عرض نبضات PWM ذات التردد 50Hz كما تم ذكره. تعتمد العلاقة ما بين عرض النبضة والزاوية على الشركات المصنعة للمحركات ولكن المبدأ الأساسي هو نفسه في كل محرك.

مثال عرض النبضات وزاوية الدوران: يوضح الشكل أدناه مثالا على العلاقة ما بين عرض النبضات وزاوية الدورات
• من أجل عرض نبضة مقداره 1ms تكون زاوية المحرك 0° .
• من أجل عرض نبضة مقداره 1.5ms تكون زاوية المحرك 90° .
• من أجل عرض نبضة مقداره 2ms تكون زاوية المحرك 180° .
يتحرك محرك السيرفو ما بين 0 و180 درجة، ولا يتحرك في دوران مستمر كما في محرك DC التقليدي.








احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً عريبى محمود ( شكر العضو على هذه المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 01-01-2020, 07:25 PM المشاركة 5   
افتراضي


المكتبة Servo : Servo library
تتيح هذه المكتبة للوحة Arduino التحكم بمحركات السيرفو . تحتوي محركات السيرفو على تروس مدمجة وعامود shaft يمكن التحكم فيه بدقة. تسمح محركات السيرفو القياسية بوضع العمود في زوايا مختلفة ، تتراوح عادة بين 0 و 180 درجة. تتيح محركات السيرفو المستمرة الدوران ضبط دوران العمود على سرعات مختلفة.
تدعم مكتبة Servo ما يصل إلى 12 محركًا في معظم لوحات Arduino و 48 محركًا في Arduino Mega. على لوحات أخرى غير Mega ، يؤدي استخدام المكتبة إلى تعطيل الدالة analogWrite() (PWM) على الطرفين 9 و 10 ، سواء كان هناك Servo على تلك الأطراف أم لا. على Mega ، يمكن استخدام ما يصل إلى 12 سيرفو دون التداخل مع وظيفة PWM ؛ يؤدي استخدام 12 إلى 23 محركًا إلى تعطيل PWM على الأطراف 11 و 12.

لاستخدام هذه المكتبة يجب ضم الملف :

كود:
 #include <Servo.h>

بعد استدعاء المكتبة يجب إنشاء كائن من الفئة Servo ، وليكن باسم servo ، أو أى اسم آخر ، مثال:

كود:
Servo servo;

تحتوي محركات السيرفو على ثلاثة أسلاك: القدرة power والأرض ground والإشارة signal. سلك القدرة يكون عادة أحمرًا ، ويجب توصيله بالطرف 5V على لوحة Arduino. السلك الأرضي عادة ما يكون أسود أو بني ويجب توصيله بطرف أرضي على لوحة Arduino. طرف الإشارة يكون أصفرًا أو برتقاليًا أو أبيضًا ويجب أن يكون متصلاً بطرف رقمي على لوحة Arduino. لاحظ أن محركات السيرفو تسحب قدرًا كبيرًا من القدرة ، لذلك إذا كنت بحاجة إلى تشغيل أكثر من واحد أو اثنين ، فربما تحتاج إلى تشغيلها من مصدر منفصل (أى ليس الطرف +5V في Arduino). تأكد من توصيل الأرضى لكل من Arduino ومصدر القدرة الخارجية معًا.

دوال المكتبة :

كود:
attach()
write()
writeMicroseconds()
read()
attached()
detach()


1- الدالة attach()
الوصف : إلحاق (ربط) attach متغير Servo إلى طرف . لاحظ أنه في Arduino 0016 والإصدارات الأقدم ، تدعم مكتبة Servo محركات السيرفو فقط على الأطراف : 9 و 10. تحدد هذه الدالة الطرف pin الذى سيتم ربط محرك السيرفو معه.
الصيغة :

كود:
servo.attach(pin)
servo.attach(pin, min, max)

البارامترات :
المتغير servo : هو متغير من النوع Servo .
الطرف pin : هو رقم الطرف المتصل به السيرفو .
الحد الأدنى (اختيارى) min (optional) : عرض النبضة بالميكروثانية ، المقابلة لأدنى زاوية (0 درجة) على السيرفو (القيمة الافتراضية 544) .
الحد الأقصى (اختيارى) max (optional) : عرض النبضة بالميكروثانية ، المقابلة لأقصى زاوية (180 درجة) على السيرفو (القيمة الافتراضية 2400) .

مثال :

[CODE#include <Servo.h>
Servo myservo;

void setup()
{
myservo.attach(9);
}

void loop() {}] [/CODE]

2- الدالة write() :
الوصف :
يكتب (يرسل) قيمة إلى السيرفو ، والتحكم على العامود وفقا لذلك. فى السيرفو القياسى ، سيؤدي ذلك إلى ضبط زاوية العامود (بالدرجات) ، مع تحريك العمود إلى ذلك الاتجاه. أى تعمل على ضبط زاوية محور المحرك تبعا للبارامتر angle من 0 وحتى 180. في سيرفو الدوران المستمر ، سيؤدي ذلك إلى ضبط سرعة السيرفو (مع 0 تكون بأقصى سرعة في اتجاه معين ، 180 تكون بأقصى سرعة في الآخر ، وقيمة بالقرب من 90 لا توجد حركة).

الصيغة :

كود:
servo.write(angle)

البارامترات :
المتغير servo : متغير من النوع Servo .
الزاوية angle : القيمة المطلوب إرسالها إلى السيرفو ، من 0 إلى 180 .

مثال :

كود:
#include <Servo.h> 
Servo myservo;

void setup() 
{ 
  myservo.attach(9);
  myservo.write(90);  // set servo to mid-point
} 

void loop() {}

3- الدالة writeMicroseconds() :
الوصف :
تكتب (ترسل) قيمة بالميكرو ثانية (uS) إلى السيرفو ، والتحكم في العامود وفقا لذلك. على السيرفو القياسى ، سيؤدي ذلك إلى ضبط زاوية العمود. بالنسبة للسيرفو القياسى ، تكون قيمة البارامتر 1000 عكس اتجاه عقارب الساعة تمامًا ، بينما تكون القيمة 2000 في اتجاه عقارب الساعة تمامًا ، والقيمة 1500 في المنتصف.
يتم تحديد عرض نبضة إشارة PWM بوحدة الميكرو ثانية وبالتالي تحريك المحرك إلى زاوية محددة .
يستجيب سيرفو الدوران المستمر للدالة لوظيفة WriteMicrosecond بطريقة مماثلة للدالة write .

الصيغة :

كود:
servo.writeMicroseconds(uS)
البارامترات :
المتغير servo : متغير من النوع Servo .
الميكروثانية uS : قيمة البارامتر بالميكروثاتية (نوع int )
مثال :

كود:
 #include <Servo.h> 
Servo myservo;

void setup() 
{ 
  myservo.attach(9);
  myservo.writeMicroseconds(1500);  // set servo to mid-point
} 

void loop() {}

4- الدالة read() :
الوصف : قراءة الزاوية الحالية للسيرفو (القيمة الممررة لأخر إستدعاء للدالة write() (.
الصيغة :

كود:
servo.read()

البارامترات :
المتغير servo : متغير من النوع Servo .
العائد :
زاوية السيرفو ، من 0 إلى 180 درجة .

5- الدالة attached()
الوصف :
اختبار ما إذا كان متغير Servo مرتبط إلى طرف pin .
الصيغة :

كود:
servo.attached()

البارامترات :
المتغير servo : متغير من النوع Servo .
العائد :
صواب true إذا كان السرفو مرتبط إلى طرف ، خلاف ذلك false .

6- الدالة detach() :
الوصف :
فصل إرتباط Detach متغير Servo من طرفه . إذا تم فصل جميع متغيرات الفئة Servo ، عنئذ يمكن استخدام الأطراف 9 و 10 من أجل خرج PWM بالدالة analogWrite() .

الصيغة :

كود:
servo.detach()

البارامترات :
المتغير servo : متغير من النوع Servo .


احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً عريبى محمود ( شكر العضو على هذه المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 01-01-2020, 07:38 PM المشاركة 6   
افتراضي


أمثلة على التحكم فى الموضع باستخدام محرك السيرفو والأردوينو

مثال رقم 1 :
المطلوب :
التحكم في موضع عامود محرك سيرفو باستخدام زاوية محسوبة في البرنامج . على سبيل المثال ، تريد مستشعرًا على روبوت أن يتأرجح swing عبر قوس أو ينتقل إلى الموضع الذي تحدده.
الحل :
سوف نقوم باستخدم المكتبة Servo التى توزع مع بيئة تطوير الاردوينو . تتيح لك الإصدارات الحديثة من المكتبة توصيل إشارة السيرفو بأي طرف رقمي من Arduino.

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





البرنامج :

كود:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 10 to the servo object
}
void loop()
{
for(angle = 0; angle < 180; angle += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(angle); // tell servo to go to position in variable 'angle'
delay(20); // waits 20ms between servo commands
}

for(angle = 180; angle >= 1; angle -= 1) // goes from 180 degrees to 0 degrees
{
myservo.write(angle); // tell servo to go to position in variable ' angle '
delay(20); // waits 20ms between servo commands
}
}

فى هذا المثال يتأرجح sweep عامود السيرفو بين 0 و 180 درجة. قد تحتاج إلى إخبار المكتبة بضبط الحد الأدنى والحد الأقصى للمواقع بحيث تحصل على نطاق الحركة الذي تريده. سيؤدي استدعاء الدالة Servo.attach باستخدام الوسائط الاختيارية للحد الأدنى والحد الأقصى من المواضع إلى ضبط الحركة:

كود:
myservo.attach(9,1000,2000 ); // use pin 9, set min to 1000us, max to 2000us

نظرًا لأن محركات السيرفو النموذجية تستجيب للنبضات المقاسة بالميكروثانية وليس بالدرجات ، فإن الوسائط التالية لرقم الطرف تُبلغ مكتبة Servo بعدد الثواني التي يجب استخدامها عند طلب 0 درجة أو 180 درجة.
فيما يلي وسائط الدالة servo.attach(pin, min, max) :
• الطرف pin : رقم الطرف المتصل به محرك السيرفو .
• الحد الأدنى (اختيارى) min (optional) : عرض النبضة بالميكرو ثانية المقابلة للزاوية الأدنى (0 درجة) على السيرفو (القيمة الافتراضية 544) .
• الحد الأقصى (اختيارى) max (optional) : عرض النبضة بالميكرو ثانية المقابلة للزاوية الأقصى (180 درجة) على السيرفو (القيمة الافتراضية 2,400) .

مثال رقم 2 : التحكم فى سيرفو أو اثنين بمقاومة متغيرة أو حساس :
المطلوب :
التحكم في اتجاه الدوران وسرعة سيرفو أو اثنين باستخدام مقاومة متغيرة . على سبيل المثال ، تريد التحكم في المنظر وإمالة الكاميرا أو المستشعر المتصلين بمحركات السيرفو . يمكن أن تعمل هذا المثال مع أي جهد متغير من جهاز استشعار يمكن قراءته من مدخل تناظرى .
الحل :
يمكن استخدام نفس المكتبة كما هو الحال في المثال السابق ، مع إضافة كود لقراءة الجهد على المقاومة المتغيرة . هذه القيمة يتم عمل تغيير المقياس scale لها بحيث يتم تعيين موضع المقاومة المتغيرة (من 0 إلى 1023) إلى قيمة تتراوح بين 0 و 180 درجة .

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







البرنامج :

كود:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo
myservo.write(val); // sets position to the scaled value
delay(15); // waits for the servo to get there
}


مثال رقم 3 :
التحكم في محركات السرفو باستخدام الاردوينو والازرار الضاغطة
في هذا التدريب ، سنتحكم في محرك السيرفو بواسطة ARDUINO UNO. يتم استخدام محركات السيرفو حيث تكون هناك حاجة لحركة أو وضع position عمود دوران بدقة . هذه المحركات ليست للتطبيقات عالية السرعة ، بل لتطبيقات السرعة المنخفضة ، وعزم الدوران المتوسط والوضع الدقيق . يتم استخدام هذه المحركات في آليات أذرع الربوت ، ومتحكمات الطيران وأنظمة التحكم.

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




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

كود:
#include <Servo.h>
Servo servo;
servo.attach(servo_signal_pin_attached_to);
servo.write(needed_position_ angle);

نحتاج أولاً إلى تعيين تردد إشارة PWM ولهذا يجب أن نستدعى ملف الرأس “#include <Servo.h>” ، بضم ذلك الملف في البرنامج ، يتم ضبط التردد تلقائيًا وسنستخدم بعض الشروط الخاصة ، والتي تمكن المستخدم من إدخال الموضع المطلوب مباشرة دون أي صعوبة .
نحتاج الآن إلى تعريف اسم كائن من الفئة Servo وليكن “Servo servo” ، هنا servo هو الاسم الذي تم اختياره ، لذلك أثناء الكتابة من أجل الموضع ، سنستخدم هذا الاسم ، وهذه الميزة تكون مفيدة عندما يكون لدينا العديد من محركات السيرفو للتحكم فيها.
الآن نقوم بإخبار الاردوينو بمكان توصيل طرف إشارة السيرفو أو حيث نحتاج إلى إنشاء إشارة PWM. للقيام بذلك ، لدينا الدالة “servo.attach(3);” ، وهنا نبلغ الاردوينو أننا وصلنا طرف إشارة السيرفو بالطرف 3.
كل ما تبقى هو تعيين الموضع position ، سنقوم بتعيين موضع السيرفو باستخدام الدالة “servo.write(30);” ، بهذا الأمر ، يتحرك محور السيرفو 30 درجة. بعد ذلك كلما احتجنا إلى تغيير موضع السيرفو ، نحتاج إلى استدعاء الدالة ”servo.write(needed_position_ angle);” . في هذه الدائرة سيكون لدينا زران يزيد أحدهما من وضعية السيرفو والآخر لتقليل موضع السيرفو .

البرنامج :

كود:
 
int i=0;//initializing a integer for incrementing and decrementing duty ratio.
#include <Servo.h>// header file for controlling servo
Servo servo;//defining the name usage as servo itself

void setup()
{
 pinMode(3, OUTPUT);   // sets the pin3 as output
 pinMode(0, INPUT);// sets the pin0 as input
 pinMode(1, INPUT);// sets the pin1 as input

servo.attach(3);
}
 
void loop()
{
 servo.write(i);//set servo potion ‘i’ degrees
               
 if (digitalRead(0)==LOW)
  {
      if (i<180)
        {
          i++;//if pin0 is pressed and degrees is less than 180
          delay(30);
         }
    }
 if (digitalRead(1)==LOW)
   {
     if (i>0)
      {
        i--;// if pin1 is pressed and degrees is greater than 0
        delay(30);
       }
    }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً عريبى محمود ( شكر العضو على هذه المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 07-01-2020, 05:57 PM المشاركة 7   
افتراضي المحركات الخطوية Stepper Motors


المحركات الخطوية Stepper Motors

المرجع : كتاب الاردوينو من البداية حتى الاحتراف ، د.م/ حسين وفائى

تتميز المحركات الخطوية بأنها تتحرك على شكل خطوات متقطعة حيث يدور المحور بزاوية محددة مع كل نبضة كهربائية يتلقاها أحد ملفات المحرك من دون أية آلية تغذية عكسية feedback كما في محرك السيرفو، وهذا ما يجعل المحرك الخطوي أبسط وأقل تكلفة. تتغير زاوية دوران المحور تبعا لبنية المحرك الداخلية ولكنها محصورة عموما ما بين °0.9 حتى °90. لذلك تستخدم المحركات الخطوية في التطبيقات التي تتطلب دقة في الحركة مثل طابعات 3D ، والبلوتر plotter، ومحركات الأقراص الصلبة والليزرية، والماسح الضوئي scanner، وآلات CNC والروبوتات.

يتألف المحرك الخطوي من جزأين رئيسيين هما: العضو الدوار rotor، والجزء الثابت stator. العضوالدوار عبارة عن مغناطيس دائم، أما الجزء الثابت فيتألف من عدة ملفات تعمل كمغناطيس كهربائي عندما يمر بها تيار كهربائي. تسبب ملفات المغناطيس الكهربائي إلى أن ينحاز الجزء الدوار عندما يتم شحنها كهربائيا. يتم دفع العضوالدوار بالتناوب مع كل ملف يمر من خلاله تيار كهربائي.
يتغير جهد تغذية المحرك كثيرا تبعا لنوعه فقد يكون محصورا ضمن المجال 3V وحتى 10V . ويتغير أيضا التيار المستهلك فى المحرك عموما حسب المقاومة الخاصة بملفات المحرك .

يمكن إجمال مزايا المحرك الخطوي بما يلي :
• يقدم المحرك الخطوي دقة في تحديد الموقع حيث تصل دقة المحرك الخطوي الجيد إلى 3-5% وهذا الخطأ ليس تراكمي من خطوة إلى الأخرى.
• المحرك الخطوي رخيص التكلفة وسهل الاستخدام.
• المحرك الخطوي له عمر استخدام طويل جدا.
• يحافظ المحرك الخطوي على مكانه عندما لا يتم تطبيق نبضات كهربائية .
• لا يتأذى المحرك الخطوي بزيادة التحميل overloading، ويتوقف عن العمل فقط.
• تمتاز المحركات الخطوية بـعزم torque مرتفع عند السرعات المنخفضة.

العيوب :
• يحدث اهتزاز الرنين Resonance إذا لم يتم التحكم بشكل صحيح.
• عزم منخفض عند السرعات العالية.
• من الصعوبة أن يعمل بسرعات عالية.
• فاعلية (كفاءة) منخفضة Low Efficiency: تستهلك استطاعة أكثر مما تقدمه، لذلك تميل للعمل مع وجود حرارة.

يمكن تصنيف المحركات الخطوية إلى:
• محركات خطوية أحادية القطبية Unipolar.
• محركات خطوية ثنائية القطبية Bipolar.
سنتكلم في الفقرات التالية عن المحركات الخطوية التي تتحرك بـخطوة 90 درجة للتبسيط، مع العلم أن المحركات الأخرى لن تختلف عنها كثيرا وخصوصا أثناء قيادتها بلوحة الاردوينو .

المحرك الخطوى أحادى القطبية Unipolar Stepper Motor

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



يتم تنشيط الملفات الأربعة بطرق مختلفة هي :
• إثارة ملف واحد Wave drive or Single-Coil Excitation .
• خطوة كاملة Full step drive .
• نصف خطوة Half stepping .
• خطوة دقيقة Micro-stepping .

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



طريقة تحريك بخطوة كاملة:
هذه الطريقة الأكثر استخداما . يتم في هذه الطريقة تطبيق جهد على ملفين (أي تنشيط ملفين) في كل مرة، وهو ما يؤدي إلى الحصول على عزم اسمي كامل (%100) للمحرك. يتم إتمام دورة كاملة على 4 مراحل. يبين الشكل كيفية عمل هذه الطريقة، والقيم المطلوب تطبيقها على الملفات الأربعة في كل مرحلة.



طريقة تحريك بنصف خطوة:
تسمح هذه الطريقة بالحصول على دقة موقع مضاعفة من دون أي تغيير في التركيبية المادية للمحرك، حيث يتحرك المحرك بمقدار نصف خطوة بالمقارنة مع الطريقتين السابقتين. يتم إتمام دورة كاملة على 8 مراحل. يبين الشكل كيفية عمل هذه الطريقة، والقيم المطلوب تطبيقها على الملفات الأربعة في كل مرحلة.



طريقة Microstepping:
لا يتم في هذه الطريقة تغذية الملفات بنبضات وإنما بإشارة تشبه إشارة sin. بهذا الإسلوب يتم الانتقال من خطوة إلى الأخرى بشكل أنعم، وهذا ما يجعل المحرك الخطوي مناسبا للتطبيقات ذات الدقة العالية مثل أنظمة CNC. يدور المحرك الخطوي في هذه الطريقة بشكل مستمر تقريبا مثل محركات DC البسيطة.

يستجر المحرك الخطوي - كما في محركات التيار المستمر- تيارا لا بأس به لا تستطيع لوحة الاردوينو تأمينه لهذا لابد من استخدام دائرة عزل ما بين المتحكم و المحرك تؤمن له هذا التيار. هناك طرق عديدة يمكن بها تنفيذ دائرة العزل: ترانزستورات أو دائرات متكاملة مثل L293 أو UL2003.
سنستخدم دائرة ULN2003 التي تمتاز برخصها مقارنة مع L293.

الدائرة المتكاملة ULN2003
تتكون الدائرة المتكاملة ULN2003 من سبع بوابات التي تتصف بأنها تعمل كمصب للتيار فقط. القيمة العظمى للتيار 500 mA . يوضح الشكل بنية الدائرة ULN2003 وتوز يع أرجلها:



تعمل الأرجل من 1 و حتى 7 كمداخل لبوابات الدائرة، والأرجل من 10 وحتى 16 كمخارج للبوابات. الرجل رقم 8 يتم وصلها إلى الأرضي المشترك. الرجل 9 تتصل مع مهابط ثنائيات، من الممكن عدم وصل هذه الرجل ، أو قد يتم وصلها مع تغذية المحرك كما سنرى لاحقا. يوضح الجدول كيفية عمل البوابة.



لإيضاح عمل بوابة دارة ULN2003 لندرس الحالتين التاليتين والتي سنتحكم فيها بثنائي ضوئي من خلال الجهد المطبق على مدخل البوابة الأولى.
1- بفرض أن الجهد المطبق على مدخل البوابة الأولى5V (High level) كما هو موضح في الشكل . عندئذ فإن خرج البوابة الأولى على الرجل 16 هو Low level) 0V). تبعا لذلك سيضيئ الثنائي الضوئي حيث عملت بوابة دائرة ULN2003 على تأمين مصب للتيار إلى الأرضي .



2- بفرض أن الجهد المطبق على مدخل البوابة الأولى Low level 0V كما هو موضح في الشكل . عندئذ فإن خرج البوابة الأولى على الرجل 16 هو ممانعة عالية high impedance. تبعا لذلك لن يضيء الثنائي الضوئي حيث لم يتم تأمين مصب للتيار.



الجهد المطبق على الرجل 1 (مدخل البوابة الأولى) هو ((Low 0V و بالتالي الخرج على الرجل 16 (مخرج البوابة الأولى) هو High Z أي كأنها رجل عائمة . الثنائي الضوئي لا يعمل لأنه لم يتم تأمين مصب للتيار.
لا يمكن استخدام دارة ULN2003 مع المحرك المستمر لكي يتحرك باتجاهين وذلك لأنها تسمح بمرور التيار باتجاه واحد فقط وبالتالي فهي مناسبة للمحركات الخطوية أحادية القطبية.

التحكم بالمحرك الخطوي أحادي القطبية وسرعته من خلال لوحة الأردوينو
يبين الشكل أدناه مخطط التوصيل العملي للوحة الأردوينو مع دارة القيادة ULN2003 والمحرك الخطوي أحادي القطبية سداسي الأسلاك. تم ربط المنافذ 0,1,2,3 مع مداخل بوابات دارة ULN2003، والمخارج مع أربعة أسلاك للمحرك. السلكان المشتركان تم وصلهما إلى التغذية +9V . تم وصل الرجل 8 لدارة ULN2003 مع الأرضي، والرجل 9 إلى التغذية +9V وذلك للتخلص من الحقل الكهربائي المغناطيسي العودي. عند تطبيق +5V (1 منطقى) على المنافذ 0,1,2,3 سيكون خرج البوابات 0V مما يسمح بمرور تيار في ملفات المحرك، أما عند تطبيق 0V (0 منطقى) على المنافذ 0,1,2,3 سيكون خرج البوابات ممانعة عالية ولن يمر تيار في الملفات. يتم اختيار إحدى طرق تنشيط الملفات المذكورة سابقا (ملف واحد، خطوة كاملة، نصف خطوة) وبرمجة لوحة الأردوينو تبعل لذلك .
يتم التحكم بجهة دوران المحرك (مع أو عكس عقارب الساعة) من خلال ترتيب تنشيط الملفات الواحد تلو الآخر، ويتم التحكم بسرعة المحرك من خلال تغيير التأخير الزمني ما بين كل مرحلة من مراحل الدورة.



يبين الشكل أدناه مخطط التوصيل العملي للوحة الأردوينو مع لوحة L298N والمحرك الخطوي أحادي القطبية. تم ربط المنافذ 0,1,2,3 مع أرجل الدخل المنطقية للوحة (IN1,IN2,IN3,IN4) والمخارج (OUT1,OUT2,OUT3,OUT4) مع أربعة أسلاك للمحرك .
السلكان المشتركان للمحرك تم وصلهما إلى التغذية +9V تم المحافظة على الوصلة jumper) 7)، والوصلة jumper) 12) بحيث يتم تفعيل جميع المخارج. تم تزويد اللوحة بمنبع تغذية +9V على الرجل 4 والذي من خلاله يتم تغذية المحرك. تم المحافظة على الوصلة jumper) 3)، وهذا يعني أنه سيتم تفعيل منظم الجهد الداخلي للوحة +5V وبالتالي لا يوجد حاجة لتغذيتها بجهد +5V . إذا تم نز ع هذه الوصلة لابد من تأمين تغذية +5V على الرجل 6.



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 07-01-2020, 07:14 PM المشاركة 8   
افتراضي


المحرك الخطوى ثنائى القطبية Bipolar Stepper Motor
في هذا النمط من المحركات الخطوية يرتبط ملفان داخليا مع بعضهما بشكل تسلسلي، ويرتبط الملفان الآخران أيضا مع بعضهما بشكل تسلسلي كما هو موضح في الشكل أدناه . تبعا لهذا الوصل ستكون البنية الداخلية للمحرك الخطوي ثنائي القطبية عبارة عن ملفين. تمثل أطراف الملفين الأسلاك الأربعة في الخرج.



يتم تنشيط الملفات الأربعة لقيادة المحرك الخطوي ثنائي القطبية بنفس طريقة المحرك أحادي القطبية المذكور سابقا:
• إثارة ملف واحد Wave drive or Single-Coil Excitation .
• خطوة كاملة Full step drive .
• تصف خطوة Half stepping .
• خطوة دقيقة Micro-stepping .

طريقة إثارة ملف واحد:
في كل مرة يتم تطبيق جهد على ملف واحد، وبقية الملفات يطبق عليها 0V . عزم الدوران أقل من بقية الطرق، بالتالي فإن حمولة المحرك لا يمكن أن تكون كبيرة. يتم إتمام دورة كاملة على 4 مراحل. يبين الشكل كيفية عمل هذه الطريقة، والقيم المطلوب تطبيقها على الملفات الأربعة في كل مرحلة.



طريقة تحريك بخطوة كاملة:
في كل مرة يتم تطبيق جهد على ملفين، والملفان الآخران يطبق عليهما 0V . عزم الدوران أعلى من الطريقة السابقة. يتم إتمام دورة كاملة على 4 مراحل. يبين الشكل كيفية عمل هذه الطريقة، والقيم المطلوب تطبيقها على الملفات الأربعة في كل مرحلة.



طريقة تحريك بنصف خطوة:
تسمح هذه الطريقة بالحصول على دقة موقع مضاعفة من دون أي تغيير في التركيبية المادية للمحرك، حيث يتحرك المحرك بمقدار نصف خطوة بالمقارنة مع الطريقتين السابقتين. يتم إتمام دورة كاملة على 8 مراحل. يبين الشكل كيفية عمل هذه
الطريقة، والقيم المطلوب تطبيقها على الملفات الأربعة في كل مرحلة.



طريقة Microstepping:
لا يتم في هذه الطريقة تغذية الملفات بنبضات وإنما بإشارة تشبه إشارة sin. بهذا الإسلوب يتم الانتقال من خطوة إلى الأخرى بشكل أنعم، وهذا ما يجعل المحرك الخطوي مناسب للتطبيقات ذات الدقة العالية .

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 06:00 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025