Pytanie:
Niezawodne przesyłanie I2C przez kable Cat5
Maxthon Chan
2014-04-23 17:24:36 UTC
view on stackexchange narkive permalink

Rozważam wdrożenie systemu automatyki domowej wokół mojego Raspberry Pi, ale stwierdziłem, że cena i zapotrzebowanie na miejsce związane z wkładaniem Pi w każdym miejscu jest zbyt duże, ale kable Cat5e wymagane dla tego projektu są już zainstalowane podczas renowacji. Mam kilka PCF8574, PCF8591 i SSR leżących w pobliżu, więc czy można je napędzać za pomocą kabli Cat5e?

Wszystkie moje kable Cat5e są już okablowane z wyprowadzeniami TIA / EIA 568B. Są częścią mojego okablowania strukturalnego i nie są ekranowane, więc wymagane jest wyższe napięcie sieciowe. Myślę o wysłaniu linii zasilania i I2C przez kabel z tym wyprowadzeniem:

  Pin 1 (para 1): SCL + Pin 2 (para 1): SCL-Pin 3 (para 2) : SDA + Pin 4 (para 3): + 12V Pin 5 (para 3): + 12V Pin 6 (para 2): SDA-Pin 7 (para 4): GNDPin 8 (para 4): GND  

Układ pinów zasilania jest taki sam jak okablowanie PoE 100BASE-TX, więc moc znamionowa również będzie taka sama, a użycie dwukierunkowej sygnalizacji różnicowej można znaleźć w 1000BASE-T, który wymaga Cat5e.

Oryginalne I2C Linie SCL i SDA są wyprowadzane w dwie dwukierunkowe pary różnicowe na poziomach TTL (otwarty dren nie jest utrzymywany na przewodzie, ale przywracany w urządzeniu zakończenia linii / zmiany poziomu, które projektuję)

Wszelkie sugestie Na tym? Ponadto, którego układu mam użyć do konwersji linii I2C na sygnalizację różnicową? Proszę zasugerować mi chipy z opcją DIP through-hole. Nie wiem, jak sobie radzić z SMT.

EDYCJA

Znalazłem ten chip, SN65LBC180, czy to dobry wybór? Jak podłączyć go do jednostki dwukierunkowej? Jak zmienić poziom (jest to część BiCMOS wymagająca poziomu TTL, ale Pi działa na poziomach CMOS 3,3 V) i uczynić ją kompatybilną z otwartym drenażem?

EDYCJA 2

Komentatorzy zasugerowali RS-485, który wydawał mi się akceptowalny, ale mimo to dwie pary różnicowe muszą być dwukierunkowe, a tylko dwie dwukierunkowe pary różnicowe. Zmieniam przeznaczenie istniejących kabli Ethernet.

EDYCJA 3

Ponieważ ktoś o tym wspomniał, nie mogę użyć CAN. Nie ma sposobu, bym zmieścił CAN na RPi bez poświęcania czegokolwiek (SPI jest zajęty przez ekran dotykowy, więc nie ma konwertera SPI na CAN)

Zdaję sobie sprawę z ograniczeń I2C PHY, więc zasadniczo próbuję dopasuj do niego 1000BASE-T PHY - dwukierunkową sygnalizację różnicową dla sygnałów SCL i SDA, ale dodatkowo obsługuje protokół I2C.

EDYCJA 4

A przyszedł do mnie nowy chip: NXP P82B96, który dzieli I2C na 4 jednokierunkowe linie, które z kolei mogą być użyte do zasilania SN65LBC180 poprzez izolację optyczną (tylko po stronie Pi), aby utworzyć 8-pinową sygnalizację gotową na duże odległości. Teraz muszę tylko dowiedzieć się, jak uzyskać zasilanie przez przewód lub jak określić, czy magistrala wysyła i ustawić pary dwukierunkowe.

EDYCJA 5

Z sugestii odpowiedzi, myślę, że muszę trochę zmienić pinout zasilania:

  Pin 1 (para 1): SCL + Pin 2 (para 1): Styk 3 SCL (para 2): SDA + Styk 4 (para 3): + 5 V Gniazdo 5 (para 3): GNDP Wtyk 6 (para 2): Styk SDA 7 (para 4): GNDP Wtyk 8 (para 4): + 12V  

Różnicowe napięcie sygnalizacji I2C to TTL. +5 V w parze 3 pochodzi z Pi, niebuforowanego, ale z bezpiecznikiem. + 12V nad parą 4 może nie być obecny, jest używany tylko do sterowania niektórymi urządzeniami o dużej mocy. W razie potrzeby urządzenie może korzystać z własnego źródła zasilania i pozostawić obie szyny niepodłączone lub dostarczać własne wyższe napięcie, ale użyć szyny 5 V.

ZADRUKUJ, ŻE

nadal mój oryginalny projekt, który jest zgodny ze standardem 802.1af.

Dlaczego nie RS-485? To przemysłowy, niezawodny standard.
Pi nie ma RS485 i chcę, aby obwód interfejsu był jak najprostszy. Potrzebuję również PCF8574, który z moich eksperymentów może niezawodnie zasilać mój SSR przy napięciu zasilania 5V.
Chociaż sam RS-485 jest dwukierunkowy, nie jest dwukierunkowy po stronie single-ended.
@IgnacioVazquez-Abrams Zmieniam istniejące okablowanie Ethernet ... Mogę używać chipów interfejsu RS485, ale RS485 można nadal przesyłać tylko przez piny 1/2 i 3/6, a piny 4/5 i 7/8 to nadal szyna zasilająca 12 V i styki uziemienia .
Ale to nie czyni go odpowiednim do twoich celów.
Jednym z powodów, dla których SCL i SDA są typu open-collector, jest to, że oba są dwukierunkowe - mogą być sterowane nisko przez master lub slave. Jak sobie z tym radzisz w projekcie interfejsu? Chociaż I2C jest protokołem synchronicznym i * może * być uruchamiany na długich kablach, spowalniając go i stosując odpowiednie filtry, istnieją znacznie lepsze opcje komunikacji kablowej, takie jak CANbus, RS-485 lub nawet asynchroniczny RS-422.
Jak długi jest twój kabel CAT-5? Mam coś podobnego z połączeniem I2C 20m (~ 60ft) od piwnicy do monitorowania temperatury. Działa dobrze z tanim nieekranowanym kablem telefonicznym. Brak zmiany poziomu, tylko dwa mikrokontrolery 5 V połączone przez i2c.
@Kamil Gdzieś około 10 do 30 metrów, nieco wrogie środowisko przesłuchów obcych. Jednak kable mogą niezawodnie obsługiwać 1000BASE-T. (i dlatego staram się używać sygnalizacji najbardziej podobnej do 1000BASE-T i 100BASE-T PoE)
Powinieneś spróbować I2C niskiej częstotliwości, podłączyć to i po prostu spróbować. Jeśli masz zasięg - możesz zobaczyć, co się dzieje na liniach SDA / SCL po obu stronach.
Jeśli zamierzasz używać kabla Ethernet, czy rozważałeś używanie tylko Ethernetu do komunikacji? Jeśli częścią wymagań jest zasilanie i komunikacja w jednym kablu, możesz użyć PoE.
@DaveTweed Dlatego używam dwukierunkowej sygnalizacji różnicowej. Podciągam magistralę na odległym końcu (kończąc sekcję otwartego spustu) i używam interfejsu otwartego spustu po stronie sterownika.
@mjh2007 Planowałem tylko Ethernet wszędzie, ale okazało się to dla mnie za drogie. W ten sposób wpadłem na pomysł, aby używać podobnej sygnalizacji, ale używaj innego protokołu - użyj dwukierunkowej sygnalizacji różnicowej w stylu 1000BASE-T na dwóch parach i zasilania w stylu 100BASE-T PoE na pozostałych dwóch.
@Kamil Nie mam zasięgu i nie chcę, aby okablowanie strukturalne przesłuchywało obcych, co doprowadzało moje urządzenia I2C do szału. Dlatego potrzebuję sygnalizacji różnicowej.
Zamiast rpis można obniżyć koszty, używając mikrokontrolera z wbudowanym modułem ethernetowym lub modułem spi ethernetowym i używając kabli to zwykły Ethernet z poe.
@Grant Nie są tutaj dostępne i dość drogie. Mam też limit rozmiaru. Muszę dopasować całość do mojej istniejącej skrzynki rozdzielczej okablowania strukturalnego.
Coś złego w używaniu CAN?
@PeterK RPi ich nie ma i muszę zachować minimalny rozmiar.
Jeśli jesteś tak zdeterminowany, by robić to, co powiedziałeś, że zamierzasz robić na początku, dlaczego w ogóle tu przyszedłeś i zapytałeś o to?
@MattYoung Potrzebuję sugestii na temat projektowania modułu interfejsu, w tym strony Pi i strony urządzenia. Po stronie urządzenia nie będzie magistrali - jeden moduł interfejsu do jednego urządzenia, a strona Pi jest na magistrali.
Czy potrzebujesz protokołu komunikacyjnego? Co będzie po „stronie urządzenia”? Czy mógłbyś użyć kabli Ethernet do prostego sterowania przekaźnikami i mieć wszystkie rzeczy i2c na końcu RPI?
@Grant Nie jestem do końca pewien, ile mocy mogą wytrzymać przewody.
Przewody ethernetowe @maxthonchan Cat5 mogą bezpiecznie obsługiwać 360ma przy 50V (http://en.wikipedia.org/wiki/Power_over_Ethernet#Power_capacity_limits). Możesz łatwo uzyskać przekaźniki półprzewodnikowe, które pobierają <10 mA przy 3-32 V po stronie wejściowej, więc dobrze mieszczą się w bezpiecznych specyfikacjach.
Osiem odpowiedzi:
Olin Lathrop
2014-04-23 18:12:32 UTC
view on stackexchange narkive permalink

Próbowanie radzenia sobie z IIC to zły pomysł. IIC jest tak naprawdę przeznaczone do komunikacji między chipami na jednej płycie. Ponieważ maksymalny prąd wymagany do obniżenia linii jest ograniczony, linie mają stosunkowo wysoką impedancję (kilka kΩ). Oznacza to, że mogą łatwo odbierać szum, co jest poważnym problemem, gdy biegną w nieekranowanym kablu w ścianach, prawdopodobnie tuż obok przewodów zasilających AC.

Użyłbym do tego CAN. CAN wykorzystuje pojedynczą skrętkę połączoną z tylko 60 Ω w dowolnym punkcie, a sygnał jest różnicowy. Oznacza to, że większość nieuniknionych szumów w trybie wspólnym, które zostaną wychwycone w wyniku sprzężenia pojemnościowego, może zostać wyeliminowana przez odbiorniki. CAN działający z prędkością 500 kb / s może pokryć coś wielkości zwykłego domu.

Obecnie dostępnych jest wiele mikrokontrolerów z wbudowanym CAN. Zwykle potrzebny jest oddzielny fizyczny układ nadawczo-odbiorczy (jak zwykły MCP2551), ale kilka najniższych warstw protokołu jest zaimplementowanych w krzemie w urządzeniu peryferyjnym CAN. Firmware współdziała z magistralą CAN na poziomie wysyłania i odbierania kompletnych pakietów. Wykrywanie kolizji i ponowna próba, generowanie sumy kontrolnej, szczegóły sygnalizacji pakietu magistrali, weryfikacja odebranej sumy kontrolnej i regulacja dryftu zegara są obsługiwane za Ciebie.

Nie daj się nabrać na RS-485. To relikt z minionej epoki. Wykorzystuje również pojedynczy sygnał różnicowy, taki jak CAN, więc ma również dobrą odporność na zakłócenia. Jednak ludzie zwykle wpadają w RS-485, ponieważ wygląda na „prostszy”. Dzieje się tak tylko dlatego, że nie patrzą na cały system. Po pierwsze, nie jest to wcale mniej skomplikowane pod względem elektrycznym. Nadal będziesz potrzebować jakiegoś transcievera do kierowania i odbierania sygnału różnicowego. To, czy masz transceiver RS-485 podłączony do UART mikrokontrolera, czy MCP2551 podłączony do urządzenia peryferyjnego CAN, jest prawie nieistotne z punktu widzenia kosztów i złożoności sprzętowej. Duża różnica polega na tym, że RS-485 pozostawia Cię na poziomie surowych bajtów (przez UART). Oznacza to, że aby zaimplementować jakikolwiek sensowny i niezawodny system, musisz wymyślić własny protokół do obsługi wykrywania kolizji, decydować o tym, jak obsługiwać ponowne próby, pakietowanie, generowanie i sprawdzanie sum kontrolnych, kontrolę przepływu itp. Prawidłowe szczegóły są o wiele trudniejsze, niż myślą ludzie, którzy nie przeanalizowali ich wszystkich dokładnie. Dzięki CAN możesz po prostu wysyłać i odbierać pakiety, a sprzęt dba o szczegóły.

Nie mam CAN wbudowanych w RPi, nie mam interfejsu CAN, nie stać mnie na nie i nie mogę ich zmieścić w istniejącej obudowie. Więc NIE MOŻE. Konwertuję IIC na sygnał różnicowy iz powrotem, aby uniknąć tej pułapki przesłuchu i oporu. Konwerter i urządzenie IIC współdzielą jedną płytę.
@Max: Mikrokontroler z CAN będzie tańszy, mniejszy, pobierze mniej energii niż RPi. Jeśli te węzły to głównie czujniki i tym podobne, RPi i tak jest przesadą.
uC nie ma wystarczającej mocy obliczeniowej do obsługi drugiej strony systemu. Chociaż mam ekran dotykowy w systemie, który służy tylko do awaryjnego zastępowania, wszystkie polecenia są wysyłane przez sieć domową do Pi przez HTTP (z całkiem fantazyjnym interfejsem użytkownika opartym na AJAX), a Pi obsługuje wszystkie uwierzytelnianie i inne rzeczy.
@MaxthonChan Możesz kupić tanie układy scalone kontrolera, które konwertują CAN na SPI i / lub I2C w celu połączenia z twoim RasPI. [Przykład z Microchip] (http://ww1.microchip.com/downloads/en/devicedoc/21801d.pdf).
Jeśli taka jest Twoja sugestia, powiedz mi, jak mogę prowadzić mój SSR? Obecnie mam jedną płytkę odbiorczą z układem interfejsu różnicowego, 7805 i PCF8574, która obsługuje do 8 SSR. (i zwykle mam dwa lub trzy)
@PeterK Proszę zasugerować kilka przykładów I2C, jeśli próbujesz nakierować mnie na zmianę przeznaczenia przewodów do przenoszenia sygnalizacji CAN. Nie mam wolnych miejsc na magistralę SPI.
Skończyło się na użyciu CAN PHY, ale nie samego protokołu. Protokół to jednak nadal I2C.
@OlinLathrop Czy uważasz, że CAN nadaje się do windy na, powiedzmy, 16 pięter? CAN byłby używany głównie do rejestrowania połączeń z samochodu lub każdego przystanku.
@EmbSysDev To nie jest mój przypadek użycia - mam jasną definicję urządzeń nadrzędnych i podrzędnych: Pi jest urządzeniem nadrzędnym magistrali, który odbiera instrukcje przez Internet, uwierzytelnia je i przekazuje do magistrali.Zmodyfikowany przełącznik (lub ściemniacz światła) jest podrzędny, który wykonuje rzeczywistą pracę (przełączanie SSR itp.) Po otrzymaniu skierowanej do niego instrukcji.Nie sądzę, aby CAN był tutaj odpowiedni, ale I2C jest.I2C ma swoje własne problemy (długie przewody z ostrym przesłuchami obcych) i właśnie to próbuję przezwyciężyć.
@Maxt: Jeśli to jest to, co chcesz zrobić (jeden główny kontroler z wieloma małymi urządzeniami), to naprawdę nie widzę problemu z CAN.Raz łączysz RPi z magistralą CAN, wtedy każdy slave jest dość prosty i mały.Możesz połączyć RPi z micro CAN lub sterować magistralą bezpośrednio za pomocą czegoś takiego jak MCP2515 (kontroler CAN z interfejsem SPI).Jeśli RPi nie ma SPI, nadal możesz go bitować za pomocą 4 linii I / O.Myślę, że zgodnie z propozycją będziesz miał niestabilne problemy z autobusem IIC.
@OlinLathrop przeczytał już dokumentację i posty na forum dotyczące bit-banging CAN nawet z chipem PHY - niemożliwe, jeśli system jest wielozadaniowy z powodu jitterów czasowych - co jest wymagane na moim Pi, ponieważ jest również uwierzytelnianiem (praca kryptograficzna, intensywne wykorzystanie procesora) i przekazywanieminstrukcje.SPI i UART są zajęte, więc dostępne jest tylko I2C ze wsparciem sprzętowym, aby zapobiec fluktuacjom.
@OlinLathrop Mam również ograniczenie rozmiaru: 5 cm na 5 cm na 3 cm maks. Lub nie będzie pasować do istniejących opraw.Mogę zrobić płytkę z czterema lub pięcioma chipami, które mieszczą się w tym ograniczeniu i działają z protokołem I2C (prawdopodobnie CAN PHY)
@OlinLathrop Powinieneś przeczytać moją własną odpowiedź, która jest prawie moim ostatecznym projektem, użyj CAN PHY do wysłania protokołu I2C.NXP ma chip, który rozbija magistralę I2C na dwie pary linii UART, które z kolei mogą być przenoszone przez CAN PHY jako dwie pary różnicowe.Ten projekt istnieje nawet w NXP AN.
@OlinLathrop Interfejs składa się tylko z trzech chipów (siedmiu, jeśli wymagane są transoptory, tylko po stronie Pi, która nie ma ograniczenia rozmiaru), więc tworzy to niezwykle małe 4-chipowe urządzenie po stronie slave.
EternityForest
2014-04-23 21:07:18 UTC
view on stackexchange narkive permalink

I2C nie jest właściwą drogą. Każdy trancievery CAN kosztują dolara i możesz ich używać jako transfery uart i napisać własny protokół, więc nie potrzebujesz mikrokompatybilnego z puszką, jeśli nie chcesz używać pełnego stosu puszek.

Zawsze czuję, że trochę niewygodne, gdy widzę przewodniki cat5 równolegle dla większego prądu. Wkurza mnie to, ponieważ jeśli jeden przewodnik zerwie się, drugi będzie przenosił pełny prąd systemu. Obecne oceny kategorii 5 są bardzo konserwatywne, więc prawdopodobieństwo pożaru jest dość niskie, ale po prostu nie podoba mi się taka możliwość.

Bezpiecznym sposobem na to jest posiadanie polifuse na obu szynach zasilających i połączenie z ziemią na zasilaniu i podłącz każde urządzenie do jednego i tylko jednego zestawu zasilania / uziemienia. W ten sposób, jeśli jeden przewód ulegnie awarii, urządzenia wykorzystujące tę linię tracą moc, zamiast jednej linii przenosić moc dwóch.

Wiele osób lubi umieszczać zasilanie i uziemienie w obu skrętkach z powodów EMI zamiast jednej pary zasilania i jednej pary uziemienia. Jeśli masz dwie pary zasilania / uziemienia, linia energetyczna będzie bliżej ziemi, a pola zostaną anulowane, zmniejszając wszelkie transmitowane lub odbierane fale radiowe z linii energetycznych. Niepotrzebne, ale fajne, jeśli brzęczy dużo szumów elektrycznych.

12 V moim zdaniem jest za niskie do dystrybucji mocy, kiedy 24 V jest nadal dość bezpieczne i znacznie wydajniejsze.

Moje rozwiązanie jest w jakiś sposób oparte na tym.Używam układu rozdzielacza NXP, aby podzielić magistralę I2C na parę Tx / Rx (zarówno SDA, jak i SCL) i multipleksować je jako UART za pomocą chipów interfejsu CAN.To daje mi dwie skręcone pary z liniami I2C SDA i SCL, podłączone do pinów 1/2 i 3/6 Cat5e TIA / EIA568B.
To również powinno działać, jedynym problemem jest to, że potrzebujesz układu NXP, dwóch trancieverów puszki i rzeczywistego układu I / O i2c.To pięć chipów na płytę, a ostatnio sprawdziłem, że chip NXP był droższy niż w atmega328, ale to mogło się zmienić.Będzie działać, a programowanie będzie proste, ponieważ to i2c, ale użycie UART przez CAN jest tańsze i wymaga trochę więcej pracy.
Płytka interfejsu po stronie Pi zawiera 7 chipów - bufor / rozdzielacz NXP I2C, dwa CAN PHY i cztery optoizolatory.Po stronie urządzenia znajduje się 4-chipowy moduł - bufor / rozdzielacz NXP I2C, dwa CAN PHY i PCF8574 / 8591.
Znalazłem 4-kanałowy transoptor, który zredukuje obwód po stronie Pi do modułu 4-chipowego.
Przemyślałem piny zasilania, trzymam się mojego oryginalnego projektu, używając pary zasilania i pary uziemienia.Jest to zgodne z 802.3af, chociaż przedefiniowałem piny sygnałowe na SCL i SDA.
Grant
2014-04-23 22:23:38 UTC
view on stackexchange narkive permalink

Jeśli automatyzacja po prostu włącza i wyłącza rzeczy w domu, uprościłbym to przez:

  • Trzymanie wszystkich „mózgów” w jednym miejscu. W razie potrzeby użyj ekspanderów I / O I2C, ale trzymaj je wszystkie z raspberry pi. Będziesz także potrzebował odpowiedniego sprzętu, aby upewnić się, że nie próbujesz pobierać zbyt dużego prądu ze styków GPIO pi.
  • Użyj kabli Ethernet, aby po prostu sterować przekaźnikami. Możesz zbudować własną płytkę lub otrzymać panelowe przekaźniki półprzewodnikowe 120/240 V, które zostaną zamontowane w skrzynce elektrycznej. Przewody w kablach Ethernet Cat5 mogą obsługiwać do 50 V przy 320 mA każdy, co jest więcej niż wystarczające do sterowania przekaźnikiem. W rzeczywistości można sterować 7 przekaźnikami za pomocą jednego kabla (plus jeden przewód do masy). Lub zostaw jeden przewód dla wyjścia 12 V, aby rozłączyć, aby można było również zainstalować przełącznik ręczny. Jeśli są to naprawdę długie przebiegi, być może będziesz musiał wziąć pod uwagę spadek napięcia, ale możesz uzyskać przekaźniki, które będą przełączać się przy 3-32 V. 12 V powinno wystarczyć, nawet przy spadku napięcia.
  • Będziesz także chciał skonsultować się z lokalnymi przepisami budowlanymi, aby uzyskać porady dotyczące łączenia kabli wysokiego i niskiego napięcia w tym samym pudełku.
  • Proste przełączniki można również wykonać za pomocą kabli Ethernet, ponownie do 7 na kabel, i po prostu podłączyć je do wejść pi. Spadek napięcia może być problemem w przypadku naprawdę długich kabli.
  • Możesz także chcieć użyć optoizolatorów do ochrony pi przed uszkodzeniem.
  • W przypadku nielicznych urządzeń, które potrzebują więcej niż przekaźnik (np. panel sterowania), użyj kabli Ethernet jako rzeczywistych Ethernet. Nie powinno to być dużym wydatkiem, jeśli takich urządzeń jest niewiele. Mogą to być kolejne pi lub mikrokontroler z siecią Ethernet.
Nie jestem do końca pewien, jakie będą potrzeby moich użytkowników końcowych.Jest kapryśna i bardzo szybko zmienia zdanie.Będę musiał być w stanie zareagować wystarczająco szybko.Dlatego przez przewód używany jest jakiś podstawowy protokół (tutaj I2C).
Maxthon Chan
2014-04-23 19:20:55 UTC
view on stackexchange narkive permalink

schematic

symuluj ten obwód - schemat utworzony za pomocą CircuitLab

EUREKA ! Domyśliłam się! (nieprzetestowane, przetestuję to w ten weekend)

Układy interfejsu to NXP P82B96 I2C bufor / rozdzielacz i 2 układy interfejsu magistrali CAN TI SN65HVD251P. Zasadniczo używam I2C na CAN PHY.

P82B96 rozumie protokół I2C i obsługuje dla mnie arbitraż na magistrali i daje mi oddzielne styki Tx i Rx, które można ze sobą powiązać. Podaję je do transceivera SN65HVD251P CAN i daje mi dwukierunkową parę różnicową do przesyłania przez przewody.

Piny zasilania są dostarczane bezpośrednio, niebuforowane z szyny 5 V mojego Pi. (Przez chwilę nie będę używał napięcia i zasilania sygnalizacyjnego 12V)

Przepraszam ale nie. Pozwoli to na podłączenie _dwa_ jednostek I2C w pewnej odległości od siebie. Nie pozwoli ci połączyć więcej niż 2.
@WhatRoughBeast Sprawdziłem to w dokumentacji NXP i mówi, że jest to realne rozwiązanie (i jakoś trafiło do ich AN), ale dla mnie punkt do punktu jest w porządku, ponieważ mój projekt sam prosi o jedną parę jednostek konwersji na segment Cat5e.
CAN jest przewodowy lub dwukierunkowy, tak jak i2c.Nie widzę powodu, dla którego to nie powinno działać z tyloma urządzeniami, ile chcesz w autobusie.Widziałem aplikację, o której nie wspomina.Wygląda na to, że opisuje autobus, a nie punkt do punktu.
@WhatRoughBeast - CAN jest multidropem, nie przyjrzałem się zbyt dokładnie temu, co robi OP, ale teoretycznie powinno to być możliwe.
WhatRoughBeast
2014-04-23 18:53:39 UTC
view on stackexchange narkive permalink

Niezależnie od zalet IIC na poziomie chipów, proponowana przez Ciebie implementacja będzie bardzo trudna. Problemem jest arbitraż autobusowy. Chociaż wiele jednostek może być połączonych równolegle, na przykład za pomocą RS485, najważniejsze pytanie będzie brzmiało:

Skąd jakakolwiek jednostka wie, czy może przejąć kontrolę nad magistralą w celu przesyłania danych?

W IIC, z otwartymi liniami sygnałowymi, dwukierunkowy transfer jest łatwy - ale w autobusach trójstanowych potrzebujesz jakiegoś sposobu, aby zapewnić, że tylko jedna jednostka będzie próbowała prowadzić autobus w danym momencie. To będzie trudne. Możesz to zrobić, szczególnie jeśli ustanowisz jednego mastera i wymagasz, aby wszyscy slave'owie mieli sztywne ograniczenia czasowe dotyczące wysyłania danych i wysyłali dane tylko na żądanie mastera, ale będzie to wymagało znacznego wysiłku ze strony użytkownika w projektowaniu karty interfejsów dla mastera i slave'ów.

Jeśli chodzi o fizyczne sterowniki / odbiorniki, RS485 wystarczy, a dostępnych jest wiele układów interfejsu. Tylko Google.

kwc
2014-04-23 23:11:19 UTC
view on stackexchange narkive permalink

Nie wiem, czy jesteś zainteresowany gotowym rozwiązaniem, a nie budowaniem własnego obwodu, ale pomyślałem, że pololu sprzedaje te płyty I²C Long Distance Differential Extender wykonane autorstwa SJTbits, które wydają się robić dokładnie to, czego szukasz. (Pełne ujawnienie: pracuję dla Pololu.)

Nawet jeśli nie chcesz go używać bezpośrednio, może spojrzenie na obwód, z którego korzysta, może dać ci kilka pomysłów. Możesz zobaczyć schemat w arkuszu danych; wykorzystuje bufor NXP PCA9600D, sterownik linii różnicowej TI AM26LS31CDR i odbiornik linii różnicowej TI AM26LS32ACDR.

To nie działa dla mnie.Muszę przesłać zarówno sygnał magistrali, jak i zasilanie przez przewody.
John Lewis
2015-10-01 03:35:12 UTC
view on stackexchange narkive permalink

Wiem, że to trochę stare i wydaje się, że gdzieś wśród odpowiedzi znalazło się rozwiązanie, ale mam do zaoferowania tę sugestię. Istnieją urządzenia takie jak PCA9614 / 5/6 od NXP, na które patrzę teraz jako rozwiązanie dla bardziej wytrzymałej magistrali I2C na duże odległości (PCA9614 2-kanałowy wielopunktowy bufor różnicowy I2C w trybie Fast-mode Plus). Zasadniczo prawdą jest, że staje się czymś innym niż prawdziwe I2C, ale na końcach magistrali jest niewidoczne dla urządzeń. Ta konkretna rodzina tłumaczy sygnały na 2 dwukierunkowe pary różnicowe, a są też podobne urządzenia, jak już wspomniano w komentarzach, które przekładają się na 4 jednokierunkowe pary różnicowe. Przekształcenie do zaledwie 2 par pozwala na użycie kabla CAT i nadal ma 2 pary do zasilania / uziemienia.

Dmitry Gusarov
2014-07-13 08:13:15 UTC
view on stackexchange narkive permalink

Kciuki w górę! Obecnie próbuję rozwiązać prawie ten sam problem. Próbuję również używać I2C przez cat5 do automatyki domowej z moim niestandardowym pinoutem. Powodem jest koszt, chcę, aby był bardzo opłacalny, a komponenty I2C nadal co najmniej 5 razy tańsze niż nawet attiny13 uC (AFAIU uC jest wymagane dla CAN i RS485).

1) Obecnie jestem w proces próbny dla pierwszej części systemu i teraz udało mi się z 15-metrowym kablem z 5V i bezpośrednim połączeniem SCL&SDA! Używam PCF8574 i 2 przekaźników do wyzwalania światła w moim pokoju. Pinout to

  12 INT3 + 5V4 SCL5 SDA6 GND78  

2) Rozumiem, że nie stać go na kilka więcej przekaźników lub dodatkowe 10 metrów. .. Spadek napięcia jest znaczny (z 5,5 do 4,7). Więc jeśli chodzi o problem ze spadkiem napięcia, zamiast tego podłączę 12 V do linii i dodam regulatory napięcia 5 V na płytach, aby utrzymać dobre napięcie wszędzie, niezależnie od spadku całej linii. I tak umieszczę dodatkowe zasilacze w przyszłych liniach.

3) Sam sygnał można poprawić za pomocą P82B96 lub taniego P82B715 bez podziału na linie różnicowe. Sam NXP używa Cat5 w niektórych prezentacjach, ale nie mogę znaleźć ich pinout. Ważną częścią jest to, że wyraźnie używają linii sygnałowych w różnych parach ... np. jedna para to GND + SDA druga to VCC + SCL.

4) Kolejna interesująca kwestia - te bufory mogą po prostu podnieść amplitudę do 12 V, aby zwiększyć odporność na szum. Więc prawdopodobnie spróbuję również podłączyć 12V na liniach sygnałowych, co powinno pozwolić na ustawienie podciągnięć bezpośrednio z przewodu 12V ... Ale to zmusi mnie do umieszczenia czegoś takiego jak P82B96 na każdym urządzeniu.

Jak pewnie zauważyłeś, używam również oddzielnej linii przerwań ... Master jest obecnie na płycie arduino podłączonej do komputera. Podstawowe oprogramowanie główne i tak będzie działało na komputerze 24x7, więc arduino po prostu tłumaczy sygnał i obsługuje przerwania. Mogę wysłać określoną konfigurację do obsługi przerwań na pokładzie, np. do obsługi wygodnego przełącznika toggle przez przerwanie ... To pozwala mi zapomnieć o jakichkolwiek opóźnieniach przy ręcznym przełączaniu światła. Obsługa przerwań jest dodatkową zaletą i2c.

Mój pomysł jest taki, że I2C jest na tyle proste, że można je zastosować w okablowaniu mieszkań w < = 100m. Zamiast przechodzić na sygnał różnicowy, mam nadzieję, że zamiast tego uda mi się zmniejszyć dodatkową częstotliwość.

Podoba mi się twój pomysł, aby umieścić zarówno 5 V, jak i 12 V, ponieważ zmniejsza to zapotrzebowanie na regulatory i zmniejsza koszty ... cała idea wieloprzewodowej magistrali, aby obniżyć koszty punktów końcowych, rozważę to również dla nowego wyprowadzenia :)

Jest to bardziej obszerny komentarz do pytania niż odpowiedź, ponieważ twoja sytuacja nie jest taka sama jak w przypadku PO: inny sprzęt główny, inny schemat sygnalizacji.Ale jest na tyle blisko spokrewniony, że pozwolę mu stać.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...