با سلام به همه دوستان
یک سیستم مکانیکی داریم که توسط یک پولی به چرخش در میاد این رو هم بگم که موتوری در کار نیست
برای این سیستم باید تعداد دوری که این پولی می زند را محاسبه کنیم تا بتونیم میزان جابجایی را حساب کنیم
برای این کار من از دو عدد ماژول سنسور اپتوکانتر استفاده کردم که در فروشگاه انجمن هم موجود هست
و یکی را به وقفه شماره صفر و دیگری رو به وقفه شماره یک متصل کردم
یک پره هم بر روی پولی نصب کردم که بشه با این اپتوکانترها حرکت را شمرد
وقفه ها هم روی لبه بالارونده تنظیم شده است.
مشکل اینجاست که جهت حرکت پولی و تعداد شمارش رو درست نشان نمیدهد
مثال اگر پولی در جهت خلاف عقربه های ساعت 20 دور بچرخد و بعد همین تعداد رو در جهت عقربه ها بزند در نهایت عددی که نشان داده می شود 3 هست درصورتی که باید صفر نمایش داده شود و همچنین اگر سرعت چرخش کم و زیاد بشود روی تعداد محاسبه شده تاثیر دارد
لطفا راهنمایی کنید
برنامه هم به شرح زیر است :
با تشکر از وقتی که صرف می کنید
یک سیستم مکانیکی داریم که توسط یک پولی به چرخش در میاد این رو هم بگم که موتوری در کار نیست
برای این سیستم باید تعداد دوری که این پولی می زند را محاسبه کنیم تا بتونیم میزان جابجایی را حساب کنیم
برای این کار من از دو عدد ماژول سنسور اپتوکانتر استفاده کردم که در فروشگاه انجمن هم موجود هست
و یکی را به وقفه شماره صفر و دیگری رو به وقفه شماره یک متصل کردم
یک پره هم بر روی پولی نصب کردم که بشه با این اپتوکانترها حرکت را شمرد
وقفه ها هم روی لبه بالارونده تنظیم شده است.
مشکل اینجاست که جهت حرکت پولی و تعداد شمارش رو درست نشان نمیدهد
مثال اگر پولی در جهت خلاف عقربه های ساعت 20 دور بچرخد و بعد همین تعداد رو در جهت عقربه ها بزند در نهایت عددی که نشان داده می شود 3 هست درصورتی که باید صفر نمایش داده شود و همچنین اگر سرعت چرخش کم و زیاد بشود روی تعداد محاسبه شده تاثیر دارد
لطفا راهنمایی کنید
برنامه هم به شرح زیر است :
کد:
[FONT=Yekan]// External Interrupt 0 service routine[/FONT]interrupt [EXT_INT0] void ext_int0_isr(void) {[FONT=Yekan] [/FONT] if(i== 0 ) j++ ; else j-- ; i=0; delay_ms(30); } interrupt [EXT_INT1] void ext_int1_isr(void) {[FONT=Yekan] [/FONT] [FONT=Yekan] i=1 ; [/FONT] delay_ms(20); [FONT=Yekan]} [/FONT]while (1) { [FONT=Yekan] [/FONT] [FONT=Yekan] l= j*32 ; [/FONT] lcd_clear(); lcd_gotoxy(0,0); sprintf(lcd_buffer, "m: %u \n L= %u mm" , j, l ); lcd_puts(lcd_buffer); delay_ms(100); i=0 ; } [FONT=Yekan] [/FONT]
دیدگاه