سلام دوستان
همون طور که ساعاتی قبل قول داده بودم آموزش راه اندازی پریفرال QEI رو در این تاپیک می نویسم تا مرجعی باشه برای دوستانی که برای کاربرد های مختلف، می خوان از این امکان موجود در LPC1768 استفاده کنند.
این اولین مرتبه هست که دارم یه آموزش رو به صورت مجزا در اینترنت می نویسم. و اگه اشکالی در نوشتار هست به بزرگی خودتون ببخشید. (در این نوشته سعی می کنم تا حد امکان مطلب رو ساده، قدم به قدم و با ذکر مثال خدمتتون عرض کنم.)
QEI به چه درد می خوره؟
QEI مخفف Quadrature Encoder Interface هست. تعریف ساده اون عبارت است از ابزاری که شفت موتور وصل می شه تا نشون بده موتور چند درجه چرخیده.
انکودر ها دو دسته اند:
1- سنسور اثر هال: که اگر حال دارید به فیزیک الکترونیک مراجعه کنید و دربارش بخونید و من واردش نمی شم!
2- انکودرهای نوری: که از 1- یک صفحه واقع واقع بر شفت (با تعدادی سوراخ روی آن)، 2- یک یا دو لیزر و 3- سنسور نوری تشکیل شده. بدین صورت که سوراخ ها روی دیسک قرار دارد. ومنبع و سنسور در دوطرف سوراخ ها با فواصل مشخص ثابت شده اند. و با چرخش شفت و به تبع اون با چرخش دیسکِ متصل به شفت با عبور نور از سوراخ ها و دریافت اون توسط سنسور ها متوجه می شیم که شفت چقدر چرخیده.
توی این لینک می تونین اطلاعات بیشتری در مورد چیستی (!) QEI پیدا کنید:
http://mbed.org/cookbook/QEI
پریفرال QEI سه تا ورودی داره: A, B, index
A و B ورودی های سنسور های نوری هستند که به میکرو اعلام می کنند شفت موتور به اندازه معین چرخیده.
نحوه قرارگیری سوراخ ها این شکلی هست: (مناطق سیاه در دایره کوچک سوراخ های A و مناطق سیاه در دایره بزرگ، سوراخ های B هستند.)
کارکرد ورودی های A و B طبق شکل زیر هست:
اگر در پالس های بالا دقت کنید، متوجه می شید که چطور میکرو تشخیص می ده که جهت چرخش عوض شده. این تغییر جهت، در شکل بالا با عدد منفی یک نشون داده شده است.
در مورد index که سوال شد بایستی عرض کنم که خیلی از اوقات توی سیستم های servo چند بار رفت و برگشت داشته ایم و یا یه جاهایی پالس ها خراب بوده و یا به هر دلیلی پوزیشنر نمی دونه که کجاست؟!
یا این که توی مسیر برگشت، موقعیت منفی شده و می خواهیم یه مرجعی برای پوزیشن صفر، داشته باشیم. می تونیم توی مختصات x مشخص، یه سنسور بگذاریم و اون رو به index وصل کنیم که هر وقت پوزیشنر به اون نقطه رسید یه پالس به میکرو بده و بدون اعمال وقفه، شمارنده موقعیت رو صفر کنه. و از اون جا شمارش آغاز بشه.
البته می شه تنظیمات رو طوی انجام داد که وقتی پوزیشنر به سنسور برسه، وقفه هم اعمال بشه که در این صورت . که خوب بی شباهت با تعریف وقفه خارجی نیست!
به روز رسانی(در مورد سیگنال index):
توی یه سایت خارجکی خوندم:
INDEX REFERENCE/SIGNALیعنی علاوه بر چیز هایی که خدمتتون عرض کردم. می شه یه سنسور گذاشت و به index وصل کرد که به ازای هر دور دیسک انکودر، یه پالس بده!
The index is a is a once-per-rev output used to establish a reference or return to a known starting position. It is a separate output generated by a special track which produces a single cycle (or transition change) at a unique position or positions such as center, home, zero, or reset point. Sometimes referred to as a marker pulse
خوب دیگه من خیلی حرف زدم تا دارم لیوان آب رو می خورم یه صلوات بفرستید.(جدی می گم کارم گیره به خدا)