- अवयव आवश्यक
- MCP4725 DAC मॉड्यूल (डिजिटल से एनालॉग कनवर्टर)
- M2C4725 में I2C संचार
- सर्किट आरेख और स्पष्टीकरण
- डिजिटल से एनालॉग रूपांतरण के लिए प्रोग्रामिंग STM32F103C8
- STM32 के साथ DAC का परीक्षण करना
हम सभी जानते हैं कि माइक्रोकंट्रोलर केवल डिजिटल मूल्यों के साथ काम करते हैं लेकिन वास्तविक दुनिया में हमें एनालॉग संकेतों से निपटना पड़ता है। यही कारण है कि एडीसी (एनालॉग टू डिजिटल कन्वर्टर्स) वास्तविक विश्व एनालॉग मूल्यों को डिजिटल रूप में परिवर्तित करने के लिए है ताकि माइक्रोकंट्रोलर संकेतों को संसाधित कर सकें। लेकिन क्या होगा अगर हमें डिजिटल मूल्यों से एनालॉग सिग्नल की आवश्यकता है, इसलिए यहां डीएसी (डिजिटल से एनालॉग कनवर्टर) आता है।
डिजिटल से एनालॉग कनवर्टर के लिए एक सरल उदाहरण स्टूडियो में एक गीत रिकॉर्ड कर रहा है जहां एक कलाकार गायक माइक्रोफोन का उपयोग कर रहा है और एक गाना गा रहा है। इन एनालॉग ध्वनि तरंगों को डिजिटल रूप में परिवर्तित किया जाता है और फिर एक डिजिटल प्रारूप फ़ाइल में संग्रहीत किया जाता है और जब संग्रहीत डिजिटल फ़ाइल का उपयोग करके गाना बजाया जाता है, तो उन डिजिटल मूल्यों को स्पीकर आउटपुट के लिए एनालॉग सिग्नल में परिवर्तित किया जाता है। तो इस प्रणाली में DAC का उपयोग किया जाता है।
डीएसी का उपयोग कई अनुप्रयोगों में किया जा सकता है जैसे मोटर नियंत्रण, एलईडी रोशनी की नियंत्रण चमक, ऑडियो एम्पलीफायर, वीडियो एनकोडर, डेटा अधिग्रहण प्रणाली आदि।
हमने पहले से ही Arduino के साथ MCP4725 DAC मॉड्यूल को बाधित किया। आज हम उसी MCP4725 DAC IC का उपयोग STM32F103C8 माइक्रोकंट्रोलर का उपयोग करके डिजिटल से एनालॉग कनवर्टर को डिजाइन करने के लिए करेंगे।
अवयव आवश्यक
- STM32F103C8
- MCP4725 DAC IC
- 10k पोटेंशियोमीटर
- 16x2 एलसीडी डिस्प्ले
- ब्रेड बोर्ड
- तारों को जोड़ना
MCP4725 DAC मॉड्यूल (डिजिटल से एनालॉग कनवर्टर)
MCP4725 IC एक 12-बिट डिजिटल से एनालॉग कन्वर्टर मॉड्यूल है, जिसका उपयोग (0 से 5V) से आउटपुट एनालॉग वोल्टेज उत्पन्न करने के लिए किया जाता है और इसे I2C संचार का उपयोग करके नियंत्रित किया जाता है। यह बोर्ड नॉनवॉल्टाइल मेमोरी EEPROM पर भी आता है।
इस आईसी में 12-बिट रिज़ॉल्यूशन है। इसका मतलब है कि हम संदर्भ वोल्टेज के साथ वोल्टेज आउटपुट प्रदान करने के लिए इनपुट के रूप में (0 से 4096) का उपयोग करते हैं। अधिकतम संदर्भ वोल्टेज 5V है।
आउटपुट वोल्टेज की गणना करने के लिए सूत्र
ओ / पी वोल्टेज = (संदर्भ वोल्टेज / संकल्प) एक्स डिजिटल मूल्य
उदाहरण के लिए यदि हम संदर्भ वोल्टेज के रूप में 5V का उपयोग करते हैं और मान लेते हैं कि डिजिटल मूल्य 2048 है। इसलिए DAC आउटपुट की गणना करें।
ओ / पी वोल्टेज = (5/4096) x 2048 = 2.5 वी
MCP4725 का पिनआउटनीचे पिन नामों के स्पष्ट संकेत के साथ MCP4725 की छवि है।
MCP4725 के पिन |
उपयोग |
बाहर |
आउटपुट एनालॉग वोल्टेज |
GND |
आउटपुट के लिए जीएनडी |
एससीएल |
I2C सीरियल क्लॉक लाइन |
एसडीए |
I2C सीरियल डेटा लाइन |
वीसीसी |
इनपुट संदर्भ वोल्टेज 5V या 3.3V |
GND |
इनपुट के लिए जीएनडी |
M2C4725 में I2C संचार
इस डीएसी आईसी को I2C संचार का उपयोग करके किसी भी माइक्रोकंट्रोलर के साथ हस्तक्षेप किया जा सकता है। I2C संचार के लिए केवल दो तारों SCL और SDA की आवश्यकता होती है। डिफ़ॉल्ट रूप से, MCP4725 के लिए I2C पता 0x60 है। STM32F103C8 में I2C संचार के बारे में अधिक जानने के लिए लिंक का अनुसरण करें।
STM32F103C8 में I2C पिन:
एसडीए: पीबी 7 या पीबी 9, पीबी 11।
एससीएल: पीबी 6 या पीबी 8, पीबी 10।
सर्किट आरेख और स्पष्टीकरण
STM32F103C8 और 16x2 एलसीडी के बीच कनेक्शन
एलसीडी पिन नं |
एलसीडी पिन नाम |
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 वी |
१६ |
एलईडी नकारात्मक |
ग्राउंड (जी) |
MCP4725 DAC IC और STM32F103C8 के बीच संबंध
MCP4725 |
STM32F103C8 |
मल्टीमीटर |
एसडीए |
पीबी 7 |
एनसी |
एससीएल |
पीबी 6 |
एनसी |
बाहर |
PA1 |
सकारात्मक जांच |
GND |
GND |
नकारात्मक जांच |
वीसीसी |
3.3 |
एनसी |
एक पोटेंशियोमीटर भी जुड़ा हुआ है, STM32F10C8 के PA1 एनालॉग इनपुट (ADC) से जुड़ा हुआ पिन, GND से जुड़ा लेफ्ट पिन और STM32F103C8 के 3.3V से जुड़ा राइट पिन है।
इस ट्यूटोरियल में हम STM32 के साथ MCP4725 DAC IC को कनेक्ट करेंगे और STM32 ADC पिन PA0 को एनालॉग इनपुट वैल्यू प्रदान करने के लिए 10k पोटेंशियोमीटर का उपयोग करेंगे। और फिर एनालॉग मूल्य को डिजिटल रूप में परिवर्तित करने के लिए एडीसी का उपयोग करें। इसके बाद I2C बस के माध्यम से उन डिजिटल मूल्यों को MCP4725 पर भेजें। फिर DAC MCP4725 IC का उपयोग करके उन डिजिटल मानों को एनालॉग में बदलें और फिर OUT से MCP4725 के एनालॉग आउटपुट की जांच करने के लिए STM32 के एक और ADC पिन PA1 का उपयोग करें। अंत में 16x2 एलसीडी डिस्प्ले में वोल्टेज के साथ दोनों एडीसी और डीएसी मान प्रदर्शित करें।
डिजिटल से एनालॉग रूपांतरण के लिए प्रोग्रामिंग STM32F103C8
STM32F103C8 पर कोड अपलोड करने के लिए एक FTDI प्रोग्रामर की जरूरत नहीं है। बस इसे STM32 के यूएसबी पोर्ट के माध्यम से पीसी से कनेक्ट करें और ARDUINO IDE के साथ प्रोग्रामिंग शुरू करें । Arduino IDE में अपने STM32 प्रोग्रामिंग के बारे में अधिक जानने के लिए इस लिंक पर जाएँ। इस STM32 DAC ट्यूटोरियल के लिए पूरा कार्यक्रम अंत में दिया गया है।
सबसे पहले I2C और एलसीडी प्रयोग करने के लिए पुस्तकालय शामिल wire.h, SoftWire.h और liquidcrystal.h पुस्तकालय। यहाँ STM32 माइक्रोकंट्रोलर में I2C के बारे में अधिक जानें।
#शामिल
STM32F103C8 के साथ जुड़े एलसीडी पिंस के अनुसार एलसीडी पिंस को अगला परिभाषित करें और आरंभ करें
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; लिक्विड क्रिस्टल एलसीडी (आरएस, एन, डी 4, डी 5, डी 6, डी 7);
फिर MCP4725 DAC IC के I2C पते को परिभाषित करें। MCP4725 DAC डिफ़ॉल्ट I2C पता 0x60 है
# डेफिन MCP4725 0x60
शून्य सेटअप में ()
सबसे पहले STM32F103C8 के पिन PB7 (SDA) और PB6 (SCL) पर I2C संचार शुरू करें।
तार.बेगिन (); // I2C संचार शुरू होता है
अगला एलसीडी डिस्प्ले 16x2 मोड में सेट करें और एक स्वागत योग्य संदेश प्रदर्शित करें।
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); देरी (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("MCP4725 के साथ DAC"); देरी (2000); lcd.clear ();
शून्य लूप में ()
1. पहले बफर में कंट्रोल बाइट वैल्यू (0b01000000) डालें।
(लिखें मोड में 010-सेट MCP4725) बफर = 0b01000000;
2. निम्नलिखित कथन पिन PA0 से एनालॉग मूल्य को पढ़ता है और इसे डिजिटल मूल्य में 0 से लेकर 4096 तक के रूप में परिवर्तित करता है क्योंकि ADC 12-बिट रिज़ॉल्यूशन है और वेरिएबल adc में स्टोर है ।
adc = analogRead (PA0);
3. यह निम्नलिखित कथन 3.3 वी के संदर्भ वोल्टेज के साथ एडीसी इनपुट मूल्य (0 से 4096) से वोल्टेज की गणना करने के लिए उपयोग किया जाने वाला एक सूत्र है।
फ्लोट ipvolt = (3.3 / 4096.0) * adc;
4. ADC वैरिएबल में दाईं ओर 4 बिट्स को शिफ्ट करके बफर में सबसे महत्वपूर्ण बिट वैल्यू डालें, और adc वेरिएबल में लेफ्ट को 4 बिट्स शिफ्ट करके बफर में महत्वपूर्ण बिट वैल्यूज को रखें ।
बफर = एडीसी >> 4; बफर = एडीसी << 4;
5. निम्नलिखित कथन STM32 के ADC पिन PA1 से DAC आउटपुट (MCP4725 DAC IC का OUTPUT पिन) का एनालॉग मूल्य पढ़ता है। आउटपुट वोल्टेज की जांच के लिए इस पिन को मल्टीमीटर से भी जोड़ा जा सकता है।
अहस्ताक्षरित int analogread = analogRead (PA1);
6. इसके अलावा, चर एनालॉग से वोल्टेज मान की गणना निम्न कथन के साथ सूत्र का उपयोग करके की जाती है।
फ्लोट opvolt = (3.3 / 4096.0) * अनुरूप;
7. एक ही शून्य लूप () में कुछ और कथन दिए गए हैं जिन्हें नीचे समझाया गया है
MCP4725 के साथ प्रसारण शुरू होता है:
वायर.beginTransmission (MCP4725);
I2C को नियंत्रण बाइट भेजता है
वायर.राइट (बफर);
I2C को MSB भेजता है
वायर.राइट (बफर);
I2C को LSB भेजता है
वायर.राइट (बफर);
संचरण समाप्त करता है
वायर.endTransmission ();
अब उन परिणामों को LCD 16x2 में LCD.print () का उपयोग करके प्रदर्शित करें
lcd.setCursor (0,0); lcd.print ("एक आईपी:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("डी ओपी:"); lcd.print (अनुरूप); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); देरी (500); lcd.clear ();
STM32 के साथ DAC का परीक्षण करना
जब हम पोटेंशियोमीटर को घुमाकर इनपुट एडीसी मान और वोल्टेज को बदलते हैं, तो आउटपुट डीएसी मान और वोल्टेज भी बदल जाता है। यहां इनपुट मानों को पहली पंक्ति में दिखाया गया है और एलसीडी डिस्प्ले की दूसरी पंक्ति में आउटपुट मान। एनालॉग वोल्टेज को सत्यापित करने के लिए एक मल्टीमीटर MCP4725 आउटपुट पिन से भी जुड़ा हुआ है।
प्रदर्शन वीडियो के साथ पूरा कोड नीचे दिया गया है।