Sternkonfiguration mit CAN Bus, I2C oder RS485

Ich muss ein Sensornetzwerk erstellen, mit einem zentralen Knoten, der Daten von +10 verschiedenen Knoten empfängt, jeder +20 Meter vom zentralen Knoten entfernt. Im Grunde muss ich also eine Sternkonfiguration erstellen, mit einem zentralen Knoten in der Mitte (eine Platine mit einem Himbeer-Pi) und dann einem großen Stub (ca. +20 m) für jeden Sensorknoten. Ich weiß wirklich nicht, welches Protokoll verwendet wird: CAN, I2C oder RS485.

Kann ich CAN verwenden? Kann ich I2C (mit P82B96- Boost-Spannungs-Transceiver oder PCA9615- Differentialpuffer-Transceiver) oder vielleicht einen RS85 mit MAX485-IC verwenden?

Mein größtes Problem ist, wie man diese Art von Lösung implementiert, denn für große Stubs gibt es eine große Fehlanpassung im Bus, sodass das Signal schlecht ist.

Dieser Artikel ist erstaunlich, zeigt viele verschiedene Konfigurationen und die Bedeutung von Abschlusswiderständen für die Impedanzanpassung. Aber ich muss wirklich eine Lösung wie in Abbildung 12 oder Abbildung 13 implementieren, mit Stichleitungen mit +20 Metern.

Dieser Artikel untersucht die I2C-Lösungen mit P82B96- und PCA9615-Transceivern, aber ich habe immer noch das Problem mit der Sternkonfiguration und großen Stichleitungen.

Viele Grüße und Entschuldigung für mein Deutsch.

Ein wenig unelegant, aber Sie könnten den Bus zum und vom Gerät zurück zum Hub fahren, sodass es wie ein Stern aussieht, aber eigentlich immer noch eine Daisy Chain ist. Oder platzieren Sie bidirektionale Repeater rund um den Hub direkt vor jedem Stich.
Aber leider ist die Businstallation schon fertig. Jetzt habe ich also nur noch alle Drähte (+20 m) an der gleichen Stelle zusammengeführt, an der sich der zentrale Knoten befinden wird
Müssen Sie ein Star-Netzwerk verwenden oder dachten Sie nur, es wäre eine gute Idee?
Und nun, verlegen Sie keine Kabel, bevor Sie nicht wissen, welche Daten darüber laufen sollen...
War ich nicht... By boss hat die Installation gemacht und will jetzt alles automatisieren. Und ich muss mit der aktuellen Installation von Kabeln arbeiten ...

Antworten (2)

Sternförmige Netzwerke werden im Allgemeinen nicht empfohlen, aber 20 m Stichleitungen auf einem sternförmigen RS485 sollten in Ordnung sein, vorausgesetzt, Sie bleiben unter ~ 38400 Baud und gehen nicht viel über 10 Sensoren hinaus.

Aber in diesem Artikel* über RS585 mit MAX485-IC, wie Abbildung 12 und 13 erklären, werden Sternkonfigurationen oder große Stubs nicht empfohlen :( Artikel*: maximintegrated.com/en/design/technical-documents/tutorials/7/…
Ja, ein 500 m langes sternförmiges Stub-Netzwerk mit 115200 Baud funktioniert nicht. Daher wird es nicht empfohlen wie in "Sie können das maximale Potenzial eines RS485-Netzwerks nicht erreichen, wenn es sternförmig ist". Mein Punkt ist, dass 20 m kein großer Stub sind. Sie brauchen wahrscheinlich nirgendwo anders als am Sender eine Terminierung, und es wird gut funktionieren.
Bist du sicher, dass 20 Meter kein großer Stub sind?
Die Bedeutung der Stub-Länge hängt von der verwendeten Baudrate ab. Wie Arcatus gesagt hat, wenn Sie nur mit einer langsamen Baudrate wie 38400 arbeiten, ist ein 20-m-Stub nicht so schlimm.

Angenommen, die dysfunktionale Sterntopologie ist bereits vorhanden und Sie haben keine sehr strengen Echtzeitanforderungen, könnten Sie vielleicht mit dieser Lösung zusammenflicken, was Sie haben:

  • Platzieren Sie am zentralen Knoten einen CAN-Transceiver und einen 120R-Terminator.
  • An jedem Knoten ein weiterer CAN-Transceiver und ein 120R-Terminator.
  • Muxen Sie die CANH-CANL-Leitungen jeweils zu einem Knoten, indem Sie einen analogen Schalter-IC verwenden.
  • Jetzt zeitmultiplexen Sie den Zugriff auf jeden Knoten und lesen Sie sie einzeln nacheinander auf dem CAN-Bus aus.
  • Die gesamte Kommunikation sollte so sein: Master-Knoten fordert etwas an, Slave-Knoten antwortet. Slaves dürfen nicht sprechen, es sei denn, sie werden dazu aufgefordert (oder sie werden schnell passiv, falls der Master getrennt wird).

Mit dieser Lösung haben Sie im Wesentlichen 10 schön terminierte CAN-Busse von jeweils 20 m und keine Stichleitungen. Es wird dann keine Probleme geben, CAN mit 1 Mbit/s zu betreiben, stellen Sie einfach sicher, dass der Master einen Knoten auswählt, bevor er CAN-Daten sendet.

wow tolle idee. Einige Knoten müssen jedoch Daten an den zentralen Knoten senden, ohne auf eine Anfrage zu warten. Stellen Sie sich vor, eine Tür öffnet sich, dieser Knoten muss diese Informationen sofort an den zentralen Knoten senden ... In einem typischen CAN-BUS kann jeder Knoten eine Nachricht an den Bus senden (und darauf warten, dass der zentrale Knoten diese empfängt). Das ist nach deiner Vorstellung nicht möglich...
@user273780 - Hallo, in Bezug auf " dieser Knoten muss sofort senden [...] " Bitte überprüfen Sie die Systemspezifikation (oder, wenn Sie keine haben, erstellen Sie sie und lassen Sie sie genehmigen), um genau anzugeben , was "sofort" bedeutet - weil es immer eine Verzögerung gibt (z. B. auch nur die MCU-Ausführungszeit), so dass ein wirkliches "sofort Senden" unmöglich ist. Jetzt stellt sich nur noch die Frage: Wie lange darf die Verzögerung zwischen Event und Meisterempfang sein? Wie Sie sehen, ist der Ansatz in dieser Antwort dann möglicherweise immer noch möglich, wenn das Master-Gerät die Sensoren schnell genug abfragt, um die Gesamtsystemspezifikation zu erfüllen.
Stellen Sie sich vor, Sie haben einen Knopf auf Ihrem Mikrocontroller. Wenn Sie die Taste drücken, kann die fallende/steigende Flanke einen externen Interrupt im Mikrocontroller erzeugen. In diesem Moment (und nur in diesem Moment) möchte ich diese "Informationen" an den Meister senden. Ich möchte also nicht, dass der Master den Slave ständig nach neuen Daten fragt ...
@ user273780 - Hallo, ja, ich verstehe Interrupts. Aber selbst ein Interrupt löst Code aus, der ausgeführt werden soll, so dass das Ergebnis nicht unmittelbar ist . Die einzige Frage ist, wie viel Verzögerung in Ihrem spezifischen System akzeptiert werden kann (und warum). „ Ich möchte also nicht, dass der Master den Slave ständig nach neuen Daten fragt … “ Mir ist noch nicht ganz klar , warum Sie das nicht wollen. Je mehr solche Einschränkungen Sie haben, desto weniger Lösungen gibt es natürlich. Bitte bearbeiten Sie die Frage und fügen Sie alle bekannten Einschränkungen in die Frage ein , um zu vermeiden, dass wir Zeit damit verschwenden, Lösungen zu geben, die Sie ablehnen werden. Danke!
@ user273780 Zeit, Ingenieure zu sein und die eigentliche Echtzeit-Mathematik zu machen. Ein 11-Bit-CAN-Frame mit 8-Bit-Daten kommt mit 47-Bit-Overhead, der den Interframe-Raum zählt. Wenn der Master eine Anfrage über einen RTR-Rahmen stellt, sind keine Daten vorhanden. Die Gesamtzeit zum Abfragen jedes Knotens nach 8 Datenbits wäre also 47 Bit Master-RTR-Anforderung + 47 + 8 Bit Daten-Slave-Antwort = 102 Bits. 102 Bits bei 1 Mbit/s = 102 us Reaktionszeit. Mit einem solchen Design können Sie 10 Knoten in 1,02 ms abfragen, oder wenn Sie so wollen, etwa tausend Mal pro Sekunde.
Dies ignoriert natürlich die analoge Schaltzeit, die Signalausbreitung und solche Details. Aber sie sind wahrscheinlich zu vernachlässigen.