امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
کنترل استپ موتور با usart و pc
نویسنده پیام
dizgah آفلاین
تازه وارد

ارسال‌ها: 9
موضوع‌ها: 4
تاریخ عضویت: بهمن ۱۳۸۸

تشکرها : 4
( 2 تشکر در 1 ارسال )
ارسال: #1
کنترل استپ موتور با usart و pc
سلام
فک کنم اینجا هم طبق قوانین بقیه سایتها برای هر مشکل باید یه تاپیک جدید باز کرد
خواهشمندم توی این مشکل هم به من راهنمایی کنین چون واقعا لنگش هستم و باید طی این هفته تمومش کنم
واقعا دیگه هنگ کردم ، پس تو رو خدا کمک کنین تا هم من مشکلم حل شه و هم بزاریمش تو سایت تا بقیه هم بتونن استفاده کنن

این برنامه سه کاراکتر که یه عدد سه رقمی باشه رو از پورت سریال کامپیوتر دریافت میکنه و به میزان عدد دریافتی استپ موتور رو میچرخونه ،مثلا اگه عدد ورودی 270 باشه استپ موتور با دقت 1 درجه رو 270 درجه میچرخونه
براین این کار از وقفه سریال usart با بافر 3 تایی استفاده شده ، آرایه rx_buffer توسط کد ویزارد برای ذخیره دیتای ورودی و آرایه databuff نوع int برای بدست آوردن و ذخیره عدد نهایی است که در sum ذخیره میشود و sum و count هم int هستند

کد:
databuff[0] = rx_buffer[2];
databuff[1] = rx_buffer[1];
databuff[2] = rx_buffer[0];

databuff[1] = databuff[1] * 10;
databuff[2] = databuff[2] * 100;

sum = databuff[0] + databuff[1] + databuff[2];
count =0x00;
while(1)
{
for(num=0;num<4;num++)
{
count ++;
if(count<sum)
{
PORTC = step[num];
delay_ms(40);
}
else
{
goto end;
}
}
}


end:
همچنین برنامه بالا در قسمت فعال شدن وقفه وقتی هر سه کاراکتر دریافت بشن قرار داره
برنامه کامل
کد:
#include <mega8.h>
#include <delay.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 3
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
unsigned int databuff[3],sum,sum2,count;
char step[]={0x66,0x33,0x99,0xcc},num;

status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
//***************************************
databuff[0] = rx_buffer[2];
databuff[1] = rx_buffer[1];
databuff[2] = rx_buffer[0];

databuff[1] = databuff[1] * 10;
databuff[2] = databuff[2] * 100;

sum = databuff[0] + databuff[1] + databuff[2];

count =0x00;
while(1)
{
for(num=0;num<4;num++)
{
count ++;
if(count<sum)
{
PORTC = step[num];
delay_ms(40);
}
else
{
goto end;
}
}
}


end:
//**************************************
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>


void main(void)
{
PORTC=0x00;
DDRC=0xFF;

UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
#asm("sei")

while (1)
{


};
}
ممنون میشم اگه کمکم کنید
۲۴-مرداد-۱۳۸۹, ۱۸:۴۲:۲۹
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #2
موتور پله ای و بسکام
حیف که اهل کدویژن نیستم ولی یه برنامه نمونه با بسکام و موتور پله ای می ذارم !!!
اضافه کردن پورت سریال هم بهش کاری نداره !
خواستین بگین واستون بذارم !!!! ( البته خودتون راحت می تونین بذارین )




راه اندازی موتور پله ای بوسیله AVR و تحت بسکام




[تصویر:  609c5e7b17f54e4f8c7f.PNG]


کلید R/L جهت چرخش موتور پله ای رو مشخص می کنه !
در هنگام حرکت نیز می توانید جهت چرخش رو عوض کنین !

با کلید های + و - تعداد دور رو مشخص کنین و کلید set رو بزنین و حال سرعت چرخش رو مشخص کنین و کلید set رو بزنین تا موتور شروع به حرکت طبق تعدا دور و سرعت وارد شده بره !!!

در حین حرکت روی LCD تعداد دور چرخیده و تعداد کل دور چرخش نمایش داده میشه !!

با تمام شدن تعداد دور چرخش موتور متوقف می شود و همچنین در حین حرکت با فشردن کلید ESC می توان موتور رو متوقف کرد !!

در هنگام تنظیم سرعت هم با فشردن کلید ESC به مرحه به بالا ( تنظیم تعداد دور ) می رویم !!!

برنامه مدار تحت بسکام و فایل تست برنامه تحت پرتئوس 7.6 و... رو تونین از فایل زیر دریافت کنین !

دریافت فایل : http://www.iranled.com/forum/attachment.php?aid=5025

امیدوارم برنامه مورد استفاده دوستان قرار بگیره !!!

نکته : برنامه فوق برای موتورهای پله ای 1.8 درجه تعداد چرخشش درسته و برای بقیه موتورها باید تو برنامه تو تابع MOVE یه تغییر کوچولو بدین !

در آخر برنامه به جای 200 باید عدد مناسب قرار بگیره !

کد php:
For 1 To 200 

چون موتور پله ای در نظر گرفته شده 1.8 درجه است پس باید 200 پالس داده بشه تا 360 درجه بچرخه !
واسه بقیه موتورها با درجه های مختلف با تقسیم ساده عدد مناسب رو جایگزین کنین !

مثلا واسه موتور پله ای 15 درجه باید عدد 24 قرار بگیره !
چون 360 تقسیم بر 15 میشه 24 !!

منبع : http://www.iranled.com/forum/showthread....#pid126852
(آخرین ویرایش در این ارسال: ۲۴-مرداد-۱۳۸۹, ۱۹:۱۲:۴۷، توسط t3r!p3000.)
۲۴-مرداد-۱۳۸۹, ۱۸:۵۱:۳۵
ارسال‌ها
پاسخ
تشکر شده توسط : dizgah, reza555, رسول
dizgah آفلاین
تازه وارد

