PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : راه اندازي موتورها توسط avr



M3R
06-02-2010, 23:46
چکيده مقاله:

در اين اين مقاله شما نحوه راه اندازي موتورهاي DC و پله اي توسط ميکروکنترلر AVR و همچنين نحوه اتصال هريک از موتورها به درايورهاي مربوطه را مطالعه خواهيد کرد.(به زبان c)


فهرست مطالب:
موتورهاي DC
کنترل جهت موتور DC
کنترل موتورهاي DC با استفاده از ترانزسيتور
بررسي IC هاي درايو موتور DC
درايور L298
درايور L293
کنترل سرعت در موتورهاي DC
توليد پالس PWM از طريق ميكروكنترلر
توليد PWM از طريق تايمر صفر
مثال1
توليد PWM بدون استفاده از تايمر.
مثال2
مثال3
موتورهاي پله اي
زاويه پله
پله در ثانيه و RPM
راه اندازه موتور به صورت نيم پله
مدارهاي درايور موتور پله اي
راه اندازي موتور پله اي با استفاده از ترانزسيتور و MOSFET
آي سي هاي درايور موتور پله اي
درايور ULN2003 و 2002 ULN
مثال

منبع:eca

arsalan681
06-02-2010, 23:59
فایل مشکل داره لطفا تصحیح کنید

M3R
07-02-2010, 12:26
فایل تصحیح شد.
فایل قبلی هم یه مشکل کوچیک داشت:
به جای pdf. کرده بودم AVRpdf. 8O

Elec_l0vE
16-03-2010, 04:14
این فایل رو میشه زیپ کنید واسه من کامل دان نمیشه :(

M3R
16-03-2010, 10:04
این فایل رو میشه زیپ کنید واسه من کامل دان نمیشه :(

شما از نرم افزارهای مدیریت دانلود مثل idm و Dap و fllash get و.... استفاده کنید
انشاالله که مشکلتون حل میشه.
اگه نشد بگید تا تو فایل زیپ بزارم.

Elec_l0vE
16-03-2010, 15:02
من این نرم افزار ها رئو در اختیارندارم اگه میشه زیپش کنید !

morteza_rk
16-03-2010, 15:11
من این نرم افزار ها رئو در اختیارندارم اگه میشه زیپش کنید !

سلام

اگه adsl دارید حتما نرم افزار dap رو دانلود کنید ، خیلی خوبه ، اگرم adsl ندارید یه cd نرم افزار بخرید که dap داشته باشه. اینطوری راحتتر دانلود می کنید.

M3R
16-03-2010, 19:47
سلام.
این هم تو فایل زیپ
پسوردفایل You can see links before reply

motors-avr_You can see links before reply - 544.9 Kb (You can see links before reply)

Elec_l0vE
16-03-2010, 22:48
پسورد اشتباه هست دانلود نمیشه

Elec_l0vE
16-03-2010, 22:55
دوستان من یه اموزش راه اندازی موتور با pwm برای راه اندازی رباتم میخام . البته اموزش به زبان بیسیک . اموزش ها اکثرا به زبان سی هستن . کسی میتونه کمکم کنه و همچیم اموزشی رو برام بزاره یا توضیح بده

farzadsw
16-03-2010, 23:02
این کد بخشی از یه برنامه دیگه بود ، این قسمتش برای pwm هست



Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Config Pind.4 = Output : Config Pind.5 = Output : Config Pind.6 = Output
Set Portd.6
Pwm1a = 100
Pwm1b = 200

Elec_l0vE
16-03-2010, 23:27
راستش برنامه که زیاد دارم ولی ...
تو برنامه بالا این سه خط اخر رو میشه توضیح بدید


اینم برنامه کتاب 1nafar $regfile = "M8DEF.DAT" : $crystal = 8000000
Config Portb = Output : Config Portd = Input
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm =
Clear Down , Prescale = 8
Dim A As Word , B As Word
A = 0 : B = 0
Do
If Pind.0 = 1 Then : A=A+10 : B=B+10 : Waitms 100 : End If
If Pind.1 = 1 Then : A = A -10 : B = B -10 : Waitms 100 : End If
If Pind.2 = 1 Then : B = 0 : A = 100 : Else : A = 0 : B = 100 : End If
Pwm1a = A : Pwm1b = B
Loop
End

قسمت هایی که بولید شده رو نفهمیدم چی شده ! ینی چه جوری جهت مموتور عوض میشه

Elec_l0vE
16-03-2010, 23:28
راستش برنامه که زیاد دارم ولی ...
تو برنامه بالا 3 خط اخر واسه چی هست ؟


اینم برنامه کتاب 1nafar



$regfile = "M8DEF.DAT" : $crystal = 8000000
Config Portb = Output : Config Portd = Input
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm =
Clear Down , Prescale = 8
Dim A As Word , B As Word
A = 0 : B = 0
Do
If Pind.0 = 1 Then : A=A+10 : B=B+10 : Waitms 100 : End If
If Pind.1 = 1 Then : A = A -10 : B = B -10 : Waitms 100 : End If
If Pind.2 = 1 Then : B = 0 : A = 100 : Else : A = 0 : B = 100 : End If
Pwm1a = A : Pwm1b = B
Loop
End

قسمت هایی که بولید شده رو نفهمیدم چی شده ! ینی چه جوری جهت مموتور عوض میشه:cry:

farzadsw
17-03-2010, 01:21
Pwm1a , Pwm1b مقدار duty cycle رو تعیین میکنن . برای تایمر 1 وقتی تو حالت 10 بیتی باشه ، مقدار 0 تا 1023 میگیرن . و اگه تایمر تو مد 8 بیتی باشه 0 تا 255 رو میشه به pwm1a , pwm1b داد.

مثلا تو مثالی که گذاشتید ، اگه 255 باشه ، 5 ولت و اگه 0 باشه 0 ولت رو تو خروجی پایه میده.
Compare A Pwm = Clear Up , Compare B Pwm =
Clear Down برای تعین شمارش کانتر pwm هست که رو به بالا بشماره یا پایین . چیز خاصی نیست . شما همون رو به بالا یا clear up بگذارید

تو اون مثالی که گذاشتید جهت چرخش عوض نمیشه ، فقط سرعت تغییر میکنه
بری تعیین جهت چرخش باید 2تا پایه های input درایورتون رو (مثلا l298,l293) تغیر بدید (0و1 یا 1و0 ) ، این مقدار pwm رو به پایه enable درایور وصل میکنید.

Elec_l0vE
17-03-2010, 01:39
پس یعنی pwm1a برای تغییر دامنه ولتاژ و prescale برای تغییر فرکانس موج هست . ولی این جوری که فقط میشه فرکانس های مشخصی رو بدست اورد !

ولی توی کتاب نوشته یکی از کلید ها جهت رو عوض میکنه .

این مدارم هست فقط یکی از موتور ها میچرخه. اصلا دیود های هرز گرد رو وصل نکردم نمیدونم چرا اونجوری وصل شدن توی کتاب اقای یه نفر

You can see links before reply

farzadsw
17-03-2010, 02:01
فرکانس باید یه مقدار ثابت باشه ، قرار نیست تغییر کنه. مقدارشم خیلی مهم نیست.

این نقشه ای که گذاشتید اشتباهه. اون دوتا پایه pb1 ,pb2 باید به enable ها وصل بشن . برای 4 تا in ها باید از پایه های دیگه میکرو استفاده کنید . in1 ,in2 مربوط به جهت چرخش خروجی اول درایوره . اگه یکی 1 و دیگری 0 باشه موتور در یه جهت مییچرخه. اگر جای صفر و 1 این 2تا in 1,2 رو عوض کنید جهت چرخش عوض میشن.
in3,in4 هم برای کنترل جهت چرخش خروجی شماره 2 درایور هست . اونم مثل قبلی باید یکی 0 و یکی 1 باشه.

دیود هرز گرد هم بگذارید بهتره (الان اگه کار میکنه و فقط برای آزمایش هست زیاد مهم نیست ولی تو کار اصلی حتما باید بگذارید)

Elec_l0vE
17-03-2010, 02:37
من enable ها رو به 1 وصل کردم درست شد بزارید دوبراه برنامه روبنویسم نتیجه رو میگم. فقط

فرکانس مگه دور موتور و سرعت رو مشخص نمیکنه ؟

و یه سوال دیگه دیود هرز گرد برا چی این جوری وصل میشن . یعنی هر سیم موتور یه کاتد دیود و یه اند دیود دیگه بهش وصل . چرا ؟

farzadsw
17-03-2010, 04:31
دور موتور رو همون دیوتی سایکل تعیین میکنه (مقدار pwm1a ,pwm1b ) .چون سرعت موتور به ولتاژش بستگی داره.همونطور که گفتم فرکانس چیز خاصی نداره ، فقط اگه خیلی کم باشه ممکنه موتور روون نچرخه .
دیود هرز گرد برای اینه که وقتی ولتاژ موتور قطع میشه ، به دلیل راکتانس موتور ، یه جریانی بر خلاف جریان سابق ایجاد میشه که اگه این دیود ها نباشه بر میگرده به مدار اصلی و معمولا میکرو ریست میشه.(اگه خیلی زیاد باشه درایور یا میکرو ممکنه بسوزه)

M3R
17-03-2010, 09:44
پسورد اشتباه هست دانلود نمیشه

با سلام.
ببخشید یه مشکل کوچیک بود برطرف شد.میتونید دانلود کنید.مشکلی نداره.

morteza_rk
17-03-2010, 12:20
در کلیه موارد حق با آقا فرزاده ، ایشون خیلی خوب راهنمائیتون کردن مهناز جان.

در مورد فرکانس PWM هم حق با ایشونه ، مقدار فرکانس در سرعت بی تاثیره! چیزی که سرعت رو کنترل می کنه در واقع مقدار توان DC رسیده به موتور هست که توسط Duty Cycle تعیین میشه.

وجود دیودهای هرزگرد حتما لازمه چون اگه اشتاه نکنم طبق قانون القای فارادی جریان القایی در هر سیم پیچ با عامل بوجود آورندش مخالفت می کنه! بدین صورت که اگه جریان اصلی در حال افزایش باشه جریان القایی در خلاف جهت شروع به کم شدن می کنه و برعکس!

حالا شما لحظه ای رو در نظر بگیرید که جریان اصلی بطور ناگهانی می خواد صفر بشه ، این یعنی اینکه جریان القایی بطور ناگهانی می خواد زیاد بشه! برای اینکه این جریان معکوس به درایور موتور و یا سایر اجزای مدار آسیب نرسونه اونو در یک حلقه که توسط دیود هرزگرد ایجاد میشه هدر میدن!

یعنی این جریان اینقدر در حلقه می چرخه که تقریبا به صفر میرسه!

Elec_l0vE
17-03-2010, 18:58
بله ممنون از اقایان فرزاد و مرتضی

اخه توی اموزش خوندم که وقتی پهنای پالس یا همون فرکانس تغییر میکنه سرعت هم تغییر میکنه . البته ولتاژ هم که میگین درسته . حالا این حداقل فرکانس چقد باشه یه مگ خوبه ؟

و یه سوال دیگه من مدارم راه اندازی شده .انیبل ها رو به یک ولل کردم و مدارم هم همون قبلیه که لینک دادم و جهت رو هم میتونم عوض کنم . نمیدونم چرا سرعت کم زیاد نمیشه.

واسه سرعت :

If Pind.2 = 1 Then : B = 0 : A = 100 : Else : A = 0 : B = 100 : End If
این خط میاد متغیر ها رو زیاد کم میکنه نمی دونم مشکلش چیه؟؟

M3R
18-03-2010, 10:31
یه چیزه دیگه که باید بهش توجه کنید فرکانس کاری موتور هست.
شما ماکزیمم فرکانس کاری موتور رو از تو دیتاشیتش بیارید بیرون و فرکانس رو همیشه کمتر از ماکزیمم بزارید.
اگه دیدید موتورتون جیغ میزنه باید فرکانس رو کم کنید وگرنه ممکنه موتورتون نیم سوز بشه.

farzadsw
18-03-2010, 16:24
اخه توی اموزش خوندم که وقتی پهنای پالس یا همون فرکانس تغییر میکنه سرعت هم تغییر میکنه
پهنای پالسی که اونجا گفته شده همون دیوتی سایکل هست (duty cycle ) یعنی چقدر از کل پالس 1 (یا 0) هست . فرکانس به پهنای پالس وقتی 1 هست ( یا همون دیوتی سایکل) بستگی نداره ، به کل اون پالس (هم حلت 0 و هم حالت 1 ) بستگی داره . دیوتی سایکل رو بر حسب در صد میگن . مثلا دیوتی سایکل 60 یعنی 60 درصد پالس 1 ه و 40 درصد صفر . به این ترتیب یه ولتاژ میانگین کل پالس بر حسب درصد از 5 ولت بدست میاد (تو این مثال 3 ولت) . حالا خود این پالس میتونه فرکانس مختلفی داشته باشه. برای تنظیم فرکانس معمولا اگه prescaler رو 64 بگذارید خوبه ، خودتون امتحان کنید ببینید چند بگذارید موتورتون روون میچرخه.


و یه سوال دیگه من مدارم راه اندازی شده .انیبل ها رو به یک ولل کردم و مدارم هم همون قبلیه که لینک دادم و جهت رو هم میتونم عوض کنم . نمیدونم چرا سرعت کم زیاد نمیشه.
قبلا گفتم که :


این نقشه ای که گذاشتید اشتباهه. اون دوتا پایه pb1 ,pb2 باید به enable ها وصل بشن . برای 4 تا in ها باید از پایه های دیگه میکرو استفاده کنید . in1 ,in2 مربوط به جهت چرخش خروجی اول درایوره . اگه یکی 1 و دیگری 0 باشه موتور در یه جهت مییچرخه. اگر جای صفر و 1 این 2تا in 1,2 رو عوض کنید جهت چرخش عوض میشن.
in3,in4 هم برای کنترل جهت چرخش خروجی شماره 2 درایور هست . اونم مثل قبلی باید یکی 0 و یکی 1 باشه.



یعنی :
0. این آیسی درایور میتونه 2 تا موتور رو به طور مستقل کنترل کنه.
1. سرعت رو با pwm تنظیم میکنید (pwm ولتاژ متغییر درست میکنه).
2. برای تنظیم سرعت باید واتاژ پایه enable درایور (l298) رو تغییر بدید.
3. در نتیجه پایه خروجی pwm میکرو رو باید به enable درایور وصل کنید (PB.1 ,PB.2 به enable1 , enable 2 )
4. پایه های in1 ,in2 برای تعیین جهت چرخش موتور 1 هستن .
5. پایه های in3 , in4 برای تعیین جهت چرخش موتور 2 هستن .
6. بنابر این با 4 تا پایه از میکرو (پایه عادی) و 0و1 کردن اونا میتونید جهت چرخش موتور های 1و 2 رو عوض کنید.

Elec_l0vE
19-03-2010, 03:55
با تشکر از اقا فرزاد حالا فهمیدم چی شد و مشکلم حل شد

فقط در مورد 6 من از دو پایه استفاده کردم یعنی 1 و3 به یه پیه میکرو و 2و4 هم به یه پایه دیگه (البته 1و4 هم میشه)

من این برنامه مسخره رو نوشتم




A = 0 : B = 0

Set Pinb.3
Reset Pinb.4

Main:

Do



If Pind.0 = 1 Then : A = A + 10 : B = B + 10 : Waitms 100 : End If

If Pind.1 = 1 Then : A = A -10 : B = B -10 : Waitms 100 : End If

If Pind.2 = 1 Then Goto S

Pwm1a = A : Pwm1b = B




Loop


S:
Toggle Pinb.3
Toggle Pinb.4
Goto Main


End


فقط وقتی pind.2 رو فشار میدم یه لحظه د وموتور می ایستن و بعد اروم سرعتشون کم میشه و جهتش بر عکس میشه.
ایا در عمل هم همینطوریه و برای اینکه این اروم ایستادن رفع بشه چکار کنم ؟

mehrdadgh
19-03-2010, 17:53
سلام

من تو باغ نیستم ولی برای اینکه موتور زود جهتش عوض بشه میشه یه ولتاژ زیادتری نسبت به حالت قبل به موتور داد که البته این روش زیاد مناسب نیست

farzadsw
19-03-2010, 20:11
فقط وقتی pind.2 رو فشار میدم یه لحظه د وموتور می ایستن و بعد اروم سرعتشون کم میشه و جهتش بر عکس میشه.
ایا در عمل هم همینطوریه و برای اینکه این اروم ایستادن رفع بشه چکار کنم ؟

من متوجه نمیشم ؟ موتور ها میایستن ، بعد سرعتشون کم میشه ؟

اگه از شبیه ساز استفاده کردید ، زیاد به نتایجش اعتنا نکنید ، تو عمل بسته به سرعت موتو رو باری که روشه ( به خاطر اینرسی ) ممکنه حالت های مختلفی ایجاد بشه.

Elec_l0vE
20-03-2010, 01:23
بله کلا واسه اینکه ترمز کردن باید چکار کنم که این جوری دیر وا نسته ؟

مدار رو هم ببینید متوجه بشین

You can see links before reply

farzadsw
20-03-2010, 04:11
وایستادن و بعد آروم شدن اشکال شبیه سازه ، در عمل سرعت کم و بعدش تو جهت دیگه زیاد میشه ، خیلی هم سریعه نه مثل این شبیه ساز.(البته سرعتش بستگی به بارش داره ولی در کل کمه)
برای ترمز باید جفت پایه ها رو 1 کنید.

Elec_l0vE
20-03-2010, 16:07
اقا فرزاد برنامه رو اگه یه تست بزنین میبینین که کلید pind.2 فقط برای بار اول عمل میکنه و جهت رو معکوس میکنه ولی دفعات بعدی کار نمیکنه :( . مشکل از برنامم هست ؟

بعد از ست شدن جفت پایه واسه ترمز دیگه نمیتونم دستور تاگل رو استفاده کنم . به نظرتون چه برنامه ای میتونم بکار ببرم ؟

farzadsw
20-03-2010, 21:19
تو برنامتون به جای Pinb.3 , Pinb.4 باید بنویسید portb.3, portb.4 چون خروجی هستن و خروجی رو با portx.x تغییری میدن نه pinx.x
پروتئوس هم مشکل داره .زیاد بهش اتکا نکنید ، تا جایی که میتونید مدار واقعی رو ببندید. غیر از این مواردی که دیدید مثل کند چرخیدن موتور ، پروتئوس شرایط الکتریکی مدار رو هوب شبیه سازی نمیکنه . مثلا دیود هرز گرد بگذارید یا نگذارید براش فرقی نداره . یا اگه وسط برنامه یه پایه 1 به یه پایه 0 وصل شه هیچ عکس العملی نشون نمیده .
الان اصول کار رو میدونید یقیش میشه برنامه نویسی خودتون .

Elec_l0vE
20-03-2010, 21:43
باشه

فقط من الان متغیر a رو دستی تغییر میدادم تو این برنامه. ایا در عمل باید اونو بوسیله تایمر ها تغییر بدم. مثلا بخام ربات با سرعت 10 کیلو متر حرکت کنه متغیر های a,b رو چهجوری باید تنظیم کنم .یه خورده گیج شدم .

farzadsw
21-03-2010, 02:45
در عمل مواردی متعددی مثل نوع موتور ، ولتاژ نامی ، قطر چرخ ، اصطکاک محور ، وزن رباط و .... تو سرعت نهایی تاثیر دارن . بنابر این باید به صورت عملی و تجربی بدست بیارید مقدار pwm چقدر باشه تا سرعت مطلوب بشه.

Elec_l0vE
21-03-2010, 03:04
خب ببینید من میخام دقیق باشه . از این متغیر ها نمیشه استفاده کرد. برای مثال میخام سرعت رو بصورت عددی واسش تعریف کنم بگم فلان جا اینق سرعت یا ...

بنایبراین باید از تایمر استفاده بشه . حالا اون بحث pwm اینا که جداس

Division
21-03-2010, 11:26
منم با نظر دوست خوبم farzadsw كاملاً موافقم مواردي رو كه شما بش اشاره كردين، به صورت تجربي با عددهي PWM هاي هر موتور بدست ميان چون تمام روبات هايي كه ساخته ميشه يه جور نيستن كه بيايم بگيم مثلاً تو روبات من با PWM به مقدار 150 اينقدر سرعت داره بعدش شمام از اين مقدار استفاده كنين .



خب ببینید من میخام دقیق باشه .


در ضمن يه توصيه دوستانه، حرفه اي ها تو ساخت روبات همين اولي كاري اينقدر دقت به خرج نمي دن كه شما روش تاكيد مي كنين :0013:
اول يه چيزي با تكيه بر اصول آماده كنين بعدش برين رو ريزه كاري هايي موضوع مثل تعيين سرعت موتور و ...