Forum: Mikrocontroller und Digitale Elektronik RS485 Bus Daisy-Chain - elektronisch trennen


von Tobi T. (freitagvormittag)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich suche nach einer Möglichkeit, mehrere RS485 Slaves zu adressieren. 
Das Problem bei der Sache ist, ich benötige zwingend die Reihenfolge der 
Slaves -> erster Slave = 1, zweiter Slave = 2,...
Deshalb hatte ich an eine Daisy-Chain gedacht.
Allerdings habe ich keine Möglichkeit, eine zusätzliche Ader zu nutzen 
um so ein Signal vom Master an den ersten Slave oder von Slave zu Slave 
weiter zu geben.
Der Bus wird aber durch die Slaves durchgeschliffen.

Meine Idee war jetzt, dass jeder Slave beim Einschalten den Bus hinter 
sich öffnet/unterbricht, so dass der erste Slave der einzige Teilnehmer 
ist. Dieser wird adressiert, aktiviert den Bus bis zum Slave 2 usw...

Aber wie trenne ich den Bus sauber?

Rahmenbedingungen sind außerdem:
- kein Relais / mechanische Komponenten
- Kosten <1€ pro Slave

Ich hatte zuerst an mehrere Tranceiver gedacht, die man über 
DriverEnable / RevceiverEnable unterbricht, aber da muss es doch eine 
einfachere Lösung geben...

Danke, Gruß Tobi

von Sebastian R. (sebastian_r569)


Lesenswert?

Vielleicht etwas in Richtung SN74CBT3305C von TI?

Der ist für genau soetwas gedacht.

Hat halt nur das Problem, dass wenn Slave 1 ausfällt, der komplette Bus 
tot ist. Da wären (Reed-)Relais als Öffner, die stromlos den Bus 
durchleiten, im Vorteil.

: Bearbeitet durch User
von Flip B. (frickelfreak)


Lesenswert?

2 transceiver halte ich für am einfachsten. dann können auch die 
abschlusswiderstände fest eingebaut werden und deren konfiguration fällt 
weg.

von Clemens L. (c_l)


Lesenswert?

Tobi T. schrieb:
> - kein Relais / mechanische Komponenten

Ohne Mechanik im Chip nennt sich das "Analog Switch", die haben aber 
meist einen höheren Widerstand.

Du brauchst zwei Kanäle, und solltest auf einen Terminierungswiderstand 
umschalten, also SPDT. Siehe z.B. TS5A23159.

: Bearbeitet durch User
von Tobi T. (freitagvormittag)


Lesenswert?

Sebastian R. schrieb:
> Vielleicht etwas in Richtung SN74CBT3305C von TI?
>
> Der ist für genau soetwas gedacht.
>
> Hat halt nur das Problem, dass wenn Slave 1 ausfällt, der komplette Bus
> tot ist. Da wären (Reed-)Relais als Öffner, die stromlos den Bus
> durchleiten, im Vorteil.

Danke Sebastian, das ist genau das, was ich gesucht habe. Auf die 
Bezeichnung "Bus Switch" hätte ich auch selber kommen können...

Wenn Slave 1 ausfällt ist die sowieso die Funktionalität des 
Gesamtsystems nicht mehr gegeben und er muss ausgetauscht werden.

von Tobi T. (freitagvormittag)


Lesenswert?

Clemens L. schrieb:
> Tobi T. schrieb:
>> - kein Relais / mechanische Komponenten
>
> Ohne Mechanik im Chip nennt sich das "Analog Switch", die haben aber
> meist einen höheren Widerstand.
>
> Du brauchst zwei Kanäle, und solltest auf einen Terminierungswiderstand
> umschalten, also SPDT. Siehe z.B. TS5A23159.

Das sieht auch interessant aus. Aber mal ganz doof gefragt: Wie 
funktioniert das Ding? Also was ist da innen drin?

von Michael K. (Gast)


Lesenswert?

Eine Adresskodierung über Brücken in den Slave Steckern ist keine 
Alternative?
Der Analog Switch schalten nur Spannungen die sich innerhalb des VCC/GND 
Bereiches bewegen.
Gängige RS485 Transceiver können +12V / -7V gegenüber GND und +-12V 
diff.

von Michael K. (Gast)


Lesenswert?

Tobi T. schrieb:
> Also was ist da innen drin?

