विषयसूची:

CAN प्रोटोकॉल - हाँ, हम कर सकते हैं!: 24 कदम
CAN प्रोटोकॉल - हाँ, हम कर सकते हैं!: 24 कदम

वीडियो: CAN प्रोटोकॉल - हाँ, हम कर सकते हैं!: 24 कदम

वीडियो: CAN प्रोटोकॉल - हाँ, हम कर सकते हैं!: 24 कदम
वीडियो: Immunity बढ़ाने के 3 तरीके + अपना Immunity Score जानिए | Satvic Movement 2024, जुलाई
Anonim
Image
Image
प्रयुक्त संसाधन
प्रयुक्त संसाधन

मेरे YouTube चैनल के अनुयायियों द्वारा हाल ही में सुझाया गया एक अन्य विषय CAN (कंट्रोलर एरिया नेटवर्क) प्रोटोकॉल था, जिस पर हम आज ध्यान केंद्रित करेंगे। यह समझाना महत्वपूर्ण है कि CAN एक युगपत धारावाहिक संचार प्रोटोकॉल है। इसका मतलब यह है कि नेटवर्क से जुड़े मॉड्यूल के बीच तालमेल बस को भेजे गए प्रत्येक संदेश की शुरुआत के संबंध में किया जाता है। हम CAN प्रोटोकॉल की बुनियादी अवधारणाओं को पेश करके शुरुआत करेंगे और दो ESP32s के साथ एक साधारण असेंबली करेंगे।

हमारे सर्किट में, ईएसपी मास्टर और स्लेव दोनों के रूप में कार्य कर सकते हैं। आपके पास एक साथ कई माइक्रोकंट्रोलर संचारित हो सकते हैं, क्योंकि CAN स्वचालित रूप से हर चीज के टकराव से निपटता है। इस परियोजना का स्रोत कोड सुपर सरल है। इसकी जांच - पड़ताल करें!

चरण 1: प्रयुक्त संसाधन

  • ESP WROOM 32 NodeMcu. के दो मॉड्यूल
  • वेवशेयर से दो कैन ट्रांसीवर
  • कनेक्शन के लिए जंपर्स
  • कब्जा करने के लिए तार्किक विश्लेषक
  • ईएसपी और विश्लेषक के लिए तीन यूएसबी केबल
  • बस के रूप में काम करने के लिए 10 मीटर की मुड़ जोड़ी

चरण 2: कर सकते हैं (नियंत्रक क्षेत्र नेटवर्क)

CAN (कंट्रोलर एरिया नेटवर्क)
CAN (कंट्रोलर एरिया नेटवर्क)
  • यह मोटर वाहन उद्योग की सेवा के लिए 1980 के दशक में रॉबर्ट बॉश जीएमबीएच द्वारा विकसित किया गया था।
  • इसकी मजबूती और कार्यान्वयन के लचीलेपन के कारण यह पिछले कुछ वर्षों में व्यापक हो गया है। इसका उपयोग सैन्य उपकरण, कृषि मशीनरी, औद्योगिक और भवन स्वचालन, रोबोटिक्स और चिकित्सा उपकरणों के साथ किया जा रहा है।

चरण 3: कर सकते हैं - विशेषताएं

कर सकते हैं - विशेषताएं
कर सकते हैं - विशेषताएं
कर सकते हैं - विशेषताएं
कर सकते हैं - विशेषताएं
  • दो-तार धारावाहिक संचार
  • प्रति फ्रेम उपयोगी जानकारी के अधिकतम 8 बाइट्स, विखंडन संभव के साथ
  • पता संदेश को निर्देशित किया गया और नोड को नहीं
  • संदेशों को प्राथमिकता देना और "होल्ड पर" संदेशों को प्रसारित करना
  • त्रुटियों का पता लगाने और संकेत करने की प्रभावी क्षमता
  • मल्टी-मास्टर क्षमता (सभी नोड्स बस एक्सेस का अनुरोध कर सकते हैं)
  • मल्टीकास्ट क्षमता (एक ही समय में कई रिसीवर के लिए एक संदेश)
  • 40 मीटर की बस पर 1Mbit / s तक की स्थानांतरण दर (बसबार की लंबाई में वृद्धि के साथ दर में कमी)
  • कॉन्फ़िगरेशन का लचीलापन और नए नोड्स की शुरूआत (प्रति बस 120 नोड्स तक)
  • मानक हार्डवेयर, कम लागत और अच्छी उपलब्धता
  • विनियमित प्रोटोकॉल: आईएसओ 11898

