Wie kann der physische Standort in einer RS-485-Daisy-Chain-/Bus-Topologie bestimmt werden?

Ich versuche, eine "Daisy Chain" mit mehreren Arduinos und MAX485-Transceivern aufzubauen. An allen Platinen ist ein Temperatursensor angebracht. Eine 9V-Batterie versorgt alle Platinen in der Kette.

Ich versuche, einen Weg zu finden, um die physische Position der verschiedenen Boards in der Daisy-Chain zu identifizieren, zum Beispiel BoardA = erstes, BoardD = zweites, BoardB = drittes usw.

Ich könnte dies manuell tun, indem ich mir bewusst wäre, wo ich jede Platine in der Linie anschließe. Dies ist jedoch anfällig für menschliche Fehler und ich möchte dies automatisch tun. Außerdem nehme ich gerne zufällig Boards, um Netzwerke aufzubauen, wann und wo immer ich will.

Um die Boards im Netzwerk zu identifizieren, könnte ich eine Abfrageschleife im Masterboard erstellen, um alle möglichen Namen aufzurufen und eine Antwort der angeschlossenen Boards zu erhalten. Was ich suche, ist auch eine Antwort darauf, wo sie sich im Netzwerk befinden.

Ich dachte daran, den Spannungs- / Stromabfall als Indikator dafür zu messen, wie nahe / weit sie vom Master entfernt sind. Ich bin mir jedoch nicht sicher, ob der Abfall groß genug ist oder der ADC im Arduino genau genug ist.

Darüber hat sich wohl schon mal jemand Gedanken gemacht, vielleicht gibt es dafür sogar fertige Chips. Ich bin kein Elektroniker, sorry für mein begrenztes Wissen.

Bearbeiten, 14.10.2018

Mehr Klarstellung; sagen, dass Sie das folgende Beispiel haben:

Beispiel Bustopologie

Alle Slave-Boards befinden sich im „Listen“-Modus und warten darauf, vom Master aufgerufen zu werden. Der Master führt eine Abfrageschleife durch, um festzustellen, welche Slaves sich auf dem Bus befinden. Es fragt nach A, B, C, D, E usw. Die Slaves werden den Anruf des Masters überprüfen. Damit dies funktioniert, muss ich jedem Slave einen eindeutigen Namen/eine eindeutige Adresse in der Software zuweisen, was völlig in Ordnung ist.

Was ich vermeiden möchte, ist, den Namen jedes Sklaven zu überprüfen, wenn ich ihn ins Feld stelle. Daher ist es notwendig, ihre relative Position in der Busleitung in Bezug auf die Master- und die anderen Slave-Platinen herauszufinden.

Ist das etwas ähnliches Maxim DS28EA00 ? Beachten Sie, dass mich nicht nur die Temperatur interessiert. Ich verwende Temperatursensoren als Proof of Concept. Ich könnte damit Druck, Beschleunigung usw. messen.

@Transitor In diesem Fall Daisy Chain = Partyline oder Bustopologie. Ich weiß nicht, ob ich die RS-485 in Reihe schalten kann. Wenn ja, könnte ich den Namen jedes Geräts erfassen, wenn die Daten über sie übertragen werden? Dies hat den Nachteil, dass beim Ausfall einer Slave-Platine der Rest der Leitung ebenfalls stirbt.

Aus dem TI RS-485 Design Guide

TI RS-485-Designleitfaden

@stark Kannst du die digitale Pin-Idee näher erläutern? Beachten Sie, dass alle Bretter zwischen 1-3 Meter voneinander entfernt sind.

@ Andy aka Kannst du das näher erläutern? Könnte dies in der Bustopologie funktionieren?

@TimWescott Es ist eine Bustopologie. Vielleicht habe ich den Daisy-Chain-Begriff falsch verwendet? Ist es möglich, mit RS-485 eine echte Daisy-Chain durchzuführen?