Nmos / Pmos Fets

von Bus Driver (Gast)


Lesenswert?

Tobi T. schrieb:
> Meine Idee war jetzt, dass jeder Slave beim Einschalten den Bus hinter
> sich öffnet/unterbricht, so dass der erste Slave der einzige Teilnehmer
> ist. Dieser wird adressiert, aktiviert den Bus bis zum Slave 2 usw...
>
> Aber wie trenne ich den Bus sauber?

Normalerweise gibt man den Slaves IDs und addressiert sie damit.
Dann können alle dauerhaft am Bus bleiben. Das Protokoll stellt sicher,
wer wann mit wem reden darf.

von Tobi T. (freitagvormittag)


Lesenswert?

Michael K. schrieb:
> Eine Adresskodierung über Brücken in den Slave Steckern ist keine
> Alternative?
> Der Analog Switch schalten nur Spannungen die sich innerhalb des VCC/GND
> Bereiches bewegen.
> Gängige RS485 Transceiver können +12V / -7V gegenüber GND und +-12V
> diff.

Die Slaves sind rund rum geschlossen (IP54) mit Industriesteckern, da 
ist nichts mehr von außen zu machen.

Da Master und Slaves alle an der gleichen Spannungsversorgung hängen, 
dürften sich die Bussignale auch nur innerhalb VCC und GND bewegen.

von Clemens L. (c_l)


Lesenswert?

Tobi T. schrieb:
> Wie funktioniert das Ding? Also was ist da innen drin?

CBT-C, CB3T, and CB3Q Signal-Switch Families: 
http://www.ti.com/lit/pdf/scda008
Selecting the Right Texas Instruments Signal Switch: 
http://www.ti.com/lit/pdf/szza030

von Günter N. (turtle64)


Lesenswert?

Tobi T. schrieb:
> Michael K. schrieb:
>> Eine Adresskodierung über Brücken in den Slave Steckern ist keine
>> Alternative?
>> Der Analog Switch schalten nur Spannungen die sich innerhalb des VCC/GND
>> Bereiches bewegen.
>> Gängige RS485 Transceiver können +12V / -7V gegenüber GND und +-12V
>> diff.
>
> Die Slaves sind rund rum geschlossen (IP54) mit Industriesteckern, da
> ist nichts mehr von außen zu machen.
>
> Da Master und Slaves alle an der gleichen Spannungsversorgung hängen,
> dürften sich die Bussignale auch nur innerhalb VCC und GND bewegen.

Dann würde ich für jeden Slave eine Art Vorschaltgerät machen, das am 
RS485-Bus hängt und Addressierung kann. Nur wenn die Adresse stimmt, 
nimmt dann das Vorschaltgerät mit dem Slave über einen eigenen (lokalen) 
RS485-Bus Kontakt auf und vermittelt zwischen den Bussen.

Das funktioniert aber nur, wenn der Master Datenpakete mit Adressen 
verschicken kann. Und der Master muss mit der zusätzlichen Verzögerung 
durch die Busumsetzung in beide Richtungen klarkommen.

: Bearbeitet durch User
von Tobi T. (freitagvormittag)


Lesenswert?

Bus Driver schrieb:
> Tobi T. schrieb:
>> Meine Idee war jetzt, dass jeder Slave beim Einschalten den Bus hinter
>> sich öffnet/unterbricht, so dass der erste Slave der einzige Teilnehmer
>> ist. Dieser wird adressiert, aktiviert den Bus bis zum Slave 2 usw...
>>
>> Aber wie trenne ich den Bus sauber?
>
> Normalerweise gibt man den Slaves IDs und addressiert sie damit.
> Dann können alle dauerhaft am Bus bleiben. Das Protokoll stellt sicher,
> wer wann mit wem reden darf.

Ich brauche aber die Position der Slaves. Wenn ich Slave 1 und 2 tausche 
muss 1-->2 und 2-->1 werden. Da hilft mir eine ID nicht weiter

von Helmut L. (helmi1)


Lesenswert?

Tobi T. schrieb:
> Die Slaves sind rund rum geschlossen (IP54) mit Industriesteckern, da
> ist nichts mehr von außen zu machen.

Doch, wenn man statt der Schalter die Addresse im EEPROM des Controllers 
abspeichert. Also bei der Inbetriebnahme des Systems einmalig die 
Addresse im Controller setzen und gut ist. Da braucht es keine 
mechanischen Schalter von aussen. Nur bei der Inbetriebnahme muss dann 
einmalig der betreffende Knoten/Controller alleine am Bus haengen und 
wird dann ueber ein Boardcast Commando angesprochen.

von Jens M. (schuchkleisser)


Lesenswert?

Jungs, was da gesucht ist ist Autoadressierung.
Welche Kiste auch immer an den ersten Platz kommt soll sich selber 
Adresse 1 aussuchen.
Wenn ich sie an den zweiten Platz stecke, nimmt sie sich die 2.

Das geht nur mit getrennten Bussen, d.h. jede Kiste hat eine "IN"-Buchse 
und eine "OUT"-Buchse, jeweils mit Busabschluss.
Sie wartet auf die Initialisierung durch den Master auf einer 
Broadcast-Adresse, nimmt die Adresse mit und schaltet dann den Bus auf 
den nächsten Slave.

2 Transceiver, ein Busisolator oder evtl. ein Bus Switch müssten gehen.

von Peter D. (peda)


Lesenswert?

Tobi T. schrieb:
> Deshalb hatte ich an eine Daisy-Chain gedacht.

Eh Du nach Schalter suchst, überleg erstmal, wie Du das 
programmtechnisch realisieren willst bzw. ob das überhaupt geht. Die 
Schalter muß nämlich jemand umschalten und wieder zurück.

von Tobi T. (freitagvormittag)


Lesenswert?

Danke @all.

Das mit mehreren Tranceivern wird mir glaub ich zu groß/teuer. Ich 
brauch mindestens 3, oder? Sonst habe ich auf TX von Slave 1 die Signale 
von Slave 2...?!

Ich schau mir die verschiedenen Analog und Bus Switches an und steck mir 
dann mal was zusammen.

von Tobi T. (freitagvormittag)


Lesenswert?

Peter D. schrieb:
> Tobi T. schrieb:
>> Deshalb hatte ich an eine Daisy-Chain gedacht.
>
> Eh Du nach Schalter suchst, überleg erstmal, wie Du das
> programmtechnisch realisieren willst bzw. ob das überhaupt geht. Die
> Schalter muß nämlich jemand umschalten und wieder zurück.

Ich baue Master und Slaves selbst, programmtechnisch bin ich also 
ziemlich frei. Die Einschränkungen sind eher mechanischer Natur (-> 
keine externe Adressierung möglich, keine zusätzliche Leitung möglich) 
und Nutzererlebnis (-> Plug and Play, keine Inbetriebnahmeprozedur).
Bus-IN und Bus-OUT Buchse ist zum Glück vorhanden

von Peter D. (peda)


Lesenswert?

Tobi T. schrieb:
> programmtechnisch bin ich also
> ziemlich frei.

Das hatte ich vorausgesetzt.
Ich meinte aber, Du solltest zuerst einen PAP erstellen, wie Du Dir die 
Adressierung und Umschaltung vorstellst und diesen dann gedanklich 
durchspielen, ob er auch funktioniert.

Bei Analogschaltern sollten diese die gleiche Spannungsfestigkeit haben, 
wie die Transceiver. D.h. +/-70V beim SN65HVD1781. Wenigstens aber 
+/-15V (standard Transceiver). Sonst brennen Dir ständig die 
Analogschalter durch.

von Tobi T. (freitagvormittag)


Lesenswert?

Peter D. schrieb:
> Tobi T. schrieb:
>> programmtechnisch bin ich also
>> ziemlich frei.
>
> Das hatte ich vorausgesetzt.
> Ich meinte aber, Du solltest zuerst einen PAP erstellen, wie Du Dir die
> Adressierung und Umschaltung vorstellst und diesen dann gedanklich
> durchspielen, ob er auch funktioniert.

Mit Power-ON sind alle Schalter geöffnet, der Master kann nur den ersten 
Slave erreichen und adressiert ihn. Sobald der Slave eine gültige 
Adresse hat, schließt er den Schalter und der Master findet einen 
weiteren, nicht-adressierten Slave und verpasst ihm eine Adresse... Das 
geht so lange weiter, bis der Master keinen unadressierten Slave mehr 
findet.

von Peter D. (peda)


Lesenswert?

Ja, so könnte das gehen.

Als Schalter würde ich 2 Stück AQY212 nehmen. Die sollten genügend 
spannungsfest (60V) und niederohmig (0.7Ω) sein. Der 10. Slave sieht 
dann zusätzliche 14Ω bis zum Master.

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Tobi T. schrieb:
> Die Slaves sind rund rum geschlossen (IP54) mit Industriesteckern, da
> ist nichts mehr von außen zu machen.

Mindestens 2pins müssen ja frei sein, sonst kann der 'vordere' Slave die 
Verbindung zum 'hinteren' nicht unterbrechen.

Für eine Adressierung brauchst Du nur einen einzigen Pin.
Ein Widerstand nach GND im Stecker und das ganze mit dem internen ADC 
auswerten.

Von aufgetrennten Bussen halte ich wenig, denn Du unterbrichtst damit 
auch die Terminierung, die am Ende des Busses hängen muss.
Hat jeder Slave seine eigenen Failsafe Widerstände, oder floatet der Bus 
dann fröhlich, wenn Du den trennst?

Die Gleichtakt Spannungsfestigkeit und Kurzschlussfestigkeit von RS485 
sind u.a. die Eigenschaften die RS485 so robust machen. Das alles in die 
Tonne zu kloppen indem man da Analogschalter dranhängt die dafür gedacht 
sind innerhalb einer PCB zu funktionieren, halte ich für ... mutig oder 
dumm, such Dir was aus.

Industriestecker, industrielle Anwendung, aber alles weniger als 1€ ist 
auch irgendwie schräg.
Billig oder gut, was willst Du?
Materialkosten sind doch überhaupt nicht das Thema.
Arbeitszeit und Ausfallszeiten sind das was richtig Geld kostet.

von georg (Gast)


Lesenswert?

Tobi T. schrieb:
> Sobald der Slave eine gültige
> Adresse hat, schließt er den Schalter

Das genügt überhaupt nicht. Der Slave muss den eingehenden Bus von der 
lokalen Terminierung trennen und mit dem ausgehenden Bus verbinden, es 
werden also Umschalter benötigt. In dem Zusammenhang ist auch die 
Festlegung "kein Relais" unsinnig, es gibt ja Relais mit Footprint 4 x 4 
mm.

Georg

von Purzel H. (hacky)


Lesenswert?

Normalerweise macht man auf jeden Teilnehmer eine Serialnummer drauf, zB 
einen 24AA02E48, und macht eine dynamische, automatische Adressierung 
damit. Da muss man nur einmal in einem Verwaltungstool die Serial einer 
Position zuweisen und das war's.

von Michael K. (Gast)


Lesenswert?

Name H. schrieb:
> Da muss man nur einmal in einem Verwaltungstool die Serial einer
> Position zuweisen und das war's.

Die positionsbasierte Adressierung ist in einigen Bereichen ein Problem.
Hast Du mehrere identische Geräte, die durch Wartungstechniker 
installiert und getauscht werden, ist das vorherige Programmieren 
Kundenseitig eher nicht akzeptiert.
Hein Daddel kann eben nicht mal eben ein Gerät aus dem Lager nehmen und 
anschliessen.
Auch das Verständniss von Bussytemen ist bei Betriebselektrikern ein 
seltenes Gut.

Im Luftfahrtbereich ist das Programmieren auf eine neue Adresse ggf. 
sogar eine zertifizierungspflichtige Softwareänderung.
Pin programming im Stecker über Brücken oder ähnliches umgeht das 
Problem elegant.

von Schorsch X. (bastelschorsch)


Lesenswert?

Wie wärs damit: Einen 1 wire EEPROM in den Stecker. Da steht dann die 
Stationsnummer drin. Das braucht keine Verbindung zum Master. Die Kabel 
müssen ja eh irgendwie hergestellt werden.

von Andi B. (andi_b2)


Lesenswert?

Wenn du mit dem gleichen Kabel auch die Stromversorgung durchschleifst, 
brauchst du nur diese zum nächsten Slave weiterschalten. Also am Anfang 
ist nur der erste versorgt und deshalb kann sich nur dieser am Bus 
melden. Dann schickt im der Master die Busadresse 1 und das 
Weiterschalten-Kommando. Dann meldet sich der 2. Slave ....

Den RS485 Bus würde ich auch aus den schon genannten Gründen nicht oder 
nur mittels Relais schalten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.