Ich denke darüber nach, ein Hausautomationssystem um meinen Raspberry Pi herum zu implementieren, aber ich fand den Preis und den Platzbedarf für das Einsetzen eines Pi an jeder Stelle, an der eine Steuerung zu viel erforderlich ist, aber die für dieses Design erforderlichen Cat5e-Kabel sind bereits während der Renovierung installiert. Ich habe einige PCF8574, PCF8591 und SSRs herumliegen. Ist es also möglich, sie mit Cat5e-Kabeln zu betreiben?
Alle meine Cat5e-Kabel sind bereits mit der Pinbelegung TIA / EIA 568B verdrahtet. Sie sind Teil meiner strukturellen Verkabelung und nicht abgeschirmt, daher ist eine höhere Netzspannung erforderlich. Ich denke, Strom- und I2C-Leitungen über das Kabel mit dieser Pinbelegung zu senden:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND
Die Power-Pin-Anordnung entspricht der 100BASE-TX-PoE-Verkabelung, sodass auch die Nennleistung gleich ist. In 1000BASE-T, für das Cat5e erforderlich ist, wird eine bidirektionale Differenzsignalisierung verwendet.
Die ursprünglichen I2C-SCL- und SDA-Leitungen werden bei TTL-Pegeln in zwei bidirektionale Differentialpaare abgeleitet (der Open-Drain wird nicht auf dem Draht gehalten, sondern in der von mir entworfenen Leitungsabschluss- / Pegelverschiebungsvorrichtung wiederhergestellt).
Irgendein Vorschlag dazu? Welchen Chip sollte ich auch verwenden, um I2C-Leitungen in die Differenzsignalisierung umzuwandeln? Bitte schlagen Sie mir Chips mit DIP-Durchgangslochoption vor. Ich weiß nicht, wie ich mit SMT umgehen soll.
BEARBEITEN
Ich fand diesen Chip, SN65LBC180, ist es eine gute Wahl? Wie verdrahtet man es zu einer bidirektionalen Einheit? Wie kann man den Pegel verschieben (es ist ein BiCMOS-Teil, der einen TTL-Pegel benötigt, aber Pi mit 3,3 V CMOS-Pegel fährt) und ihn Open-Drain-kompatibel machen?
BEARBEITEN 2
Die Kommentatoren schlugen RS-485 vor, was mir akzeptabel erschien, aber dennoch müssen die beiden Differentialpaare bidirektional und nur zwei bidirektionale Differentialpaare sein. Ich verwende vorhandene Ethernet-Kabel neu.
BEARBEITEN 3
Da es jemand angesprochen hat, kann ich CAN nicht verwenden. Es gibt keine Möglichkeit, CAN auf RPi anzupassen, ohne etwas zu opfern (SPI wird von einem Touchscreen belegt, also kein SPI-CAN-Konverter).
Ich bin mir der Einschränkung von I2C PHY bewusst, daher versuche ich im Wesentlichen, 1000BASE-T PHY daran anzupassen - bidirektionale Differenzsignalisierung für SCL- und SDA-Signale, aber zusätzlich wird das I2C-Protokoll ausgeführt.
BEARBEITEN 4
Ein neuer Chip kam zu mir: NXP P82B96, der I2C in 4 unidirektionale Leitungen aufteilt, die wiederum durch Optoisolation (nur Pi-Seite) in SN65LBC180 eingespeist werden können, um eine 8-polige Ferngesprächssignalisierung zu bilden. Jetzt muss ich nur noch herausfinden, wie ich Strom über das Kabel bekomme oder wie ich feststelle, ob der Bus sendet, und die Paare bidirektional machen.
BEARBEITEN 5
Aufgrund der Vorschläge für Antworten denke ich, dass ich die Pinbelegung der Stromversorgung ein wenig ändern muss:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V
Die differentielle I2C-Signalisierungsspannung beträgt TTL. Die + 5V über Paar 3 kommen vom Pi, ungepuffert, aber verschmolzen. Die + 12V über Paar 4 sind möglicherweise nicht vorhanden und werden nur zum Ansteuern einiger Hochleistungsgeräte verwendet. Bei Bedarf kann das Gerät eine eigene Stromversorgung verwenden und beide Schienen nicht angeschlossen lassen oder eine eigene höhere Spannung liefern, jedoch die 5-V-Schiene verwenden.
VERGISS DAS
Pinbelegung ist immer noch mein ursprüngliches Design, das 802.1af-kompatibel ist.
quelle
Antworten:
Der Versuch, mit IIC zu tun, ist eine schlechte Idee. IIC ist wirklich für die Kommunikation zwischen Chips auf einer einzelnen Karte gedacht. Da der maximal erforderliche Strom zum Abziehen einer Leitung begrenzt ist, haben die Leitungen eine relativ hohe Impedanz (einige kΩ). Dies bedeutet, dass sie leicht Geräusche aufnehmen können, was ein ernstes Problem ist, wenn sie in ungeschirmten Kabeln in den Wänden verlegt werden, möglicherweise direkt neben den Wechselstromkabeln.
Ich würde dafür CAN verwenden. CAN verwendet ein einzelnes Twisted Pair, das an einem Punkt mit nur 60 Ω zusammengezogen wird, und das Signal ist differentiell. Dies bedeutet, dass der größte Teil des unvermeidlichen Gleichtaktrauschens, das aufgrund der kapazitiven Kopplung aufgenommen wird, von den Empfängern gelöscht werden kann. CAN mit 500 kbit / s kann etwas von der Größe eines normalen Hauses abdecken.
Viele Mikrocontroller sind heute mit integriertem CAN erhältlich. Normalerweise benötigen Sie einen separaten physischen Tranceiver-Chip (wie den üblichen MCP2551), aber die untersten Schichten des Protokolls sind in Silizium im CAN-Peripheriegerät implementiert. Die Firmware interagiert mit dem CAN-Bus auf der Ebene des Sendens und Empfangens vollständiger Pakete. Die Erkennung und Wiederholung von Kollisionen, die Generierung von Prüfsummen, Details der Buspaketsignalisierung, die Validierung der empfangenen Prüfsumme und die Anpassung der Taktdrift werden für Sie erledigt.
Verlieben Sie sich nicht in RS-485. Das ist ein Relikt aus einer vergangenen Zeit. Es verwendet auch ein einzelnes Differenzsignal wie CAN, hat also auch eine gute Störfestigkeit. Normalerweise verlieben sich die Leute jedoch in RS-485, weil es "einfacher" aussieht. Dies liegt nur daran, dass sie nicht das gesamte System betrachten. Erstens ist es elektrisch nicht weniger komplex. Sie benötigen noch eine Art Transciever, um das Differenzsignal anzutreiben und zu empfangen. Ob Sie einen RS-485-Transceiver an den UART des Mikrocontrollers oder einen MCP2551 an das CAN-Peripheriegerät angeschlossen haben, ist im Hinblick auf Kosten und Hardwarekomplexität ziemlich irrelevant. Der große Unterschied besteht darin, dass RS-485 Sie auf der Rohbyte-Ebene (über den UART) belässt. Dies bedeutet, dass Sie zur Implementierung eines aussagekräftigen und robusten Systems ein eigenes Protokoll für die Kollisionserkennung erstellen müssen. Entscheiden, wie mit Wiederholungsversuchen, Paketierung, Generierung und Überprüfung von Prüfsummen, Flusskontrolle usw. umgegangen werden soll. Sie können eine einzelne Master-Architektur verwenden, aber die richtigen Details zu finden ist viel schwieriger, als die Leute denken, die nicht alle sorgfältig analysiert haben. Mit CAN senden und empfangen Sie einfach Pakete, und die Hardware kümmert sich um die Details.
quelle
I2C ist nicht der richtige Weg. CAN-Tranciever kosten jeweils einen Dollar, und Sie können sie als Uart-Trancieves verwenden und Ihr eigenes Protokoll schreiben, sodass Sie kein Dosen-kompatibles Mikro benötigen. Sie möchten nicht den gesamten Dosenstapel verwenden.
Ich fühle mich immer ein wenig unwohl, wenn ich sehe, dass Cat5-Leiter parallel laufen, um mehr Strom zu erhalten. Es nervt mich, denn wenn ein Leiter bricht, führt der andere den vollen Systemstrom. Die aktuellen Cat5-Bewertungen sind sehr konservativ, so dass die Wahrscheinlichkeit eines Feuers ziemlich gering ist, aber ich mag die Möglichkeit einfach nicht.
Der sichere Weg, dies zu tun, besteht darin, eine Polyfuse auf beiden Stromschienen zu haben und die Erdung an der Versorgung zu verbinden und jedes Gerät an einen und nur einen Satz Strom / Masse anzuschließen. Auf diese Weise verlieren die Geräte, die diese Leitung verwenden, die Stromversorgung, wenn ein Kabel ausfällt, anstatt dass eine Leitung gezwungen ist, die Leistung von zwei zu übertragen.
Viele Leute mögen es, aus EMI-Gründen Strom und Masse in beide Twisted Pair zu stecken, anstatt ein Power-Paar und ein Ground-Paar zu haben. Wenn Sie zwei Strom / Masse-Paare haben, ist die Stromleitung näher an der Erde und die Felder werden gelöscht, wodurch alle von den Stromleitungen übertragenen oder empfangenen Funkwellen reduziert werden. Unnötig, aber schön, wenn viel elektrisches Rauschen herumschwirrt.
12 V sind meiner Meinung nach zu niedrig für die Stromverteilung, wenn 24 V noch einigermaßen sicher und viel effizienter sind.
quelle
Wenn die Automatisierung einfach Dinge rund um das Haus ein- und ausschaltet, würde ich dies vereinfachen, indem ich:
quelle
simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab
EUREKA! Herausgefunden! (ungetestet, werde es dieses Wochenende testen)
Die Schnittstellenchips sind NXP P82B96 I2C-Puffer / Splitter und 2 TI SN65HVD251P-CAN-Bus-Schnittstellenchips. Im Wesentlichen verwende ich I2C auf CAN PHY.
P82B96 versteht das I2C-Protokoll und übernimmt für mich die Busarbitrierung und gibt mir separate Tx- und Rx-Pins, die miteinander verbunden werden können. Ich speise diese in den CAN-Transceiver SN65HVD251P ein und er gibt mir das bidirektionale Differentialpaar zum Senden über Drähte.
Die Stromversorgungsstifte werden direkt von der 5-V-Schiene meines Pi gepuffert. (Ich werde für eine Weile keine 12V Signalspannung und Stromversorgung verwenden)
quelle
Unabhängig von den Vorzügen von IIC auf Chipebene wird Ihre vorgeschlagene Implementierung sehr schwierig sein. Das Problem ist die Busarbitrierung. Obwohl mehrere Einheiten beispielsweise mit RS485 parallel geschaltet werden können, lautet die große Frage:
Woher weiß eine Einheit, ob sie die Kontrolle über den Bus übernehmen kann, um Daten zu senden?
In IIC mit offenen Drain-Signalleitungen ist die bidirektionale Übertragung einfach - bei dreistufigen Bussen müssen Sie jedoch sicherstellen, dass jeweils nur eine Einheit versucht, den Bus zu fahren. Das wird schwierig. Sie können dies tun, insbesondere wenn Sie einen einzelnen Master einrichten und verlangen, dass alle Slaves strenge zeitliche Einschränkungen beim Senden von Daten haben und dass sie nur Daten senden, wenn dies vom Master angefordert wird. Dies erfordert jedoch erhebliche Anstrengungen von Ihrer Seite beim Entwerfen des Masters Schnittstellenkarten für den Master und die Slaves.
Bei physischen Treibern / Empfängern reicht RS485 aus, und es stehen viele Schnittstellenchips zur Verfügung. Nur Google.
quelle
Ich weiß nicht, ob Sie an einer vorgefertigten Lösung interessiert sind, anstatt eine eigene Schaltung zu bauen, aber ich dachte, ich möchte darauf hinweisen, dass Pololu diese I²C Long Distance Differential Extender- Boards von SJTbits verkauft, die ziemlich genau zu funktionieren scheinen Nach was suchst du. (Vollständige Offenlegung: Ich arbeite für Pololu.)
Selbst wenn Sie es nicht direkt verwenden möchten, kann Ihnen ein Blick auf die verwendete Schaltung einige Ideen geben. Sie können den Schaltplan im Datenblatt sehen. Es verwendet einen NXP PCA9600D-Puffer, einen TI AM26LS31CDR-Differenzleitungstreiber und einen TI AM26LS32ACDR-Differenzleitungsempfänger.
quelle
Ich weiß, dass dies ein bisschen alt ist und irgendwo in den Antworten eine Lösung gefunden worden zu sein scheint, aber ich hatte diesen Vorschlag zu bieten. Es gibt Geräte wie das PCA9614 / 5/6 von NXP, die ich derzeit als Lösung für einen robusteren I2C-Langstreckenbus (PCA9614 2-Kanal-Mehrpunkt-Fast-Mode-Plus-Differential-I2C-Bus-Puffer) betrachte . Im Wesentlichen ist es wahr, dass es etwas anderes als echtes I2C wird, aber am Ende des Busses ist es für die Geräte unsichtbar. Diese spezielle Familie übersetzt die Signale in 2 bidirektionale Differentialpaare, und es gibt auch ähnliche Geräte, wie sie bereits in den Kommentaren erwähnt wurden, die sich in 4 unidirektionale Differentialpaare übersetzen lassen. Wenn Sie in nur 2 Paare übersetzen, können Sie ein CAT-Kabel verwenden und haben dennoch 2 Paare für Strom / Masse.
quelle
Daumen hoch! Ich versuche gerade, so ziemlich das gleiche Problem zu lösen. Ich versuche auch, I2C über cat5 für die Heimautomation mit meiner benutzerdefinierten Pinbelegung zu verwenden. Der Grund sind die Kosten, ich möchte, dass es sehr kostengünstig ist und I2C-Komponenten immer noch mindestens fünfmal billiger sind als selbst attiny13 uC (AFAIU uC ist für CAN und RS485 erforderlich).
1) Derzeit bin ich gerade in einem Testprozess für den ersten Teil eines Systems und jetzt bin ich mit einem 15 m langen Kabel mit 5 V und direkter SCL- und SDA-Verbindung erfolgreich! Ich benutze PCF8574 und 2 Relais, um meine Raumbeleuchtung auszulösen. Pinbelegung ist
2) Ich verstehe, dass es nicht mehr ein paar Relais oder zusätzliche 10 Meter geben wird ... Ein Spannungsabfall ist signifikant (von 5,5 auf 4,7). Für das Spannungsabfallproblem werde ich stattdessen 12 V an eine Leitung anschließen und 5-V-Spannungsregler auf den Platinen hinzufügen, um die Feinspannung unabhängig vom gesamten Leitungsabfall überall zu halten. Ich werde in den zukünftigen Leitungen sowieso zusätzliche Netzteile anschließen.
3) Das Signal selbst kann mit P82B96 oder billigem P82B715 verbessert werden, ohne auf Differenzleitungen aufgeteilt zu werden. Ein NXP selbst verwendet Cat5 in einigen Präsentationen, aber ich kann ihre Pinbelegung nicht finden. Ein wichtiger Teil hierbei ist, dass sie eindeutig Signalleitungen in verschiedenen Paaren verwenden ... z. B. ist ein Paar GND + SDA, das andere ist VCC + SCL.
4) Ein weiterer interessanter Punkt - dieser Puffer kann einfach eine Amplitude auf 12 V erhöhen, um den Rauschwiderstand zu erhöhen. Also werde ich wahrscheinlich auch versuchen, 12V auf eine Signalleitung zu legen, und das sollte es ermöglichen, Klimmzüge direkt von 12V-Kabeln zu ziehen ... Aber das wird mich zwingen, so etwas wie P82B96 auf jedes Gerät zu legen.
Wie Sie vielleicht bemerkt haben, verwende ich auch eine separate Interrupt-Leitung ... Der Master befindet sich derzeit auf einer mit dem PC verbundenen Arduino-Karte. Die primäre Master-Software befindet sich ohnehin auf einem 24x7-PC, sodass Arduino nur das Signal übersetzt und Interrupts verarbeitet. Ich kann eine spezifische Konfiguration für die Interrupt-Behandlung an Bord senden, z. B. für die bequeme Umschaltung des Schalters über Interrupt ... Dadurch kann ich Verzögerungen beim manuellen Umschalten des Lichts vergessen. Die Interrupt-Behandlung ist ein zusätzlicher Vorteil von i2c.
Meine Idee ist also, dass I2C einfach genug ist, um in <= 100 m Stadtwohnungsverkabelung eingesetzt zu werden. Anstatt zum Differenzsignal zu gehen, hoffe ich, dass ich stattdessen die zusätzliche Frequenz reduzieren kann.
Ich mag Ihre Idee, sowohl 5V als auch 12V zu setzen, da dies den Bedarf an Reglern reduziert und die Kosten senkt ... die ganze Idee des Mehrdrahtbusses, um die Kosten für Endpunkte zu senken, werde ich dies auch für eine neue Pinbelegung in Betracht ziehen :)
quelle