ايران ويج

نسخه‌ی کامل: دور موتور در ربات مسیریاب
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام

دور موتور رو که با pwm تو ربات های مسیریاب کنترل می کنند چه جوریه؟؟؟
من تا حالا مسیریاب رو با میکرو نساختم واسه همین
اگه یه برنامه نمونه عملی بزارین کافیه
ممنون
با چه ميكرويي مي خواين كار كنين .

اگه AVR با زبان بسكامه كه كافيه تايمر يك رو در مود PWM, بذارين و از خروجي تايمر يك بدين به انيبل راه اندازتون ( پايه 18 و 19 ميكرو ATMEGA 16 (
به همين راحتي !

اينم يه مثال :
کد php:
$regfile "M16def.dat" 

$crystal 1000000  

Config Timer1 
Pwm Pwm Compare A Pwm Clear Up Compare B Pwm Clear Down Prescale 1

Pwm1a 
100

Pwm1b 
200

End 
(۰۲-بهمن-۱۳۸۷, ۱۹:۰۰:۴۶)mehrdadgh نوشته است: [ -> ]سلام

دور موتور رو که با pwm تو ربات های مسیریاب کنترل می کنند چه جوریه؟؟؟
من تا حالا مسیریاب رو با میکرو نساختم واسه همین
اگه یه برنامه نمونه عملی بزارین کافیه
ممنون

سلام به اینجا مراجعه کنید
http://www.forum.iranled.com/showthread....620&page=4
توی این بخش یک نمونه برنامه هست شاید بتونه یک کمی بهتون کمک کنه
سلام
این طور که شما عزیزان گفتین فکر کنم دیگه خیلی آسون باشه!!!
البته اگه مشکلی داشتم باز هم مزاحمتون میشم!
سلام
نمیدونم جاش هست یا نه ولی ببخشید
می خواستم در مورد چینش سنسور به صورت تار عنکبوتی توضیح بدید و بگید چجوریه
سلام
چنتا سوال داشتم
1) dutycycle رو چجوری تعیین کنیم ؟ مثلا در برنامه ای که اقا تریپ گذاشتن dutycycle چقدره؟
2) در بیسکام فقط مدل phase conect pwm وجود داره ؟ fast pwm مثل کدویژن نداره؟
3) مگه نمی گن که ای وی آر 4تا کانال pwm داره پس دو تای دیگه کو؟ ( دو تاشون پایه های oc2a,oc1a هستن؟)
4) تو برنامه زیر
$regfile = "m16def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 =
Portc.7 , E = Portc.3 , Rs = Portc.2
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm =
Clear Down , Prescale = 1
Dim A As Byte
Dim B As Byte
Config portd = output
Do
Pwm1a = A
Pwm1b = B
Incr A
Incr B
Waitms 500
Loop
End
که اقای یه نفر تو فایل اموزشی گذاشتن این جمله را گفتن : در مثال بالا مقدار دو متغيير aو b در ريجيستر pwmقرار داده شده اند ، مقدار انها هر يک ميلی ثانيه افزايش ميابد . اون یه میلی ثانیه از کجا اومد؟
نقل قول: می خواستم در مورد چینش سنسور به صورت تار عنکبوتی توضیح بدید و بگید چجوریه
يه نمونه مي ذارين !
بايد جالب باشه !!


نقل قول: dutycycle رو چجوری تعیین کنیم
دقت كرده باشين من PWM رو 8 بيتي گذاشتم . يعني مقدار متغير Pwm1b و Pwm1a مي تونه بين 0 تا 255 باشه.
براي مدلاسيون 50 درصد مي ذاريم رو عدد 127 . ( براي pwm 9 بيتي بين 0 تا 511 و 10 بيتي بين 0 تا 1023 مي تونيم ضريب مدلاسيون رو تنظيم كنيم )

نقل قول: مگه نمی گن که ای وی آر 4تا کانال pwm داره پس دو تای دیگه کو؟
پايه OC2 هم خروجي pwm تايمر دو هستش . oc1b,oc1a هم كه خروجي pwm تايمر يك هستند .
اون يكي ديگه اش رو هم نمي دونم .

نقل قول: اون یه میلی ثانیه از کجا اومد؟
يه ميلي ثانيه نبوده و نيم ثانيه بوده ( غلط تايپي )
کد:
Waitms 500
سلام
ایسیهای L298 وuln2003 رو میشه هر دو رو به کار برد؟
هر دو شونم هم ورودی رو نات می کنند؟
اگه نات می کنن پس باید برنامرو تغییر داد مثلا مدلاسیون 25% لازم داریم باید تو برنامه %75 درصد بنویسم؟
L298 نات نمي كنه . فقط يه بافر جريان هستش .
ولي ULN2003 نات مي كنه . ( البته فقط خروجيش رو به زمين اتصال مي ده و برعكس نمي شه )

تو اين خط برنامه مي تونيم خروجي pwm را not كنيم .
کد:
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear UP, Prescale = 1
كافيه به جاي Clear UP بنوييسيم Clear Down
اینم از کتاب سعید یه نفر


> پیکر بندی تایمر/کانتر یک در مد PWM :


pwm یا مدولاسین پهنای پالس یکی از امکانات پرکاربرد در avr میباشد ، از این موج برای کنترل دور موتور ساخت پالس مربعی و دیگر پالس ها و ... استفاده میشود

در این نوع مدولاسیون دامنه پالس ثابت است و نسبت زمان صفر به یک ان تغییر میکند برای درک بیشتر موضوع بهتر است کلیه مثالها را اجراکنید.

راه اندازی تایمر/کانتر 1 در مد pwm با دستورات زیر انجام میشود :

کد php:
Config Timer1 Pwm,Pwm 8|9|10 Compare A Pwm=Clear Up |Clear Down |Disconnect ,Compare B Pwm =Clear Up |Clear Down |Disconnect Prescale=1|8|64|256|1024 

Pwm = 8|9|10
pwm میتواند 8 یا 9 یا 10 بیتی باشد که مقدار بیت هرچه بیشتر یاشد دقت موج بیشتر است (تعدا پله بیشتر است )

pwm 8 بیتی تا 256 سرریز میشود (شما میتوانید 256 واحد ان را کم یا زیاد کنید) pwm 9 بیتی تا 512 و pwm 10 بیتی تا 1024 سرریز میشود.


Compare A Pwm=Clear Up |Clear Down |Disconnect:
در صورت استفاده از گزینه Clear Up، موج pwm از سطح 1 شروع میشود و در صورت انتخاب Clear Down ، موج pwm از سطح صفر شروع میشود و در صورت انتخاب Disconnect ، هنگامی که مقدار pwm با pwm1a که در برنامه مشخص میشود برابر شد ، ارتباط پالس با پایه ی oc1a قطع میشود .

Compare b Pwm=Clear Up |Clear Down |Disconnect:
در صورت استفاده از گزینه Clear Up، موج pwm از سطح 1 شروع میشود و در صورت انتخاب Clear Down ، موج pwm از سطح صفر شروع میشود و در صورت انتخاب Disconnect ، هنگامی که مقدار pwm با pwm1b که در برنامه مشخص میشود برابر شد ، ارتباط پالس با پایه ی oc1b قطع میشود .

Prescale :
این گزینه و مقدار کریستال در تعیین فرکانس pwm نقش دارند . برای تولید PWM با فرکانس های متفاوت از این گزینه ها استفاده می شود.

با استفاده از دو دستور زیر میتوان یک عدد ثابت یا متغییر را در ریجیستر pwm قرار داد تا مقدار pwm با انها مقایسه شود:

کد php:
Pwm1a=x
Pwm1b
=

یا

کد php:
COMPARE1A 
 COMPARE1B 


مثال:

کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Portc.4 Db5 Portc.5 Db6 Portc.6 Db7 Portc.7 Portc.3 Rs Portc.2
Config Timer1 
Pwm Pwm Compare A Pwm Clear Up Compare B Pwm Clear Down Prescale 1
Dim A 
As Byte
Dim B 
As Byte
Config portd 
output
Do
Pwm1a A
Pwm1b 
B
Incr A
Incr B
Waitms 500
Loop
End 

در مثال بالا مقدار دو متغییر a و b در ریجیستر pwm قرار داده شده اند ، مقدار انها هر یک میلی ثانیه افزایش میابد .

زمان تناوب پالس pwm از رابطه ی زیر بدست میاید:
زمان / 1 = فرکانس
سلام

من یه مشکل پیدا کردم برای استفاده از pwm

توی کدویژن یه دستور ساده نوشتم واسه امتحان کردن دورموتور

if(PINA.0==1){
PORTD.0=1;
PORTD.1=0;

OCR1A=1000;
OCR1B=1000;
}
if(PINA.0==0){
PORTD.0=1;
PORTD.1=0;

OCR1A=400;
OCR1B=400;
}

ولی هر موقع میخواد سرعت موتور کم بشه خیلی تاخیر داره حدود 10 ثانیه

تنظیمات کدویژن مشکلی نداره

نمیدونم مشکلش از کجاست!
صفحه‌ها: 1 2