क्या MCP2551 एक UART-to-CAN कनवर्टर है?


12

मैं अपने कंप्यूटर का उपयोग करते हुए 250 kbit / s के लिए CAN बस स्निफर बनाना चाहता हूं। कुछ शोध के बाद मैंने पाया है कि CAN की भौतिक परत के लिए MCP2551 कुछ प्रकार का वोल्टेज स्तर नियामक है। इसे ध्यान में रखते हुए, मैं सोच रहा था कि क्या यह सेटअप काम कर सकता है। मैं केवल स्वचालित परीक्षण उद्देश्यों के लिए एक्सचेंज किए गए संदेशों को रिकॉर्ड करना चाहता हूं, संचार का हिस्सा नहीं:

PC <-> USB-UART (शायद CP2102, मेरे पास पहले से ही एक है) <-> MCP2551 <>> बस

यदि नहीं, तो मुझे बस का हिस्सा बनाने के लिए MCP2551 में किस तरह के संकेतों को दर्ज करना है?

जवाबों:


14

आप ऐसा कर सकते हैं, लेकिन आप अपने CAN बस में जो प्राप्त करेंगे, वह CAN वोल्टेज स्तरों का उपयोग करके UART होगा। यदि आप अपने बस में CAN उपकरणों के साथ संवाद करना चाहते हैं तो आपको CAN प्रोटोकॉल संदेशों के साथ MCP2551 की आपूर्ति करनी होगी। सुनने के लिए भी: संदेश UART के प्रारूप से इतने भिन्न होते हैं कि UART को पता नहीं चलेगा कि उनके साथ क्या करना है। आपके पास हर समय कम से कम फ़्रेम त्रुटियाँ होंगी, और आपको संदेश की सामग्री नहीं मिलेगी।
यह छवि CAN संदेश की संरचना दिखा सकती है:

यहाँ छवि विवरण दर्ज करें

वहाँ बहुत सारे माइक्रोकंट्रोलर्स के चारों ओर एक CAN इंटरफेस है, है बिना ट्रांसीवर। यह इनके लिए है कि MCP2551 को डिजाइन किया गया था। अतीत में हमने NXP LPC2294 का उपयोग किया है, जिसमें 4 CAN इंटरफेस हो सकते हैं। उनमें से प्रत्येक को CAN बस से जुड़ने के लिए MCP2551 की आवश्यकता होती है। NXP से अधिक हाल के नियंत्रकों में LPC1800 परिवार शामिल हैं, जिनमें से सभी सदस्य CAN का समर्थन कर सकते हैं।


मैं पूरी तरह से UART के स्टार्ट / स्टॉप बिट्स के बारे में भूल गया और शायद कुछ "स्टार्ट / टॉप बिट्स" स्थितियां भी। मैं शायद कि MCP2551 के लिए संचारण खत्म हो जाएगा एक समाधान पीसी FTDI एक GPIO के रूप में उपयोग करने पर एक CAN ढेर का उपयोग कर खोजने के लिए कोशिश करता हूँ
rnunes

3
@rnunes - यह केवल शुरुआत / स्टॉप बिट्स नहीं है। उन लोगों के बिना एक UART ट्रांसमिशन सिर्फ 8-बिट बाइट है। A संदेश संदेश को संबोधित करने, प्राथमिकता और त्रुटि जाँच के साथ बहुत अधिक जटिल है। आप दोनों की तुलना नहीं कर सकते।
स्टीवन्वह

लेकिन एफटीडीआई का उपयोग करके मैं बिट द्वारा काम कर रहा हूं (मूल रूप से, यह वास्तव में तेज़ यूएसबी <-> GPIO है), UART के साथ बाइट द्वारा नहीं। मैं पहले से ही उन CAN MCU की तलाश में हूं, लेकिन मैं अब (यह एक छात्र शौक परियोजना है) के लिए कोई भी पैसा खर्च करना पसंद करूंगा और मेरे पास पहले से ही FTDI है। अगर मैं अपने शोधों के साथ यह निष्कर्ष निकालता हूं कि FTDI ऐसा करने में सक्षम नहीं होगा, तो मैं CAN MCU का उपयोग करने की कोशिश करूंगा।
rnunes

स्टैक सब कुछ (जैसे बिट स्टफिंग) को संभालने के लिए जिम्मेदार होगा और इसे बिट द्वारा MCP2551 तक प्रसारित करेगा। एकमात्र समस्या जो मुझे अभी हो रही है, वह है एफटीडीआई विलंबता, क्योंकि मुझे इसे तेज और नियमित करने की आवश्यकता है, लेकिन मैं इसे बाद में मापूंगा।
rnunes

1
@rnunes - लेकिन CP2102 (SiLabs, FTDI नहीं) से क्या निकलता है, बाइट्स हैं , बिट्स नहीं। आप इसे एक बिट के बाद नहीं रोक सकते। USB के साथ अपने माइक्रोकंट्रोलर को इंटरफेस करने के लिए आपको CP2102 की आवश्यकता होगी, और CAN + MCP2551 को सपोर्ट करने वाले एक माइक्रोकंट्रोलर को। या एक माइक्रोकंट्रोलर जो USB डिवाइस के रूप में भी कार्य कर सकता है। फिर आपको CP2102 की आवश्यकता नहीं है।
स्टीवनवह

7

मैंने MPSSE मोड (UART को भूल जाएं), MCP2515 और MZ2551 में FT2232H का उपयोग करके एक USB / CAN इंटरफ़ेस बनाया है । MCP2515 वह महत्वपूर्ण टुकड़ा है जिसे आप यहाँ याद कर रहे हैं। अच्छी तरह से अध्ययन करें कि यह क्या करता है। यह वास्तविक CAN नियंत्रक है जो फ्रेमिंग, ACKs, चेकसम जेनरेशन और सत्यापन, संदेश फ़िल्टरिंग और अन्य कम स्पष्ट चीजें करता है जो कि CAN नोड को मानक द्वारा करने की आवश्यकता होती है। यदि आप एक स्निफर चाहते हैं, तो MCP2515 में केवल एक ही मोड है जो बस में कोई प्रसारण की गारंटी देता है। MCP2551 RS-232 के लिए MAX232 या RS-485 के लिए ADM485 के समान, केवल एक गूंगा भौतिक परत एडाप्टर है।

अब यह वास्तुकला सही से दूर है क्योंकि एफटीडीआई एमपीएसएसई तकनीक में अनिवार्य रूप से इंटरप्ट के लिए कोई समर्थन नहीं है (मेरा मानना ​​है कि यह केवल पर्दे के पीछे बल्क यूएसबी ट्रांसफर का उपयोग करता है), इसलिए मुझे नए संदेशों के लिए अक्सर नियंत्रक को सर्वेक्षण करना होगा। यह USB होस्ट नियंत्रक पर बहुत अधिक लोड करता है, लेकिन फिर भी यह गारंटी नहीं देता है कि कोई भी संदेश गुम नहीं हुआ है (MCP2515 2 प्राप्त संदेशों को आंतरिक रूप से संग्रहीत कर सकता है यदि आप "अतिप्रवाह मोड" को सक्षम करते हैं, केवल एक अगर आप नहीं करते हैं)। एक बेहतर समाधान एक उचित माइक्रोकंट्रोलर होगा जिसमें बिल्टइन कैन और यूएसबी पेरीफेरल्स जैसे STM32F105 (103 एक ही समय में USB और CAN का उपयोग नहीं कर सकते हैं)। इस विचार के ठीक क्रियान्वयन के लिए इस परियोजना को देखें । LPC18xx जैसा कि स्टीवन द्वारा सुझाया गया है, वह भी काम करेगा, लेकिन LPC17xx संभवतः सस्ता और खोजने में आसान है।


इस मामले में, पूलिंग करना कोई समस्या नहीं है, लेकिन हाँ, आदर्श समाधान CAN नियंत्रक के साथ MCU का उपयोग किया जाएगा जो CAN संदेश बफर के रूप में काम करता है। अब से मैं आपके द्वारा लिखे गए पहले सेटअप का उपयोग करने का प्रयास करूँगा। धन्यवाद
rnunes

+1 यूटीडी के बिना FT कंट्रोलर से सीधे बात करने के लिए FTDI चिप का उपयोग करना साफ-सुथरा है। एफटीडीआई एफटी 221 एक्स से बाहर आया, जो एसपीआई पुल के लिए एक समर्पित यूएसबी है। (वहाँ I2C के लिए यूएसबी के लिए एक अलग मॉडल भी है।)
निक एलेक्सीव

2

चूंकि आप मौजूदा कैन बस में सुनना चाहते हैं, क्योंकि मैं सवाल समझता हूं, आप वास्तव में एक UART का उपयोग नहीं कर सकते। कैन और UART सिगनलिंग पूरी तरह से अलग हैं।

आप MCP2551 से निकलने वाली CAN प्राप्त लाइन को सिद्धांत रूप में देख सकते हैं और CAN यातायात को डिकोड कर सकते हैं। यह आसान नहीं होगा, लेकिन यह सैद्धांतिक रूप से संभव है। विशिष्ट CAN हार्डवेयर के बिना, आपको बिट दर से कुछ गुना तेजी से नमूना लेना होगा और उस बिट स्ट्रीम को बाद में सॉफ़्टवेयर में डिकोड करना होगा। संभवतः आपको 250 kbit / s CAN को डिकोड करने के लिए लगभग 1 Mbit / s पर रिकॉर्ड करना होगा।

माइक्रोकंट्रोलर का उपयोग करना कहीं अधिक आसान होगा। PIC 18F2580 और इसी तरह के अन्य प्रोसेसर में CAN परिधीय बनाया जा सकता है। हार्डवेयर सभी बिट स्तर को डिकोड करता है और संपूर्ण CAN फ्रेम प्राप्त करता है। फिर प्रोसेसर अपने यूएआरटी के माध्यम से प्राप्त कैन फ्रेम को आपके पीसी पर भेज सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.