चरण 4: प्रयुक्त सर्किट

सर्किट प्रयुक्त
सर्किट प्रयुक्त

यहाँ, मेरे पास ट्रांसीवर हैं। प्रत्येक तरफ एक है, और वे तारों की एक जोड़ी से जुड़े हुए हैं। एक भेजने के लिए और दूसरा डेटा प्राप्त करने के लिए जिम्मेदार है।

चरण 5: ट्रांसमिशन लाइन वोल्टेज (डिफरेंशियल डिटेक्शन)

ट्रांसमिशन लाइन वोल्टेज (डिफरेंशियल डिटेक्शन)
ट्रांसमिशन लाइन वोल्टेज (डिफरेंशियल डिटेक्शन)

CAN में, प्रमुख बिट शून्य है।

लाइन डिफरेंशियल डिटेक्शन शोर संवेदनशीलता को कम करता है (EFI)

चरण 6: मानक और फ्रेम प्रारूप कर सकते हैं

मानक और फ्रेम प्रारूप कर सकते हैं
मानक और फ्रेम प्रारूप कर सकते हैं

11-बिट पहचानकर्ता के साथ मानक प्रारूप

चरण 7: मानक और फ्रेम प्रारूप कर सकते हैं

मानक और फ्रेम प्रारूप कर सकते हैं
मानक और फ्रेम प्रारूप कर सकते हैं

29-बिट पहचानकर्ता के साथ विस्तारित प्रारूप

चरण 8: मानक और फ्रेम प्रारूप कर सकते हैं

यह ध्यान रखना महत्वपूर्ण है कि एक प्रोटोकॉल पहले से ही सीआरसी की गणना करता है और एसीके और ईओएफ सिग्नल भेजता है, जो ऐसी चीजें हैं जो पहले से ही कर सकते हैं प्रोटोकॉल। यह गारंटी देता है कि भेजा गया संदेश गलत तरीके से नहीं आएगा। ऐसा इसलिए है क्योंकि यदि यह सीआरसी (रिडंडेंट साइक्लिक चेक या रिडंडेंसी चेक) में कोई समस्या देता है, जो एक सूचना जांच अंक के समान है, तो इसे सीआरसी द्वारा पहचाना जाएगा।

चरण 9: चार प्रकार के फ़्रेम (फ़्रेम)

चार प्रकार के फ्रेम (फ्रेम)
चार प्रकार के फ्रेम (फ्रेम)

यह ध्यान रखना महत्वपूर्ण है कि एक प्रोटोकॉल पहले से ही सीआरसी की गणना करता है और एसीके और ईओएफ सिग्नल भेजता है, जो ऐसी चीजें हैं जो पहले से ही कर सकते हैं प्रोटोकॉल। यह गारंटी देता है कि भेजा गया संदेश गलत तरीके से नहीं आएगा। ऐसा इसलिए है क्योंकि यदि यह सीआरसी (रिडंडेंट साइक्लिक चेक या रिडंडेंसी चेक) में कोई समस्या देता है, जो एक सूचना जांच अंक के समान है, तो इसे सीआरसी द्वारा पहचाना जाएगा।

चार प्रकार के फ्रेम (फ्रेम)

CAN में डेटा का ट्रांसमिशन और रिसेप्शन चार तरह के फ्रेम पर आधारित होता है। फ़्रेम प्रकारों की पहचान नियंत्रण बिट्स में भिन्नता या यहां तक कि प्रत्येक मामले के लिए फ़्रेम लेखन नियमों में परिवर्तन द्वारा की जाएगी।

  • डेटा फ़्रेम: रिसीवर के लिए ट्रांसमीटर डेटा शामिल है
  • रिमोट फ़्रेम: यह किसी एक नोड से डेटा के लिए अनुरोध है
  • त्रुटि फ़्रेम: यह बस में किसी त्रुटि की पहचान करते समय किसी भी नोड द्वारा भेजा गया एक फ्रेम है और सभी नोड्स द्वारा पता लगाया जा सकता है
  • अधिभार फ़्रेम: डेटा अधिभार या एक या अधिक नोड्स पर देरी के कारण बस में यातायात में देरी करने के लिए कार्य करता है।

चरण 10: सर्किट - कनेक्शन का विवरण

