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ą.

JackOfHearts
źródło
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,8473dob)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.
le_top
źródło
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 .

filo
źródło
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.

Sclrx
źródło
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.

Caleb Reister
źródło
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.

Janka
źródło
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