اطلاعیه

Collapse
No announcement yet.

برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

    سلام:

    فکر کنم همه با قطعه ی MOTOR-ENCODER توی پروتیوس آشنا هستند،ولی بازم یه توضیح کوچولو میدم.این قطعه یه موتور دی سی و یک اینکودر سه سیمه هست که به صورت مجازی به هم متصلند.همونطور که تو شکل میبینید 5 تا پایه داره ، دوتا پایه چپ و راست برای چپگرد و راستگرد بودنه موتوره و سه تای بالایی خروجی اینکودره.

    حالا برا این قطعه یه برنامه کنترلی با میکرو میخام بنویسم که یه قسمتشو نوشتم و بقیه رو هم به کمک دوستان انشالا مینویسیم و این پروژه رو کامل میکنیم.
    دوستان کاری که میخاییم این برنامه انجام بده اینه که با اسفاده از کیپد 4X4 (که تو پروتیوس هست ) زاویه چرخش این موتور رو کنترل کنیم (هم چپگرد هم راستگرد) و تو ال سی دس ببینیم.مثلا اگه عدد 10 رو وارد کردیم و دکمه راستگرد رو زدیم موتور شروع به حرکت کنه و بعد از 10 درجه وایسه و یا اگه عدد 50 رو وارد کردیم و کلید چپگرد رو زدیم 50 درجه به چپ حرکت کنه و وایسه.

    برا این کار میکرو مگا32 رو انتخاب کردم و همونطور که تو شکل میبینید دوتا پایه A و B خروجی اینکودر رو (که 90 درجه با هم اختلاف فاز دارن متناسب با چپگرد یا راست گرد بودن یکی جلوتر از دیگریه) به پایه های اینتراپت میکرو وصل کردم ، السی دی هم که به پورت A وصله.برنامه زیر فقط برا قسمت اینتراپته که با فرمان دادن به پایه های موتور(فعلا به صورت دستی) موقعیت اینکودر تغییر پیدا میکنه و تو ال سی دی نمایش داده میشه.

    قسمتهایی که برا تکمیل این پروژه نیاز داریم:
    1-برنامه اسکن کیپد 4X4
    2-برنامه چپگرد و راستگرد واسه موتور متناسب با مقداری که با گیپد وارد میکنیم.
    3-برنامه ای برا تبدیله مقدار متغییر char که تو ال سی دی با عنوانه position میبینیم.(چون این متغییر از نوع char هست بازه اش 0-255 هست فرمولی میخاهیم که اینو به درجه تبدیل کنه 0-360 درجه)

    کامپایلر کدویژن هست و pulse per revolution اینکدر رو 360 تنظیم شده.ممنون میشم اگه همکاری کنید.

    کد:
    /  ****************************************************
      Chip type      : ATmega32
      Program type    : Application
      Clock frequency   : 8.000000 MHz
      *****************************************************/
    
      #include <mega32.h>
      #include <delay.h>
      #include <stdio.h>
      #include <lcd.h>
      #asm
       .equ __lcd_port=0x1B ;PORTA
      #endasm
    
    
      char position,prevEnc;
    
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
          if ( PIND.2==prevEnc ) 
             position++;
          
          else { 
             position--; 
             } 
             prevEnc=PIND.3;
    
      }
    
      interrupt [EXT_INT1] void ext_int1_isr(void)
      {
    
    
      }
    
    
    
      void main(void)
      {
       char buffer[40];
     
     
      GICR|=0xC0;
      MCUCR=0x0F;
      MCUCSR=0x00;
      GIFR=0xC0;
    
      lcd_init(16);
    
      #asm("sei")
     
    
      while (1)
         {
         sprintf(buffer,"position=%d",position);
         lcd_clear();
         lcd_gotoxy(0,0);
         lcd_puts(buffer);
         delay_ms(300);
         };
      }

    #2
    پاسخ : برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

    کسی نیس کمک کنه؟؟؟

    دیدگاه


      #3
      پاسخ : برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

      برای کار با کی پد یه سرچ که تو همین جا بزنید یه عالمه اموزش پیدا میکنید (خودم شخصا اینجا هزار بار گفتم )
      دوست عزیز وقتی متغیر پوزیشن یکی اصافه میشه یعنی دقیقا چند درجه تابیده؟؟؟
      چيزي را بگو که بتواني بنويسي
      چيزي را بنويس که بتواني امضا کني
      چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

      دیدگاه


        #4
        پاسخ : برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

        - مشکل کیپد تقریبلا حل شد.
        - متغییر پوزیشن بازش 0-255 در حالی که عددی که ما از کیپد میگیریم و موتور رو به همون اندازه تکون میدیم تو ال سی دی نشون میدیم میخاییم درجه باشه.

        دیدگاه


          #5
          پاسخ : برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

          میتونید از این فرمول برای تبدیلش به درجه استفاده کنید :
          D=(position*360)/255
          چيزي را بگو که بتواني بنويسي
          چيزي را بنويس که بتواني امضا کني
          چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

          دیدگاه


            #6
            پاسخ : برنامه ای برای قطعه "موتور-اینکودر" پروتیوس

            سلام دادا.
            پیغامتو دیر دیدم.
            در مورد انکودر و زاویه:
            برای محاسبه زاویه اول باید ببینی تعداد پالس های انکودر در یک دور کامل موتور چه تعدادیه. بعد عدد رو به 360 درجه تفسیم کنی تا دقت درجه بدست بیاد. مثلاً اگه انکودرت 200 پالس باشه به ازای هر پالس 1.411 درجه حرکت داری.

            برا برنامه هم میتونی از کانتر استفاده کنی هم وقفه.
            کافیه زمان خواندن تعداد پالس مقادیر قبل رو حتماً صفر کرده باشی.

            در ضمن یادت باشه موتور درایور موتور dc هم ردیف باشه. چون باید در زمان دستور توقف سریعاً موتور وایسه وگرنه خطا داری.
            تشکر لازم نیست!

            دیدگاه

            لطفا صبر کنید...
            X