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

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

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

مُساهمة من طرف Admin في الأحد مايو 03, 2015 12:36 am

مشروع التحكم فى محرك تيار مستمر باستخدام التعديل فى عرض النبضات ولوحة المفاتيح :
الأدوات المطلوبة فى برنامج المحاكاة ISIS : PIC16F877A , KEYPAD-PHONE , RES , 2SK1058 , CELL , MOTOR .
الدائرة الكهربية :







البرنامج :
مبدأ العمل:
تتكون النبضات المربعة من جزء مرتفع (موجب) يسمى PWMH وجزء منخفص (سالب) يسمى PWML . التحكم فى عرض النبضة PWM يعنى التحكم فى عرض هذه الأجزاء ، فزيادة الجزء المرتفع يؤدى إلى زيادة متوسط جهد النبضة والعكس بالعكس وبالتالى التحكم فى محرك التيار المستمر عن طريق الجهد المطبق على طرفيه .




أقصى قيمة لعرض النبضة ككل يمكن اعتبارها “255” قسم ( بايت ) ، الجزء المرتفع يمكن أن يكون من الصفر وحتى “255” . فى هذا المثال ، عند الضغط على مفتاح لوحة التحكم يتم توليد نبضات بعرض متغير تبعا لهذا المفتاح وصولا إلى المفتاح “9” حيث يتم جعل الجزء الموجب عند أقصى قيمة له ، وبالتالى يتم التحكم فى سرعة دوران المحرك حتى نصل إلى أقصى سرعة . بناء على ذلك يمكن التعبير عن عرض جزء النبضة المرتفع بالمعادلة :
PWMH = (255/9) * Key =~ 28 * Key
فعند الضغط على المفتاح “0” يكون الجزء الموجب بصفر والسرعة بصفر ، حتى نصل إلى المفتاح “9” فيكون الجزء الموجب بالقيمة “255” وهى تناظر القيمة القصوى ويكون المحرك عند أقصى سرعة له .
للحصول على جزء النبضة المنخفص نطرح قيمة جزء النبضة الموجب من القيمة “255” .


الكود:


#include <16f877A.h>
#USE DELAY (CLOCK=4000000)
#define use_portb_kbd TRUE
#INCLUDE <kbd.c>
//#USE STANDARD_IO (a)

VOID MAIN()
{
  CHAR k,kant='0';    //Keyboard k value, previous value k keyboard
  char PWMH=0,PWML=0;  //High and low half period
 
  kbd_init();
  PORT_B_PULLUPS(TRUE);

WHILE (1) {                    //Infinite loop
      k=kbd_getc();            //Reads ASCII value of the pressed key
      if (k=='\0') k=kant;    //If key (\ 0) is pressed the former value is used
      if ((k=='*') || (k=='#')) k='0';  //Pressing * or # is assigned a zero value.
      kant=k;                          //Pressed key is saved
      k=k-48;                        //It becomes a numerical value ASCII
      PWMH=k*28;                    //Key ratio value and half period Alto.
      PWML=255-PWMH;                //Under half period
      for(PWMH;PWMH>0;PWMH--){        //Getting high-level output
      OUTPUT_HIGH(PIN_A0);}
      for(PWML;PWML>0;PWML--){      //Getting output at low level
      OUTPUT_LOW(PIN_A0);}
  }
}


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى