PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کنترل دور موتور dcبا at91sam7x256



mjtb_sar
30-05-2010, 20:24
سلام بر همه دوستان
من میخوام یک کار کنترلی با arm انجام بدم اونم اینجوری هست که میخوام سرعت یک موتور dc رو با میکرو arm کنترل کنم و توی برنامه نویسی ضعیفم اگه کسی میتونه لطفا کمک کنه.ممنون:lol:

1nafar
31-05-2010, 08:21
سلام
بهتر بود یه مقدار بیشتر توضیح بدی
ساده ترین روش برای این کار ایجاد کردن یک پالس روی یکی از پایه ها و به نوعی کنترل کردن نسبت زمان روشن به زمان خاموش بودن موتوز هست :

#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
}
}
توی برنامه ی بالا دو تا کلید به پایه های a.29 و a.30 متصل شده که سرعت موتور با تحریک اونا کم و زیاد میشه
خروجی موتور پایه ی b.19 هست که یک سر موتور به اون و سر دیگه به گراند متصل میشه .
حتما باید بین موتوز و میکرو کنترلر یه دونه ترانزیستور بزاری .
توی برنامه بالا ما یه دونه پالس pwm رو به صورت دستی ایجاد کردیم .
با انجام دادن یه مقدار تغییرات میشه قابلیت چپ/راست گرد رو هم به برنامه ی بالا اضافه کرد .
فایل پروژه ی بالا رو میتونی از زیر دانلود کنی :
395

mjtb_sar
06-06-2010, 20:38
سلام ممنون واسه راهنمایی کاری که من میخوام انجام بدم کنترل جهت و سرعته. ابزارایی که میخوام استفاده کنم 1)یک میکرو2) درایور l298 یا درایوری دیگه که به درد بخوره3)یک اینکودر4)موتور dc
5)lcd و صفحه کلید
من می خوام اول کاربر یک سرعتی رو توی صفحه کلید وارد کنه عدد توی lcdنمایش داده بشه بعد کاربر جهت چرخش رو مشخص کنه و موتور با جهت و سرعت داده شده شروع به حرکت کنه و اگه کسی شافت موتور رو نگه داشت و سرعت موتور کم شد بعد از رها کردن دوباره به سرعت وارد شده برگرده و سرعت موتور رو همیشه روی lcdنمایش بده (زمانی هم که سرعت کم میشه کاهش سرعت هم روی lcd نمایش داده بشه)


خیلی خیلی ممنون :0013:

1nafar
07-06-2010, 11:18
سلام
تمام این بخش ها قبلا راه اندازی شده . شما به کتابخونه های lcd.h ، kbd.h ، lib_AT91SAM7X256.h ، delay.h نیاز دارید .
کافیه شما مقدار ورودی کی پد رو بخونید و اون رو روی lcd نمایش بدید . ( دو تا دستور ساده که توی pmm4 اورده شده ) .
یکی از پایه ها رو به عنوان ورودی تعریف کنید و بعد از اتصال انکودر ، تعداد صفر ویک شدنش رو بشمارید .
برای تغییر دادن جهت موتور هم کافیه طبق دیتا شیت l298 ولتاژ پایه های ورودی رو معکوس کنید ( یعنی 0 و 1 بشه 1 و 0 )