सर्किट - कनेक्शन का विवरण
सर्किट - कनेक्शन का विवरण

चरण 11: सर्किट - डेटा कैप्चर

सर्किट - डेटा कैप्चर
सर्किट - डेटा कैप्चर

11-बिट आईडी. के साथ मानक CAN के लिए प्राप्त तरंगदैर्घ्य

चरण 12: सर्किट - डेटा कैप्चर

सर्किट - डेटा कैप्चर
सर्किट - डेटा कैप्चर

29-बिट आईडी. के साथ विस्तारित CAN के लिए प्राप्त तरंगदैर्घ्य

चरण 13: सर्किट - डेटा कैप्चर

सर्किट - डेटा कैप्चर
सर्किट - डेटा कैप्चर

तर्क विश्लेषक द्वारा प्राप्त डेटा

चरण 14: Arduino लाइब्रेरी - CAN

Arduino लाइब्रेरी - CAN
Arduino लाइब्रेरी - CAN

मैं यहाँ दो विकल्प दिखाता हूँ जहाँ आप CAN ड्राइवर लाइब्रेरी स्थापित कर सकते हैं

Arduino IDE लाइब्रेरी मैनेजर

चरण 15: जीथब

Github
Github

github.com/sandeepmistry/arduino-CAN

चरण 16: ट्रांसमीटर स्रोत कोड

स्रोत कोड: शामिल है और सेटअप ()

हम CAN लाइब्रेरी को शामिल करेंगे, डिबगिंग के लिए सीरियल शुरू करेंगे, और CAN बस को 500 kbps पर शुरू करेंगे।

#include // शामिल करें एक biblioteca CAN void setup() { Serial.begin(9600); // इनिशिया एक सीरियल पैरा डिबग जबकि (! सीरियल); Serial.println ("ट्रांसमिसर CAN"); // इनिसिया ओ बैरामेंटो CAN 500 kbps if (!CAN.begin(500E3)) { Serial.println("Falha ao iniciar o controlador CAN"); // कासो नो सेजा पॉसिवेल इनिसियर ओ कंट्रोलडोर जबकि (1); } }

चरण 17: स्रोत कोड: लूप (), एक मानक CAN 2.0 पैकेट भेजना

मानक CAN 2.0 का उपयोग करते हुए, हम एक पैकेज भेजते हैं। 11-बिट आईडी संदेश की पहचान करता है। डेटा ब्लॉक में 8 बाइट्स तक होना चाहिए। यह हेक्साडेसिमल में आईडी 18 के साथ पैकेट शुरू करता है। यह 5 बाइट्स पैक करता है और फ़ंक्शन को बंद कर देता है।

