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ą.
i2c
communication
cables
JackOfHearts
źródło
źródło
Odpowiedzi:
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:
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:
Obliczenia pullup
Texas Instruments ma dobrą notę aplikacyjną (SLVA689) dotyczącą obliczania podciągania .
źródło
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 .
źródło
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.
źródło
Jak zauważył @filo, I2C jest ogólnie ograniczone przez pojemność magistrali. Istnieją jednak sposoby obejścia tego:
Więcej informacji znajdziesz w AN10658 i AN11084 od NXP.
źródło
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.
źródło