1-wire Sterntopologie

OP #4446321
Lesenswert?

Hallo zusammen,

in der Appnote 148 (https://www.maximintegrated.com/en/an148) von Maxim 
habe ich über zuverlässige große 1-wire-Netzwerke gelesen.
Nun ist es gerade der Fall, dass ich hier ein "großes" Netzwerk im Haus 
installieren und dazu die vorhandene strukturierte Verkabelung 
(UC1500-Kabel von Draka) verwenden möchte. In die Netzwerkdosen sollen 
jeweils Temperatursensoren gesteckt werden. Deren Kabelenden laufen im 
Netzwerkschrank zusammen, wo der 1-wire-Master rein soll.
Die Kabel sind geschätzt maximal 25-30m lang und an jedem Ende soll wie 
oben beschrieben jeweils ein 1-wire-Gerät hängen. Es wird je Sensor 3 
Steckverbindungen geben (Sensor -> Dose, Patchfeld -> Patchkabel, 
Patchkabel -> Master), die die Leitungswerte auch beeinflussen dürften.

Um nun so ein geswitchtes Netzwerk, wie in der verlinkten Appnote 
angesprochen, herzustellen, würde da ein logiclevel Mosfet ausreichen, 
um die einzelnen Geräte auszuwählen?
Grob stelle ich mir das wie im angehängten Schaltplan vor. Dabei sind 
1-WIRE-SEL1 / 2 logic high, wenn die jeweilige Leitung gewählt wird. 
1-WIRE-OUT ist der 1-wire-Port vom Mikrocontroller.

Es könnte jetzt natürlich ein anderes als das ausgewählte Gerät den 
1-wire-Port low ziehen, aber in der Regel sind die ja still, sofern sie 
nicht angesprochen wurden.

Viele Grüße
Christian
Angehängte Dateien:
OP #4446463
Lesenswert?

Danke! Der 4051 hört sich gut an. Die Widerstandswerte sind zwar etwas 
schlechter als beim 4066, dafür braucht der 4051 weniger Platz.

Der 4066 wiederum hätte den Vorteil, dass man etwas flexibler ist, falls 
man doch mal mehrere Sensoren gleichzeitig ansprechen möchte.
Wenn man eine Kaskade von Schieberegistern davor setzt, braucht man auch 
für die Auswahl der Ausgänge nicht so viele Pins am Mikrocontroller.
#4446858
Lesenswert?

Warum den 1wire-Bus multiplexen statt einfach mehrere Busse, z.B. mit 
dem DS2482-800 zu erzeugen?

Mir erscheint das zuverlässiger, da 1wire ja doch recht empfindlich 
bzgl. Timing ist und der Durchgangs-Widerstand durch den Multiplexer 
typisch im Bereich 100 Ohm liegt - das entspricht nicht gerade wenigen 
Metern Leitungslänge und dürfte in Verbindung mit den 
Leitungskapazitäten das Leben nicht gerade einfacher machen.
OP #4447326
Lesenswert?

Das war und ist auch eine Möglichkeit, die ich gedanklich noch 
durcharbeite.
Ob der zusätzliche Widerstand problematisch ist, weiß ich nicht. Ich 
glaube eher nicht, denn in der oben verlinkten Appnote wird unter 
"Distributed Impedance Matching" vorgeschlagen, bei einem Bus mit 
mehreren Abzweigungen an den Beginn jedes Zweiges einen 150 Ohm 
Widerstand zu hängen, um die Reflektion zu reduzieren.
In diesem Fall wäre ein Master mit aktivem Pullup laut der Appnote nicht 
geeignet.

Allerdings schreckt mich das Risiko mit dem DS2482 einen Fehlkauf zu 
machen doch etwas ab. Der Baustein kostet immerhin fast 10 Euro und ich 
bräuchte wohl 3 davon. Wenn das dann nicht funktioniert, wäre das 
ärgerlich.
Zumindest für den DS2480B steht in der Appnote, dass man einen 
R-C-Filter einsetzen soll, wenn die Leitungslänge zwischen 10 und 100m 
liegt.
Ob das auch für den DS2482-800 gilt, konnte ich nicht herausfinden.
Der DS2482 hat natürlich noch den Charme, dass er sowohl das Übertragen 
von ganzen Bytes als auch das Ausführen vom Search-ROM-Befehl 
vereinfacht und man sich über das Timing keine Gedanken mehr machen 
muss.

Laut Maxim erreicht man wie in Appnote 224 
(https://www.maximintegrated.com/en/an244 "Advanced 1-Wire Network 
Driver") beschrieben maximale Leitungslängen (ok, ich bewege mich mit 
unter 50m definitiv nicht an den Grenzen). Einen ähnlichen Treiber 
könnte man aber trotzdem in Kombination mit einem Multiplexer verwenden, 
falls man die Treiberstufe hinter den Multiplexer legt (dementsprechend 
mehrfach ausführt - die Bauteile sind ja aber nur Kleinigkeiten). 
Dadurch sollte nur noch die zu lesende Kurve verfälscht werden, weil die 
ausgewählte Leitung aktiv hoch oder runter gezogen wird.
Gast #4448301
Lesenswert?

Ralf D. schrieb:
> und der Durchgangs-Widerstand durch den Multiplexer
> typisch im Bereich 100 Ohm liegt

Na sorry, vor 100 Jahren vielleicht. Es gibt von Maxim durchaus moderne 
Multiplexer mit unter 1 ohm Schalterwiderstand. Man muß ja nicht immer 
den 4066 aus rauskramen.

Ralf D. schrieb:
> Warum den 1wire-Bus multiplexen statt einfach mehrere Busse, z.B. mit
> dem DS2482-800 zu erzeugen?

Warum dann nicht gleich - wenn das Protokoll per µC eh in Software 
erzeugt wird - mehrere Pins des µC verwenden.

Mit 3-4 Sensoren pro Pin und 8 Pins sollte das doch machbar sein. Selbst 
mit einem ATmega32 und 24 Pins verwendet ist man noch günstiger als der 
DS2482 - wenn man es eh selbst programmieren muß.
Gast #4448881
Lesenswert?

Pete K. schrieb:
> Warum nicht alles auf einen Pin schalten?

Weil viele 30m Kabel schon eine beträchtliche Kapazität darstellen, die 
ausreichend schnell umgeladen werden muss.

> Also ich habe hier 15 Sensoren an einem Bus dranhängen. Kein Problem.

Und welche Kapazität stellt deine Verkabelung dar?
#4448912
Lesenswert?

@ Wolfgang (Gast)

>> Warum nicht alles auf einen Pin schalten?

>Weil viele 30m Kabel schon eine beträchtliche Kapazität darstellen, die
>ausreichend schnell umgeladen werden muss.

Richtig.

Aber OneWire ist ebenso wie I2C nicht wirklich für längere Verdrahtung 
gedacht, auch wenn es bisweilen geht. I2C ist synchron, das kann man 
langsam takten. OneWire ist wie UART asynchron, das braucht ein 
definiertes Timing. Ab einer bestimmten Buskapazität, ich glaub 
offiziell 800pF, ist Feierabend.
#4448938
Lesenswert?

Falk B. schrieb:
> OneWire ist wie UART asynchron, das braucht ein definiertes Timing.

Ab 750m ist aufgrund des Timings Feierabend.

Mit passivem Pullup und externem Treibertransistor geht bis 200m.

Mit einfachem Portpin sind max 3m empfohlen.

Quelle AN148.

Ich habe in einer Installation einen recht heterogenen Stern mit so 
30-40m Summenlast im Einsatz, mit 5K Pullup und 100 Ohm 
Serien-Schutzwiderstand am µC. Das Ergebnis ist nicht perfekt, aber 
brauchbar. 2 DS18x20 sind am längsten Zweig (>20m) in 10 Jahren 
verreckt.
#4448975
Lesenswert?

@ A. K. (prx)

>> OneWire ist wie UART asynchron, das braucht ein definiertes Timing.

>Ab 750m ist aufgrund des Timings Feierabend.

;-) Na da kann man schon ein kleines LANs aufbauen

