एक सामान्य विशेषता जो लगभग हर एम्बेडेड एप्लिकेशन में उपयोग की जाती है, वह ADC मॉड्यूल (एनालॉग से डिजिटल कनवर्टर) है। डिजिटल एनालॉग के ये एनालॉग टेम्प्रेचर सेंसर जैसे टेम्परेचर सेंसर, टिल्ट सेंसर, करंट सेंसर, फ्लेक्स सेंसर और भी बहुत कुछ से वोल्टेज पढ़ सकते हैं। इसलिए इस ट्यूटोरियल में हम सीखेंगे कि MSP430G2 में ADC का उपयोग कैसे करें एनर्जिया आईडीई का उपयोग करके एनालॉग वोल्टेज को पढ़ें । हम MSP बोर्ड में एक छोटे से पोटेंशियोमीटर को इंटरफ़ेस करेंगे और एक एनालॉग पिन को एक अलग वोल्टेज की आपूर्ति करेंगे, वोल्टेज को पढ़ेंगे और इसे सीरियल मॉनिटर पर प्रदर्शित करेंगे।
एडीसी मॉड्यूल को समझना:
मेरा विश्वास करो, एनालॉग वोल्टेज को पढ़ने के लिए MSP430G2 को जोड़ने और प्रोग्राम करने में मुश्किल से 10 मिनट का समय लगेगा। लेकिन, आइए हम एमएसपी बोर्ड में एडीसी मॉड्यूल को समझने में कुछ समय बिताएं ताकि हम आने वाली सभी परियोजनाओं में इसका प्रभावी ढंग से उपयोग कर सकें।
एक माइक्रोकंट्रोलर एक डिजिटल उपकरण है, जिसका अर्थ है कि यह केवल 1 और 0 को समझ सकता है। लेकिन वास्तविक दुनिया में, तापमान, आर्द्रता, हवा की गति आदि लगभग सभी चीजें प्रकृति में अनुरूप हैं। इन एनालॉग परिवर्तनों के साथ बातचीत करने के लिए, माइक्रोकंट्रोलर ADC नामक एक मॉड्यूल का उपयोग करता है। कई अलग-अलग प्रकार के एडीसी मॉड्यूल उपलब्ध हैं, हमारे एमएसपी में इस्तेमाल किया जाने वाला एसएआर 8 चैनल 10-बिट एडीसी है।
क्रमिक अनुमोदन (एसएआर) एडीसी: एसएआर एडीसी एक तुलनित्र और कुछ तर्क वार्तालापों की मदद से काम करता है। इस प्रकार के एडीसी एक संदर्भ वोल्टेज (जो परिवर्तनशील है) का उपयोग करता है और एक तुलनित्र और अंतर का उपयोग करके संदर्भ वोल्टेज के साथ इनपुट वोल्टेज की तुलना करता है, जो एक डिजिटल आउटपुट होगा, सबसे महत्वपूर्ण बिट (MSB) से बचाया जाता है। तुलना की गति क्लॉक फ़्रीक्वेंसी (फ़ोकस) पर निर्भर करती है जिस पर एमएसपी चल रहा है।
10-बिट रिज़ॉल्यूशन: यह एडीसी 8 चैनल 10 बिट एडीसी है। यहां 8 चैनल शब्द का अर्थ है कि 8 एडीसी पिन हैं, जिनके उपयोग से हम एनालॉग वोल्टेज को माप सकते हैं। 10-बिट शब्द का अर्थ एडीसी के संकल्प से है। 10-बिट का अर्थ है दस की शक्ति (2 10) जो 1024 है। यह हमारे एडीसी के लिए नमूना चरणों की संख्या है, इसलिए हमारे एडीसी मूल्यों की सीमा 0 से 1023 तक होगी। मान 0 से बढ़ जाएगा 1023 प्रति चरण वोल्टेज के मूल्य के आधार पर, जिसकी गणना नीचे सूत्र का उपयोग करके की जा सकती है
नोट: एनर्जिया में डिफ़ॉल्ट रूप से संदर्भ वोल्टेज Vcc (~ 3v) पर सेट किया जाएगा, आप analogReference () विकल्प का उपयोग करके संदर्भ वोल्टेज को भिन्न कर सकते हैं ।
यह भी जाँचें कि अन्य माइक्रोकंट्रोलर के साथ ADC को कैसे इंटरफ़ेस करें:
- Arduino Uno में ADC का उपयोग कैसे करें?
- 8051 माइक्रोकंट्रोलर के साथ ADC0808 को इंटरफैस करना
- तस्वीर माइक्रोकंट्रोलर के एडीसी मॉड्यूल का उपयोग करना
- रास्पबेरी पाई एडीसी ट्यूटोरियल
सर्किट आरेख:
हमारे पिछले ट्यूटोरियल में हमने पहले से ही सीख लिया था कि एलसीडी को MSP430G2 के साथ कैसे जोड़ा जाता है, अब हम बस एक वेरिएंट को MSP430 में जोड़ने जा रहे हैं ताकि इसे एक चर वोल्टेज की आपूर्ति की जा सके और एलसीडी पर वोल्टेज मान प्रदर्शित किया जा सके। यदि आप एलसीडी को बाधित करने से अवगत नहीं हैं, तो ऊपर दिए गए लिंक पर वापस जाएं और इसके माध्यम से पढ़ें, क्योंकि मैं पश्चाताप से बचने के लिए जानकारी को छोड़ देगा। परियोजना का पूरा सर्किट आरेख नीचे दिया गया है।
जैसा कि आप देख सकते हैं कि यहां दो पोटेंशियोमीटर का उपयोग किया जाता है, एक का उपयोग एलसीडी के विपरीत सेट करने के लिए किया जाता है जबकि दूसरे का उपयोग बोर्ड को एक चर वोल्टेज की आपूर्ति के लिए किया जाता है। उस पोटेंशियोमीटर में पोटेंशियोमीटर का एक चरम सिरा Vcc से जुड़ा होता है और दूसरा सिरा ग्राउंड से जुड़ा होता है। केंद्र पिन (नीला तार) पिन P1.7 से जुड़ा हुआ है। यह पिन P1.7 0V (जमीन) से 3.5V (Vcc) तक एक वैरिएबल वोल्टेज प्रदान करेगा । इसलिए हमें इस चर वोल्टेज को पढ़ने और एलसीडी पर प्रदर्शित करने के लिए पिन P1.7 को प्रोग्राम करना होगा।
एनर्जिया में, हमें यह जानना होगा कि पिन पी 1.7 किस एनालॉग चैनल से संबंधित है? यह नीचे दी गई तस्वीर को संदर्भित करके पाया जा सकता है
आप P1.7 पिन को दाईं ओर देख सकते हैं, यह पिन A7 (चैनल 7) से संबंधित है। इसी तरह, हम अन्य पिनों के लिए भी संबंधित चैनल नंबर पा सकते हैं। आप A0 से A7 तक किसी भी पिन का उपयोग कर सकते हैं, यहाँ मैंने ए 7 का चयन किया है।
ADC के लिए अपने MSP430 प्रोग्रामिंग:
एनालॉग वोल्टेज को पढ़ने के लिए अपने MSP430 को प्रोग्रामिंग करना बहुत सरल है। इस कार्यक्रम में मूल्य के एनालॉग को पढ़ेंगे और उस मान के साथ वोल्टेज की गणना करेंगे और फिर एलसीडी स्क्रीन पर दोनों को प्रदर्शित करेंगे। पूरा कार्यक्रम इस पृष्ठ के तल पर पाया जा सकता है, आगे नीचे मैं मदद करने के लिए के टुकड़े में कार्यक्रम समझा रहा हूँ आप बेहतर समझते हैं।
हम एलसीडी पिंस को परिभाषित करके शुरू करते हैं । ये परिभाषित करते हैं कि कौन से पिन MSP430 एलसीडी पिन से जुड़े हैं। आप यह सुनिश्चित करने के लिए कनेक्शन का उल्लेख कर सकते हैं कि पिन क्रमशः जुड़े हुए हैं
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
अगला, हम एलसीडी डिस्प्ले के लिए हेडर फ़ाइल शामिल करते हैं। यह लाइब्रेरी को कॉल करता है जिसमें कोड होता है कि कैसे एमएसपी को एलसीडी के साथ संवाद करना चाहिए। यह लाइब्रेरी डिफ़ॉल्ट रूप से एनर्जिया आईडीई में स्थापित की जाएगी, इसलिए आपको इसे जोड़ने की आवश्यकता नहीं है। यह भी सुनिश्चित करें कि फ़ंक्शन लिक्विड क्रिस्टल को उन पिन नामों के साथ कहा जाता है जिन्हें हमने अभी ऊपर परिभाषित किया है।
#शामिल
हमारे सेटअप () फ़ंक्शन के अंदर, हम बस एलसीडी स्क्रीन में प्रदर्शित होने के लिए एक परिचय संदेश देंगे। मैं बहुत गहरे में नहीं पड़ रहा हूं क्योंकि हम पहले ही जान चुके हैं कि MSP430G2 के साथ एलसीडी का उपयोग कैसे किया जाता है।
lcd.begin (16, 2); // हम एक 16 * 2 एलसीडी डिस्प्ले का उपयोग कर रहे हैं lcd.setCursor (0,0); // कर्सर को पहली पंक्ति 1 कॉलम lcd.print ("MSP430G2553") पर रखें; // एक परिचय संदेश प्रदर्शित करें lcd.setCursor (0, 1); // 1 कॉलम 2 पंक्ति lcd.print ("- सर्किटडाइजेस्ट") के लिए कर्सर सेट करें ; // एक इंट्रो संदेश प्रदर्शित करें
अंत में, हमारे अनंत लूप () फ़ंक्शन के अंदर, हम ए 7 पिन को आपूर्ति की गई वोल्टेज को पढ़ना शुरू करते हैं । जैसा कि हमने पहले ही चर्चा की है कि माइक्रोकंट्रोलर एक डिजिटल डिवाइस है और यह सीधे वोल्टेज स्तर को नहीं पढ़ सकता है। SAR तकनीक का उपयोग करके वोल्टेज स्तर को 0 से 1024 तक मैप किया जाता है। इन मूल्यों को ADC मान कहा जाता है, इस ADC मान को प्राप्त करने के लिए बस निम्नलिखित लाइन का उपयोग करें
int val = analogRead (A7); // पिन A7 से ADC मान पढ़ें
यहाँ फ़ंक्शन analogRead () का उपयोग पिन के एनालॉग मूल्य को पढ़ने के लिए किया जाता है, हमने इसके अंदर A7 निर्दिष्ट किया है क्योंकि हमने P1.7 को पिन करने के लिए वेरिएबल वोल्टेज को कनेक्ट किया है। अंत में हम " वैल " नामक एक वैरिएबल में सेव करते हैं । इस चर का प्रकार पूर्णांक है क्योंकि हम केवल इस चर में संग्रहीत होने के लिए 0 से 1024 तक के मान प्राप्त करेंगे।
अगला कदम एडीसी मूल्य से वोल्टेज मान की गणना करना होगा । ऐसा करने के लिए हमारे पास निम्नलिखित सूत्र हैं
वोल्टेज = (एडीसी मूल्य / एडीसी संकल्प) * संदर्भ वोल्टेज
हमारे मामले में हम पहले से ही जानते हैं कि हमारे माइक्रोकंट्रोलर का एडीसी रिज़ॉल्यूशन 1024 है। एडीसी मान पिछली पंक्ति में भी पाया जाता है और वैर नामक वैरिएबल को संग्रहीत करता है। संदर्भ वोल्टेज वोल्टेज, जिस पर माइक्रोकंट्रोलर काम कर रहा है के बराबर है। जब MSP430 बोर्ड यूएसबी केबल के माध्यम से संचालित होता है तो ऑपरेटिंग वोल्टेज 3.6 वी है । आप बोर्ड पर Vcc और ग्राउंड पिन पर एक मल्टीमीटर का उपयोग करके ऑपरेटिंग वोल्टेज को भी माप सकते हैं। तो उपरोक्त सूत्र हमारे मामले में फिट बैठता है जैसा कि नीचे दिखाया गया है
फ्लोट वोल्टेज = (फ्लोट (वैल) / 1024) * 3.6; // फॉर्मूला एडीसी मान को वोल्टेज में परिवर्तित करने के लिए
आप लाइन फ्लोट (वैल) के साथ भ्रमित हो सकते हैं । इसका उपयोग चर "वैल" को इंट डेटा प्रकार से "फ्लोट" डेटा प्रकार में बदलने के लिए किया जाता है । इस रूपांतरण की आवश्यकता है क्योंकि केवल अगर हमें फ्लोट में वैल / 1024 का परिणाम मिलता है तो हम इसे 3.6 गुणा कर सकते हैं। यदि पूर्णांक में मान प्राप्त होता है तो यह हमेशा 0 होगा और परिणाम भी शून्य होगा। एक बार जब हमने एडीसी मान और वोल्टेज की गणना की है, तो जो कुछ बचा है वह एलसीडी स्क्रीन पर परिणाम को प्रदर्शित करने के लिए है जिसे निम्नलिखित लाइनों द्वारा किया जा सकता है
lcd.setCursor (0, 0); // कॉलम 0, लाइन 0 lcd.print ("ADC Val:") के लिए कर्सर सेट करें ; lcd.print (वैल); // प्रदर्शन ADC मान lcd.setCursor (0, 1); // कर्सर को कॉलम 0, लाइन 1 lcd.print ("वोल्टेज:") पर सेट करें; lcd.print (वोल्टेज); // डिस्प्ले वोल्टेज
यहां हमने पहली पंक्ति में एडीसी का मान और दूसरी पंक्ति में वोल्ट का मान प्रदर्शित किया है। अंत में हम 100 मिल सेकंड की देरी करते हैं और एलसीडी स्क्रीन को साफ करते हैं। यह वह मान था जो प्रत्येक 100 मिल के लिए अद्यतन किया जाएगा।
अपने परिणाम का परीक्षण!
अंत में, हम मज़ेदार हिस्से पर आते हैं, जो हमारे कार्यक्रम का परीक्षण कर रहा है और इसके साथ खेल रहा है। बस कनेक्शन बनाएं जैसा कि सर्किट आरेख में दिखाया गया है। मैंने अपने कनेक्शन बनाने के लिए एक छोटे ब्रेडबोर्ड का उपयोग किया है और ब्रेडबोर्ड को MSP430 से जोड़ने के लिए जम्पर तारों का उपयोग किया है। एक बार जब कनेक्शन हो जाता है तो मेरा नीचे इस तरह दिखता है।
फिर प्रोग्राम को अपलोड करें जो कि एनर्जिया आईडीई के माध्यम से MSP430 बोर्ड के नीचे दिया गया है। आपको एलसीडी पर इंट्रो टेक्स्ट को देखने में सक्षम होना चाहिए, अगर स्पष्ट शब्दों का उपयोग करने तक आप पोटेंशियोमीटर का उपयोग करते हुए एलसीडी के विपरीत को समायोजित न करें। इसके अलावा, रीसेट बटन दबाने की कोशिश करें। अगर चीजें उम्मीद के मुताबिक काम करती हैं तो आपको निम्न स्क्रीन देखने में सक्षम होना चाहिए।
अब पोटेंशियोमीटर में भिन्नता है और आपको एलसीडी में प्रदर्शित वोल्टेज को भी देखना चाहिए । यदि हम वोल्टेज को सही ढंग से माप रहे हैं तो हमें सत्यापित करने दें कि, पॉट और जमीन के बीच में वोल्टेज को मापने के लिए मल्टीमीटर का उपयोग करें। मल्टीमीटर पर प्रदर्शित वोल्टेज एलसीडी पर प्रदर्शित मूल्य के करीब होना चाहिए जैसा कि नीचे दी गई तस्वीर में दिखाया गया है।
यही है, हमने सीखा है कि MSP430 बोर्ड के ADC का उपयोग करके एनालॉग वोल्टेज को कैसे मापें । अब हम वास्तविक समय मापदंडों को पढ़ने के लिए अपने बोर्ड के साथ कई एनालॉग सेंसर इंटरफेस कर सकते हैं। आशा है कि आप ट्यूटोरियल को समझ गए हैं और इसे सीखने में मज़ा आया है, यदि आपको कोई समस्या है तो कृपया नीचे टिप्पणी अनुभाग के माध्यम से या मंचों के माध्यम से पहुंचें। चलो एक और नए विषय के साथ MSP430 के एक अन्य ट्यूटोरियल में पकड़ लेते हैं।