الأربعاء، 31 أكتوبر 2012

Introduction To Microcontroller

                                             
Introduction To Microcontroller (1)

ما هو الـ Microcontroller ؟
هو ببساطة جهاز كمبيوتر ذو حجم صغير، يقوم بمعظم وظائف الكمبيوتر تقريباً، تختلف طبيعة المهام التي يقوم بهما تبعاً لإختلاف البرنامج الذي يتم برمجته به، و تبعاً للدائرة الالكترونية التي يتم توصيله بها.
يتم برمجة المايكروكنترولر بإحدى لغات البرمجة C or Assembly or Basic ، و يتم تنزيل البرنامج الذي تقوم بكتابته على المايكروكنترولر عن طريق جهاز يسمى Programmerيتم توصيله بالكمبيوتر و المايكروكنترولر.
يوجد العديد من الشركات المصنعة للمايكروكنترولر، و يختلف كل مايكروكنترولر عن الآخر في سرعة الـ processor و التكلفة و … إلخ.
و سوف نتعامل في هذا اليوم مع مايكروكنترولر من شركة Microchip، تنقسم منتجات شركة Microchip إلى العديد من العائلات منها PIC12F و منها PIC16F و منها PIC18F و ..... إلخ، و سوف ندرس اليوم كيفية التعامل مع الـ PIC16F84A.


مما يتكون الـ Microcontroller ؟
يتكون المايكروكنترولر من:
1- Microprocessor
2- Oscillator
3- RAM
4- ROM
5- Counters
6- Timers
7- ADC

أولاً الـ Microprocessor:
و هو المسئول عن تنفيذ العمليات المنطقية و الحسابية
في المايكروكنترولر.

ثانياً الـ Oscillator:
عبارة عن مصدر لتوليد الـ pulses و التي تُمكن
الـ microprocessor من القيام بالمهام المطلوبة.

ثالثاً الـ RAM:
- متطايرة، لا تحتفظ بالـ data في حالة انقطاع التيار الكهربي.
- يتم تخزين فيها الـ Variables المُستخدمة في البرنامج.

رابعاً الـ ROM:
- ليست متطايرة، أي أن الـ data التي بها لا تضيع في حالة انقطاع التيار الكهربي.
- يتم تخزين البرنامج الذي فيه المهام التي سينفذها المايكروكنترولر بها.

خامساً ADC:
و هي وحدة مسئولة عن تحويل الاشارات الـ Analog إلى اشارات Digital يُمكن التعامل معها من قِبل المايكروكنترولر.

و الآن سوف نتعرف على الـ PIC16f84A:


شكل (1) يوضح صورة المايكروكنترولر PIC16f84a و الذي يتكون من 18 رجل -18 pins- كل رجل لها وظيفة محددة، يتم تحدديدها عن طريقة البرمجة، و هذه الوظائف تُكتب في الـ Datasheet.
في حالتنا هذه نجد أن الرجل رقم 1 << مكتوب بجوارها RA2
و الرجل رقم 18<< مكتوب بجوارها RA1
في الـ PIC16f84a يوجد 18 pin، منها 5 pins تُستخدم لتوصيل المايكروكنترولر بالـ volt المطلوب و بعض الدوائر الخاصة اللازمة لبدء تشغيله ، و 13 Pins تُستخدم كـ دخل و خرج للمايكروكنترولر، وبالتالي فهو له مجموعة من الـ inputs التي يتم معالجتها بواسطة الـ processor و يتم اخراج ناتج هذه المعالجة على الـ pins المختصة بالخرج.
و من الناحية التنظيمية فلقد تم تقسيم الـ 13 pins المختصة بالـ input & output إلى مجموعتين المجموعة الأولى يُطلق عليها PORT A و المجموعة الثانية يطلق عليها PORT B،، ويتكون الـ PORT A إلى 5 pins و هم RA0,RA1,RA2,RA3,RA4، بينما يتكون الـ PORT B من 8 pins و هم RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB6, RB7
و فيما يلي سوف نتعرف عليهم بشىء من التفصيل.

الدوائر اللازمة لتشغيل المايكروكنترولر:
أولاً: دائرة الباور<< يعمل المايكروكنترولر على بمصدر جهد مقداره 5 فولت و 25 ميلي أمبير، لذلك فهناك العديد من الطريق لتوفير هذا المصدر بتلك الموصفات نذكر منها :

1- مصدر جهد(بطارية) 12 فولت + IC 7805 << سيكون خرج هذه الدائرة 5 فولت، يتم توصيل الطرف الموجب على الـ pin المكتوب بجوارها VDD في المايكروكنترولر (pin no. 14).



2- step down transformer + four diodes to rectifier +7805 .


ثانياً دائرة الـ Reset:
يتميز المايكروكنترولر بأن له pin تُسمى MCLR رقم 4، بأنها إذا تم توصيلها بالأرضي فإنه يقوم بعمل restart للمايكروكنترولر
و يبدأ في تنفيذ الكود مرة آخرى.
كيفية التوصيل: يتم توصيل push-button أحد أطرفه بالأرضي و الآخر بالـ MCLR.


ثالثاً دائرة الـ Oscillator :
المايكروكنترولر كغيره من الأجهزة التي تحتوي على processor تحتاج إلى مولد نبضات أو ما يُعرف بـ Oscillator.
يتم توصيل crystal 4MH على الطرفين OSC1, OSC2 أي على الـ pin no. 16, 15.


ملحوظة:
أرجل الـمايكروكنترولر مُصنعّة بتقنية TTL أي Transistor Transistor Logic و هذا يعني أن الـ pin التي تُستخدم في المايكروكنترولر لابُد و أن يتصل بها إما مصدر جهد أو أرضي، و ذلك لأن عدم توصيل تلك الأرجل على أي منهما سوف تتعرض لـ Noise، و من ثم نجد أنه يظهر لنا مصطلح جديد pull up resistor, pull down resistor.
ما هو الـ Pull resistor: هي مقاومة تُقدر بحوالي من 4 إلى 10 كيلو أوم، يتم وضعها بين الـ pin و الأرضي أو مصدر الجهد على حسب pull up/down resistor.
مثال: دائرة الـ MCLR و المسؤلة عن عمل Reset للمايكروكنترولر، يتم توصيل الـ push button بالأرضي و الطرف الآخر بالـ Pin، فإذا تم الضغط عليه فإنه يتم توصيل الـ pin بالأرضي مباشرة، و بالتالي يتم حدوث reset للمايكروكنترولر، و هنا يظهر السؤال ماذا لو لم يتم الضغط عليه؟ ما القيمة الموجودة على الـ pin الآن في حالة عدم الضغط عليه؟، ستجد إن الاجابة إن تلك الـ pin متروكة في الهواء، قليل من الـ noise كافلة بأن تضع عليها واحد أو صفر، لذا فإنه يجب أن يكون التعديل في الـدائرة على النحو الآتي:
   
لكي تستخدم المايكروكنترولر في دائرة تحكم، فلابد من تظبيط الهاردوير اللازم لتشغيل المايكرو، وكذلك يلزم تظبيط السوفت وير << و من هنا يظهر لنا مصطلح registers، الـ register هو المسؤل عن عمل الـ configuration اللازمة للهاردوير حتى يُمكن استخدامه و أداء الوظائف المطلوبة من الهاردوير، عندنا العديد من الـ register التي سوف نتعامل معاها و هم Tris, Port, ADCON0, INTCON,….etc.

أولاً TRIS:
الـ TRIS هو register مسئول عن تظبيط الـ pins directions، بمعنى إنه المسؤل عن تحديد أي الـ pins سوف استخدمها كـ input و أيهم سوف يتم استخدامه output، و بالتالي فأنا استطيع بالبرمجة أن أجعل كل الـ Pins كـ inputs أو كلهم كـ output.
مثال: عندي led (مصدر ضوئي) سوف يتم توصيله بالمايكرو<< في هذه الحالة فإن الـ pin التي استخدمها في توصيل الـ led بالمايكرو سوف تكون كـ output، و بالتالي فإن الجملة المسئولة عن تظبيط تلك المسألة هيه
;<register_name><port_name>.<pin_number>=<1 or 0
TRISB.b0=0 >> هنا نجد أن اسم الـ register << TRIS، و اسم الـ port الذي تم توصيل الـ led به هوه port B، لذا كتبنا TRISB، أيضاً نجد إننا قد وصلنا الـ led بالـ pin رقم 0 في الـ port B ، و بناء عليه فإني قد عرفت المايكرو إني سوف استخدم الـ Pin رقم 0 في الـ port اللي اسمه B كـ output.
مثال آخر، لدي مفتاح كهربي متصل على الـ pin رقم 0 في الـ port A << بالطبع المفتوح سوف يُستخدم كـ input للمايكروكنترولر،، و بالتالي سوف تكون جملة الـ direction هي TRISA.b0=1;
أن اسم الـ register << TRIS، و اسم الـ port الذي تم توصيل الـ switch به هوه port A، لذا كتبنا TRISA، أيضاً نجد إننا قد وصلنا الـ switch بالـ pin رقم 0 في الـ port A ، و بناء عليه فإني قد عرفت المايكرو إني سوف استخدم الـ Pin رقم 0 في الـ port اللي اسمه A كـ input.
إذاً في حالة تظبيط الـ pin directions فإن 0 << تعني output، 1 << تعني input.


المطلوب منا الآن كي نبدأ في برمجة المايكروكنترولر، هو تعلم بعض الأوامر في لغة الـ C، و تعلم استخدام برنامج Proteus و برنامج Mikro C.

الجمعة، 12 أكتوبر 2012

Stepper motors 4 wires

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

للتحكم فى الموتور micro controller والفرق سوف يكون فى طريقة التوصيل والكود الخاص به وسوف نستخدم الـ

H brigde ولعلنا نبدأ بطريقة التوصيل وهى سهله للغايه فكل ما نحتاجه هو
H brigde وسوف نتعامل مع محرك الخطوه فى توصيله كأن كل طرفين يمثلوا موتور اى سنوصل كل طرفين على
2 hbrigde فيكفى واحد فقط لأنه يحتوى بداخله على IC اما اذا استخدمنا

وتتضح طريقة التوصيل فى الصوره التاليه


اما الكود فسوف نستخدم
switch case
كما استخدمنا فى المره السابقة والاختلاف سيكون فى هذا الجزء من الكود فقط

ولعل هذا الكود سيكون مناسباً

نلاحظ ان محرك الخطوه ذو الاربعة اطراف يتكون من ملفين فقط لذا نعرف طرفى كل ملف بالصوره التاليه//
sbit m1a at portb.b0;
sbit m2a at portb.b1;
sbit m1b at portb.b2;
sbit m2b at portb.b3;
وهنا كالعاده نعرف المتغير الذى سيساعدنا فى الانتقال بين حالات حركة الموتور//
int state=1;


void main() {
     portb=0;trisb=0;
     while(1){
     switch(state){
     case 1:
          m1a=1;m1b=1;m2a=0;m2b=0;break;
     case 2:
          m1a=0;m1b=1;m2a=1;m2b=0;break;
     case 3:
          m1a=0;m1b=0;m2a=1;m2b=1;break;
     case 4:
          m1a=1;m1b=0;m2a=0;m2b=1;break;
     }
}
}
rotor ونلاحظ من الكود اننا نمرر التيار فى احد اطراف الملفين فى كل مره حتى نجذب ال
على عكس المره السابقه حيث كان هناك عدة طرق للتشغيل.

الخميس، 4 أكتوبر 2012

Stepper motor driver

