क्या मैं 2 मी केबल पर I2C का उपयोग कर सकता हूं?


24

मेरी वर्तमान परियोजना में, मुझे I2C पर एक माइक्रोकंट्रोलर और कुछ सेंसर के बीच संवाद करने की आवश्यकता है। उनमें से एक तापमान संवेदक है, इसे माइक्रोकंट्रोलर से लगभग 2 मीटर की दूरी पर रखा जाना चाहिए। मैं दूसरा प्रोटोकॉल नहीं चुन सकता (सेंसर दिए गए कनेक्टर / पिन / प्रोटोकॉल के साथ एक मॉड्यूल पर है)।

क्या आपको लगता है कि इस कॉन्फ़िगरेशन में संवाद करना संभव है? यह सुनिश्चित करने के लिए मुझे क्या जानकारी देखनी चाहिए कि यह संभव हो सकता है या नहीं? क्या आपके पास कुछ सलाह है?

यह पीसीबी के बाहर आईसी के साथ संवाद करने का मेरा पहला मौका है।


5
कृपया अधिक जानकारी जोड़ें। I2c की गति क्या होगी? पुल-अप प्रतिरोध? प्रयुक्त केबल और इसकी धारिता? मेजबान MCU क्या है और सेंसर क्या है? लेकिन सामान्य तौर पर, I2C एचडीएमआई जैसे केबलों पर कई मीटर काम करता है, इसलिए यह काम करना चाहिए जब चीजें ठीक से की जाती हैं।
Justme


6
"मैं एक और प्रोटोकॉल नहीं चुन सकता हूं" आप सेंसर के करीब एक दूसरा माइक्रोकंट्रोलर रख सकते हैं, डेटा पढ़ सकते हैं और उन्हें अपने पसंद के किसी भी प्रोटोकॉल के साथ भेज सकते हैं।
FooBar

1
क्या आपके पास kbit / s में न्यूनतम गति है?
मस्तूल

2
यदि आप घड़ी को धीमा कर देते हैं तो आप काफी लंबी दूरी तय कर सकते हैं।
ताँबा.हाट

जवाबों:


36

I2C को लंबी दूरी पर उपयोग करने के लिए डिज़ाइन नहीं किया गया है, लेकिन मुझे कई अनुप्रयोगों के बारे में पता है जहां यह वास्तव में लगभग 2 मीटर की दूरी पर उपयोग किया जाता है। मुझे एक मामले का भी पता है, जहां उनके साथ मुद्दे थे और यह ग्राउंड लूप्स को ठीक करके निश्चित रूप से तय किया गया था, जो मुझे विश्वास है।

यह सुनिश्चित करने के लिए कि यह कार्य करेगा, आपको P82B715 की तरह एक I2C बस एक्सटेंडर का उपयोग करना चाहिए।

हालाँकि, PB2B715 की डेटशीट धारा 8.2 में निम्नलिखित बताती है:

टेलीफोनी या ईथरनेट (कैट 5 ई) वायरिंग के लिए इस्तेमाल की जाने वाली विशिष्ट मुड़ जोड़ी या फ्लैट केबलों के लिए, वह समाई 50 pF से 70 pF / मीटर तक होती है, इसलिए केबल, सिद्धांत रूप में, 50 मीटर तक लंबी हो सकती है । व्यावहारिक अनुभव से, 30 मीटर ने एक सुरक्षित केबल लंबाई साबित की है इस सरल तरीके से, 100 kHz तक, दिखाए गए मानों के साथ। लंबी दूरी और उच्च गति संभव है लेकिन अधिक सावधान डिजाइन की आवश्यकता है।

तो विशेषज्ञ (NXP पूर्व फिलिप्स, I2C के आविष्कारक हैं) का कहना है कि 30 मीटर एक सिद्ध दूरी साबित हुई है। मेरा अनुभव कहता है कि 2 मीटर एक उल्लेखनीय दूरी है, और जो अनुभव मुझे वापस रिपोर्ट किए गए थे, वे संकेत देते हैं कि बिना किसी एक्सटेंडर के अधिक भारी लोड वाली I2C बसें भी संभव हैं।

