سلام:
فکر کنم همه با قطعه ی 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 تنظیم شده.ممنون میشم اگه همکاری کنید.

فکر کنم همه با قطعه ی 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); }; }
دیدگاه