stepper motorتحدثنا المره السابقه عن الـ
او محرك الخطوه
ولاحظنا ان ما يميزه هو انه يتحرك عدة خطوات فى الدوره الكامله مما يوفر الدقه المطلوبه فى بعض التطبيقات
والآن سوف نستعرض كيفيه استعماله من جانب كتابة الكود الخاص بتشغيله وتوصليه فى اى دائره

High toruqe, half step & wave drive وفى البدايه يجب ان نختار بين اوضاع تشغيله المتاحه وهى
:wave drive فاما الـ
power consumptionفانه يقلل من الت
فانه يوفر عزم قوى وسرعه مناسبه   high torqueبينما الـ
 فيضاعف من مجال الخطوه الواحده  half step والـ

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







ولكن يمكن استخدام انواع اخرى واخترنا هذا النوع لأنه الاكثر شيوعاً PIC 16f877a والآن نبدأ بكتابة الكود وسوف نستخدم





//PICهنا نعرف اماكن وضع اطراف الموتور على ال

sbit m1 at portd.b0;
sbit m2 at portd.b1;
sbit m3 at portd.b2;
sbit m4 at portd.b3;

//stateثم نقوم بتعريف متغير  

int state=1;

//ونعطيه قيمه مبدأيه مثلاً الواحد الصحيح وسوف نرى الهدف منه فى باقى الكود

void main() {
//المتصل باطراف الموتور بصفر  port لكل اطراف ال  intialize وهنا نعرف اطراف الموتور على انها اطراف خرج ونقوم بعمل
trisd=0;
portd=0;
   while(1){
//حيث سنقوم بعمل اختبار على قيمته وبناءأ عليها نحدد الخرج على الاطراف stateهنا تظهر فائدة المتغير
    switch(state){

          case 1: //(if state==1) هذه الخطوه تعادل
          m1=1;m2=0;m3=0;m4=0;state=2;delay_ms(500);break;
          case 2:
          m1=0;m2=1;m3=0;m4=0;delay_ms(500);state=3;break;
          case 3:
          m1=0;m2=0;m3=1;m4=0;delay_ms(500);state=4;break;
          case 4:
          m1=0;m2=0;m3=0;m4=1;delay_ms(500);state=1;break;

          }
          }
}

wave dirve فى هذا الكود قد استخدمنا حالة
switch case لاستخدام اى حاله اخرى سيكون كل التغيير فى جزء
half step فمثلاً اذا اردنا حالة
الموجوده بالكود السابق switch case فسيكون هذا هو الجزء الذى سنضعه مكان

switch(state){

 case 1: //(if state==1) هذه الخطوه تعادل
          m1=0;m2=0;m3=0;m4=1;state=2;delay_ms(500);break;
 case 2:
          m1=0;m2=0;m3=1;m4=1;delay_ms(500);state=3;break;
case 3:
          m1=0;m2=0;m3=1;m4=0;delay_ms(500);state=4;break;
case 4:
          m1=0;m2=1;m3=1كm4=0;delay_ms(500);state=5;break;
case 5:
          m1=0;m2=1;m3=0;m4=0;delay_ms(500);state=6;break;
case 6:
          m1=1;m2=1;m3=0;m4=0;delay_ms(500);state=7;break;
case 7:
          m1=1;m2=0;m3=0;m4=0;delay_ms(500);state=8;break;
case 8:
          m1=1;m2=0;m3=0;m4=1;delay_ms(500);state=1;break;


          }

وكذلك يمكن تغير هذا الجزء ليتناسب مع الحاله الثالثه
ULN2003 ICوهكذا نكون قد انتهينا من كتابة الكود الخاص بمحرك الخطوه والآن سنعطى مثالاً لتوصليه فى اى دائره مستخدمين
IC وهو عباره عن مجموعه من الترانزستورات بداخل نفس الـ
وكيفية التوصيل تتضح فى هذه الرسمه


المتصله باطراف الموتور الاربعهPIC هى ارجل الـ m1, m2, m3, m4حيث

.Stepper motor انتظرونا فى المقاله القادمه ونوع آخر من انواع الـ