سلام بر همه دوستان
من میخوام یک کار کنترلی با arm انجام بدم اونم اینجوری هست که میخوام سرعت یک موتور dc رو با میکرو arm کنترل کنم و توی برنامه نویسی ضعیفم اگه کسی میتونه لطفا کمک کنه.ممنون
سلام بر همه دوستان
من میخوام یک کار کنترلی با arm انجام بدم اونم اینجوری هست که میخوام سرعت یک موتور dc رو با میکرو arm کنترل کنم و توی برنامه نویسی ضعیفم اگه کسی میتونه لطفا کمک کنه.ممنون
سلام
بهتر بود یه مقدار بیشتر توضیح بدی
ساده ترین روش برای این کار ایجاد کردن یک پالس روی یکی از پایه ها و به نوعی کنترل کردن نسبت زمان روشن به زمان خاموش بودن موتوز هست :
[PHP]#include <AT91SAM7X256.H> /* AT91SAMT7X256 definitions */
#include "lib_AT91SAM7X256.h" //include lib_AT91SAM7X256.h in to project
#include "delay.h"
int a;
int main (void) {
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA); //enable pio clack
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91C_PIO_PA30); // enable porta.30 as output
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91C_PIO_PA29); // enable porta.29 as output
AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,AT91C_PIO_PA30 ); //enable pull up resistor in porta.30
AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,AT91C_PIO_PA29 ); //enable pull up resistor in porta.29
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,AT91C_PIO_PB19 ); // enable portb.19 as output
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB,AT91C_PIO_PB 19); // reset portb.19
while(1) {
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & AT91C_PIO_PA30) == 0) { //chake porta.30
++a;
}
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & AT91C_PIO_PA29) == 0) { //chake porta.30
--a;
}
delay_ms(a);
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19); //if porta.30 is 0 set portb.19
delay_ms(a);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB,AT91C_PIO_PB 19); // reset portb.19
}
}[/PHP]
توی برنامه ی بالا دو تا کلید به پایه های a.29 و a.30 متصل شده که سرعت موتور با تحریک اونا کم و زیاد میشه
خروجی موتور پایه ی b.19 هست که یک سر موتور به اون و سر دیگه به گراند متصل میشه .
حتما باید بین موتوز و میکرو کنترلر یه دونه ترانزیستور بزاری .
توی برنامه بالا ما یه دونه پالس pwm رو به صورت دستی ایجاد کردیم .
با انجام دادن یه مقدار تغییرات میشه قابلیت چپ/راست گرد رو هم به برنامه ی بالا اضافه کرد .
فایل پروژه ی بالا رو میتونی از زیر دانلود کنی :
motor.rar
سلام ممنون واسه راهنمایی کاری که من میخوام انجام بدم کنترل جهت و سرعته. ابزارایی که میخوام استفاده کنم 1)یک میکرو2) درایور l298 یا درایوری دیگه که به درد بخوره3)یک اینکودر4)موتور dc
5)lcd و صفحه کلید
من می خوام اول کاربر یک سرعتی رو توی صفحه کلید وارد کنه عدد توی lcdنمایش داده بشه بعد کاربر جهت چرخش رو مشخص کنه و موتور با جهت و سرعت داده شده شروع به حرکت کنه و اگه کسی شافت موتور رو نگه داشت و سرعت موتور کم شد بعد از رها کردن دوباره به سرعت وارد شده برگرده و سرعت موتور رو همیشه روی lcdنمایش بده (زمانی هم که سرعت کم میشه کاهش سرعت هم روی lcd نمایش داده بشه)
خیلی خیلی ممنون
سلام
تمام این بخش ها قبلا راه اندازی شده . شما به کتابخونه های lcd.h ، kbd.h ، lib_AT91SAM7X256.h ، delay.h نیاز دارید .
کافیه شما مقدار ورودی کی پد رو بخونید و اون رو روی lcd نمایش بدید . ( دو تا دستور ساده که توی pmm4 اورده شده ) .
یکی از پایه ها رو به عنوان ورودی تعریف کنید و بعد از اتصال انکودر ، تعداد صفر ویک شدنش رو بشمارید .
برای تغییر دادن جهت موتور هم کافیه طبق دیتا شیت l298 ولتاژ پایه های ورودی رو معکوس کنید ( یعنی 0 و 1 بشه 1 و 0 )