188 m (616 feet) 1-Wire

by Dr. Stack van Hay | 16. März 2013 04:14

Wie lang darf eigentlich das Kabel für einen 1-Wire Bus sein? Die Quellen im Internet machen da verschiedenste Angaben, von Desktop-Range bis einige hundert Meter. Ich probiere es aus: Ein Versuch mit 188 m TP-Kabel.

Das Problem

Das Problem sind fünf verschiedene Effekte:

Die Lösung

Ich habe gar nicht so viel unternehmen müssen, um einen Temperatursensor an den 188 m Kabel zum Laufen zu bringen. Leitungsreflexionen treten mit TP-Kabel interessanterweise nicht auf, entweder passt die Impedanz des für die Tests verwendeten DS18S20 gut genug (in einem Datenblatt steht tatsächlich etwas von einem 100 Ω FET in der Endstufe) zu den 100 Ω des TP-Kabels, oder der Pull-Up-Widerstand am Leitungsende schluckt hinreichend Signal am Leitungsende. Eine Serienterminierung von 100 Ω funktioniert zwar, hat sich aber soweit nicht als nötig erwiesen.

Timing / Pull up

Kritisch ist definitiv die Größe des Pull-Up-Widerstandes. Er bildet mit der Leitungskapazität einen Tiefpass und macht es dem Bus so bei größeren Leitungskapazitäten unmöglich innerhalb der spezifizierten Recovery-Time von 1 µs den Idle-State (high) zu erreichen.

Peaks[1]

Overshoot / Undershoot

Durch die steilen Flanken des Masters gibt es natürlich massive Spannungsspitzen auf der Leitung. 1-Wire-Slaves sind für -0.3 V bis 5.3 V (Vcc + 0.3 V) spezifiziert. Wie man in der Messung unten sieht überschreiten die induzierten Spannungsspitzen von 7.3 V deutlich diesen Grenzwert. Selbiges gilt auch für den massenahen Pegel von -1 V.

DSX_QuickPrint24-(1100Ω)[2]

Ohne clipping-Dioden.

Ich habe dieses Problem ganz pragmatisch gelöst, in dem ich am Slave je eine clipping Diode gegen Vcc und GND geschaltet habe. Wie man sieht, ist das Problem damit gelöst.

DSX_QuickPrint25-Dioden

Mit clipping-Dioden.

 Spannungsversorgung

Um eine ordentliche Spannungsversorgung trotz der hohen Leitungsimpedanz zu gewährleisten habe ich schließlich noch einen 10 µF Tantal-Elko an die Versorgungsspannung geschaltet. Wie man auf dem folgenden Bild sieht, ist das Resultat eine absolut einwandfreie Versorgungsspannung ohne Einbrüche (blaue Kurve):

DSX_QuickPrint23-10µF

Gelb: Reset-Puls, Presence-Puls und Anfang des Rom-Select Kommandos.
Blau: Einbruchfreie Versorgungsspannung von 5 V.

Ergebnis

Um die Qualität des 1-Wire Busses zu kontrollieren habe ich neben den Messungen mit dem Speicheroszilloskop einen Atmel Mega2560 eingesetzt, den ich so programmiert habe, dass er neben der Auswertung des DS18S20 verschiedene Parameter der Übertragung anzeigt. Von 2809 Temperaturmessungen über die oben vorgestellte Konfiguration waren 2809 erfolgreich, außerdem hat das System erfolgreich 29 Adresssuchen (Anzeige: Scans) auf dem Bus durchgeführt. Der angeschlossene DS18s20 wurde dabei jedes Mal korrekt als solcher erkannt (Das Programm erkennt und unterstützt auch die anderen DS18xxx Typen).

GoodBad

Endnotes:
  1. [Image]: /wp-content/uploads/2013/03/Peaks.jpg
  2. [Image]: /wp-content/uploads/2013/03/DSX_QuickPrint24-1100Ω.jpg

Source URL: https://drsvanhay.de/188-m-616-feet-1-wire/