Der beste Weg, um I2C / TWI über große Entfernungen durchzuführen


9

Ich habe ein Projekt, bei dem I²C / I2C / TWI über eine lange Distanz (30 bis 40 Meter) durchgeführt werden muss.

Ich habe einige Leute gesehen, die vorgeschlagen haben, die Taktrate auf etwa 500 Hz zu senken, um die Auswirkungen der Kapazität einer so langen Leitung zu mildern, nehme ich an? Die von mir verwendeten Komponenten erfordern mindestens die Standardtaktrate von 100 kHz. Ich habe einige weitere Nachforschungen angestellt und unter den Antworten auf eine andere Frage einen Vorschlag zur Verwendung eines P82B96-Stufenschalters gefunden. Im Datenblatt geben sie Beispiele für ihre Verwendung auf Linien von sogar 100 Metern:

I2C_longDistance

Ich habe eine andere Möglichkeit gefunden, Ebenen durch ein Breakout-Board von Adafruit zu verschieben , das nur ein Mosfet (bss138) mit zwei Pull-up-Widerständen ist (einer für jede Seite / Spannung). Sie haben die Idee vonEin Anwendungshinweis von NXP (AN10441) und zwei der dortigen Kanäle könnten folgendermaßen verwendet werden:

Mosfet Level Shifting

Jetzt frage ich mich: Welche Lösung ist die beste? Oder gibt es etwas, das ich übersehen habe? Und reichen 5 V aus, um eine gute Verbindung zu gewährleisten? Wäre die Verwendung einer noch höheren Spannung wie 12 V von Vorteil?


Wie geschrieben, ist Ihre Frage wahrscheinlich zu weit gefasst für das Format dieser Site. Versuchen Sie, Ihre Frage einzugrenzen und sehr spezifisch zu gestalten.
Joe Hass

Ich habe eine Zusammenfassung hinzugefügt. Ist sie eng und spezifisch genug?
DaJF

Sie sollten auch die maximale Kabellänge zu den Sensoren angeben und eine Vorstellung davon geben, was "niedrige Kosten" für Sie bedeuten. Erwarten Sie, die Sensoren über dasselbe Kabel mit Strom zu versorgen?
Joe Hass

@ JoeHass Ist die Frage jetzt eng genug? Wenn nicht, was muss ich noch tun?
DaJF

Hallo, ich weiß, dass dies eine alte Frage ist, aber was hast du am Ende gemacht? Ich habe genau die gleiche Frage wie Sie, ähnliche Entfernungen und eine minimale Taktrate von 100 kHz. Es würde mich interessieren, was für Sie funktioniert hat, danke.
PCDEV

Antworten:


1

Ich denke, Sie sind mit so etwas wie dem NXP P82B96 auf dem richtigen Weg. Wenn Sie sich Abbildung 14 und den zugehörigen Text ansehen, wird im Datenblatt die Verwendung einer Kabellänge von bis zu 250 m mit Datenraten über 100 kHz erläutert.

Es gibt viele I2C-Temperatursensoren, mit denen Sie ohne Kalibrierung und ohne zusätzliche analoge Schaltkreise eine Genauigkeit von einigen Grad Celsius erzielen können. Da Sie die Daten ohnehin zur Verarbeitung zurückbringen, ist das Herausfiltern von Rauschen sehr einfach.

Wenn Sie sich Sorgen über die Verdrahtungskapazität machen, ist es möglicherweise besser, wenn Sie ein ungeschirmtes Twisted Pair anstelle eines abgeschirmten Kabels verwenden.


Könnte der P82B96 durch die Mosfet-Alternative ersetzt werden? Für den Preis von einem P82B96 kann ich buchstäblich 100 bss138 Mosfets kaufen (ich kann Ihnen die Links geben, wenn Sie wollen). Wie Sie sagten, habe ich tatsächlich einen geeigneten Temperatursensor gefunden: LM75A. Bei der Wahl zwischen einem abgeschirmten oder einem ungeschirmten Kabel scheint es eine Frage des gewünschten Problems zu sein: mögliche Interferenzen (ungeschirmt) oder Leitungskapazität (abgeschirmt). Ist dies eine korrekte Annahme? Ist einer prominenter als der andere? Ich habe keine Ahnung, wie ich das feststellen soll. Danke übrigens!
DaJF

Ich glaube nicht, dass Sie den P82B96 für lange Leitungen durch die MOSFETs ersetzen können. Es sieht so aus, als ob der Repeater-IC tatsächlich eine gewisse Verstärkung liefert, wobei die MOSFETs hauptsächlich eine Spannungspegelverschiebung liefern. Ich fürchte, ich bin mir nicht sicher, wie ich den Anruf über das Kabel tätigen soll ... Sie sollten sich den NXP-Anwendungshinweis AN255 ansehen. Sie sprechen über die Verwendung von Twisted-Pair-Kabeln, erwähnen jedoch keine Abschirmung. Bei digitalen Signalen ist das Rauschen möglicherweise weniger problematisch als die Kapazität.
Joe Hass

2

Sie können wahrscheinlich mit den DS18B20-Sensoren davonkommen, indem Sie ein abgeschirmtes CAT5-Kabel oder ein ähnliches Kabel verwenden. Es handelt sich nur um thermische Messungen. Wenn also einige Messwerte verfälscht werden, können Sie Ihr Programm robust genug machen, um damit umzugehen (es ist sowieso eine gute Praxis).

Für die Verwendung in Kettenrestaurants habe ich sogenannte RTU-Steuerungen (Rooftop Unit) entwickelt, die mit mehreren passiven Sensoren arbeiten (sie sind austauschbar) NTC-Thermistoren, für deren Komfortheizung keine Kalibrierung erforderlich ist). Es ist viel einfacher, Rauschen aus einem passiven Sensor herauszufiltern. Eine andere Reihe von Installationen (ein großer nordamerikanischer Automobilkomplex) verwendete Platin-Widerstandsthermometer mit Signalaufbereitern - sehr genaue und stabile Geräte. Sie sollten zuerst den Sensor auswählen und dann prüfen, wie er möglicherweise angeschlossen ist. Jede dieser Sensoroptionen ist für Ihre Anwendung geeignet (obwohl die RTDs möglicherweise zu hoch sind).

Falls es nicht klar ist, schlage ich eine "Stern" -Konfiguration von Sensoren um Ihren Prozessor vor.

Wenn Sie wirklich einen "Bus" (außer One-Wire oder I2C) verwenden möchten, benötigen Sie Smarts an den Enden, dh einen Prozessor in irgendeiner Form. Wenn Sie auf Hochtouren sind, sollten Sie drahtlose Sensoren verwenden, die über ein ISM-Band kommunizieren, das in Ihrer Region legal ist. Alternativ können Sie einen Sensor pro Pi verwenden und diese über Ihr WLAN-Intranet miteinander kommunizieren lassen.


Im Moment bin ich die Phase "Bestimmen, was zu kaufen ist", sodass entweder der Bus oder der Sensor den anderen bestimmen können. Die einzigen Anforderungen, die ich an diese habe, sind einfach zu bedienen und erweiterbar. Der Grund für die Wahl eines Busses ist, dass ich es vorziehe, nicht für jeden Sensor ein Kabel zu verlegen (was scheinen Sie vorzuschlagen, oder habe ich den "Stern" falsch interpretiert?). Ist I²C ein praktikables Protokoll für ein Kabel mit einer Länge von 30 m / 90 ft?
DaJF

Ja, das ist es, was ein "Stern" von der Steuerung zu jedem Sensor verdrahtet. I2C bei 30m .. na ja .. Ich habe gehört, dass es bei sehr niedrigen Geschwindigkeiten möglich ist, aber ich würde nicht damit rechnen, dass es gut funktioniert.
Spehro Pefhany
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.