>Mit passivem Pullup und externem Treibertransistor geht bis 200m.

Würde ich trotzden nicht machen wollen. Bestenfalls für Hobbykram.

>Mit einfachem Portpin sind max 3m empfohlen.

Das klingt OK.

>Ich habe in einer Installation einen recht heterogenen Stern mit so
>30-40m Summenlast im Einsatz, mit 5K Pullup und 100 Ohm
>Serien-Schutzwiderstand am µC. Das Ergebnis ist nicht perfekt, aber
>brauchbar. 2 DS18x20 sind am längsten Zweig (>20m) in 10 Jahren
>verreckt.

Das war eher ESD als Buskapazität. Oder ne Einkopplung eines entfernten 
Blitzeinschlags.
#4448980
Lesenswert?

@A. K. (prx)

>> Ab einer bestimmten Buskapazität, ich glaub
>> offiziell 800pF, ist Feierabend.

>Möglicherweise verwechselst du was. Ein parasitärer 1-Wire Slave stellt
>eine Last von 800pF dar,

Das bezweifle ich mal grundlegend. Selbst bei parasitärer Versorgung hat 
ein OneWire Device KEINE Ausgangskapazität von 800pF. Bei normaler 
Versorgung erst recht nicht.

Beim DS18B20 steht z.B.

