راه اندازی سرو موتور با AVR
راه اندازی سرو موتور با AVR
در این پروژه با استفاده از میکروکنترلر AVR Atmega32 و LCD متنی سروموتور SG90 را راه اندازی نموده ایم. این پروژه به زبان C و در کامپایلر CodeVision AVR نوشته شده است. سروو موتور SG90 که در این پروژه استفاده شده است یک سرو موتور کوچک است که تنها ۹ گرم وزن دارد. این سرو موتور ، یکی از سروو موتور های اقتصادی موجود در بازار است که با قیمتی کمتر از ۱۰ هزارتومان ( بین ۲ الی ۳ دلار ) در بازار قابل تهیه است. از این سرو موتور به دلیل وزن پایینش در ساخت هواپیما های مدل استفاده می شود. البته از این سرو موتور برای کارهایی که نیاز به دقت زیاد و قدرت بالا دارند نمی توان استفاده نمود.
پالس استاندارد سروو موتور ها دارای دیوتی سایکل بین ۱ الی ۲ میلی ثانیه در دوره ۲۰ میلی ثانیه است ( فرکانس ۵۰ هرتز ) اما در عمل سروو موتور SG90 با پالس ۷۶۰ میکرو ثانیه در موقعیت ۰ و با پالس ۲۵۶۰ میکرو ثانیه در موقعیت MAX قرار می گرفت. اعداد موجود در کد اعداد استاندارد هستند ، اما اعداد عملی برای SG90 در ادامه همان خط از برنامه ب صورت کامنت نوشته شده است.
در این پروژه از Timer1 میکرو کنترلر ATmega32 که یک تایمر ۱۶ بیتی است برای ایجاد PWM در مد phase and frequency correct pwm mode استفاده شده است. فرکانس این تایمر ۱ مگاهرتز در نظر گرفته شده و مقدار بالای شمارش ( ICR1 ) برابر با ۱۰٫۰۰۰ در نظر گرفته شده است. اما شاید بخواهید بدانید این اعداد چگونه انتخاب شده اند ؟! این اعداد با توجه به فرمول زیر که از دیتاشیت ATmega32 استخراج شده است محاسبه شده اند. همانطور که می دانید فرکانس استاندارد کنترل سرو موتور ۵۰ هرتز است و فرکانس میکرو را بر روی ۸ مگاهرتز تنظیم نموده ایم و با در نظر گرفتن prescaler 8 ( فرکانس PWM را ۱ مگاهرتز در نظرگرفتیم ، در نتیجه N یا ضریب تقسیم فرکانس اصلی میکرو برابر ۸ خواهد بود ) بنا بر این باید با استفاده از فرمول زیر مقدار TOP که همان ICR1 است را به دست آوریم :
۵۰=۸٫۰۰۰٫۰۰۰/(۲*۸*TOP) => 50=8.000.000/(16*TOP) => TOP=10.000
با انجام این کار ما یک تایمر ۲۰ میلی ثانیه ای خواهیم داشت که در ۲۰ میلی ثانیه از ۰ تا ۱۰٫۰۰۰ را می شمارد ، بنابراین هر واحد شمارش این تایمر ، ۲ میکرو ثانیه زمان خواهد برد.
همانطور که می دانید برای مشخص کردن Duty Cycle خروجی OC1A ( پورت D5 ) از رجیستر OCR1A استفاده می نماییم. بر اساس توضیحات فوق هر یک واحد شمارش ۲ میکرو ثانیه زمان خواهد برد بنابر این اگر قصد داریم دیوتی سایکل ۱۰۰۰ میکرو ثانیه ( ۱ میلی ثانیه ) داشته باشیم کافیست OCR1A را برابر ۵۰۰ قرار دهیم. در صورتی که OCR1A را برابر ۷۵۰ قرار دهیم دیوتی سایکل ۱٫۵ میلی ثانیه خواهد بود.
با تعیین دیوتی سایکل بین ۱ میلی ثانیه و ۲ میلی ثانیه می توانید موقعیت سرو را تعیین کنید. به فرض مثال ۱ میلی ثانیه زاویه ۰ و ۲ میلی ثانیه زاویه ۱۸۰ ( برای یک سروو موتور ۱۸۰ درجه ) بنا بر این ۱۸۰ درجه در ۱۰۰۰ میکرو ثانیه مقدار دهی می شوند بنا بر این برای هر درجه باید ۵٫۵ میکرو ثانیه به دیوتی سایکل اضافه نمایید بدین سان با اعمال دیوتی سایکل ۱۰۵۵ میکرو ثانیه ای ، سرو در زاویه ۱۰ درجه قرار می گیرد و با اعمال دیوتی سایکل ۱۳۳۳ در موقعیت ۶۰ درجه قرار خواهد گرفت.
دانلود برنامه و شبیه سازی راه اندازی سرو موتور با AVR :
servo motor with codevision avr راه اندازی servo motor با AVR راه اندازی سرو موتور با avr راه اندازی سرو موتور با میکرو راه اندازی سرو موتور با میکروکنترلر راه اندازی سروو با avr راه اندازی سروو موتور با AVR سرو موتور برای ربات سروو موتور با avr سروو موتور برای ربات سروو موتور چگونه کار میکند سروو موتور و avr شبیه سازی سروو در پروتئوس کنترل سرو موتور با AVR کنترل سروو موتور با
- ۹۶/۱۰/۰۳