Bitte bearbeiten Sie Ihre Frage, um zu erklären, ob die Geräte im Netzwerk parallel oder seriell verbunden sind. Wenn die Daten durch jedes Gerät in Reihe geleitet werden, ist es möglich, sie automatisch zu adressieren. Wenn nicht, müssen Sie einige Mittel hinzufügen, um für jeden eine eindeutige Adresse festzulegen.
Können Sie die digitalen Eingangspins verwenden? Haben Sie zwei Anschlüsse an jeder Station. Zweitens ist der festverdrahtete physische Standort.
Konstruieren Sie ein Signal, das den physischen Standort darstellt; dieses Signal für jeden Slave verfügbar machen; Lesen Sie die Slave-Daten; den Standort interpretieren.
RS485 impliziert für mich einen Bus. Ist es ein Bus oder eine echte Gänseblümchenkette? (Das heißt, in einem Bus sind alle Transceiver mit demselben Leitungspaar verbunden. In einer Daisy-Chain hat jeder Prozessor einen „Upstream“-Port und einen „Downstream“-Port und handhabt die Kommunikation zwischen den Ports).
(fast ernsthaft) an jedem Gerät eine Videokamera und einen Strichcode davor anbringen. Vereinfachen Sie das System, wenn Sie einen einfacheren Weg finden, Dinge aus einer Umgebung zu lesen, die nicht fehleranfällig ist.
Hehe, das wird die teuerste Lösung aller Zeiten, wenn man bedenkt, dass ich 30 Slave-Boards haben möchte ;)
Oh, und ich habe vergessen zu erwähnen, dass das endgültige Design unter Wasser sein wird. Deshalb möchte ich dies über Software oder interne Hardware im Board tun.
Es gibt einen ähnlichen Weg, ziemlich billig. Aber das Patent ist anhängig, also tut es mir leid, tut mir leid ...
Das ist gut zu hören, aber es wird noch einige Jahre dauern, bis es auf den Markt kommt. Ich brauche jetzt eine Lösung :)

Antworten (2)

Es ist eine Busstruktur. Per Definition spielt es keine Rolle, wo jedes Gerät physisch platziert ist.

Wenn Sie eine geografische Adressierung benötigen, können Sie diesen Ansatz ausprobieren:

  1. Schließen Sie den Master-Knoten an einem der Enden des Busses an

  2. Jeder Knoten muss eine zusätzliche Leitung haben (d. h. eine Eingangs- und eine Ausgangsleitung), die zu den benachbarten Knoten führt (ein einfacher GPIO reicht aus).

  3. Wenn diese Leitung einen bestimmten (Standard-)Zustand hat, bleibt der Knoten still und ignoriert den gesamten Datenverkehr.

  4. Beim Einschalten hat jeder Knoten keine Adresse. Der Master zieht den zusätzlichen Draht auf Low (oder High), wodurch der erste Knoten auf dem Bus aktiviert wird. Sendet einen "set address"-Befehl auf den Bus (der keine Zieladresse hat) - natürlich reagiert nur der erste Knoten auf diese Nachricht.

  5. Der Master sendet eine "enable control line" an Knoten 1 (der jetzt eine Adresse hat), wodurch Knoten 2 den Bus abhört.

  6. Der Master sendet erneut einen „set address“-Befehl (der von Knoten 1 ignoriert wird, da er bereits eine Adresse hat), der die Adresse von Gerät 2 einstellt.

  7. Spülen und für alle Knoten wiederholen.

Großartige Idee! Keine zusätzliche Hardware, nur ein weiteres Kabel. 1) Glauben Sie, dass der Abstand zwischen den Platinen ein Problem für das GPIO-Signal sein könnte? 2) Meinen Sie in Schritt 5, dass der Master dem Knoten 1 mitteilt, den mit Knoten 2 verbundenen GPIO auf niedrig (oder hoch) und den Master auf hoch (oder niedrig) im GPIO auf Knoten 1 zu setzen? Wieder tolle Antwort, muss ich ausprobieren.
1. Wenn es sich um einen langsamen GPIO handelt, sollte die Entfernung kein Problem darstellen. Achten Sie nur darauf, den Ein- und Ausgang irgendwie zu schützen (z. B. Widerstände), da sonst Rauschen vom Kabel auf Ihre Vcc einkoppeln kann (über eingebaute ESD-Schutzdioden). 2. In Schritt 5 meine ich, dass der Master Knoten 1 anweist, die Steuerleitung von Knoten 2 zu aktivieren, dann die Adresse von Knoten 2 konfiguriert, dann Knoten 2 anweist, die Steuerleitung von Knoten 3 zu aktivieren usw. Sie können die Logik auf verschiedene Arten implementieren, z . „alle ignorieren“ oder „alle Adressen akzeptieren“.

Suchen Sie nach 1Wire, wenn Sie daran interessiert sind, Temperatur zu messen, mit vielen Sensoren hier und da! https://www.maximintegrated.com/en/app-notes/index.mvp/id/148 Es ist nicht RS485, aber einfacher zu implementieren. Und verwenden Sie ein kleines Programm, um jeden 1Wire-Knoten einzeln zu aktivieren und seine ID zu lesen, dann haben Sie eine Tabelle mit physischen IDs im Vergleich zu logischen. Natürlich können Sie dasselbe mit RS485 tun, aber Sie benötigen mehr Drähte! In diesem Fall sollten Sie neben jedem Sensor einen kleinen Schaltkreis haben, damit jedes Mal, wenn Sie Ihren Schaltkreis einschalten, eine solche erklärte Tabelle im Master eingebaut wird.