विषयसूची:

सरल रोटरी डिकोडर: 4 कदम
सरल रोटरी डिकोडर: 4 कदम

वीडियो: सरल रोटरी डिकोडर: 4 कदम

वीडियो: सरल रोटरी डिकोडर: 4 कदम
वीडियो: 2 to 4 Decoder Design 2024, नवंबर
Anonim
Image
Image
सरल रोटरी डिकोडर
सरल रोटरी डिकोडर

यह निर्देशयोग्य एक Arduino Uno R3 का उपयोग करके अनुक्रमिक रोटरी एनकोडर को डिकोड करने की एक सरल विधि का वर्णन करता है।

कॉम्पैक्ट सॉफ़्टवेयर रूटीन का उपयोग संक्रमणों की संख्या की गणना करने, संपर्क उछाल को समाप्त करने और रोटेशन की दिशा निर्धारित करने के लिए किया जाता है। अतिरिक्त घटकों और लुकअप टेबल की आवश्यकता नहीं है।

कोड के इंटरप्ट और नॉन-इंटरप्ट संस्करण प्रदान किए गए हैं।

कोड के इंटरप्ट संस्करण के लिए केवल एक इंटरप्ट पिन की आवश्यकता होती है।

इमेजिस:

  • उद्घाटन की तस्वीर असेंबल किए गए एनकोडर को दिखाती है।
  • स्क्रीन शॉट इंटरप्ट संस्करण और गिनती के लिए कोड दिखाता है जब एन्कोडर शाफ्ट को दक्षिणावर्त और काउंटर क्लॉकवाइज घुमाया जाता है।
  • वीडियो तेजी से घूमने के दौरान गिनती दिखाता है।

चरण 1: सर्किट आरेख

सर्किट आरेख
सर्किट आरेख

एनकोडर वायरिंग आरेख चित्र 1 में दिखाया गया है।

जम्पर तारों को सीधे एनकोडर पिन में मिलाया जाता है।

यदि गिनती की दिशा उलट दी जाती है तो दो नीले तारों को आपस में बदल दें।

चरण 2: भागों की सूची

निम्नलिखित भाग https://www.aliexpress.com/ से प्राप्त किए गए थे।

  • 1 USB केबल के साथ केवल Arduino UNO R3।
  • स्विच के साथ 1 केवल अनुक्रमिक रोटरी एन्कोडर (ईसी 11 या समकक्ष)।
  • शाफ्ट के अनुरूप 1 केवल घुंडी।
  • 3 केवल Arduino पुरुष-से-पुरुष जम्पर तार।

चरण 3: सिद्धांत

सिद्धांत
सिद्धांत

अनुक्रमिक रोटरी एनकोडर दो वर्ग-तरंगें उत्पन्न करते हैं जिनमें से प्रत्येक को 90 डिग्री से विस्थापित किया जाता है जैसा कि चित्र 1 में दिखाया गया है।

संपर्क ए और संपर्क बी में तर्क पैटर्न भिन्न होते हैं जब शाफ्ट को दक्षिणावर्त घुमाया जाता है (सीडब्ल्यू) और काउंटर क्लॉकवाइज (सीसीडब्ल्यू) स्थिति 1 से 6 के माध्यम से।

रोटेशन की दिशा निर्धारित करने के सामान्य तरीकों में शामिल हैं:

  • हार्डवेयर
  • जुड़वां व्यवधान
  • पैटर्न लुकअप टेबल

यह प्रोजेक्ट एक सॉफ़्टवेयर पद्धति का उपयोग करता है जिसमें लुकअप टेबल की आवश्यकता नहीं होती है। [1]

दिशा

कॉन्टैक्ट ए और कॉन्टैक्ट बी के आउटपुट पैटर्न को देखने के बजाय कॉन्टैक्ट ए पर ध्यान दें।

यदि हम प्रत्येक संपर्क A संक्रमण के बाद संपर्क B का नमूना लेते हैं तो हम ध्यान दें कि:

  • जब एनकोडर को CW घुमाया जाता है, तो संपर्क A और संपर्क B में विपरीत तर्क स्थितियाँ होती हैं
  • जब एनकोडर को CCW घुमाया जाता है तो संपर्क A और संपर्क B की तर्क स्थिति समान होती है

वास्तविक कोड:

// ----- संक्रमणों की गणना करें

CurrentStateA = StateContactA (); अगर (CurrentStateA!= LastStateA) { CurrentStateB = digitalRead (ContactB); अगर (CurrentStateA == CurrentStateB) काउंट++; अगर (CurrentStateA!= CurrentStateB) गणना--; LastStateA = CurrentStateA; }

यह विधि निम्नलिखित लाभ प्रदान करती है:

  • लुकअप टेबल की आवश्यकता नहीं है
  • केवल एक इंटरप्ट लाइन की आवश्यकता है

debounce

सभी यांत्रिक एन्कोडर "संपर्क उछाल" से ग्रस्त हैं।

यदि कोई स्विच संपर्क सफाई से नहीं बनता/टूटता है तो उसकी तर्क स्थिति उच्च से निम्न तक तेजी से दोलन करेगी जब तक कि स्विच संपर्क व्यवस्थित नहीं हो जाता। इसके परिणामस्वरूप झूठी गिनती होती है।

संपर्क उछाल को दबाने की एक विधि प्रत्येक स्विच संपर्क में एक छोटा संधारित्र जोड़ना है। कैपेसिटर और संबंधित पुल-अप रेसिस्टर एक इंटीग्रेटर बनाते हैं जो प्रभावी रूप से उच्च आवृत्तियों को छोटा करता है और स्विच वोल्टेज को इनायत से बढ़ने/गिरने की अनुमति देता है।

इस दृष्टिकोण का नकारात्मक पक्ष यह है कि यदि एन्कोडर शाफ्ट को तेजी से घुमाया जाता है, तो संक्रमण छूट सकता है।

सॉफ्टवेयर डिबगिंग

यह विधि दो काउंटरों (खुले, बंद) का उपयोग करती है जिन्हें शून्य पर सेट किया गया है। [2]

एक बार संपर्क A पर संक्रमण का पता चलने पर:

  • लगातार मतदान संपर्क ए.
  • जब भी संपर्क A अधिक हो, खुले काउंटर को बढ़ाएँ और बंद काउंटर को रीसेट करें।
  • जब भी संपर्क A कम हो, बंद काउंटर को बढ़ाएँ, और खुले काउंटर को रीसेट करें।
  • लूप से बाहर निकलें जब काउंटरों में से एक पूर्व निर्धारित गिनती तक पहुंच जाए। हम किसी भी संपर्क उछाल के बाद प्रभावी रूप से स्थिर स्थिति की तलाश कर रहे हैं।

वास्तविक कोड:

// ----- डेब्यू संपर्क ए

जबकि (1) { अगर (डिजिटल रीड (संपर्क ए)) {//----- संपर्क ए खुला बंद है = 0; // खाली विपरीत इंटीग्रेटर ओपन ++; // एकीकृत करें अगर (ओपन> मैक्सकाउंट) हाई रिटर्न; } और {//----- संपर्कए बंद खुला है = 0; // खाली विपरीत इंटीग्रेटर बंद ++; // एकीकृत अगर (बंद> मैक्सकाउंट) कम रिटर्न; } }

संपर्क बी को खारिज करने की कोई आवश्यकता नहीं है क्योंकि संपर्क ए और संपर्क बी संक्रमण मेल नहीं खाते हैं।

गिनती

एक यांत्रिक "डिटेंट" आपकी गिनती को प्रभावी रूप से दोगुना कर देता है क्योंकि क्लिक के बीच दो गणनाएँ दर्ज की जाती हैं (अंजीर 1 देखें)।

जैसा कि नीचे दिखाया गया है, मॉड्यूल 2 अंकगणित का उपयोग करके "डिटेंट्स" की संख्या निर्धारित की जा सकती है।

वास्तविक कोड:

// ----- "डिटेंट्स" की गणना करें

अगर (गणना% 2 == 0) { सीरियल.प्रिंट ("गणना:"); Serial.println (गणना / 2); }

संदर्भ

अधिक जानकारी यहां पाई जा सकती है:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

चरण 4: सॉफ्टवेयर

इस परियोजना के लिए Ardino Uno R3 IDE (एकीकृत विकास वातावरण) के हाल के संस्करण की आवश्यकता है जो https://www.arduino.cc/en/main/software से उपलब्ध है।

निम्नलिखित दो Arduino स्केच में से प्रत्येक को डाउनलोड करें (संलग्न)

  • Rotary_encoder_1.ino (मतदान संस्करण)
  • Rotary_encoder_2.no (व्यवधान संस्करण)

अपने पसंदीदा संस्करण पर डबल-क्लिक करें और ऑन-स्क्रीन निर्देशों का पालन करें।

आनंद लेना …

मेरे अन्य अनुदेशों को देखने के लिए यहां क्लिक करें।

सिफारिश की: