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



)

دیدگاه