سلام؛
من یه موتور dc دارم که با چرخدنده حرکتش به صورت خطی شده در و اقع یه Linear Actuator هستش، روی قسمت چرخان موتور یه حلقه آهنربایی هست و روبروی اون یه رید سوئیچ قرار داره و وقتی موتور جلو و عقب حرکت میکنه این رید سوئیچ قطع و وصل میشه، که اینجوری با شمارش این پالس ها میشه موقعیت موتور رو تشخیص داد. من دو پایه خروجی سنسور رو مثل شکل مقابل وصل کردم و در نهایت خروجی اشمیت تریگر رو به اینتراپت صفر یه میکروکنترلر مگا32 وصل کردم.

میخوام موتور با دو تا دکمه هر چقدر عقب و جلو رفت در نهایت با زدن یه دکمه بره و توی یه جای مشخص شده قرار بگیره. مثلا اونجایی که مشخص شده وقتیه که موتور رو به جلو حرکت کرده و 100 پالس فرستاده (اینتراپت روی Falling Edge تنظیم کردم)، حالا هر چقدر جلو و عقب میره پالس ها میشماره ولی وقتی یه دکمه رو زد میره و توی همون موقعیت قرار میگیره.
ولی مشکل اینه که بعد از چند بار عقب و جلو رفتن خطا داره و سر جای خودش قرار نمیگیره و هر بار یکم جلو تر یا عقب تر قرار میگیره. حدسم اینه که توی شمارش پالس ها اتفاق می افته.
به نظرتون مشکل چیه؟؟
اینم برنامه:
من یه موتور dc دارم که با چرخدنده حرکتش به صورت خطی شده در و اقع یه Linear Actuator هستش، روی قسمت چرخان موتور یه حلقه آهنربایی هست و روبروی اون یه رید سوئیچ قرار داره و وقتی موتور جلو و عقب حرکت میکنه این رید سوئیچ قطع و وصل میشه، که اینجوری با شمارش این پالس ها میشه موقعیت موتور رو تشخیص داد. من دو پایه خروجی سنسور رو مثل شکل مقابل وصل کردم و در نهایت خروجی اشمیت تریگر رو به اینتراپت صفر یه میکروکنترلر مگا32 وصل کردم.

میخوام موتور با دو تا دکمه هر چقدر عقب و جلو رفت در نهایت با زدن یه دکمه بره و توی یه جای مشخص شده قرار بگیره. مثلا اونجایی که مشخص شده وقتیه که موتور رو به جلو حرکت کرده و 100 پالس فرستاده (اینتراپت روی Falling Edge تنظیم کردم)، حالا هر چقدر جلو و عقب میره پالس ها میشماره ولی وقتی یه دکمه رو زد میره و توی همون موقعیت قرار میگیره.
ولی مشکل اینه که بعد از چند بار عقب و جلو رفتن خطا داره و سر جای خودش قرار نمیگیره و هر بار یکم جلو تر یا عقب تر قرار میگیره. حدسم اینه که توی شمارش پالس ها اتفاق می افته.
به نظرتون مشکل چیه؟؟
اینم برنامه:
کد:
// External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here if(state == 1){ i++; } else if(state == 2 && i > 0){ i--; } } while (1) { // Place your code here if(PINB.7 == 0){ delay_ms(10); if(PINB.7 == 0){ // Forward state = 1; PORTA.1 = 1; PORTA.2 = 0; PORTA.3 = 1; } } else if(PINB.6 == 0){ // Backward delay_ms(10); if(PINB.6 == 0){ state = 2; PORTA.1 = 1; PORTA.2 = 1; PORTA.3 = 0; } } else{ PORTA.1 = 0; PORTA.2 = 0; PORTA.3 = 0; } if(PINB.5 == 0){ // Back to Save Position PORTA.0 = 1; while(i > 100){ state = 2; PORTA.1 = 1; PORTA.2 = 1; PORTA.3 = 0; } while(i < 100){ state = 1; PORTA.1 = 1; PORTA.2 = 0; PORTA.3 = 1; } if(pos == 100){ PORTA.1 = 0; PORTA.2 = 0; PORTA.3 = 0; } } }
دیدگاه