Capacitance CIN/OUT 25 pF

Das klingt realistisch.
#4448990
Lesenswert?

Falk B. schrieb:
> Das bezweifle ich mal grundlegend.

Von nix kommt nix. Bei parasitärer Versorgung hängt über eine Diode ein 
Kondensator an der Datenleitung. Der wird im Datasheet an dieser Stelle 
nicht berücksichtigt.

MicroLAN Design Guide:

"In Figure 1, whenever the data line is pulled high by the bus pull-up 
resistor the diode in the half wave rectifier turns on and charges the 
internal 800pF capacitor. When it drops below the voltage on the 
capacitor, the diode is reverse biased, isolating the charge."

"However, the 800 pF parasitic power supply capacitance only exists at 
voltage levels above 2.8V minimum. Ignoring the capacitance of the 
parasitic power capacitor, the bus pull-up resistor value, together with 
the cable capacitance and 1-Wire device input capacitance represent the 
network time constant ?. This is a reasonable omission since parasite 
capacitance does not become a factor until the bus has already passed 
the 2.2V logic one threshold."

Er spielt also im Leitunsdesign keine Rolle. Aber das ist die m.W. 
einzige Stelle, wo bei 1-Wire der Wert 800pF vorkommt. Mit 1K Pullup und 
slewrate controlles 2N7000 Treiber sehen die kein Problem bis 200m aka 
10nF.
#4449049
Lesenswert?

Christian R. schrieb:
> Um nun so ein geswitchtes Netzwerk, wie in der verlinkten Appnote
> angesprochen, herzustellen, würde da ein logiclevel Mosfet ausreichen,
> um die einzelnen Geräte auszuwählen?

Wenn du die Gates auf 10V legst ja.

Andernfalls wird es bei 0=>1 oberhalb von 3-4V etwas unschön, weil der 
Transistor mit steigendem Leitungspegel den Kanal zu macht und die 
Leitung am µC dann floatet.

Du solltest dafür den Pullup-R aufteilen. Einer niederohmig so wie 
gezeigt, der andere hochohmiger am µC Pin.
OP #4449177
Lesenswert?

Da ich sowieso 8 Adern (plus GND) zur Verfügung habe, werde ich wohl 
keine parasitäre Versorgung der Sensoren machen. Dadurch wird die 
Kapazität des Busses nicht zusätzlich durch die Wiederaufladung 
beeinträchtigt.

Wenn ich die AN148 richtig verstanden habe, ist bei dem sternförmigen 
Aufbau nicht die Kapazität der Leitung, sondern die Reflektion das 
Hauptproblem. Deshalb wird dort vorgeschlagen, den Bus zu switchen.

Mein Master soll so ausgelegt sein, dass ich bis zu 16 Sensoren 
anschließen kann. Aufgrund der Leitungslänge werde ich ein aktives 
pullup und pulldown einsetzen. Das bedeutet, dass pro Bus / Sensor drei 
I/Os benötigt werden. Bei 16 Sensoren kommt da schon einiges zusammen.
Ich hätte auch gerne die Möglichkeit, alle Sensoren gleichzeitig 
anzusprechen (Temperaturkonversion starten). Deshalb kann ich eigentlich 
keinen Multiplexer einsetzen.

Eine halbwegs realistische Option wäre wohl, Analogschalter für die 
Steuerleitungen vom aktiven pullup / pulldown einzusetzen. R_on wäre in 
diesem Fall egal, weil sowieso ein 4k7 Vorwiderstand vor den Treiber 
kommt. Man muss den Widerstand dann ja nur um R_on reduzieren.
Um die Pins für die Auswahl der Schalter zu sparen, könnte man ein 
Schieberegister einsetzen (sonst bräuchte man die Analogschalter auch 
gar nicht, weil man die Leitungen dann auch direkt hätte schalten 
können).

Bleiben also 16 Eingänge für die Leserichtung, zwei Ausgänge für die 
Steuerleitung vom pullup / pulldown und drei Ausgänge für die 
Schieberegisterkaskade.
Mit 21 I/Os für das Bussystem kommt man also hin. Der Mikrocontroller 
steht natürlich nicht alleine da, deshalb kommen noch Leitungen für UART 
oder I2C dazu.
Gast #4449436
Lesenswert?

Eine Möglichkeit, deine 8 Adern sinnvoll zu nutzen wäre, wenn du 1-Wire 
in einem Kabel jeweils zu dem W1 Slave hin- und zurückführst. Dann 
brauchst du u.U. keine Switches oder Ähnliches.

Dadurch bekommst du am Ende zwar die doppelte Buslänge, kannst dir aber 
eine zentrale Kopfstation bauen, weil das Ganze kabelseitig/in der Wand 
wie ein Stern aussieht, die Verdrahtung aber ein Bus ist.

Mit 4 Doppeladern/Netzwerkkabel geht das ganz gut: 1DA 1-Wire+GND hin, 
1DA 1-Wire+GND zurück, 1DA 5V Spannungsversorgung. Du hättest sogar noch 
1 DA frei, z.B. für 12V.

Nachteil: Du hast die doppelte Buslänge und "verschwendest" viele Adern 
für einen Bus, der dem Namen nach nur eine braucht.

Vorteile:
A) Du kannst an der "Kopfstation" so viele Busmaster hinhängen, wie du 
willst - der Bus kann prinzipiell an jeder Stelle in mehrere Segmente 
aufgeteilt werden.

B) Du hast einen "echten" Bus. Also genau das, was man braucht, um 
maximale Reichweite zu erzielen.

Ich habe so ein System mit über 300m Buslänge / 150m Kabellänge und >30 
Slaves am Laufen . Bis 350m lief alles mit meinem USB-Busmaster 
störungsfrei (0 "Error"s im OWFS). Aktuell brauch spezielle Timings, der 
Bus ist derzeit ca. 470m lang. Läuft zwar, ist aber nicht mehr 
Störungsfrei (ein paar hundert "Error"s im OWFS pro Monat).
Insofern werde ich da demnächst mindestens einen zusätzlichen Busmaster 
installieren müssen.
OP #4449460
Lesenswert?

LOL schrieb:
> Eine Möglichkeit, deine 8 Adern sinnvoll zu nutzen wäre, wenn du 1-Wire
> in einem Kabel jeweils zu dem W1 Slave hin- und zurückführst. Dann
> brauchst du u.U. keine Switches oder Ähnliches.

Das ist eine gute Idee, um die Komplexität des Masters zu reduzieren.
Am Donnerstag werden die Leitungen vermessen und dann weiß ich auch, wie 
lang sie genau sind. Dann könnte ich immer noch überlegen, wie viele 
Einzelbusse sinnvoll sind. Denn bei 16 Leitungen mit im Schnitt sagen 
wir mal 15m Länge (ist wahrscheinlich noch zu wenig), wären das auch 
schon 465m Leitungslänge.
Damit ist man schon gefährlich nahe an der laut Maxim realistisch 
erreichbaren Obergrenze von 500m.

Auf vier Busse aufgeteilt wären da dann aber sicherlich keine Probleme 
zu erwarten.

Dann kann ich mir die Komplexität von Analogschalter + Schieberegister 
sparen, die sich ja auch auf die Software niederschlägt.
Gast #4450119
Lesenswert?

Christian R. schrieb:
> Das ist eine gute Idee, um die Komplexität des Masters zu reduzieren.

Achje. Dann kannst Du aber auch gleich eine RS485 in Sterntopologie 
machen. Die kannst Du dann beliebig langsam fahren und hast keine 
Probleme mit Reflexionen. Und brauchst nur 2 Leiterpaare (D-, D+, GND, 
5V-24V), kannst also auf den anderen 2 Leiterpaaren noch LAN machen.
Gast #4450476
Lesenswert?

Christian R. schrieb:
> Was ist an dem Ansatz denn verkehrt, vier Busse mit einem
> Mikrocontroller zu betreiben?

Nichts. Hab ich ja oben vorgeschlagen.

Es ging aber gerade darum, den Bus über die Cat-Kabel durchzuschleifen, 
also immer hin und zurück, plus die Stromversorgung dann 3 Leiterpaare. 
Unter 1-wire stell ich mir was anderes vor.
OP #4456145
Lesenswert?

Wahrscheinlich werde ich jetzt folgende Komponenten wählen:
- ATMega1284P
- 3 Schieberegister (74HC4094) von NXP
- 10 Quad-Analogschalter (74HC4066) von NXP
- Microchip ENC424J600 Ethernetcontroller

Vom ATMega1284P sind bis auf einen Pin bei 20 1-wire-Bussen alle Pins 
belegt. Der eine Pin kann dann noch für eine Statusausgabe mittels LED 
oder so verwendet werden. Die JTAG-Schnittstelle ist in dem Fall nur 
nutzbar, wenn man die letzten vier 1-wire-Busse nicht nutzt.

Der Vorteil gegenüber einer "Schleifenverdrahtung" ist, dass die 
Leitungslänge nicht so groß wird. Vor allem bei den entfernteren Geräten 
wären sehr viele Steckverbindungen dazwischen (bei 4 in Reihe wären es 
schon 8 Steckverbindungen).
Wenn jeweils nur ein Sensor an einem Bus hängt, kann man den 1-wire-Bus 
ohne ROM-Adressen betreiben. Außerdem hat man die Möglichkeit, 
Multicasts zu senden (z. B. Alarm Search oder Convert T).

Die Analogschalter sollen dann, wie in einem meiner letzten Beiträge 
beschrieben, für die Schaltung der aktiven Pullups / Pulldowns verwendet 
werden. Die Sense-Leitungen gehen direkt auf einen Eingang des µC.

Gegen Multiplexer habe ich mich entschieden, weil damit die 
Multicast-Option wegfiele.

Ich hoffe, dass der ATMega1284P leistungsfähig genug ist, um sowohl die 
1-wire-Busse als auch die Ethernet-Schnittstelle bedienen zu können.
Vielleicht kann da jemand kompetenteres als ich eine Einschätzung zu 
abgeben.

Wenn das zu eng werden sollte, würde ich einen weiteren Mikrocontroller 
nur für die Netzwerkschnittstelle verwenden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren