ردیابی حرکت چرخشی | قسمت سی و ششم آموزش آردوینو

9 بازدید
۱۴۰۴-۰۶-۲۰
5 دقیقه
  • نویسنده: Arduino captain
  • درباره نویسنده: من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!

در قسمت سی و پنجم از آموزش آردوینو به بررسی اندازه‌گیری دما و خواندن تگ‌های RFID (NFC) پرداختیم. در این قسمت قصد داریم درباره ردیابی حرکت چرخشی و ردیابی حرکت چرخشی در اسکچ با استفاده از وقفه‌ها صحبت کنیم.

ردیابی حرکت چرخشی

فرض می‌کنید می‌خواهید چرخش چیزی را اندازه‌گیری و نمایش دهید تا سرعت و جهت آن را ردیابی کنید.

برای حس‌کردن حرکت چرخشی می‌توانید از یک انکودر چرخشی (Rotary Encoder) استفاده کنید که به شیء موردنظر برای ردیابی متصل می‌شود.

انکودر را همان‌طور که در شکل 1 نشان داده شده است، وصل کنید.

ردیابی حرکت چرخشی | قسمت سی و ششم آموزش آردوینو

شکل 1: انکودر چرخشی

مقدمه‌ای بر ردیابی حرکت چرخشی با انکودر

یک انکودر چرخشی هنگام چرخاندن، دو سیگنال تولید می‌کند. هر دو سیگنال با چرخش شفت بین HIGH و LOW تغییر می‌کنند، اما این سیگنال‌ها کمی از نظر فاز با هم اختلاف دارند.

اگر نقطه‌ای را که یکی از سیگنال‌ها از HIGH به LOW تغییر می‌کند شناسایی کنید، وضعیت پین دیگر (این‌که در حالت HIGH است یا LOW) به شما نشان می‌دهد که shaft در کدام جهت در حال چرخش است.

بنابراین، اولین خط کد تابع loop یکی از پین‌های انکودر را می‌خواند:

آموزش میکروکنترلر STM32 قسمت هفتم: رابط سریال UART

سپس این مقدار و مقدار قبلی را بررسی می‌کند تا ببیند آیا مقدار جدید به LOW تغییر کرده است یا نه.

 اگر این‌طور نباشد، کد بلوک بعدی را اجرا نمی‌کند و به انتهای loop می‌رود، مقداری را که تازه خوانده در encoderALast ذخیره می‌کند و دوباره از ابتدا برای گرفتن یک خوانش جدید برمی‌گردد.

وقتی عبارت زیر true باشد:

کد، پین دیگر انکودر را می‌خواند و بسته به مقدار بازگشتی، encoderPos را یکی افزایش یا کاهش می‌دهد. سپس زاویه‌ی shaft را محاسبه می‌کند (با درنظرگرفتن 0 به‌عنوان نقطه‌ای که shaft هنگام شروع اجرای کد در آن قرار داشته است). در نهایت، مقادیر را از طریق پورت سریال ارسال می‌کند تا بتوانید آن را در Serial Monitor مشاهده کنید.

انکودرها با دقت‌های مختلفی عرضه می‌شوند که برحسب تعداد پله در هر دور بیان می‌شود. این مقدار نشان می‌دهد که در یک دور کاملshaft ، سیگنال چند بار بین HIGH و LOW جابه‌جا می‌شود. این مقادیر می‌توانند از ۱۶ تا ۱۰۰۰ متغیر باشند. مقادیر بالاتر، حرکات کوچک‌تر را تشخیص می‌دهند و این نوع انکودرها بسیار گران‌تر هستند. مقدار مربوط به انکودر در کد به‌صورت ثابت hard-coded در کد زیر نوشته شده است:

اگر انکودر شما متفاوت باشد، لازم است آن مقدار را تغییر دهید تا مقادیر زاویه به‌درستی محاسبه شوند.

اگر مقادیری که دریافت می‌کنید بالا و پایین نروند و صرفاً بدون توجه به جهت چرخش انکودر افزایش پیدا کنند، سعی کنید بررسی را روی لبه صعودی (rising edge) به‌جای لبه نزولی (falling edge) انجام دهید. مقدارهای LOW و HIGH را در کدی که مقادیر را بررسی می‌کند جابه‌جا کنید تا به این شکل شود:

خواندن انکودر با استفاده از polling

انکودرهای چرخشی فقط یک سیگنال افزایش/کاهش تولید می‌کنند و نمی‌توانند مستقیماً زاویه shaft را به شما بدهند. کد این زاویه را محاسبه می‌کند، اما هر بار نسبت به موقعیت شروع در ابتدای اجرای کد خواهد بود. کد پین‌ها را با polling (بررسی مداوم مقدار آن‌ها) مانیتور می‌کند. هیچ تضمینی وجود ندارد که پین‌ها از آخرین باری که کد مقدارشان را بررسی کرده تغییر نکرده باشند، بنابراین اگر کد کارهای دیگری هم انجام دهد و انکودر خیلی سریع چرخانده شود، ممکن است بعضی از پله‌ها از دست بروند. این موضوع برای انکودرهای با دقت بالا بیشتر رخ می‌دهد، چون این انکودرها هنگام چرخش سیگنال‌ها را با فرکانس بالاتری ارسال می‌کنند.

آردوینو چیست؟ + بررسی انواع برد آردوینو | قسمت اول آموزش آردوینو

برای محاسبه سرعت، باید تعداد قدم‌هایی را که در یک جهت مشخص در یک زمان معین ثبت می‌شوند، بشمارید.

ردیابی حرکت چرخشی در اسکچ با استفاده از وقفه‌ها

با گسترش کد و انجام کارهای دیگر علاوه بر خواندن انکودر، یا اگر بخواهید بیش از یک انکودر را بخوانید، خواهید دید که خوانش‌های شما از انکودر شروع به غیر قابل ‌اعتماد شدن می‌کنند. این مشکل به‌ویژه زمانی که shaft با سرعت زیاد می‌چرخد، شدیدتر است.

ما از یک کتابخانه استفاده خواهیم کرد که برای خواندن انکودرهای چرخشی بهینه شده است. این کتابخانه از قابلیت‌های وقفه‌ی آردوینو استفاده می‌کند تا به تغییرات وضعیت پایه‌ها سریع پاسخ دهد. از مدیر کتابخانه‌ها برای نصب کتابخانه‌ی Encoder نوشته‌ی Paul Stoffregen استفاده کنید و اسکچ زیر را اجرا کنید:

وقتی کد شما کارهای بیشتری برای انجام‌دادن دارد، پین‌های انکودر کمتر بررسی می‌شوند. اگر پین‌ها یک تغییر کامل مرحله‌ای را پشت سر بگذارند قبل از اینکه خوانده شوند، آردوینو آن مرحله را تشخیص نخواهد داد. چرخاندن سریع shaft باعث ایجاد خطاهای بیشتر می‌شود، زیرا مراحل سریع‌تر رخ می‌دهند.

ردیابی حرکت چرخشی با وقفه‌ها و کتابخانه Encoder

برای اطمینان از اینکه کد هر بار که یک مرحله رخ می‌دهد پاسخ می‌دهد، باید از وقفه‌ها استفاده کنید. زمانی که شرط وقفه رخ دهد (مثلاً تغییر وضعیت یک پین)، کد از هر جایی که باشد پرش می‌کند، وقفه را پردازش می‌کند و سپس به همان جایی که بود بازمی‌گردد و ادامه می‌دهد. کتابخانه‌ی Encoder بهترین عملکرد را با پین‌هایی دارد که از وقفه‌های سخت‌افزاری پشتیبانی می‌کنند، اما حتی با پین‌هایی که این پشتیبانی را ندارند هم بهترین عملکرد ممکن را ارائه می‌دهد.

هنگ کردن اسیلوسکوپ دیجیتال Hantek + روش رفع هنگ

در آردوینو Uno و سایر بردهای مبتنی بر ATmega328، تنها دو پین می‌توانند به‌عنوان وقفه استفاده شوند: پین‌های ۲ و ۳. فهرستی از پین‌های پشتیبانی‌شده در بردهای خاص را مشاهده کنید. یک انکودر چرخشی را با کد زیر اعلام و مقداردهی اولیه می‌کنید:

پارامترهای مقداردهی اولیه‌ی Encoder دو پین (یا پایه‌ای) هستند که انکودر به آن‌ها متصل شده است. اگر متوجه شدید که مقدار انکودر در حالی کاهش می‌یابد که انتظار افزایش دارید، می‌توانید آرگومان‌ها را جابه‌جا کنید یا سیم‌کشی خود را تغییر دهید. پس از مقداردهی اولیه‌ی انکودر، هر زمان که انکودر را بچرخانید، برنامه برای لحظه‌ای متوقف شده و وقفه ایجاد می‌شود تا حرکت را دنبال کند. شما می‌توانید در هر زمانی مقدار آن را با ‎myEnc.read()‎ بخوانید.

شما می‌توانید به اندازه‌ی تعداد پین‌هایتان انکودر ایجاد کنید، اما هر زمان که امکان دارد، از پین‌هایی استفاده کنید که از وقفه‌ها پشتیبانی می‌کنند. اسکچ زیر دو انکودر را مدیریت خواهد کرد و به طور بهینه روی بردی که می‌تواند وقفه‌ها را روی پین‌های انتخاب‌شده پشتیبانی کند، مانند بردهای مبتنی بر SAMD21 مانند Adafruit Metro M0 ،SparkFun RedBoard Turbo و Arduino Zero، کار خواهد کرد. اگر از برد دیگری استفاده می‌کنید، ممکن است لازم باشد از پین‌های متفاوتی استفاده کنید. برد Uno و سایر بردهای مبتنی بر ATmega328 تنها وقفه‌ها را روی پین‌های ۲ و ۳ پشتیبانی می‌کنند، بنابراین کیفیت خواندن‌ها برای انکودر دوم صرف‌نظر از اینکه کدام پین‌ها را انتخاب کنید، کاهش خواهد یافت.

آردوینو MKR Vidor 4000 شامل یک FPGA است که می‌تواند انکودر چرخشی را با دقت بسیار بیشتری نسبت به خودِ آردوینو بخواند.

اطلاعات
9
0
0
لینک و اشتراک
جلسات دیگر
آردوینو

اندازه‌گیری دما + خواندن تگ‌های RFID (NFC) |...

profile

نویسنده: Arduino captain

متخصص الکترونیک

من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!


ویراستار: محمد کبیر
مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

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

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ
سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله