- RS-485 सीरियल कम्युनिकेशन
- अवयव आवश्यक
- सर्किट आरेख
- RS485 सीरियल संचार के लिए प्रोग्रामिंग STM32F103C8 और Arduino UNO
- STM32F103C8 और Arduino UNO के बीच RS485 संचार का परीक्षण:
संचार प्रोटोकॉल एक डिजिटल इलेक्ट्रॉनिक्स और एम्बेडेड सिस्टम का अभिन्न अंग हैं। जहां कहीं भी कई माइक्रोकंट्रोलर और पेरिफेरल का अंतर होता है, वहां संचार प्रोटोकॉल का उपयोग डेटा के गुच्छा का आदान-प्रदान करने के लिए किया जाता है। कई प्रकार के धारावाहिक संचार प्रोटोकॉल उपलब्ध हैं। RS485 धारावाहिक संचार प्रोटोकॉल में से एक है और इसका उपयोग औद्योगिक परियोजनाओं और भारी मशीनरी में किया जाता है।
हमने पिछले ट्यूटोरियल में Arduino Uno और Arduino Nano के बीच RS485 सीरियल कम्युनिकेशन के बारे में सीखा । यह ट्यूटोरियल STM32F103C8 माइक्रोकंट्रोलर में RS-485 सीरियल संचार का उपयोग करने के बारे में है । यदि आप STM32 माइक्रोकंट्रोलर के लिए नए हैं, तो Arduino IDE का उपयोग करके STM32 के साथ आरंभ करना शुरू करें: निमिष एलईडी और यहां सभी STM32 परियोजनाओं की जांच करें।
इस ट्यूटोरियल में मास्टर STM32F103C8 में तीन पुश बटन हैं जो RS-485 सीरियल संचार का उपयोग करके स्लेव Arduino Uno में मौजूद तीन एल ई डी की स्थिति को नियंत्रित करने के लिए उपयोग किए जाते हैं।
आरएस -485 सीरियल संचार के कामकाज को समझने के द्वारा शुरू करते हैं।
RS-485 सीरियल कम्युनिकेशन
RS-485 एक अतुल्यकालिक धारावाहिक संचार प्रोटोकॉल है जिसे घड़ी की आवश्यकता नहीं होती है। यह द्विआधारी डेटा को एक डिवाइस से दूसरे में स्थानांतरित करने के लिए अंतर सिग्नल नामक तकनीक का उपयोग करता है ।
तो ये डिफरेंशियल सिग्नल ट्रांसफर मेथड क्या है ??
विभेदक संकेत विधि एक सकारात्मक और नकारात्मक 5V का उपयोग करके एक अंतर वोल्टेज बनाकर काम करती है । यह एक प्रदान करता है आधा द्वैध का उपयोग करते समय संचार दो तारों और पूर्ण द्वैध संचार का उपयोग करते समय चार तारों ।
इस विधि का उपयोग करके:
- RS-485 अधिकतम 30Mbps की उच्च डेटा ट्रांसफर दर का समर्थन करता है।
- यह RS-232 प्रोटोकॉल की तुलना में अधिकतम डेटा ट्रांसफर दूरी भी प्रदान करता है। यह अधिकतम 1200 मीटर तक डेटा स्थानांतरित करता है।
- RS-232 पर RS-485 का मुख्य लाभ सिंगल मास्टर के साथ मल्टीपल स्लेव है जबकि RS-232 केवल सिंगल स्लेव का समर्थन करता है।
- RS-485 प्रोटोकॉल से जुड़े अधिकतम 32 डिवाइस हो सकते हैं।
- RS-485 का एक अन्य लाभ शोर के लिए प्रतिरक्षा है क्योंकि वे हस्तांतरण के लिए अंतर सिग्नल विधि का उपयोग करते हैं।
- I2C प्रोटोकॉल की तुलना में RS-485 तेज है।
RS-485 मॉड्यूल सीरियल पोर्ट वाले किसी भी माइक्रोकंट्रोलर से जोड़ा जा सकता है । आरएस -485 मॉड्यूल को माइक्रोकंट्रोलर्स के साथ उपयोग करने के लिए आरएस 485 को 5 वी मैक्स 485 टीटीएल नामक एक मॉड्यूल जो मैक्सिम मैक्स 485 आईसी पर आधारित है, की जरूरत है क्योंकि यह 1200 मीटर की लंबी दूरी पर धारावाहिक संचार की अनुमति देता है और यह द्विदिश और आधा द्वैध का डेटा अंतरण दर 2.5 है। एमबीपीएस। इस मॉड्यूल को 5V के वोल्टेज की आवश्यकता होती है।
RS-485 पिन विवरण:
पिन नाम |
विवरण |
वीसीसी |
5 वी |
ए |
नॉन-इनवर्टिंग रिसीवर इनपुट नॉन-इनवर्टिंग ड्राइवर आउटपुट |
ख |
रिसीवर इनपुट प्राप्त करना चालक उत्पादन में बदलाव |
GND |
GND (0V) |
R0 |
रिसीवर बाहर (आरएक्स पिन) |
पुन |
रिसीवर आउटपुट (कम-सक्षम) |
डे |
चालक आउटपुट (उच्च-सक्षम) |
डि |
ड्राइवर इनपुट (TX पिन) |
RS485 मॉड्यूल में निम्नलिखित विशेषताएं हैं:
- ऑपरेटिंग वोल्टेज: 5 वी
- ऑन-बोर्ड MAX485 चिप
- RS485 संचार के लिए एक कम बिजली की खपत
- स्लीव-रेट सीमित ट्रांसीवर
- 5.08 मिमी पिच 2 पी टर्मिनल
- सुविधाजनक RS-485 संचार तारों
- चिप के सभी पिनों को माइक्रोकंट्रोलर के माध्यम से नियंत्रित किया जा सकता है
- बोर्ड का आकार: 44 x 14 मिमी
STM32F103C8 और Arduino UNO के साथ इस मॉड्यूल का उपयोग करना बहुत आसान है। माइक्रोकंट्रोलर्स के हार्डवेयर सीरियल पोर्ट का उपयोग किया जाता है। STM32 और arduino UNO में हार्डवेयर सीरियल पिन नीचे दिए गए हैं।
- STM32F103C8 में: पिंस PA9 (TX) और PA10 (RX)
- Arduino Uno में: पिन 0 (RX) और 1 (TX)
प्रोग्रामिंग भी बस का उपयोग सरल है Serial.print () RS-485 और लिखने के लिए Serial.Read () से RS-485 और पिन को पढ़ने के लिए डे और आरई के RS-485 किया जाता है डेटा प्राप्त करने के कम और बनाया करने के लिए उच्च RS-485 बस में डेटा लिखें ।
अवयव आवश्यक
- STM32F103C8
- Arduino UNO
- MAX485 TTL से RS485 कनवर्टर मॉड्यूल - (2)
- 10K पोटेंशियोमीटर
- पुश बटन - 3
- एलईडी - 3
- प्रतिरोधों
- ब्रेड बोर्ड
- तारों को जोड़ना
सर्किट आरेख
इस ट्यूटोरियल में STM32F103C8 को एक RS-485 मॉड्यूल के साथ मास्टर के रूप में प्रयोग किया जाता है और Arduino UNO को एक अन्य RS-485 मॉड्यूल के साथ स्लेव के रूप में उपयोग किया जाता है ।
RS-485 और STM32F103C8 (मास्टर) के बीच सर्किट कनेक्शन:
RS-485 |
STM32F103C8 |
डि |
PA9 (TX1) |
डे पुन |
PA3 |
R0 |
PA10 (RX1) |
वीसीसी |
5 वी |
GND |
GND |
ए |
गुलाम आरएस -485 के ए |
ख |
गुलाम आरएस -485 के बी |
तीन पुश बटन के साथ STM32F103C8:
10k के तीन पुल डाउन रेसिस्टर वाले तीन पुश बटन STM32F103C8 के पिन PA0, PA1, PA2 से जुड़े हैं।
RS-485 और Arduino UNO (गुलाम) के बीच सर्किट कनेक्शन:
RS-485 |
Arduino UNO |
डि |
1 (TX) |
डे पुन |
२ |
R0 |
0 (RX) |
वीसीसी |
5 वी |
GND |
GND |
ए |
मास्टर RS-485 के ए के लिए |
ख |
मास्टर आरएस -485 के बी |
तीन एलईडी का उपयोग किया जाता है जहां 330 ओम के अवरोधक के साथ एलईडी के एनोड पिन के 4, 7, 8 से जुड़े होते हैं, अरोडिनो यूएनओ के और कैथोड के एलईडी को जीएनडी से जोड़ा जाता है।
RS485 सीरियल संचार के लिए प्रोग्रामिंग STM32F103C8 और Arduino UNO
Arduino IDE का उपयोग दोनों बोर्डों यानी STM32 और Arduino UNO के विकास और प्रोग्रामिंग के लिए किया जाता है। लेकिन सुनिश्चित करें कि आपने टूल्स-> पोर्ट और बोर्ड से टूल- बोर्ड से संबंधित पोर्ट को चुना है । यदि आपको कोई कठिनाई या संदेह लगता है तो ARDUINO IDE में अपने STM32 प्रोग्रामिंग को देखें। इस ट्यूटोरियल की प्रोग्रामिंग में STM32F103C8 (मास्टर) के लिए दो खंड हैं और अन्य Arduino UNO (Slash) के लिए हैं। दोनों कोड एक-एक करके नीचे बताए जाएंगे।
STM32F103C8 मास्टर के रूप मेंमास्टर साइड में, पुश बटन की स्थिति पढ़ी जाती है और फिर क्रमिक रूप से उन मानों को STM32F103C8 के हार्डवेयर सीरियल पोर्ट्स 1 (PA9, PA10) के माध्यम से RS-485 बस में लिखा जाता है। इसके अलावा किसी बाहरी पुस्तकालय की जरूरत नहीं है। Arduino में सीरियल संचार के लिए सभी आवश्यक पुस्तकालय हैं।
9600 की buadrate पर हार्डवेयर सीरियल पिन (PA9, PA10) का उपयोग करके सीरियल कम्युनिकेशन शुरू करें।
सीरियल १.बेगिन (९ ६००);
पिन PA0, PA1, STM32F103C8 के पुश 2 पर पुश बटन की स्थिति पढ़ें और उन्हें एक चर बटन 1 बटन, बटन 2 बटन, बटन 3 में संग्रहीत करें। यदि बटन दबाया जाता है तो मान उच्च होता है और जब दबाया नहीं जाता है तो कम होता है।
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (बटन 3);
सीरियल पोर्ट पर बटन मान भेजने से पहले, RS-485 के पिन DE & RE को अधिक होना चाहिए जो STM32F103C8 के पिन PA3 (पिन बनाने के लिए PA3 उच्च) से जुड़ा हो:
digitalWrite (enablePin, HIGH);
उन मूल्यों को सीरियल पोर्ट में डालने के लिए और मूल्यों को भेजने पर निर्भर करता है जिनके आधार पर पुश बटन को दबाया जाता है यदि अन्य विवरण और बटन दबाए जाने पर संबंधित मान भेजें।
यदि पहला बटन दबाया जाता है तो स्थिति मेल खाती है और '1' मान सीरियल पोर्ट पर भेजा जाता है जहां Arduino UNO जुड़ा हुआ है।
if (button1val == High) { int num1 = 1; सीरियल 1.प्रिंटल (अंक 1); }
इसी तरह, जब बटन 2 दबाया जाता है तो मान 2 सीरियल पोर्ट पर भेजा जाता है और जब बटन 3 दबाया जाता है तो मान 3 सीरियल पोर्ट के ऊपर भेजा जाता है।
और यदि (बटन 2 अंतराल == उच्च) { इंट संख्या 2 = 2; धारावाहिक 1. छापल (संख्या 2); } और अगर (button3val == High) { int num3 = 3; सीरियल 1.प्रिंटल (अंक 3); }
और जब कोई बटन नहीं दबाया जाता है तो मान 0 Arduino Uno को भेजा जाता है।
और { int num = 0; धारावाहिक 1. छापल (संख्या); }
यह STM32 को मास्टर के रूप में कॉन्फ़िगर करने के लिए प्रोग्रामिंग को पूरा करता है।
दास के रूप में Arduino UNOदास पक्ष में Arduino UNO को एक पूर्णांक मान प्राप्त होता है जो मास्टर STM32F103C8 से भेजा जाता है जो Arduino UNO (P0, 1) के हार्डवेयर सीरियल पोर्ट पर उपलब्ध होता है जहाँ RS-4S मॉड्यूल जुड़ा होता है।
बस एक चर में मूल्य और स्टोर पढ़ें। प्राप्त एलईडी के मूल्य के आधार पर Arduino GPIO से जुड़ा हुआ ON या OFF चालू होता है।
मास्टर से मान प्राप्त करने के लिए बस RS-485 मॉड्यूल LOW का पिन DE & RE बनाएं । तो Arduino UNO का पिन -2 (enablePin) LOW बना है।
digitalWrite (enablePin, LOW);
अब बस सीरियल पोर्ट पर उपलब्ध पूर्णांक डेटा पढ़ें और उन्हें एक चर में संग्रहीत करें।
int प्राप्त करना = Serial.parseInt ();
प्राप्त किए गए मान के आधार पर (0, 1, 2, 3), तीन एलईड में से एक को चालू किया जाता है।
अगर (प्राप्त == 1) // प्राप्त मूल्य के आधार पर संबंधित एलईडी चालू या बंद है { digitalWrite (ledpin1, HIGH); } और अगर (प्राप्त == 2) { digitalWrite (ledpin2, HIGH); } और यदि (= = 3) { digitalWrite (ledpin3, HIGH); } और { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
यह प्रोग्रामिंग खत्म करता है और Arduino UNO को गुलाम के रूप में कॉन्फ़िगर करता है। इसके अलावा यह Arduino UNO और STM32 के लिए पूर्ण कॉन्फ़िगरेशन को पूरा करता है। इस ट्यूटोरियल के अंत में वर्किंग वीडियो और सभी कोड संलग्न हैं।
STM32F103C8 और Arduino UNO के बीच RS485 संचार का परीक्षण:
1. जब पुश बटन -1, जो मास्टर STM32 से जुड़ा होता है, को स्लेव अरुडिनो से जुड़े एलईडी 1 टर्न ऑन को दबाया जाता है।
2. जब पुश बटन -2, जो मास्टर एसटीएम 32 से जुड़ा होता है, को एलईडी 2 टर्न ओन को स्लेव डुडिनो से जोड़ा जाता है।
3. इसी तरह जब पुश बटन -3 को दबाया जाता है तो एलईडी 3 टर्न ओन को स्लेव अरुडिनो से जोड़ा जाता है।
यह STM32F103C8 और Arduino UNO के बीच RS485 धारावाहिक संचार को समाप्त करता है । Arduino UNO और STM32 बोर्ड तेजी से प्रोटोटाइप के लिए व्यापक रूप से उपयोग किए जाने वाले बोर्ड हैं और हमने इन बोर्डों पर कई उपयोगी प्रोजेक्ट किए हैं। यदि आपको कोई संदेह है या हमारे लिए कोई सुझाव है तो नीचे लिखें और टिप्पणी करें।