In meinem aktuellen Projekt muss ich über I2C zwischen einem Mikrocontroller und einigen Sensoren kommunizieren. Einer von ihnen ist ein Temperatursensor, der ungefähr 2 Meter vom Mikrocontroller entfernt angebracht werden muss. Ich kann kein anderes Protokoll auswählen (der Sensor befindet sich auf einem Modul mit angegebenem Anschluss / Stiften / Protokoll).
Glauben Sie, dass es möglich ist, in dieser Konfiguration zu kommunizieren? Welche Informationen sollte ich nachschlagen, um sicherzustellen, dass dies möglich ist oder nicht möglich ist? Hast du einen Rat?
Es ist mein erstes Mal, dass ich außerhalb der Leiterplatte mit dem IC kommuniziere.
i2c
communication
cables
JackOfHearts
quelle
quelle
Antworten:
I2C ist nicht für den Einsatz über große Entfernungen ausgelegt, aber ich kenne einige Anwendungen, bei denen es tatsächlich über eine Entfernung von etwa 2 Metern eingesetzt wird. Ich kenne auch einen Fall, in dem sie Probleme damit hatten, und es wurde schließlich behoben, indem ich glaube, Erdschleifen reparierte.
Um sicherzustellen, dass es funktioniert, sollten Sie einen I2C-Bus-Extender wie den P82B715 verwenden.
Das Datenblatt des PB2B715 besagt jedoch Folgendes in Abschnitt 8.2:
So sagen die Experten (NXP ist der frühere Philips, der Erfinder von I2C), dass sich 30 Meter als machbare Distanz erwiesen haben. Meiner Erfahrung nach sind 2 Meter eine machbare Strecke, und die mir gemeldeten Erfahrungen zeigen, dass auch stärker belastete I2C-Busse ohne Extender möglich sind.
Die wichtigsten Punkte für den Einsatz von I2C-Bussen auf langen Strecken sind:
Pullup-Berechnung
Texas Instruments verfügt über einen guten Anwendungshinweis (SLVA689) zur Pull-up-Berechnung .
quelle
Sie sind in der Regel auf eine maximale Buskapazität von 400 pF begrenzt.
Dies sollte funktionieren, wenn Sie die Frequenz auf 1 kHz senken und die Stromversorgung neben dem Sensor entkoppeln.
Wenn Sie etwas Robusteres benötigen, können Sie an beiden Enden differentielle I2C-Wandler wie PCA9615 verwenden .
quelle
Sie können, aber es wird nicht empfohlen.
Unterschiedliche Busse für unterschiedliche Zwecke
I2C ist wie SPI für die Kommunikation innerhalb eines Boards oder einer Gruppe von Boards konzipiert (denken Sie an Raspberry Pi und seine Hüte oder Arduino und seine Schilde). Es kann über größere Entfernungen funktionieren (siehe andere Antworten), sollte aber in diesen Fällen nicht verwendet werden, einfach weil es nicht dafür entworfen, optimiert und qualifiziert wurde.
Das Risiko, das Sie eingehen, besteht darin, dass Sie möglicherweise in Zukunft nicht mehr Sensoren hinzufügen können oder dass Ihr System nicht überall funktioniert oder unter bestimmten Umständen ausfällt.
Was Sie suchen sollten, ist ein Feldbus, so etwas wie 1-Draht, CAN, RS-485, Ethernet usw.
Drahtlose Systeme wie Bluetooth oder ZigBee könnten ebenfalls eine Option sein.
quelle
Wie von @filo bemerkt, ist I2C im Allgemeinen durch die Buskapazität begrenzt. Es gibt jedoch Möglichkeiten, dies zu umgehen:
Weitere Informationen finden Sie unter AN10658 und AN11084 von NXP.
quelle
Ich mag die Antworten von Filo und Caleb.
Eine weitere Möglichkeit besteht darin, eine oder mehrere DS28E17 1-Wire-to-I2C-Master-Bridges an den einzelnen Sensoren zu verwenden und den Bus als Onewire zu verdrahten. Dies ist gut für Busse mit mehr als 100 m Länge geeignet und eignet sich gut für Sensorarray-Anwendungen mit niedrigem Durchsatz wie verteiltes Temperatur- und Batteriemanagement.
quelle