शून्य लूप () {// उसांडो ओ कैन 2.0 पैड्रो // एनविया उम पैकोटे: ओ आईडी मंदिर 11 बिट्स और एक मेन्सेजम (प्राथमिकता, घटना) // ओ ब्लोको डे डैडोस देवे पॉसुइर एट 8 बाइट्स सीरियल.प्रिंट्लन ("एनविंडो पैकोटे" …"); CAN.beginPacket (0x12); // आईडी 18 एम हेक्साडेसिमल CAN.लिखें ('एच'); // 1º बाइट CAN.लिखें ('ई'); //º बाइट CAN.write('l'); ///3º बाइट CAN.write('l'); // 4º बाइट CAN.लिखें ('ओ'); ///5º बाइट CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado।"); देरी (1000);

चरण 18: स्रोत कोड: लूप (), एक विस्तारित CAN 2.0 पैकेज भेजना

इस चरण में, आईडी में 29 बिट होते हैं। यह 24 बिट्स आईडी भेजना शुरू करता है और एक बार फिर 5 बाइट्स पैक करता है और छोड़ देता है।

// उसांडो कैन 2.0 एस्टेन्डिडो // एनविया उम पैकोटे: ओ आईडी मंदिर 29 बिट्स ई आइडेंटिफा ए मेन्सेजम (प्राथमिकता, इवेंटो) // ओ ब्लोको डे डैडोस देवे पॉसुइर एट 8 बाइट्स सीरियल। CAN.beginExtendedPacket(0xabcdef); // आईडी ११२५९३५ दशमलव (abcdef em hexa) = २४ बिट्स preenchidos até aqui CAN.write('w'); // 1º बाइट CAN.लिखें ('ओ'); //º बाइट CAN.write('r'); ///3º बाइट CAN.write('l'); // 4º बाइट CAN.लिखें ('डी'); ///5º बाइट CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado।"); देरी (1000); }

चरण 19: रिसीवर स्रोत कोड

स्रोत कोड: शामिल है और सेटअप ()

फिर से, हम CAN लाइब्रेरी को शामिल करेंगे, डिबग करने के लिए सीरियल शुरू करेंगे, और CAN बस को 500 kbps पर शुरू करेंगे। यदि कोई त्रुटि होती है, तो यह त्रुटि मुद्रित की जाएगी।

#include // शामिल करें एक biblioteca CAN void setup() { Serial.begin(9600); // इनिशिया एक सीरियल पैरा डिबग जबकि (! सीरियल); Serial.println ("रिसेप्टर CAN"); // इनिसिया ओ बैरामेंटो CAN 500 kbps if (!CAN.begin(500E3)) { Serial.println("Falha ao iniciar o controlador CAN"); // कासो नो सेजा पॉसिवेल इनिसियर ओ कंट्रोलडोर जबकि (1); } }

चरण 20: स्रोत कोड: लूप (), पैकेज प्राप्त करना और प्रारूप की जाँच करना

हमने प्राप्त पैकेट के आकार की जांच करने की कोशिश की। CAN.parsePacket () विधि मुझे इस पैकेज का आकार दिखाती है। इसलिए यदि हमारे पास कोई पैकेज है, तो हम जांच करेंगे कि यह बढ़ाया गया है या नहीं।

शून्य लूप () {// टेंटा सत्यापन या तमनहो दो एकोटे रिसेबिडो इंट पैकेटसाइज = CAN.parsePacket (); अगर (पैकेटसाइज) {// से टेम्पोस उम पैकोटे सीरियल.प्रिंट्लन ("रिसेबिडो पैकोटे।"); if (CAN.packetExtended()) {//verifica se o pacote é estendido Serial.println("Estendido"); }

चरण 21: स्रोत: लूप (), यह देखने के लिए जाँच करता है कि क्या यह एक दूरस्थ पैकेज है

यहां, हम जांचते हैं कि प्राप्त पैकेट डेटा अनुरोध है या नहीं। इस मामले में, कोई डेटा नहीं है।

if (CAN.packetRtr ()) {//Verifica se o pacote é um pacote remoto (Requição de dados), नेस्ट कासो não há dados Serial.print("RTR"); }

चरण 22: स्रोत कोड: लूप (), अनुरोधित या प्राप्त डेटा लंबाई

यदि प्राप्त पैकेट एक अनुरोध है, तो हम अनुरोधित लंबाई का संकेत देते हैं। हम तब डेटा लंबाई कोड (डीएलसी) प्राप्त करते हैं, जो डेटा की लंबाई को इंगित करता है। अंत में, हम प्राप्त लंबाई को इंगित करते हैं।

सीरियल.प्रिंट ("पैकोटे कॉम आईडी 0x"); सीरियल.प्रिंट (CAN.packetId (), HEX); if (CAN.packetRtr ()) {//se o pacote recebido é de requicição, संकेत o comprimento solicitado Serial.print("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // ऑब्जेक्ट ओ डीएलसी (डेटा लंबाई कोड, क्यू इंडिका ओ कॉम्प्रिमेंटो डॉस डैडोस)} और {सीरियल.प्रिंट ("ई कॉम्प्रिमेंटो"); // एक्वी सोमेंट इंडिका या कॉम्प्रिमेंटो रिसेबिडो सीरियल.प्रिंट्लन (पैकेटसाइज);

चरण 23: स्रोत कोड: लूप (), यदि डेटा प्राप्त होता है, तो यह प्रिंट हो जाता है

हम डेटा (सीरियल मॉनिटर पर) प्रिंट करते हैं, लेकिन केवल तभी जब प्राप्त पैकेट अनुरोध नहीं है।

// इम्प्राइम ओएस डैडोस सोमेंट से ओ पैकोटे रिसेबिडो नो फोई डे रिक्विसकाओ जबकि (कैन.उपलब्ध ()) {सीरियल.प्रिंट ((चार) CAN.read ()); } सीरियल.प्रिंट्लन (); } सीरियल.प्रिंट्लन (); } }

चरण 24: फ़ाइलें डाउनलोड करें

पीडीएफ

मैं नहीं

सिफारिश की: