Anschließen von i2c-Slaves an den Master über ein RJ45-Kabel?

Ich entwerfe mehrere Module (z. B. Sensoren, Motorsteuerung usw.), die über I²C kommunizieren müssen. Diese Module können bis zu 5 m (15 Fuß) vom Basismodul (I²C-Master – Spark Photon) entfernt sein – obwohl die meisten weniger als 5 Fuß entfernt sein werden. Um die Verbindungen einfach zu halten, möchte ich diese Module in Reihe schalten können.

Jedes Modul verwendet einen ATTiny84/85, der die verschiedenen Funktionen jedes Moduls (z. B. ADC/DAC) handhabt. Jedes Mikro fungiert auch als i2c-Slave (konfigurierbare Adresse) und reagiert auf Befehle des I²C-Masters (Spark Photon).

Ich würde wirklich gerne ein Ethernet-Kabel (RJ45) verwenden (missbrauchen). Angesichts der Tatsache, dass Ethernet-Kabel in verschiedenen Längen weit verbreitet und relativ kostengünstig sind, wären sie ideal. Ich könnte Strom (3,3 V & 5 V) und Masse sowie die I²C-Leitungen für jedes Modul bereitstellen und habe immer noch Ersatzdrähte, die ich möglicherweise in einer zukünftigen Überarbeitung verwenden könnte. Ich könnte sogar zwei verdrillte Paare verwenden, um die i2c-Leitungen abzuschirmen. Vielleicht? Der einzige Nachteil, den ich hier sehe, ist, dass jemand möglicherweise ein Crossover-Kabel verwendet, das die Dinge möglicherweise durcheinander bringen könnte.

Alternativ könnte ich USB-Kabel verwenden (weibliche Verlängerungskabel im A-Stil). Wenn ich separate Stromleitungen aufgebe und einen Spannungsregler an den Modulen verwende, die 3,3 V benötigen. Ich bin mir nicht sicher, ob meine Längenanforderungen hier erfüllt würden, aber wenn Daisy-Chaining funktioniert, sollte dies kein großes Problem sein.

Gibt es RJ45-Anschlüsse, mit denen ich einen Wire-to-Board-Anschluss (z. B. Molex Mini-Latch) verwenden könnte? Ich möchte mich wirklich nicht mit dem Präzisionsfräsen und den Kosten auseinandersetzen müssen, die für Durchgangsloch- oder Oberflächenmontage-Steckverbinder erforderlich sind.

Dasselbe gilt für USB-Anschlüsse.

UPDATE: Es scheint, dass I²C tatsächlich eine praktikable Lösung ist. Meine größte Sorge an dieser Stelle ist das zu verwendende Kabel und ob Steckverbinder verfügbar sind, die nicht direkt auf die Leiterplatte gelötet werden müssen (ideal wäre Wire-to-Board).

I²C ist nicht optimal für längere Entfernungen, da die Kabelkapazität beginnt, Ihre Signalintegrität zu verschlechtern, auch wenn Sie sie in Reihe schalten möchten, wäre die Gesamtkabellänge nicht noch länger und würde die Sache noch schlimmer machen?
Dafür wird ein Treiber benötigt, um hohe Anstiegsgeschwindigkeiten bei hoher Geschwindigkeit über große Entfernungen aufrechtzuerhalten.
Hmm. Daran habe ich nicht gedacht. Obwohl ich eine schnelle Google-Suche durchgeführt und das gefunden habe: P82B715
In der Tat; parasitäre Kapazität ist hier Ihr Hauptfeind. Denken Sie auch daran, dass der ATTiny kein I2C hat; es hat "I2C", was nur ein Wrapper um eine (einzelne) serielle Hardwarekomponente ist. Um sie zu Repeatern zu machen, müssen Sie SoftwareSerial für mindestens einen verwenden.
Ich glaube nicht, dass Sie Daisy-Chain gemeint haben, wie ich es ursprünglich interpretiert habe. Dieser Link sollte hilfreich sein; ab Seite 7 wird es interessant. Mit einer buchstäblichen Daisy-Chain kann der ATTiny der "Puffer" sein.
Ich habe I2C an ein Arduino angeschlossen und festgestellt, dass das Verlangsamen der Busgeschwindigkeit das Protokoll nicht unterbricht. Wenn die Kapazität zu einem Problem wird, verlangsamen Sie einfach die Dinge. I2C ist nicht zeitbasiert (anders als OneWire oder RS-232).
Ich denke, es ist besser, sich für RS422- oder RS485-Designs zu entscheiden, da sie speziell für die kabelgebundene Kommunikation entwickelt wurden.

Antworten (2)

Wenn "Daisy-Chaining" bedeutet, dass Daten auf "I2C0" eingehen und auf "I2C1" wiederholt werden, sollten Sie nicht viele Probleme haben, außer dass Ihre Slaves zu beschäftigt sind, auf Interrupts zu reagieren, um irgendetwas zu messen.

"Daisy-Chaining" könnte auch bedeuten, sie zu befördern.

Erwägen Sie in jedem Fall, Ihre Spannung zu erhöhen und/oder einen Puffer/Leitungstreiber zu verwenden (zumindest zwischen den längsten Läufen). Dies nähert sich einer Neugestaltung von RS-232.

Einfach und vielleicht gut genug:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Das ist eigentlich ein ziemlich nettes kleines Schema
Ich würde gerne die Anerkennung in Anspruch nehmen, aber es ist nur eine vergrößerte "Ersatzschaltung" der meisten MCU-Pins :)
Ich meinte eigentlich Daisy-Chaining eher in dem Sinne, dass jedes Modul 2 Anschlüsse hat und die Leitungen, insbesondere die I²C-Leitungen, zwischen ihnen geteilt werden. Also im Wesentlichen Bussing sie.

Das Datenblatt für den I2C-Bus-Extender P82B715 behauptet, dass er I2C-Signale bis zu 50 m über Twisted-Pair-Kabel wie Cat5e treiben kann, obwohl sie sagen, dass 30 m eine sicherere Zahl sind. Das ist immer noch viel mehr als Sie benötigen.

Diese Zahlen gehen von einer Datenrate von 100 kHz aus; Da Sie über eine viel kürzere Entfernung kommunizieren, kommen Sie möglicherweise mit einer schnelleren Rate davon, entweder 200 kHz oder sogar 400 kHz.

Geben Sie hier die Bildbeschreibung ein

Wie Sie dem Schema entnehmen können, können mehr als zwei P82B715-Chips an demselben externen Bus miteinander verbunden sein (gekennzeichnet durch die vier gepunkteten Linien, die vom unteren Rand des Diagramms ausgehen), sodass er stattdessen die Form eines Sternnetzwerks annehmen kann von nur Punkt zu Punkt.

Die ICs sind bei Digi-Key für drei bis vier Dollar erhältlich.

Genau darauf hatte ich gehofft. Danke @tcrosley! Geschwindigkeit ist meiner Meinung nach kein großes Problem. Im Wesentlichen fordere ich nur Daten von jedem angeschlossenen Sensor mit 2 Hz oder weniger an und sende Befehle an die Motorsteuerung, wenn überhaupt, noch seltener. 100kHz reichen also aus.