جدول المحتويات:

وحدة فك الشفرة الدوارة البسيطة: 4 خطوات
وحدة فك الشفرة الدوارة البسيطة: 4 خطوات

فيديو: وحدة فك الشفرة الدوارة البسيطة: 4 خطوات

فيديو: وحدة فك الشفرة الدوارة البسيطة: 4 خطوات
فيديو: شرطي يشرح طريقة فتح نافذة السيارة في حال نسيت المفتاح بالداخل #shorts 2024, شهر نوفمبر
Anonim
Image
Image
فك الروتاري البسيط
فك الروتاري البسيط

يصف هذا التوجيه طريقة بسيطة لفك تشفير المشفر الدوار المتسلسل باستخدام Arduino Uno R3.

تُستخدم إجراءات البرامج المدمجة لحساب عدد الانتقالات ، والقضاء على ارتداد التلامس ، وتحديد اتجاه الدوران. المكونات الإضافية وجداول البحث غير مطلوبة.

يتم توفير إصدارات المقاطعة وغير المقاطعة من التعليمات البرمجية.

إصدار المقاطعة من الكود لا يتطلب سوى دبوس مقاطعة واحد.

الصور:

  • تُظهر الصورة الافتتاحية برنامج التشفير المُجمَّع.
  • تُظهر لقطة الشاشة رمز إصدار المقاطعة والعدد عند تدوير عمود التشفير في اتجاه عقارب الساعة وعكس اتجاه عقارب الساعة.
  • يُظهر الفيديو العدد أثناء الدوران السريع.

الخطوة 1: مخطط الدائرة

مخطط الرسم البياني
مخطط الرسم البياني

يظهر مخطط الأسلاك المشفر في الشكل 1.

يتم لحام أسلاك العبور مباشرة إلى دبابيس التشفير.

قم بتبديل السلكين الأزرقين إذا تم عكس اتجاه العد.

الخطوة 2: قائمة الأجزاء

تم الحصول على الأجزاء التالية من

  • 1 فقط Arduino UNO R3 مع كابل USB.
  • 1 مشفر دوار متسلسل فقط (EC11 أو ما يعادله) مع مفتاح.
  • 1 مقبض فقط يناسب العمود.
  • 3 فقط أسلاك توصيل أردوينو من الذكور إلى الذكور.

الخطوة الثالثة: النظرية

نظرية
نظرية

تولد المشفرات الدوارة المتسلسلة موجتين مربعتين يتم إزاحة كل منهما بمقدار 90 درجة كما هو موضح في الشكل 1.

تختلف الأنماط المنطقية في جهة الاتصال A و Contact B عندما يتم تدوير العمود في اتجاه عقارب الساعة (CW) وعكس اتجاه عقارب الساعة (CCW) من خلال المواضع من 1 إلى 6.

تتضمن الطرق الشائعة لتحديد اتجاه الدوران ما يلي:

  • المعدات
  • المقاطعات التوأم
  • جداول البحث عن الأنماط

يستخدم هذا المشروع طريقة برمجية لا تتطلب جداول بحث. [1]

اتجاه

بدلاً من النظر إلى أنماط الإخراج من جهة الاتصال أ والاتصال ب ، فلنركز على جهة الاتصال أ.

إذا أخذنا عينة جهة الاتصال "ب" بعد كل انتقال لجهة اتصال "أ" ، فإننا نلاحظ ما يلي:

  • يحتوي كل من جهة الاتصال A والاتصال B على حالات منطقية معاكسة عند تدوير المشفر CW
  • يكون لجهة الاتصال A والاتصال B نفس الحالة المنطقية عندما يتم تدوير المشفر باستخدام CCW

الكود الفعلي:

// ----- عدد الانتقالات

CurrentStateA = stateContactA () ، if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB) ؛ إذا (CurrentStateA == CurrentStateB) Count ++ ؛ إذا (CurrentStateA! = CurrentStateB) Count-- ؛ LastStateA = CurrentStateA ؛ }

تقدم هذه الطريقة المزايا التالية:

  • جداول البحث غير مطلوبة
  • مطلوب فقط خط مقاطعة واحد

تنازل

تعاني جميع أجهزة التشفير الميكانيكية من "ارتداد التلامس".

إذا لم ينكسر اتصال المحول بشكل نظيف ، فستتأرجح حالته المنطقية بسرعة من HIGH إلى LOW حتى يستقر مفتاح الاتصال. ينتج عن هذا التهم الخاطئة.

تتمثل إحدى طرق منع ارتداد التلامس في إضافة مكثف صغير عبر كل جهة اتصال للمفتاح. يشكل المكثف ومقاوم السحب المرتبط به مكاملاً يعمل على تقليص الترددات العالية بشكل فعال ويسمح لجهد المفتاح بالارتفاع / الانخفاض بأمان.

الجانب السلبي لهذا النهج هو أنه قد يتم تفويت الانتقالات إذا تم تدوير عمود التشفير بسرعة.

برنامج Debouncing

تستخدم هذه الطريقة عدادين (مفتوح ، مغلق) تم ضبطهما على الصفر. [2]

بمجرد اكتشاف انتقال على جهة الاتصال أ:

  • استطلاع مستمر اتصل أ.
  • قم بزيادة العداد المفتوح ، وأعد ضبط العداد المغلق ، عندما تكون جهة الاتصال A عالية.
  • قم بزيادة العداد المغلق ، وأعد ضبط العداد المفتوح ، عندما تكون جهة الاتصال A منخفضة.
  • اخرج من الحلقة عندما يصل أحد العدادات إلى عدد محدد مسبقًا. نحن نبحث بشكل فعال عن فترة الحالة المستقرة بعد ارتداد أي جهة اتصال.

الكود الفعلي:

// ----- Debounce Contact أ

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0 ؛ // إفراغ المُدمج المعاكس Open ++ ؛ // تكامل إذا كان (Open> MaxCount) يعود بدرجة عالية ؛ } else {// ----- ContactA مغلق مفتوح = 0 ؛ // فارغ مقابل التكامل مغلق ++ ؛ // تكامل إذا كان (مغلق> MaxCount) يعود LOW ؛ }}

ليست هناك حاجة للتخلي عن جهة الاتصال B لأن انتقالات جهة الاتصال "أ" و "جهة الاتصال ب" لا تتطابق.

عد

يعمل "الكاشف" الميكانيكي على مضاعفة العدد بشكل فعال حيث يتم تسجيل عددين بين النقرات (انظر الشكل 1).

يمكن تحديد عدد "الكوابح" باستخدام طريقة الحساب 2 كما هو موضح أدناه.

الكود الفعلي:

// ----- عد "وسائل الاحتجاز"

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

مراجع

يمكن العثور على مزيد من المعلومات على:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof …

الخطوة 4: البرمجيات

يتطلب هذا المشروع إصدارًا حديثًا من Ardino Uno R3 IDE (بيئة تطوير متكاملة) وهو متاح من

قم بتنزيل كل من رسومات Arduino التالية (مرفقة)

  • rotary_encoder_1.ino (نسخة الاقتراع)
  • rotary_encoder_2.no (إصدار المقاطعة)

انقر نقرًا مزدوجًا فوق الإصدار المفضل لديك واتبع التعليمات التي تظهر على الشاشة.

يتمتع …

انقر هنا لعرض التعليمات الأخرى الخاصة بي.

موصى به: