Il modo migliore per fare I2C / TWI su lunghe distanze


9

Ho un progetto che richiede di eseguire I²C / I2C / TWI su una lunga distanza (da 30 a 40 metri).

Ho visto alcune persone suggerire di abbassare la frequenza di clock a circa 500 Hz, per mitigare gli effetti della capacità di una linea così lunga presumo? I componenti che sto usando richiedono almeno la frequenza di clock standard di 100 kHz. Ho fatto ulteriori ricerche e ho trovato tra le risposte a un'altra domanda un suggerimento per utilizzare un cambio di livello P82B96. Nel foglio dati forniscono esempi di come usarli su linee anche di 100 metri:

I2C_longDistance

mi sono imbattuto in un altro modo di spostare i livelli attraverso una scheda breakout di adafruit , che è solo un mosfet (bss138) con due resistori pull-up (uno per ogni lato / tensione). Hanno preso l'ideauna nota applicativa di NXP (AN10441) e due dei canali presenti potrebbero essere usati in questo modo:

spostamento del livello del mosfet

Ora mi chiedo: quale soluzione è la migliore? O c'è qualcosa che ho trascurato? Inoltre, è sufficiente 5 V per garantire una buona connessione? Ci sarebbe un vantaggio nell'utilizzare una tensione ancora più alta come 12V?


Come scritto, la tua domanda è probabilmente troppo ampia per il formato di questo sito. Cerca di restringere la domanda e renderla molto specifica.
Joe Hass,

Ho aggiunto un riassunto, è abbastanza stretto e specifico?
DaJF,

Dovresti anche specificare la lunghezza massima del filo per i sensori e dare un'idea di cosa significa "basso costo" per te. Ti aspetti di alimentare i sensori con lo stesso cavo?
Joe Hass,

@JoeHass La domanda ora è abbastanza stretta? In caso contrario, cosa devo fare di più?
DaJF,

Ciao, so che questa è una vecchia domanda, ma cosa hai fatto alla fine? Ho esattamente la tua stessa domanda, distanze simili e frequenza di clock minima di 100 kHz. Sarei interessato a sapere cosa ha funzionato per te, grazie.
pcdev,

Risposte:


1

Penso che tu sia sulla buona strada con qualcosa come l'NXP P82B96. Se dai un'occhiata alla Figura 14 e al testo associato, la scheda tecnica tratta l'utilizzo di cavi di lunghezza fino a 250 m con velocità dati superiori a 100 kHz.

Sono disponibili molti sensori di temperatura I2C che possono fornire una precisione di alcuni gradi Celsius senza calibrazione e senza alcun circuito analogico aggiunto. Dato che stai comunque riportando i dati per l'elaborazione, filtrare il rumore sarebbe molto semplice.

Se sei preoccupato per la capacità di cablaggio, potresti stare meglio con una coppia intrecciata non schermata anziché un cavo schermato.


Il P82B96 potrebbe essere sostituito dall'alternativa mosfet? Al prezzo di un P82B96 posso letteralmente comprare 100 mosfet bss138 (posso darti i link se vuoi). In effetti, come hai detto, ho trovato quello che sembra un sensore di temperatura adatto: LM75A. Per quanto riguarda la scelta tra un cavo schermato o non schermato, sembra che si tratti del problema desiderato: possibili interferenze (non schermate) o capacità della linea (schermate), è un presupposto corretto? Uno è più prominente dell'altro? Non ho idea di come determinarlo. Grazie a proposito!
DaJF,

Non credo che tu possa sostituire il P82B96 con i MOSFET per le lunghe file. Sembra che il ripetitore IC fornisca effettivamente un po 'di amplificazione, in cui i MOSFET forniscono principalmente uno spostamento del livello di tensione. Temo di non essere sicuro di come effettuare la chiamata sul cavo ... dovresti guardare la nota sull'applicazione NXP AN255. Parlano dell'uso di cavi a doppino intrecciato ma non menzionano uno schermo. Per i segnali digitali il rumore potrebbe essere meno problematico della capacità.
Joe Hass,

2

Probabilmente puoi cavartela con i sensori DS18B20 usando CAT5 schermato o un cavo simile. Sono solo misurazioni termiche, quindi se alcune letture vengono corrotte puoi rendere il tuo programma abbastanza robusto da affrontarlo (è comunque una buona pratica).

Per l'uso nella catena di ristoranti, ho progettato quelli che sono chiamati controlli RTU (unità sul tetto) che funzionano su più sensori passivi (usano termistori NTC intercambiabili , che non richiedono calibrazione per il riscaldamento confortevole). È molto più facile filtrare il rumore da un sensore passivo. Un'altra serie di installazioni (un importante complesso automobilistico nordamericano) utilizzava RTD in platino con condizionatori di segnale, dispositivi molto precisi e stabili. Dovresti prima decidere il sensore, quindi vedere come potrebbe essere interfacciato: una qualsiasi di queste opzioni del sensore è adatta alla tua applicazione (anche se gli RTD potrebbero essere eccessivi).

Nel caso in cui non sia chiaro, sto suggerendo una configurazione "a stella" dei sensori attorno al processore.

Se vuoi davvero usare un "bus" (diverso da un filo o I2C), avrai bisogno di smart alle estremità, il che significa un processore in qualche forma. Se stai andando alla grande, potresti prendere in considerazione l'uso di sensori wireless che comunicano tramite una banda ISM legale nella tua località. In alternativa, puoi utilizzare un sensore per Pi e farli dialogare tra loro tramite la tua intranet WiFi.


In questo momento sono il palcoscenico "determinando cosa comprare", quindi sia il bus che il sensore possono determinare l'altro. Gli unici requisiti che ho per questi sono facili da usare ed estensibili. La ragione per la scelta di un bus è che preferisco non far passare un cavo a ciascun sensore (che è quello che sembra suggerire, o ho interpretato la "stella" sbagliata?). I²C è un protocollo praticabile da utilizzare su un cavo che può essere 30M / 90FT?
DaJF,

Sì, ecco cos'è una "stella" che collega i controller a ciascun sensore. I2C a 30m .. beh .. ho sentito affermazioni che è possibile a velocità molto basse, ma non conterei che funzioni bene.
Spehro Pefhany,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.