ارسال‌ها: 9
موضوع‌ها: 4
تاریخ عضویت: بهمن ۱۳۸۸

تشکرها : 4
( 2 تشکر در 1 ارسال )
ارسال: #3
RE: کنترل استپ موتور با usart و pc
ممنون ازتون اگه نتونستم از کدویژن جواب بگیرم باید یه جوری با بسکام یه کاری کنم ولی متاسفانه بهش زیاد مسلط نیستم
به هر حال بازم ممنون که وقت گذاشتین
+ کس دیگه ای نظری نداره ؟
۲۴-مرداد-۱۳۸۹, ۱۹:۲۸:۲۳
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, reza555
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #4
RE: کنترل استپ موتور با usart و pc
شدن که میشه حداقل دوستای من این کار رو خیلی راحت با کدویژن انجام داده بودن ولی بسکام یه چیز دیگست !
۲۴-مرداد-۱۳۸۹, ۱۹:۳۹:۱۸
ارسال‌ها
پاسخ
تشکر شده توسط : reza555, dizgah
dizgah آفلاین
تازه وارد

ارسال‌ها: 9
موضوع‌ها: 4
تاریخ عضویت: بهمن ۱۳۸۸

تشکرها : 4
( 2 تشکر در 1 ارسال )
ارسال: #5
RE: کنترل استپ موتور با usart و pc
فکر میکنم اشکال از قسمتی باشه که اطلاعات ورودی رو سرهم میکنه و مقدار چرخش رو مشخص میکنه باشه
کد:
databuff[0] = rx_buffer[2];
databuff[1] = rx_buffer[1];
databuff[2] = rx_buffer[0];

databuff[1] = databuff[1] * 10;
databuff[2] = databuff[2] * 100;

sum = databuff[0] + databuff[1] + databuff[2];
کسی میتونه راهنمایی کنه که این کدها اشکال دارن یا نه ؟ [/align]
۲۴-مرداد-۱۳۸۹, ۲۱:۴۶:۲۲
ارسال‌ها
پاسخ
dizgah آفلاین
تازه وارد

ارسال‌ها: 9
موضوع‌ها: 4
تاریخ عضویت: بهمن ۱۳۸۸

تشکرها : 4
( 2 تشکر در 1 ارسال )
ارسال: #6
RE: کنترل استپ موتور با usart و pc
سلام همونطور که حدس میزدم مشکل از قیمت تبدیل بوده چون من اعمال ریاضی رو کد کاراکترها انجام میدادم نه خود اعداد
حالا باید کاراکتر ها رو به مقدار عددیشون تبدیل کنم
با تابع atoi توی فایل هیدر stdlib میشه این کارو انجام داد ولی راستش نمیدونم طرز استفاده از تابع چجوریه
کسی میتونه کمک کنه ؟
۲۵-مرداد-۱۳۸۹, ۲۲:۳۶:۴۹
ارسال‌ها
پاسخ
reza555 غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,073
موضوع‌ها: 17
تاریخ عضویت: شهریور ۱۳۸۸

تشکرها : 3779
( 3261 تشکر در 1342 ارسال )
ارسال: #7
RE: کنترل استپ موتور با usart و pc
اول لودش کن بعد توی help کدویژن سرچ کن نمونه هاشو ببین

زندگی مدیریت فرصت هاست.
۲۵-مرداد-۱۳۸۹, ۲۲:۴۰:۴۰
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, رسول


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مدار دور موتور خودرو HPower 15 8,332 ۲۷-آبان-۱۳۹۷, ۲۱:۵۱:۱۷
آخرین ارسال: 1نفر
Question [سوال] کمک در برنامه نویسی دور موتور خودرو HPower 6 2,592 ۲۵-آبان-۱۳۹۷, ۲۲:۰۳:۵۷
آخرین ارسال: alimogmov
  راهنمایی در مورد کنترل دور موتور کولر sinastar 12 23,448 ۱۰-آبان-۱۳۹۷, ۱۰:۱۸:۵۹
آخرین ارسال: alimogmov
  کنترل زاویه اتش تریستور nex2004 67 79,728 ۲۲-بهمن-۱۳۹۵, ۲۲:۴۴:۱۷
آخرین ارسال: pars_paya2
  مشکل در ارتباط بیسیم با پروتکل USART cortex-m3 5 6,012 ۰۷-آبان-۱۳۹۵, ۰۰:۱۷:۳۶
آخرین ارسال: milad15m
  ساخت تابلو روان و ساعت هوایی گردون یا همون Propeller Clock با موتور فن !!! t3r!p3000 85 91,068 ۲۲-شهریور-۱۳۹۵, ۲۱:۴۴:۳۸
آخرین ارسال: taherehselseleh
  ساخت کنترل فاز با avr mfazl22 3 3,832 ۲۸-اردیبهشت-۱۳۹۵, ۲۲:۴۸:۰۷
آخرین ارسال: kimiafars
  [فوری] کنترل سرعت موتور با کیپد kurd9691 0 2,231 ۱۴-اردیبهشت-۱۳۹۵, ۱۶:۵۷:۴۶
آخرین ارسال: kurd9691
  با میکرو یک کلید 220 رو کنترل کنیم saeidjan 7 13,676 ۱۹-بهمن-۱۳۹۴, ۱۰:۵۴:۱۵
آخرین ارسال: sharin
  lcd کاراکتری+موتور dc cortex-m3 2 2,754 ۲۷-مرداد-۱۳۹۴, ۱۵:۰۶:۴۶
آخرین ارسال: cortex-m3

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 4 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS