Czy mogę używać I2C na kablach o długości 2 m?


24

W moim obecnym projekcie muszę komunikować się między mikrokontrolerem a niektórymi czujnikami za pośrednictwem I2C. Jednym z nich jest czujnik temperatury, który należy umieścić w odległości około 2 metrów od mikrokontrolera. Nie mogę wybrać innego protokołu (czujnik znajduje się na module z danym złączem / pinami / protokołem).

Czy uważasz, że w tej konfiguracji można się komunikować? Jakie informacje powinienem sprawdzić, aby upewnić się, że jest to możliwe? Czy masz jakieś rady?

Po raz pierwszy komunikuję się z IC poza płytką drukowaną.


5
Dodaj więcej informacji. Jaka byłaby prędkość i2c? Odporność na podciąganie? Używany kabel i jego pojemność? Co to jest MCU hosta i jaki jest czujnik? Ale ogólnie rzecz biorąc, I2C działa kilka metrów na kablach takich jak HDMI, więc powinno działać, gdy wszystko jest wykonane poprawnie.
— Justme


6
„Nie mogę wybrać innego protokołu” Możesz umieścić drugi mikrokontroler blisko czujnika, odczytać dane i wysłać je z dowolnym protokołem, który ci się podoba.
— FooBar

1
Czy masz minimalną prędkość w Kbit / s?
— Maszt

2
Jeśli zwolnisz zegar, możesz przejść dość dużą odległość.
— copper.hat

Odpowiedzi:


36

I2C nie jest przeznaczony do używania na duże odległości, ale znam kilka aplikacji, w których jest on faktycznie używany na odległości około 2 metrów. Znam też jeden przypadek, w którym mieli z tym problemy, i to zostało ostatecznie naprawione przez naprawienie pętli uziemienia.

Aby mieć pewność, że zadziała, należy użyć przedłużacza magistrali I2C, takiego jak P82B715.

Jednak arkusz danych PB2B715 zawiera następujące informacje w sekcji 8.2:

W przypadku typowych kabli skrętkowych lub płaskich, używanych w telefonii lub okablowaniu Ethernet (Cat5e), pojemność wynosi około 50 pF do 70 pF / metr, więc teoretycznie długość kabla może wynosić do 50 m . Z praktycznego doświadczenia wynika , że 30 m wykazało bezpieczną długość kabla do prowadzenia w ten prosty sposób, do 100 kHz, przy pokazanych wartościach. Możliwe są dłuższe odległości i wyższe prędkości, ale wymagają one staranniejszej konstrukcji.

Eksperci (NXP to były Philips, wynalazca I2C) twierdzą, że 30 metrów okazało się możliwe do pokonania. Z mojego doświadczenia wynika, że ​​2 metry to możliwa do przejechania odległość, a doświadczenia, które mi przekazano, wskazują, że możliwe są również bardziej obciążone magistrale I2C bez jakiegokolwiek przedłużacza.

Kluczowe punkty pracy autobusów I2C na duże odległości to:

  • Za pomocą kabla o niskiej pojemności (skrętka / Ethernet);
  • Ograniczanie prędkości autobusu;
  • Posiadające podciągnięcia o odpowiednich rozmiarach.

Obliczenia pullup

Texas Instruments ma dobrą notę aplikacyjną (SLVA689) dotyczącą obliczania podciągania .

  • Dolna granica podciągania (wartość minimalna) jest określona przez prąd, który najsłabsze urządzenie peryferyjne na magistrali może pociągnąć, oraz maksymalne napięcie, które reprezentuje 0 dla dowolnego urządzenia peryferyjnego. Więc jeśli 1 V nadal wynosi 0, twoje VCC wynosi maksymalnie 3 V6, a twoje najsłabsze urządzenie może pobierać tylko 20 mA, twoja rezystancja jest określona przez stratę napięcia na rezystorze i prąd pobierany przez to urządzenie: (3.6 V.-1 V.) / 20 mZA=130 Ω .
  • Rmzax=tr/(0,8473∗dob)trdobdobtrRmzax=2950 Ω. Nota aplikacyjna TI ma wykresy, dzięki czemu można szybko znaleźć odpowiednie wartości.
  • Oczywiście wartość podciągnięcia jest równa wartości wszystkich podciągnięć połączonych równolegle. Możesz mieć podciągnięcie po stronie master, slave i wszelkich innych slave / master w magistrali.
  • Im bardziej jesteś na granicy, tym bardziej musisz uwzględniać „pasożyty”, takie jak spadek napięcia w kablu.

Masz podciągnięcia o odpowiednich rozmiarach? Jak ustalić wartość i moc znamionową?
— Quantum0xE7

Jak Nick B skomentował inną odpowiedź, uważaj na możliwość przedłużenia szyny przez magistralę lub cokolwiek innego podgrzewania czujnika temperatury o kilka stopni.
— Peter Cordes

14

Zasadniczo jesteś ograniczony maksymalną pojemnością 400 pF.

Powinno działać dobrze, jeśli obniżysz częstotliwość do około 1 kHz i zapewnisz oddzielenie zasilania obok czujnika.

Jeśli potrzebujesz czegoś bardziej niezawodnego, możesz użyć konwerterów różnicowych I2C na obu końcach, takich jak PCA9615 .


Nieco przypominam sobie niektóre czujniki o minimalnej częstotliwości I2C (nie jestem pewien, dlaczego).
— Michael

14

Możesz, ale nie jest to zalecane.

Różne autobusy do różnych celów

I2C, podobnie jak SPI, jest przeznaczony do komunikacji w obrębie tablicy lub grupy tablic (pomyśl Raspberry Pi i jego czapki lub arduino i jego tarcze). Może pracować na dłuższych dystansach (patrz inne odpowiedzi), ale nie należy go stosować w takich przypadkach, po prostu dlatego, że nie do tego został zaprojektowany, zoptymalizowany i zakwalifikowany.

Ryzykujesz, że możesz nie być w stanie dodać więcej czujników w przyszłości, lub że twój system nie będzie działał wszędzie lub w pewnych okolicznościach ulegnie awarii.

To, czego powinieneś szukać, to magistrala polowa, coś w rodzaju 1-wire, CAN, RS-485, ethernet itp.

Opcjonalne mogą być również systemy bezprzewodowe, takie jak bluetooth lub zigbee.


9

Jak zauważył @filo, I2C jest ogólnie ograniczone przez pojemność magistrali. Istnieją jednak sposoby obejścia tego:

  1. Użyj przedłużacza magistrali. P82B96 lub PCA9600 by być zarówno dobre opcje w Twoim przypadku.
  2. Jeśli potrzebujesz wyższych prędkości lub wyjątkowo długich kabli, możesz użyć różnicowego urządzenia nadawczo-odbiorczego I2C, takiego jak PCA9600 . Sprawi to jednak, że Twój obwód będzie znacznie bardziej skomplikowany i będziesz potrzebować układu scalonego na obu końcach kabla.

Więcej informacji znajdziesz w AN10658 i AN11084 od NXP.


1
Będzie to działało dobrze z przedłużaczem magistrali, jak powiedzieli inni. Nie należy od razu zauważać, że przedłużacz magistrali na końcu czujnika może rozproszyć wystarczającą ilość ciepła, aby podnieść odczyt czujników temperatury o kilka stopni, jeśli czujnik i przedłużacz magistrali są blisko siebie.
— Nick B

4

Lubię odpowiedzi Filo i Caleba.

Inną opcją jest zastosowanie jednego lub wielu mostków głównych DS28E17 1-Wire-to-I2C na poszczególnych czujnikach i podłączenie magistrali jako Onewire. Jest to dobre w przypadku magistrali o długości> 100 m i dobrze nadaje się do zastosowań w matrycach czujników o niskiej przepustowości, takich jak zarządzanie temperaturą i akumulatorem.


Interesująca myśl, choć może wprowadzić dodatkowe koszty oprogramowania, jeśli master nie ma interfejsu 1-Wire.
— Caleb Reister

Jest to głównie opcja, jeśli masz hosta Linux, ponieważ ma pełny stos sterowników dla tego stuntu. Na Raspberry Pi wystarczy podłączyć GPIO4 do wejścia 1 W DS28E17 przez te 100 m drutu (plus oczywiście GND), edytuj config.txt i gotowe. Jest w pełni przejrzysty, wygląda jak lokalny I²C. Po prostu wolniej.
— Janka

Dzięki. Byłem naprawdę zaskoczony, że 1-Wire może pokonać taki dystans. Wydaje mi się, że ma to sens, ponieważ oporniki są mniejsze.
— domen

Onewire nie opiera się na taktowaniu zbocza narastającego, ale zamiast tego wszystkie taktowanie bitów odbywa się w stosunku do zbocza opadającego, które jest aktywnie sterowane. Dlatego jest mniej podatny na duże obciążenia pojemnościowe. Kilka nF jest w porządku.
— Janka
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.