I2C बसों को लंबी दूरी पर काम करने के लिए मुख्य बिंदु हैं:

  • एक कम समाई केबल (मुड़-जोड़ी / ईथरनेट) का उपयोग करना;
  • बस की गति सीमित करना;
  • पुल-अप होने से वे सही आकार के होते हैं।

पुलअप गणना

टेक्सास इंस्ट्रूमेंट्स में पुल-अप गणना के बारे में एक अच्छा एप्लिकेशन नोट (SLVA689) है

  • (3.6 V1 V) / 20 mA=130 Ω
  • Rmax=tr/(0.8473Cb)trCbCbtr=1ms), then you'll find Rmax=2950 Ω . TI's application note has graphs so that you can find appropriate values quickly.
  • Of course the value for the pullup is the equivalent value of all pullups in parallel combined. You may have a pullup on the master end, the slave end, and any other slave/master on the bus.
  • The more you are "at the limit", the more you also need to account for "parasitics" such as the voltage drop in the cable.

Having pull-ups that are correctly sized? How to determine the value and power rating?
Quantum0xE7

As Nick B commented on another answer, be wary of the possibility of the bus extender chip or whatever else heating the temp sensor by a couple degrees.
Peter Cordes

14

You are generally limited by 400 pF maximum bus capacitance.

It should work fine if you lower your frequency to something like 1 kHz and provide power supply decoupling next to the sensor.

If you need something more robust then you can use differential I2C converters on both ends like PCA9615.


I dimly recall some sensors having a minimum I2C frequency (not sure why).
Michael

14

You can, but it is not recommended.

Different buses for different purposes

I2C, like SPI, is designed for communication within a board or group of boards (think Raspberry Pi and its hats or arduino and its shields). It can work over longer distances (see other answers) but should not be used in those cases, simply because that's not what it was designed, optimised and qualified for.

The risk you take is that you may not be able to add more sensors in the future, or that your system will not work everywhere, or will fail under certain circumstances.

What you should be looking for is a field bus, something like 1-wire, CAN, RS-485, ethernet, etc.

Wireless systems like bluetooth or zigbee could also be an option.


9

As noted by @filo, I2C is generally limited by the bus capacitance. However, there are ways to work around this:

  1. Use a bus extender. The P82B96 or PCA9600 would both be good options in your case.
  2. If you need higher speeds or extremely long cables, you can use a differential I2C transceiver like the PCA9600. However, this will make your circuit considerably more complicated, and you need an IC at both ends of the cable.

Take a look at AN10658 and AN11084 from NXP for more information.


1
यह एक बस एक्सटेंडर के साथ ठीक काम करेगा, जैसा कि कई अन्य लोगों ने कहा है। देखने के लिए तुरंत कुछ स्पष्ट नहीं है कि सेंसर अंत और बस एक्सटेंडर एक साथ पास हैं, तो सेंसर अंत में बस भरने वाला तापमान संवेदक को कुछ डिग्री तक बढ़ाने के लिए पर्याप्त गर्मी को नष्ट कर सकता है।
निक बी

4

मुझे फिल्मो और कालेब के जवाब पसंद हैं।

एक अन्य विकल्प एक या एक से अधिक DS28E17 1-वायर-टू-I2C मास्टर पुलों का व्यक्तिगत सेंसर पर उपयोग कर रहा है और बस को ऑनवायर के रूप में तार करता है। यह 100 मीटर की बसों के लिए अच्छा है और वितरित तापमान और बैटरी प्रबंधन के रूप में कम-थ्रूपुट सेंसर सरणी अनुप्रयोगों के लिए अच्छी तरह से अनुकूल है।


Interesting thought, though it may introduce additional software overhead if the master does not have a 1-Wire interface.
Caleb Reister

It mostly an option if you have a Linux host, as it has the full driver stack for this stunt. On a Raspberry Pi, you just have to connect GPIO4 to the 1W input of the DS28E17 through those 100m of wire (plus GND of course), edit config.txt and you are done. It's fully transparent, looks like a local I²C. Just slower.
Janka

Thanks. I was really surprised that 1-Wire can do that sort of distance. I guess it makes sense, since resistors are smaller.
domen

Onewire does not rely on rising edge timing but instead, all bit timing is done in relation to the falling edge, which is actively driven. That's why it is less susceptible to high capacitive loading. A few nF are ok.
Janka
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.