آموزش کنترل سروو موتور با میکروکنترلر AVR
محتویات
سلام. کنترل سروو موتور با میکروکنترلر AVR و اتمل استودیو (آموزش کامل اتصال Servo Motor) را آماده کردیم.
آموزش کنترل Servo Motor به میکروکنترلر های AVR
سروو موتور در موارد گسترده ای مورد استفاده قرار می گیرد كه نیاز به كنترل دقیق دارند مانند ربات ها ، ماشین های اتوماسیون ، بازوی رباتیک و … دامنه موتور سروو محدود به اینها نیست و در بسیاری از پروژه ها قابل استفاده است.
در این پروژه AVR سروو موتور را به وسیله میکروکنترلر AVR Atmega16 کنترل میکنیم. برنامه را با استفاده از Atmel Studio 7 نوشته و کامپایل میکنیم. موتور سروو ولتاژ کاری حدود 4.8 تا 6 ولت دارند. ما میتوانیم با استفاده از سیگنال PWM ، زاویه شافت Servo Motor را کنترل کنیم. توجه داشته باشید که سروو موتور ها نمیتوانند چرخش کامل 360 درجه ای داشته باشند. دامنه حرکت سروو موتور ها 0 تا 180 یا -90 تا +90 است.
قطعات مورد نیاز پروژه AVR
- میکروکنترلر AVR Atmega16
- سروو موتور SG90
- اسیلاتور کریستال 16 مگاهرتز
- خازن 100nf – دو عدد
- خازن 22pf – دو عدد
- دکمه
سروو موتور چیست؟
موتورهای سروو در شکل ها و اندازه های مختلفی موجود هستند. یک سروو موتور 3 سیم دارد، یکی برای ولتاژ مثبت دیگر برای زمین و آخرین مورد برای تنظیم موقعیت. سیم قرمز به برق متصل شده است، سیم سیاه به زمین وصل شده است و سیم زرد به میکروکنترلر وصل میشود.
سروو موتور ترکیبی از موتور DC ، سیستم کنترل موقعیت و چرخ دنده ها است. موقعیت شافت موتور DC توسط چرخه وظیفه سیگنال PWM تنظیم می شود. اطلاعات مربوط به موقعیت شفت از طریق پین آردوینو ارسال می شود.
نحوه کنترل سروو موتور با PWM میکروکنترلر AVR
فرکانس سیگنال PWM (تعدیل پهنای پالس) بسته به نوع سرو موتور می تواند متفاوت باشد. نکته مهم در اینجا ، چرخه وظیفه سیگنال PWM است. بر اساس چرخه وظیفه موقعیت سروو موتور تنظیم میشود. اگر نمیدانید چرخه وظیفه چیست مطلب زیر را بخوانید.
در تصویر زیر نحوه تنظیم شافت سروو موتور با استفاده از PWM را میبینید.
به طور مثال برای اینکه شافت به ساعت 3 منتقل شود ، زمان روشن بودن سیگنال باید 2ms باشد و زمان خاموش باید 16ms باشد. این نسبت توسط سیستم کنترل در سروو رمزگشایی می شود و موقعیت را بر اساس آن تنظیم می کند. PWM در پروژه با استفاده از میکرو مگا 16 تولید می شود.
کنترل سروو موتور با میکروکنترلر Atmega 16
برخلاف استپر موتور ، سروو موتور ها نیازی به درایور خارجی مانند L293D یا … ندارند. برای کنترل سروو موتور تنها موج PWM نیاز است. تولید سیگنال PWM با میکروکنترلر AVR بسیار آسان است. همانطور که می دانیم سروو موتور هر 20 دقیقه به دنبال پالس است و طول پالس مثبت زاویه چرخش موتور سروو را تعیین می کند.
فرکانس مورد نیاز برای بدست آوردن پالس 20ms طبق فرمول زیر 50 هرتز است.
(f = 1 / T) >> 50Hz =1/20ms
بنابراین برای این سرو موتور، مشخصات می گوید برایزاویه 0 درجه سروو موتور به 0.388ms نیاز داریم، برای 90 درجه به 1.264ms و برای 180 درجه به پالس 2.14ms نیاز داریم. (به تصویری که کمی بالاتر قرار دادیم دقت کنید)
برای تولید پالس های مشخص شده از تایمر 1 میکروکنترلر Atmega16 استفاده خواهیم کرد. فرکانس پردازنده 16 مگاهرتز است. Prescaler روی 1 تنظیم شده است. بنابراین کلاک 1 مگاهرتز است. از Timer1 به عنوان حالت سریع PWM استفاده می شود، یعنی حالت 14. شما می توانید از حالت های مختلف تایمر برای تولید پالس دلخواه استفاده کنید. تصویر زیر به شما در درک این مسئله کمک میکند.
برای استفاده از Timer1 به عنوان حالت Fast PWM به مقدار ICR1 نیاز داریم. برای پیدا کردن مقدار ICR1 از فرمول زیر استفاده میکنیم.
fpwm = fcpu / n x (1 + TOP)
فرمول ساده تری هم وجود دارد :
TOP = (fcpu / (fpwm x n)) – 1
در این فرمول ها n مقدار PreScaler و fcpu فرکانس پردازنده و fpwm نیز طول پالس PWM هنگامی که فرکانس 50 هرتز است.
حالا این مقدار را محاسبه میکنیم.
N = 1, fcpu = 1MHz, fpwm = 50Hz
مقادیر بالا را در فرمول قرار میدهیم و جواب میشود ICR1 = 1999
یعنی برای دسترسی به حداکثر درجه (180) ، ICR1 باید 1999 شود.
برای کریستال 16MHz و Prescaler تنظیم شده روی 16 ، خواهیم داشت :
ICR1 = 4999
در اینجا ما از Atmega16 برای چرخش موتور سرو از 0 تا 180 استفاده میکنیم و دوباره از 180 به 0 باز می گردیم. این انتقال در 9 مرحله یعنی 0 – 45 – 90 – 135 – 180 – 135 – 90 – 45 – 0 انجام می شود.
موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
اگه بخوایم استپر موتور رو با آرم کد بزنیم هم از همین منطق میشه استفاده کرد؟
بله
سلام،سوالی داشتم،.
میشه بهش موج سینوسی هم داد؟
سلام خدمت مهندس عزیز و همکاران ، مهندس جان مطلبی که هست بنده می خوام سه رو موتور رو با استفاده از ریموت کنترل و با زدن دکمه راست گرد و در آخر ایست و با زدن دوباره همان کلید چپ گرد بشه و به حالت اولش برگرده و در اونجا ایست کنه ، و مطلب بعدی با زدن یک دکمه به صورت لحظه ای که در فیلم هم هست باز و با زدن دکمه بعدی به صورت لحظه ای برگشت داده بشه ، این آموزش نه در دوره آموزش avr موجود بود ونه در این فیلم ، از شما تقاضا دارم تا فیلم آموزشی این مدار رو نیز بسازید و در دوره آموزش AVR یا به صورت جدا آموزش بدهید . مطلب دیگر هم در مورد ماژول RXC6 اصلا مطلبی نبود . ممنون و متشکر
سلام عزیز
شما اگر اصول برنامه نویسی رو بلد باشید ساخت مدار مورد نظرتون کار زیادی نداره، همین دوره آموزش AVR رو با دقت از ابتدا مشاهده کنیداصول رو یاد میگیرید
مطالب موجود در دوره ها در قسمت سرفصل های هر دوره نوشته شده
سلام وقت شما بخیر
برای میکرو atmega8 کجاهاش تغییر میکنه
با سلام خدمت شما برای طراحی یک دستگاه در زمینه نساجی نیاز به کنترل حرکت تیغه ها به صورت میلی متری وبا دقت کامل نیاز داریم وبا توجه به این مطلب نیازمند استفاده از سرو موتورهستیم خواهشی که از شما بزرگواران دارم این است در صورت امکان بفرمایید ایا اولا استفاده از سرو موتور به عنوان نیروی محرکه این دستگاه مناسب هست ودوما ایا می شود بدین وسیله جابجایی میلی متری راکنترل کرد ممنون
سلام جناب. دقیقا نمیدونم پروژتون چطور هست اما سروو موتور هایی با دقت بسیار بالا در بازار موجود هستند.