- रोटरी एनकोडर और इसके प्रकार
- KY-040 रोटरी एनकोडर पिनआउट और विवरण
- रोटरी एनकोडर कैसे काम करता है
- अवयव आवश्यक
- PIC16F877A रोटरी एनकोडर इंटरफेसिंग सर्किट आरेख
- कोड स्पष्टीकरण
एक रोटरी एनकोडर एक इनपुट डिवाइस है जो उपयोगकर्ता को सिस्टम के साथ बातचीत करने में मदद करता है। यह एक रेडियो पोटेंशियोमीटर की तरह अधिक दिखता है लेकिन यह दालों की एक ट्रेन का उत्पादन करता है जो इसके अनुप्रयोग को अद्वितीय बनाता है। जब एनकोडर के नॉब को घुमाया जाता है तो यह छोटे चरणों के रूप में घूमता है जो इसे स्टेपर / सर्वो मोटर नियंत्रण के लिए उपयोग करने में मदद करता है, मेनू के अनुक्रम के माध्यम से नेविगेट करता है और एक संख्या के मूल्य को बढ़ाता / घटाता है और बहुत कुछ।
इस लेख में, हम विभिन्न प्रकार के रोटरी एनकोडर के बारे में जानेंगे और यह कैसे काम करेगा । हम इसे PIC माइक्रोकंट्रोलर PIC16F877A के साथ भी इंटरफेस करेंगे और एनकोडर को घुमाकर एक पूर्णांक के मूल्य को नियंत्रित करेंगे और 16 * 2 एलसीडी स्क्रीन पर इसके मूल्य को प्रदर्शित करेंगे। इस ट्यूटोरियल के अंत में, आप अपनी परियोजनाओं के लिए रोटरी एनकोडर का उपयोग करने में सहज होंगे। तो चलो शुरू करते है…
रोटरी एनकोडर और इसके प्रकार
रोटरी एनकोडर को अक्सर शाफ्ट एनकोडर कहा जाता है । यह एक इलेक्ट्रोमैकेनिकल ट्रांसड्यूसर है, जिसका अर्थ है कि यह यांत्रिक आंदोलनों को इलेक्ट्रॉनिक दालों में परिवर्तित करता है या दूसरे शब्दों में यह कोणीय स्थिति या गति या शाफ्ट स्थिति को एक डिजिटल या एनालॉग सिग्नल में परिवर्तित करता है। इसमें एक घुंडी होती है जो जब घूमती है तो चरण दर चरण आगे बढ़ती है और प्रत्येक चरण के लिए पूर्व-परिभाषित चौड़ाई के साथ पल्स ट्रेनों का एक क्रम उत्पन्न करती है।
बाजार में कई प्रकार के रोटरी एनकोडर हैं, जो डिजाइनर अपने आवेदन के अनुसार चुन सकते हैं। सबसे सामान्य प्रकार नीचे सूचीबद्ध हैं
- वृद्धिशील एनकोडर
- पूर्ण एनकोडर
- चुंबकीय एनकोडर
- ऑप्टिकल एनकोडर
- लेजर एनकोडर
इन एन्कोडर्स को आउटपुट सिग्नल और सेंसिंग टेक्नोलॉजी के आधार पर वर्गीकृत किया गया है, इंक्रीमेंटल एनकोडर और एब्सोल्यूट एनकोडर्स को आउटपुट सिग्नल के आधार पर वर्गीकृत किया गया है और मैग्नेटिक, ऑप्टिकल और लेजर एनकोडर को सेंसिंग टेक्नोलॉजी के आधार पर वर्गीकृत किया गया है। एनकोडर यहां इस्तेमाल एक वृद्धिशील प्रकार एनकोडर है ।
निरपेक्ष एनकोडर पॉवर हटाए जाने के बाद भी पोजीशन की जानकारी को स्टोर करता है, और पोज़िशन की जानकारी तब मिलेगी जब हम फिर से पॉवर अप्लाई करेंगे।
अन्य बुनियादी प्रकार, वृद्धिशील एनकोडर डेटा प्रदान करता है जब एनकोडर अपनी स्थिति बदलता है। यह स्थिति की जानकारी संग्रहीत नहीं कर सका।
KY-040 रोटरी एनकोडर पिनआउट और विवरण
के pinouts KY-040 इंक्रीमेंटल टाइप रोटरी एनकोडर नीचे दिखाया गया है। इस परियोजना में, हम इस रोटरी एनकोडर को माइक्रोचिप से लोकप्रिय माइक्रोकंट्रोलर PIC16F877A से जोड़ेंगे।
एनकोडर को पावर देने के लिए पहले दो पिन (ग्राउंड और वीसीसी) का उपयोग किया जाता है, आमतौर पर + 5 वी आपूर्ति का उपयोग किया जाता है। नॉब और घड़ी की दिशा में एंटी-क्लॉकवाइज दिशा में घुमाने के अलावा, एनकोडर में एक स्विच (एक्टिव लो) भी होता है जिसे नॉब को अंदर दबाकर दबाया जा सकता है। इस स्विच से संकेत पिन 3 (एसडब्ल्यू) के माध्यम से प्राप्त किया जाता है। अंत में इसमें दो आउटपुट पिंस (DT और CLK) हैं जो पहले से ही चर्चा के अनुसार तरंगों का उत्पादन करते हैं। हमने इस रोटरी एनकोडर को पहले Arduino के साथ हस्तक्षेप किया है।
रोटरी एनकोडर कैसे काम करता है
आउटपुट पूरी तरह से आंतरिक तांबा पैड पर निर्भर करता है जो शाफ्ट के साथ जीएनडी और वीसीसी के साथ कनेक्शन प्रदान करता है।
रोटरी एनकोडर के दो भाग हैं। शाफ्ट व्हील जो शाफ्ट के साथ जुड़ा हुआ है और शाफ्ट के रोटेशन के आधार पर क्लॉकवाइज या एंटी-क्लॉकवाइज घुमाता है, और आधार जहां विद्युत कनेक्शन किया जाता है। आधार में पोर्ट या पॉइंट होते हैं जो डीटी या सीएलके से इस तरह से जुड़ा होता है कि जब शाफ्ट व्हील घूमता है, तो यह बेस पॉइंट्स को कनेक्ट करेगा और डीटी और सीएलके पोर्ट दोनों पर स्क्वायर वेव प्रदान करेगा।
उत्पादन तब होगा जब शाफ्ट घूमेगा-
दो बंदरगाह वर्ग तरंग प्रदान करते हैं लेकिन समय में थोड़ा अंतर होता है। इसके कारण, यदि हम आउटपुट को 1 और 0 के रूप में स्वीकार करते हैं, तो केवल चार राज्य हो सकते हैं, 0 0, 1 0, 1 1, 0 1. बाइनरी आउटपुट का अनुक्रम क्लॉकवाइज़ टर्न या एंटी-क्लॉकवाइज़ टर्न निर्धारित करता है। उदाहरण के लिए, अगर रोटरी एनकोडर निष्क्रिय स्थिति में 1 0 प्रदान करता है और उसके बाद 1 1 प्रदान करता है, तो इसका मतलब है कि एनकोडर परिवर्तन यह घड़ी की दिशा में एक कदम है, लेकिन अगर यह निष्क्रिय 0 1 के बाद 0 0 प्रदान कर रहा है, इसका मतलब है कि शाफ्ट एक कदम के साथ एंटी-क्लॉकवाइज दिशा में अपनी स्थिति बदल रही है।
अवयव आवश्यक
यह समय की पहचान करने की आवश्यकता है कि हमें PIC माइक्रोकंट्रोलर के साथ रोटरी एनकोडर को इंटरफ़ेस करने की आवश्यकता क्या है,
- PIC16F877A
- 4.7k रोकनेवाला
- 1k रोकनेवाला
- 10k पॉट
- 33 पीएफ सिरेमिक डिस्क कैपेसिटर - 2 पीसी
- 20Mhz क्रिस्टल
- 16x2 डिस्प्ले
- रोटरी कोडित्र
- 5V एडाप्टर।
- ब्रेड बोर्ड
- हुकअप तार।
PIC16F877A रोटरी एनकोडर इंटरफेसिंग सर्किट आरेख
सर्किट डायग्राम के अनुसार घटकों को जोड़ने के बाद अंतिम सेटअप की तस्वीर नीचे दी गई है:
हमने एक पोटेंशियोमीटर का उपयोग करने के बजाय एलसीडी के विपरीत एक एकल 1K अवरोधक का उपयोग किया है। इसके अलावा, अंत में दिए गए पूर्ण कार्य वीडियो की जांच करें ।
कोड स्पष्टीकरण
इस परियोजना के अंत में एक प्रदर्शन वीडियो के साथ पूरा PIC कोड दिया गया है, यहां हम कोड के कुछ महत्वपूर्ण भागों के बारे में बता रहे हैं। यदि आप PIC माइक्रोकंट्रोलर के साथ नए हैं तो शुरू से ही हमारे PIC ट्यूटोरियल का पालन करें।
जैसा कि हमने पहले चर्चा की, हमें आउटपुट की जांच करने और डीटी और सीएलके दोनों के लिए बाइनरी आउटपुट को अलग करने की आवश्यकता है, इसलिए हमने ऑपरेशन के लिए एक और- हिस्सा बनाया ।
if (एनकोडर_CLK! = स्थिति) { if (एनकोडर_डीटी! = स्थिति) { // lcd_com (0x01); काउंटर ++; // उस काउंटर को बढ़ाएं जो एलसीडी lcd_com (0xC0) पर मुद्रित किया जाएगा ; lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, काउंटर); } और { // lcd_com (0x01); lcd_com (0xC0); काउंटर--; // काउंटर में कमी करें lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, काउंटर); // lcd_puts ("वाम"); } }
हमें प्रत्येक चरण पर स्थिति को संग्रहीत करने की भी आवश्यकता है । ऐसा करने के लिए, हमने एक चर "स्थिति" का उपयोग किया जो वर्तमान स्थिति को संग्रहीत करता है।
स्थिति = एनकोडर_सीएलके; // यह चर पर एनकोडर घड़ी की स्थिति को संग्रहीत करना है। 0 या 1 हो सकता है।
इसके अलावा एलसीडी पर स्विच प्रेस के बारे में सूचित करने के लिए एक विकल्प प्रदान किया जाता है ।
if (एनकोडर_SW == 0) { sw_delayms (20); // बहस में देरी अगर (एनकोडर_एसडब्ल्यू == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("स्विच दबाया गया"); // इटोआ (काउंटर, मूल्य, 10); // lcd_puts (मूल्य);
System_init समारोह पिन मैं / हे आपरेशन, एलसीडी प्रारंभ करने और रोटरी एनकोडर स्थिति स्टोर करने के लिए प्रयोग किया जाता है।
void system_init () { TRISB = 0x00; // PORT B आउटपुट के रूप में, इस पोर्ट का उपयोग LCD TRISDbits.TRISD2 = 1 के लिए किया जाता है ; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // यह एलसीडी पोजीशन = एनकोडर_CLK को इनिशियलाइज़ करेगा ; // लूप शुरू होने से पहले सिस्टम इनिट पर सीएलके पोजिशन को सॉर्ट कर दिया। }
LCD फ़ंक्शन को lcd.c और lcd.h लाइब्रेरी पर लिखा जाता है, जहाँ lcd_puts (), lcd_cmd () घोषित किए जाते हैं।
चर घोषणा, कॉन्फ़िगरेशन बिट्स और अन्य कोड स्निपेट के लिए, कृपया नीचे पूर्ण कोड खोजें।