- Arduino और STM32F103C8 में ADC की तुलना करना
- एसटीएम 32 में एडीसी
- कैसे एक एनालॉग सिग्नल को डिजिटल प्रारूप में परिवर्तित किया जाता है
- STM32F103C8T6 में ADC पिन
- अवयव आवश्यक
- सर्किट आरेख और स्पष्टीकरण
- एडीसी मूल्यों को पढ़ने के लिए प्रोग्रामिंग एसटीएम 32
एक सामान्य विशेषता जो लगभग हर एम्बेडेड एप्लिकेशन में उपयोग की जाती है, वह ADC मॉड्यूल (एनालॉग से डिजिटल कनवर्टर) है। डिजिटल एनालॉग के ये एनालॉग टेम्प्रेचर सेंसर जैसे टेम्परेचर सेंसर, टिल्ट सेंसर, करंट सेंसर, फ्लेक्स सेंसर और भी बहुत कुछ से वोल्टेज पढ़ सकते हैं। तो इस ट्यूटोरियल में हम सीखेंगे कि Energic IDE का उपयोग करके एनालॉग वोल्टेज को पढ़ने के लिए STM32F103C8 में ADC का उपयोग कैसे करें । हम STM32 ब्लू पिल बोर्ड में एक छोटे से पोटेंशियोमीटर को इंटरफ़ेस करेंगे और एक एनालॉग पिन को एक अलग वोल्टेज की आपूर्ति करेंगे, वोल्टेज को पढ़ेंगे और इसे 16x2 एलसीडी स्क्रीन पर प्रदर्शित करेंगे।
Arduino और STM32F103C8 में ADC की तुलना करना
Arduino बोर्ड में, इसमें 6 चैनल (मिनी और नैनो पर 8 चैनल, 16 मेगा पर), 0V-5V के इनपुट वोल्टेज रेंज के साथ 10-बिट एडीसी शामिल हैं। इसका अर्थ है कि यह 0 और 5 वोल्ट के बीच के इनपुट वोल्टेज को 0 और 1023 के बीच पूर्णांक मानों में मैप करेगा। अब STM32F103C8 के मामले में हमारे पास 10 चैनल हैं, 12-बिट एडीसी जिसमें इनपुट रेंज 0V -3.3V है। यह 0 और 3.3 वोल्ट के बीच 0 और 4095 के बीच पूर्णांक मानों में इनपुट वोल्टेज को मैप करेगा।
एसटीएम 32 में एडीसी
STM32 माइक्रोकंट्रोलर्स में एम्बेडेड ADC SAR (क्रमिक सन्निकटन रजिस्टर) सिद्धांत का उपयोग करता है, जिसके द्वारा रूपांतरण कई चरणों में किया जाता है। रूपांतरण चरणों की संख्या एडीसी कनवर्टर में बिट्स की संख्या के बराबर है। प्रत्येक चरण ADC घड़ी द्वारा संचालित होता है। प्रत्येक एडीसी घड़ी परिणाम से आउटपुट तक एक सा पैदा करती है। एडीसी आंतरिक डिजाइन स्विच-कैपेसिटर तकनीक पर आधारित है। यदि आप STM32 में नए हैं, तो STM32 ट्यूटोरियल के साथ हमारी शुरुआत करें।
12-बिट रिज़ॉल्यूशन
यह एडीसी 10 चैनल 12-बिट एडीसी है। यहां 10 चैनल शब्द का अर्थ है कि 10 एडीसी पिन हैं, जिनके उपयोग से हम एनालॉग वोल्टेज को माप सकते हैं। 12-बिट शब्द का अर्थ एडीसी के संकल्प से है। 12-बिट का मतलब दस की शक्ति (2 12) से 2 है जो 4096 है। यह हमारे एडीसी के लिए नमूना चरणों की संख्या है, इसलिए हमारे एडीसी मूल्यों की सीमा 0 से 4095 तक होगी। मान 0 से बढ़ जाएगा 4095 प्रति चरण वोल्टेज के मूल्य के आधार पर, जिसकी गणना सूत्र द्वारा की जा सकती है
VOLTAGE / STEP = संदर्भ वोल्टेज / 4096 = (3.3 / 4096 = 8.056 mV) प्रति यूनिट।
कैसे एक एनालॉग सिग्नल को डिजिटल प्रारूप में परिवर्तित किया जाता है
जैसा कि कंप्यूटर केवल बाइनरी / डिजिटल वैल्यू (1 और 0) को स्टोर और प्रोसेस करते हैं। इसलिए वोल्ट में सेंसर के आउटपुट जैसे एनालॉग सिग्नल को प्रसंस्करण के लिए डिजिटल मूल्यों में बदलना पड़ता है और रूपांतरण को सटीक होना पड़ता है। जब इनपुट इनपुट वोल्टेज STM32 को इसके एनालॉग इनपुट पर दिया जाता है, तो एनालॉग वैल्यू को पढ़ा जाता है और एक पूर्णांक चर में संग्रहीत किया जाता है। । नीचे संग्रहीत सूत्र (0-3.3V) को पूर्णांक मानों (0-4096) में नीचे दिए गए सूत्र का उपयोग करके परिवर्तित किया गया है:
INPUT VOLTAGE = (ADC मान / ADC रिज़ॉल्यूशन) * संदर्भ वोल्टेज
संकल्प = 4096
संदर्भ = 3.3 वी
STM32F103C8T6 में ADC पिन
STM32 में PA0 से PB1 तक 10 एनालॉग पिन हैं।
अन्य माइक्रोकंट्रोलरों में एडीसी का उपयोग कैसे करें, इसकी भी जाँच करें:
- Arduino Uno में ADC का उपयोग कैसे करें?
- 8051 माइक्रोकंट्रोलर के साथ ADC0808 को इंटरफैस करना
- तस्वीर माइक्रोकंट्रोलर के एडीसी मॉड्यूल का उपयोग करना
- रास्पबेरी पाई एडीसी ट्यूटोरियल
- MSP430G2 में ADC का उपयोग कैसे करें - एनालॉग वोल्टेज को मापना
अवयव आवश्यक
- STM32F103C8
- एलसीडी 16 * 2
- पोटेंशियोमीटर 100 कि
- ब्रेड बोर्ड
- तारों को जोड़ना
सर्किट आरेख और स्पष्टीकरण
सर्किट आरेख 16 * 2 एलसीडी और एसटीएम 3 एफ 103 सी 8 टी 6 बोर्ड के एनालॉग इनपुट को नीचे दिखाया गया है।
एलसीडी के लिए जो कनेक्शन दिए गए हैं, वे नीचे दिए गए हैं:
एलसीडी पिन नं |
एलसीडी पिन नाम |
STM32 पिन नाम |
1 |
ग्राउंड (Gnd) |
ग्राउंड (जी) |
२ |
वीसीसी |
5 वी |
३ |
वी |
पोटेंशियोमीटर के केंद्र से पिन |
४ |
रजिस्टर का चयन करें (RS) |
पीबी 11 |
५ |
पढ़ें / लिखें (RW) |
ग्राउंड (जी) |
६ |
सक्षम (EN) |
PB10 |
। |
डेटा बिट 0 (DB0) |
कोई कनेक्शन (NC) |
। |
डेटा बिट 1 (DB1) |
कोई कनेक्शन (NC) |
९ |
डेटा बिट 2 (DB2) |
कोई कनेक्शन (NC) |
१० |
डेटा बिट 3 (DB3) |
कोई कनेक्शन (NC) |
1 1 |
डेटा बिट 4 (DB4) |
पीबी ० |
१२ |
डेटा बिट 5 (DB5) |
पीबी 1 |
१३ |
डेटा बिट 6 (DB6) |
PC13 |
१४ |
डेटा बिट 7 (DB7) |
PC14 |
१५ |
एलईडी सकारात्मक |
5 वी |
१६ |
एलईडी नकारात्मक |
ग्राउंड (जी) |
कनेक्शन ऊपर दी गई तालिका के अनुसार किए गए हैं। सर्किट में दो पोटेंशियोमीटर मौजूद हैं, पहले एक का उपयोग वोल्टेज विभक्त के लिए किया जाता है जिसका उपयोग वोल्टेज को अलग करने और एसटीएम 32 को एनालॉग इनपुट प्रदान करने के लिए किया जा सकता है। इस पोटेंशियोमीटर के लेफ्ट पिन को STM32 (3.3V) से इनपुट पॉजिटिव वोल्टेज मिलता है और राइट पिन जमीन से जुड़ा होता है, पोटेंशियोमीटर का सेंटर पिन STM32 के एनालॉग इनपुट पिन (PA7) से जुड़ा होता है। एलसीडी डिस्प्ले के विपरीत भिन्न करने के लिए अन्य पोटेंशियोमीटर का उपयोग किया जाता है। STM32 के लिए पावर स्रोत एक पीसी या लैपटॉप से यूएसबी बिजली की आपूर्ति के माध्यम से प्रदान किया जाता है।
एडीसी मूल्यों को पढ़ने के लिए प्रोग्रामिंग एसटीएम 32
हमारे पिछले ट्यूटोरियल में, हमने USB पोर्ट का उपयोग करके प्रोग्रामिंग STM32F103C8T6 बोर्ड के बारे में सीखा। इसलिए हमें अब FTDI प्रोग्रामर की आवश्यकता नहीं है। बस इसे STM32 के यूएसबी पोर्ट के माध्यम से पीसी से कनेक्ट करें और ARDUINO IDE के साथ प्रोग्रामिंग शुरू करें। एनालॉग वोल्टेज को पढ़ने के लिए ARDUINO IDE में अपना STM32 प्रोग्रामिंग करना बहुत सरल है। यह arduino बोर्ड की तरह ही है। STM32 के जम्पर पिन बदलने की कोई आवश्यकता नहीं है।
इस कार्यक्रम में एनालॉग मूल्य को पढ़ेंगे और उस मान के साथ वोल्टेज की गणना करेंगे और फिर एलसीडी स्क्रीन पर एनालॉग और डिजिटल दोनों मान प्रदर्शित करेंगे।
सबसे पहले एलसीडी पिन को परिभाषित करें । ये परिभाषित करते हैं कि एलसीडी पिन से STM32 के किस पिन जुड़े हुए हैं। आप अपनी आवश्यकताओं के अनुसार संशोधित कर सकते हैं।
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // एलसीडी के साथ पिन नामों का उल्लेख करने के लिए जुड़ा हुआ है
अगला, हम एलसीडी डिस्प्ले के लिए हेडर फ़ाइल शामिल करते हैं। यह लाइब्रेरी को कॉल करता है जिसमें एसटीएम 32 के साथ एलसीडी के साथ कैसे संवाद होना चाहिए, इसके लिए कोड है। यह भी सुनिश्चित करें कि फ़ंक्शन लिक्विड क्रिस्टल को उन पिन नामों के साथ कहा जाता है जिन्हें हमने अभी ऊपर परिभाषित किया है।
#शामिल
सेटअप () फ़ंक्शन के अंदर, हम बस एलसीडी स्क्रीन में प्रदर्शित होने के लिए एक परिचय संदेश देंगे। आप STM32 के साथ एलसीडी के बारे में सीख सकते हैं।
lcd.begin (16, 2); // हम एक 16 * 2 एलसीडी lcd.clear () का उपयोग कर रहे हैं ; // स्क्रीन को साफ़ करें lcd.setCursor (0, 0); // पहली पंक्ति में पहला कॉलम lcd.prin t ("CIRCUITDIGEST"); // इस lcd.setCursor (0, 1) को प्रिंट करें ; // पहली पंक्ति में कोलम n lcd.print ("STM32F103C8"); // थी प्रिंट रों देरी (2000); // दो सेकंड के लिए प्रतीक्षा करें lcd.clear (); // स्क्रीन को साफ करें lcd.setCursor (0, 0); // पहली पंक्ति में प्रथम कॉलम lcd.print ("USC ADC IN"); // इस lcd.setCursor (0,1) को प्रिंट करें ; // पहली पंक्ति में पहले कॉलम lcd.print ("STM32F103C8"); // इस देरी को प्रिंट करें (2000); // दो सेकंड के लिए प्रतीक्षा करें lcd.clear (); // स्क्रीन को साफ़ करें
अंत में, हमारे अनंत लूप () फ़ंक्शन के अंदर, हम पोटेंशियोमीटर से पीए 7 पिन को आपूर्ति की गई एनालॉग वोल्टेज को पढ़ना शुरू करते हैं । जैसा कि हमने पहले ही चर्चा की है, माइक्रोकंट्रोलर एक डिजिटल डिवाइस है और यह सीधे वोल्टेज स्तर नहीं पढ़ सकता है। SAR तकनीक का उपयोग करके वोल्टेज स्तर को 0 से 4096 तक मैप किया जाता है। इन मानों को ADC मान कहा जाता है, इस ADC मान को प्राप्त करने के लिए बस निम्नलिखित लाइन का उपयोग करें
int val = analogRead (A7); // पिन PA 7 से ADC मान पढ़ें
यहाँ फ़ंक्शन analogRead () का उपयोग पिन के एनालॉग मूल्य को पढ़ने के लिए किया जाता है । अंत में हम " वैल " नामक एक वैरिएबल में सेव करते हैं । इस चर का प्रकार पूर्णांक है क्योंकि हम केवल इस चर में संग्रहीत होने के लिए 0 से 4096 तक के मान प्राप्त करेंगे।
अगला कदम एडीसी मूल्य से वोल्टेज मान की गणना करना होगा । ऐसा करने के लिए हमारे पास निम्नलिखित सूत्र हैं
वोल्टेज = (एडीसी मूल्य / एडीसी संकल्प) * संदर्भ वोल्टाग ई
हमारे मामले में हम पहले से ही जानते हैं कि हमारे माइक्रोकंट्रोलर का एडीसी रिज़ॉल्यूशन 4096 है। एडीसी का मूल्य पिछली पंक्ति में भी पाया जाता है और वैर नामक वैरिएबल को संग्रहीत किया जाता है। संदर्भ वोल्टेज वोल्टेज, जिस पर माइक्रोकंट्रोलर काम कर रहा है के बराबर है। जब STM32 बोर्ड यूएसबी केबल के माध्यम से संचालित होता है तब ऑपरेटिंग वोल्टेज 3.3V होता है । आप बोर्ड पर Vcc और ग्राउंड पिन पर एक मल्टीमीटर का उपयोग करके ऑपरेटिंग वोल्टेज को भी माप सकते हैं। तो उपरोक्त सूत्र हमारे मामले में फिट बैठता है जैसा कि नीचे दिखाया गया है
फ्लोट वोल्टेज = (फ्लोट (वैल) / 4096) * 3.3; // सूत्र ADT मान को वोल्टाग e में बदलने के लिए
आप लाइन फ्लोट (वैल) के साथ भ्रमित हो सकते हैं । इसका उपयोग चर "वैल" को इंट डेटा प्रकार से "फ्लोट" डेटा प्रकार में बदलने के लिए किया जाता है । इस रूपांतरण की आवश्यकता है क्योंकि केवल अगर हमें फ्लोट में वैल / 4096 का परिणाम मिलता है तो हम इसे 3.3 गुणा कर सकते हैं। यदि पूर्णांक में मान प्राप्त होता है तो यह हमेशा 0 होगा और परिणाम भी शून्य होगा। एक बार जब हमने एडीसी मान और वोल्टेज की गणना की है, तो जो कुछ बचा है वह एलसीडी स्क्रीन पर परिणाम को प्रदर्शित करने के लिए है जिसे निम्नलिखित लाइनों द्वारा किया जा सकता है
lcd.setCursor (0, 0); // कॉलम 0, लाइन 0 lcd.print ("ADC Val:") के लिए कर्सर सेट करें ; lcd.print (वैल); // प्रदर्शन ADC मान lcd.setCursor (0, 1); // कर्सर को कॉलम 0, लाइन 1 lcd.print ("वोल्टेज:") पर सेट करें; lcd.print (वोल्टेज); // डिस्प्ले वोल्टेज
पूरा कोड और प्रदर्शन वीडियो नीचे दिया गया है।