فهرست مطالب:

رمزگشای ساده روتاری: 4 مرحله
رمزگشای ساده روتاری: 4 مرحله

تصویری: رمزگشای ساده روتاری: 4 مرحله

تصویری: رمزگشای ساده روتاری: 4 مرحله
تصویری: عصب کشی دندان: روش‌ها و اطلاعات کلیدی 2024, نوامبر
Anonim
Image
Image
رمزگشای ساده روتاری
رمزگشای ساده روتاری

این دستورالعمل یک روش ساده برای رمزگشایی رمزگذار دوار متوالی با استفاده از Arduino Uno R3 را شرح می دهد.

برنامه های نرم افزاری جمع و جور برای شمارش تعداد تغییرات ، حذف گزاف گویی تماس و تعیین جهت چرخش استفاده می شود. اجزای اضافی و جداول جستجوی مورد نیاز نیست.

نسخه های وقفه و بدون وقفه کد ارائه شده است.

نسخه وقفه کد فقط به یک پین وقفه نیاز دارد.

تصاویر:

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

مرحله 1: نمودار مدار

مدار
مدار

نمودار سیم کشی رمزگذار در شکل 1 نشان داده شده است.

سیم های بلوز مستقیماً به پین های رمزگذار لحیم می شوند.

اگر جهت شمارش معکوس شد ، دو سیم آبی را عوض کنید.

مرحله 2: لیست قطعات

قسمت های زیر از https://www.aliexpress.com/ تهیه شده است

  • فقط 1 آردوینو UNO R3 با کابل USB.
  • فقط 1 رمزگذار چرخشی متوالی (EC11 یا معادل آن) با سوئیچ.
  • 1 عدد دستگیره مناسب شفت
  • فقط 3 سیم جهنده مرد به مرد آردوینو.

مرحله 3: نظریه

تئوری
تئوری

رمزگذارهای چرخشی متوالی دو موج مربعی ایجاد می کنند که هر کدام 90 درجه جابجا می شوند ، همانطور که در شکل 1 نشان داده شده است.

الگوهای منطقی در تماس A و B زمانی متفاوت است که شفت در جهت عقربه های ساعت (CW) و در جهت عقربه های ساعت (CCW) در موقعیت های 1 تا 6 بچرخد.

روشهای متداول برای تعیین جهت چرخش عبارتند از:

  • سخت افزار
  • وقفه های دوقلو
  • جداول جستجوی الگو

این پروژه از یک روش نرم افزاری استفاده می کند که نیازی به جداول جستجو ندارد. [1]

جهت

به جای نگاه کردن به الگوهای خروجی از مخاطبین A و B ، روی تماس A تمرکز کنیم.

اگر از مخاطب B بعد از هر انتقال A نمونه بگیریم ، توجه داشته باشید که:

  • هنگام چرخاندن رمزگذار CW ، مخاطب A و B دارای حالت منطقی متضادی هستند
  • هنگام چرخاندن رمزگذار به صورت CCW ، مخاطب A و B دارای حالت منطقی یکسانی هستند

کد واقعی:

// ----- شمارش انتقال ها

CurrentStateA = stateContactA ()؛ if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB) ؛ if (CurrentStateA == CurrentStateB) تعداد ++ ؛ if (CurrentStateA! = CurrentStateB) تعداد-- ؛ LastStateA = CurrentStateA ؛ }

این روش مزایای زیر را ارائه می دهد:

  • جداول جستجوی مورد نیاز نیست
  • فقط یک خط وقفه واحد مورد نیاز است

انصراف دادن

همه رمزگذارهای مکانیکی از "گزاف گویی تماس" رنج می برند.

اگر یک سوئیچ کنتاکت نکند/کاملاً تمیز نشود ، حالت منطقی آن به سرعت از HIGH به LOW نوسان می کند تا زمانی که تماس سوئیچ حل شود. این منجر به شمارش اشتباه می شود.

یک روش برای سرکوب گزاف گویی تماس ، افزودن یک خازن کوچک در هر تماس سوئیچ است. خازن و مقاومت کششی مرتبط با آن یک یکپارچه را تشکیل می دهند که به طور م frequثر فرکانس های بالا را کوتاه می کند و به ولتاژ سوئیچ اجازه می دهد تا به طرز دلپذیری بالا/پایین برود.

جنبه منفی این روش این است که اگر محور رمزگذار به سرعت بچرخد ، ممکن است تغییرات را از دست بدهد.

انصراف نرم افزار

این روش از دو شمارنده (باز ، بسته) استفاده می کند که روی صفر تنظیم شده اند. [2]

هنگامی که یک انتقال در مخاطب A تشخیص داده می شود:

  • نظرسنجی مداوم تماس با A
  • هرگاه تماس A بالا باشد ، شمارنده باز را افزایش دهید و شمارنده بسته را بازنشانی کنید.
  • هر زمان که تماس A LOW باشد ، شمارنده بسته را افزایش دهید ، و شمارنده باز را بازنشانی کنید.
  • هنگامی که یکی از شمارنده ها به تعداد از پیش تعیین شده برسد ، از حلقه خارج شوید. ما عملاً بدنبال دوره حالت پایدار به دنبال هرگونه جهش تماس هستیم.

کد واقعی:

// ----- Debounce Contact A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA باز است بسته = 0 ؛ // یکپارچه کننده مقابل خالی Open ++؛ // ادغام if (باز کردن> MaxCount) بازگشت HIGH؛ } else {// ----- ContactA بسته است = 0؛ // یکپارچه کننده خالی مقابل Closed ++؛ // ادغام if (Closed> MaxCount) بازگشت LOW؛ }}

نیازی به لغو تماس B نیست زیرا انتقال A و Contact B با هم منطبق نیستند.

با احتساب

یک "مهار" مکانیکی به طور م countثر تعداد شما را دو برابر می کند زیرا دو تعداد بین کلیک ها ثبت می شود (شکل 1 را ببینید).

تعداد "بازداشت کننده ها" را می توان با استفاده از حساب modulo 2 تعیین کرد که در زیر نشان داده شده است.

کد واقعی:

// ----- شمارش "بازداشت شدگان"

if (تعداد٪ 2 == 0) {Serial.print ("Count:")؛ Serial.println (تعداد / 2) ؛ }

منابع

اطلاعات بیشتر را می توان در آدرس زیر یافت:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

مرحله 4: نرم افزار

این پروژه به نسخه جدیدی از Ardino Uno R3 IDE (محیط توسعه یکپارچه) نیاز دارد که از https://www.arduino.cc/fa/main/software در دسترس است.

هر یک از دو طرح زیر آردوینو (پیوست شده) را بارگیری کنید

  • rotary_encoder_1.ino (نسخه نظرسنجی)
  • rotary_encoder_2.no (نسخه وقفه)

روی نسخه دلخواه خود دوبار کلیک کنید و دستورالعمل های روی صفحه را دنبال کنید.

لذت بردن …

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

توصیه شده: