Ich überlege, ein Hausautomationssystem um meinen Raspberry Pi herum zu implementieren, aber ich fand den Preis und den Platzbedarf für das Einfügen eines Pi überall dort, wo eine gewisse Steuerung erforderlich ist, zu viel, aber die für dieses Design erforderlichen Cat5e-Kabel werden 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 TIA/EIA 568B-Pinbelegung verdrahtet. Sie sind Teil meiner strukturellen Verkabelung und nicht abgeschirmt, daher ist eine höhere Netzspannung erforderlich. Ich denke daran, Strom- und I2C-Leitungen mit dieser Pinbelegung über das Kabel 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 Anordnung der Stromversorgungsstifte ist dieselbe wie bei der 100BASE-TX-PoE-Verkabelung, sodass die Nennleistung ebenfalls dieselbe ist, und die Verwendung von bidirektionaler Differenzsignalisierung findet sich in 1000BASE-T, das Cat5e erfordert.
Ursprüngliche I2C-SCL- und SDA-Leitungen werden in zwei bidirektionale Differentialpaare auf TTL-Pegeln abgeleitet (der Open-Drain wird nicht auf dem Kabel gehalten, sondern in dem von mir entworfenen Leitungsabschluss-/Pegelverschiebungsgerät wiederhergestellt)
Irgendwelche Vorschläge 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 man mit SMT-Sachen umgeht.
BEARBEITEN
Ich habe diesen Chip gefunden, SN65LBC180, ist er eine gute Wahl? Wie verdrahte ich es in eine bidirektionale Einheit? Wie kann man den Pegel verschieben (es ist ein BiCMOS-Teil, das einen TTL-Pegel erfordert, aber Pi fährt mit 3,3-V-CMOS-Pegeln) und ihn Open-Drain-kompatibel machen?
BEARBEITEN 2
Kommentatoren schlugen RS-485 vor, was mir akzeptabel erschien, aber dennoch müssen die beiden Differentialpaare bidirektional sein und nur zwei bidirektionale Differentialpaare. Ich nutze vorhandene Ethernet-Kabel um.
BEARBEITEN 3
Da es jemand angesprochen hat, kann ich CAN nicht verwenden. Ich kann CAN auf keinen Fall auf RPi einbauen, ohne etwas zu opfern (SPI ist von einem Touchscreen belegt, also kein SPI-zu-CAN-Konverter).
Mir ist die 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 darüber hinaus läuft das I2C-Protokoll.
BEARBEITEN 4
Ein neuer Chip kam zu mir: NXP P82B96, der I2C in 4 unidirektionale Leitungen aufteilt, die wiederum verwendet werden können, um durch Optoisolation (nur Pi-Seite) in SN65LBC180 einzuspeisen, um eine 8-polige langstreckentaugliche Signalisierung zu bilden. Jetzt muss ich nur noch herausfinden, wie ich Strom durch das Kabel bekomme oder wie ich feststellen kann, ob der Bus sendet, und die Paare bidirektional machen.
BEARBEITEN 5
Aus den Vorschlägen für Antworten denke ich, dass ich die Strom-Pinbelegung 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 I2C-Differenzsignalspannung ist TTL. Die +5 V über Paar 3 kommen vom Pi, ungepuffert, aber abgesichert. Die +12 V über Paar 4 sind möglicherweise nicht vorhanden und werden nur zum Ansteuern einiger Hochleistungsgeräte verwendet. Bei Bedarf kann das Gerät seine eigene Stromversorgung verwenden und beide Schienen unverbunden hängen lassen oder seine eigene höhere Spannung liefern, aber die 5-V-Schiene verwenden.
VERGISS DAS
Die Pinbelegung ist immer noch mein ursprüngliches Design, das 802.1af-kompatibel ist.
Es ist eine schlechte Idee, es mit IIC zu versuchen. IIC ist eigentlich für die Kommunikation zwischen Chips auf einer einzigen Platine gedacht. Da der maximal erforderliche Strom zum Tiefziehen einer Leitung begrenzt ist, sind die Leitungen relativ hochohmig (einige kΩ). Dies bedeutet, dass sie leicht Rauschen aufnehmen können, was ein ernstes Problem darstellt, wenn ungeschirmte Kabel in den Wänden verlegt werden, möglicherweise direkt neben Wechselstromkabeln.
Ich würde CAN dafür verwenden. CAN verwendet ein einzelnes verdrilltes Paar, das an jedem Punkt mit nur 60 Ω zusammengezogen wird, und das Signal ist differentiell. Das bedeutet, dass der größte Teil des unvermeidlichen Gleichtaktrauschens, das aufgrund der kapazitiven Kopplung aufgenommen wird, von den Empfängern ausgelöscht werden kann. CAN mit 500 kbit/s kann die Größe eines gewöhnlichen Hauses abdecken.
Heutzutage sind viele Mikrocontroller mit integriertem CAN erhältlich. Normalerweise benötigen Sie einen separaten physischen Transceiver-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 Kollisionserkennung und Wiederholung, Prüfsummengenerierung, Details der Buspaketsignalisierung, empfangene Prüfsummenvalidierung und Taktdriftanpassung werden für Sie erledigt.
Fallen Sie nicht auf RS-485 herein. Das ist ein Relikt aus einer vergangenen Zeit. Es verwendet auch ein einzelnes Differenzsignal wie CAN und hat daher auch eine gute Störfestigkeit. Die Leute fallen jedoch normalerweise auf RS-485 herein, weil es "einfacher" aussieht. Dies liegt nur daran, dass sie nicht das gesamte System betrachten. Erstens ist es elektrisch nicht wirklich weniger komplex. Sie benötigen immer noch eine Art Transceiver, um das Differenzsignal zu steuern 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 in Bezug auf Kosten und Hardwarekomplexität ziemlich irrelevant. Der große Unterschied besteht darin, dass Sie bei RS-485 auf der Rohbyteebene (über den UART) bleiben. Das bedeutet, um ein sinnvolles und robustes System zu implementieren, müssen Sie Ihr eigenes Protokoll für die Kollisionserkennung erfinden. Entscheiden Sie, wie Wiederholungen, Paketierung, Prüfsummengenerierung und -prüfung, Flusskontrolle usw. gehandhabt werden. Sie können eine einzige Master-Architektur verwenden, aber die richtigen Details zu finden, ist viel schwieriger als die Leute denken, die sie nicht alle sorgfältig analysiert haben. Mit CAN senden und empfangen Sie einfach Pakete, und die Hardware kümmert sich um die Details.
I2C ist nicht der richtige Weg. CAN-Transceiver kosten jeweils einen Dollar, und Sie können sie als Uart-Transceiver verwenden und Ihr eigenes Protokoll schreiben, sodass Sie kein Can-kompatibles Mikro benötigen oder nicht den vollen Can-Stack verwenden möchten.
Ich fühle mich immer etwas unwohl, wenn ich sehe, dass Cat5-Leiter für mehr Strom parallel laufen. Es stört mich, denn wenn ein Leiter bricht, führt der andere den vollen Systemstrom. Die Cat5-Stromwerte sind sehr konservativ, daher ist die Wahrscheinlichkeit eines Brandes ziemlich gering, aber ich mag die Möglichkeit einfach nicht.
Der sichere Weg, dies zu tun, besteht darin, eine Mehrfachsicherung an beiden Stromschienen anzubringen und die Erdung an der Versorgung zu verbinden und jedes Gerät mit einem und nur einem Strom-/Erdungssatz zu verbinden. Auf diese Weise verlieren die Geräte, die diese Leitung verwenden, Strom, wenn ein Draht ausfällt, anstatt dass eine Leitung gezwungen wird, die Leistung von zwei zu übertragen.
Viele Leute legen aus EMI-Gründen gerne Strom und Masse in beide verdrillten Paare, anstatt ein Strompaar und ein Erdungspaar zu haben. Wenn Sie zwei Strom/Masse-Paare haben, liegt die Stromleitung näher am Boden, und die Felder heben sich auf, wodurch alle gesendeten oder empfangenen Funkwellen von den Stromleitungen reduziert werden. Unnötig, aber schön, wenn viel elektrisches Rauschen herumsurrt.
12 V sind meiner Meinung nach zu niedrig für die Stromverteilung, wenn 24 V noch einigermaßen sicher und viel effizienter sind.
Wenn die Automatisierung einfach Dinge im Haus ein- und ausschaltet, würde ich dies vereinfachen durch:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
EUREKA! Herausgefunden! (ungetestet, werde es am wochenende testen)
Die Schnittstellenchips sind NXP P82B96 I2C-Puffer/Splitter und 2 TI SN65HVD251P CAN-Bus-Schnittstellenchips. Im Wesentlichen betreibe ich I2C auf CAN PHY.
P82B96 versteht das I2C-Protokoll und übernimmt die Busarbitrierung für mich und gibt mir separate Tx- und Rx-Pins, die miteinander verbunden werden können. Ich füge diese in den CAN-Transceiver SN65HVD251P ein und er gibt mir das bidirektionale Differenzpaar, das ich über Drähte senden kann.
Power-Pins kommen direkt, ungepuffert von der 5V-Schiene meines Pi. (Ich werde für eine Weile keine 12-V-Signalspannung und -leistung verwenden)
Ungeachtet der Vorzüge von IIC auf Chipebene wird Ihre vorgeschlagene Implementierung sehr schwierig sein. Das Problem ist die Busarbitrierung. Obwohl mehrere Einheiten parallel geschaltet werden können, z. B. über RS485, stellt sich die große Frage:
Woher weiß eine Einheit, ob sie die Kontrolle über den Bus übernehmen kann, um Daten zu senden?
In IIC ist die bidirektionale Übertragung mit Open-Drain-Signalleitungen einfach - aber bei Tristate-Bussen muss sichergestellt werden, dass jeweils nur eine Einheit versucht, den Bus zu steuern. 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 sie vom Master angefordert werden Schnittstellenkarten für den Master und die Slaves.
Was physische Treiber/Empfänger betrifft, reicht RS485 aus, und es sind viele Schnittstellenchips verfügbar. Nur Google.
Ich weiß nicht, ob Sie an einer vorgefertigten Lösung interessiert sind, anstatt Ihre eigene Schaltung zu bauen, aber ich dachte, ich möchte darauf hinweisen, dass Pololu diese von SJTbits hergestellten I²C-Langstrecken-Differential-Extender- Boards verkauft, die ziemlich genau zu funktionieren scheinen was suchst du. (Vollständige Offenlegung: Ich arbeite für Pololu.)
Auch wenn Sie es nicht direkt verwenden möchten, kann Ihnen ein Blick auf die verwendete Schaltung vielleicht einige Ideen geben. Sie können das Schema im Datenblatt sehen; Es verwendet einen NXP PCA9600D-Puffer, einen TI AM26LS31CDR-Differentialleitungstreiber und einen TI AM26LS32ACDR-Differentialleitungsempfänger.
Ich weiß, das ist ein bisschen alt und eine Lösung scheint irgendwo zwischen den Antworten gefunden worden zu sein, aber ich hatte diesen Vorschlag anzubieten. Es gibt Geräte wie den PCA9614/5/6 von NXP, die ich gerade als Lösung für einen robusteren Langstrecken-I2C-Bus (PCA9614 2-Kanal-Mehrpunkt-Fast-Mode Plus-Differential-I2C-Bus-Puffer) betrachte . Im Wesentlichen stimmt es, dass es etwas anderes als echtes I2C wird, aber an den Enden des Busses ist es für die Geräte unsichtbar. Diese spezielle Familie übersetzt die Signale in 2 bidirektionale Differenzpaare, und es gibt auch ähnliche Geräte, die bereits in den Kommentaren erwähnt wurden, die in 4 unidirektionale Differenzpaare übersetzen. Durch die Übersetzung auf nur 2 Paare können Sie CAT-Kabel verwenden und haben immer noch 2 Paare für Strom/Masse.
Daumen hoch! Ich versuche gerade, so ziemlich das gleiche Problem zu lösen. Ich versuche auch, I2C über Cat5 für die Heimautomatisierung 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 5-mal billiger sind als sogar attiny13 uC (AFAIU uC ist für CAN und RS485 erforderlich).
1) Momentan bin ich gerade dabei, den ersten Teil eines Systems zu testen und jetzt habe ich Erfolg mit 15m langem Kabel mit 5V und direkter SCL&SDA-Verbindung! Ich verwende PCF8574 und 2 Relais, um meine Raumbeleuchtung auszulösen. Pinbelegung ist
1
2 INT
3 +5V
4 SCL
5 SDA
6 GND
7
8
2) Ich verstehe, dass es sich nicht ein paar weitere Relais oder zusätzliche 10 Meter leisten wird ... Ein Spannungsabfall ist erheblich (von 5,5 auf 4,7). Für das Spannungsabfallproblem werde ich stattdessen 12 V auf eine Leitung legen und 5-V-Spannungsregler auf den Platinen hinzufügen, um unabhängig vom gesamten Leitungsabfall überall eine feine Spannung aufrechtzuerhalten. Ich werde in den zukünftigen Linien sowieso zusätzliche Netzteile einbauen.
3) Das Signal selbst kann mit P82B96 oder billigem P82B715 verbessert werden, ohne auf differentielle Leitungen aufzuteilen. Ein NXP selbst verwendet Cat5 in einigen Präsentationen, aber ich kann ihre Pinbelegung nicht finden. Ein wichtiger Teil hier ist, dass sie eindeutig Signalleitungen in verschiedenen Paaren verwenden ... zB ein Paar ist GND + SDA, das andere ist VCC + SCL.
4) Ein weiterer interessanter Punkt - diese Puffer können einfach eine Amplitude auf bis zu 12 V erhöhen, um den Rauschwiderstand zu erhöhen. Also werde ich wahrscheinlich versuchen, 12 V auch an Signalleitungen anzulegen, und das sollte es ermöglichen, Klimmzüge direkt von 12 V-Kabeln anzulegen ... Aber das wird mich zwingen, so etwas wie P82B96 auf jedes Gerät zu setzen.
Wie Sie vielleicht bemerkt haben, verwende ich auch eine separate Interrupt-Leitung ... Der Master befindet sich derzeit auf dem Arduino-Board, das mit dem PC verbunden ist. Die primäre Master-Software befindet sich sowieso auf einem 24x7-PC, sodass Arduino nur das Signal übersetzt und Interrupts verarbeitet. Ich kann eine spezifische Konfiguration für die Onboard-Interrupt-Behandlung senden, z. B. um das bequeme Umschalten des Schalters über den Interrupt zu handhaben ... Dadurch kann ich alle Verzögerungen beim manuellen Umschalten des Lichts vergessen. Interrupt-Handling ist ein weiterer Vorteil von i2c.
Meine Idee ist also, dass I2C einfach genug ist, um in der Verkabelung von <= 100 m Stadtwohnungen anwendbar zu sein. Anstatt zum Differenzsignal zu wechseln, hoffe ich, dass ich stattdessen die zusätzliche Frequenz reduzieren kann.
Ich mag Ihre Idee, sowohl 5 V als auch 12 V zu verwenden, da dies den Bedarf an Reglern und die Kosten senkt ... die ganze Idee des Mehrdrahtbusses, um die Kosten für Endpunkte zu senken, ich werde dies auch für eine neue Pinbelegung in Betracht ziehen :)
Kamil
Maxton Chan
Ignacio Vazquez-Abrams
Maxton Chan
Ignacio Vazquez-Abrams
David Tweed
Kamil
Maxton Chan
Kamil
mjh2007
Maxton Chan
Maxton Chan
Maxton Chan
Gewähren
Maxton Chan
Synchrondyn
Maxton Chan
Matt Jung
Maxton Chan
Gewähren
Maxton Chan
Gewähren