1-Wire und der Widerstand

Ich habe mit einigen 1-Wire-Komponenten herumgespielt und diese Fragen bekommen

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

  1. Kann ich etwas kaputt machen, wenn ich den 4,7-kΩ-Widerstand ________ vergesse?
  2. Müssen es 4,7k sein _________?

Stieß auf eine Adafruit-Lib, die 10 k verwendete, aber das Wechseln zwischen den beiden Widerständen (4,7 k und 10 k) schien die Anzeige nicht zu beeinflussen. Aber ist es die Bibliothek, die definiert, welche Widerstandsgröße ich verwenden soll, oder sollte es nur zwischen einem Intervall liegen?

Ich bin ein Neuling in Sachen Elektronik und im Moment lerne ich einfach. Das Lesen der Theorie dahinter hilft mir nicht so sehr, da ich die Hälfte der verwendeten Begriffe nicht verstehe.

Ich habe mir die Freiheit genommen, Ihre Schaltung auf eine üblichere Weise neu zu zeichnen. Schauen Sie sich diese Frage an: electronic.stackexchange.com/questions/28251/…

Antworten (5)

1) "Kann ich etwas kaputt machen, wenn ich den 4,7 k-Widerstand vergesse?"

Nein. Sie könnten das externe Gerät beschädigen, wenn Sie den Arduino-Ausgang aktiv HIGH statt hochohmig treiben. In der Regel übernehmen dies die Bibliotheken.

digitalWrite( 1 , HIGH ); pinMode( 1 , OUTPUT );  // Bad, active HIGH
digitalWrite( 1 , LOW );  pinMode( 1 , INPUT );   // Good, high impedance.

2) "Muss es 4,7k sein"?

Nein. Einzelheiten und Überlegungen finden Sie im Datenblatt. Abhängig von Geschwindigkeit und Leistungsanforderungen variieren Pull-up-Widerstände normalerweise von 1 kΩ bis 100 kΩ. Dein 4k7 ist ungefähr so ​​gut wie meine üblichen 10kΩ.

Meine bevorzugte Ein-Draht-Implementierung besteht darin, einen Widerstand an einen Nur-Ausgangs-Port statt an VDD anzuschließen und einen zweiten Port-Pin nur als Eingang mit einem zweiten Widerstand darauf zu verwenden, um ihn vor ESD zu schützen. Wenn der Prozessor auf diese Weise verdrahtet ist, riskiert nichts, etwas zu beschädigen.

1-Wire-Geräte haben Open-Drain-Ausgänge, sodass der Pullup erforderlich ist, um eine logische „1“ aufrechtzuerhalten, wenn der Bus nicht angesteuert wird, genau wie bei I2C. Der Grund für die Verwendung von Open-Drain-Ausgängen ist auch derselbe wie bei I2C: um mehrere Geräte auf demselben Bus zuzulassen (siehe auch diese Frage ).

Der Wert von 4,7K wird am ehesten gewählt, um bei üblichen Kabellängen eine ausreichend kleine Anstiegszeit zu gewährleisten. Der eigentliche Parameter, der den maximal zulässigen Widerstandswert bestimmt, ist die Anstiegszeit des Signals, die durch den Buswiderstand und die Kapazität bestimmt wird.

Sie werden nichts braten, wenn Sie den Widerstand vergessen (solange Sie den Bus nicht von Ihrem Master-Gerät hoch treiben), aber Ihr 1-Draht-Bus wird nur aus Versehen funktionieren.

All dies ist ausführlich in der Maxim-Literatur dokumentiert, einschließlich Datenblättern und App-Hinweisen .

Wenn Sie den Widerstand durch einen Kurzschluss ersetzen, können Sie möglicherweise D1 beschädigen, wenn er jemals versucht, "0" auszugeben. Wenn Sie den Widerstand überhaupt nicht haben, gibt es keine Stromversorgung für das 1-Wire-Gerät.

Es ist ein "Pullup"-Widerstand . Der genaue Wert ist nicht wichtig, es gibt wahrscheinlich einen breiten Bereich, in dem es funktioniert.

Wie können Sie D1 beschädigen, indem Sie den Widerstand weglassen?
Wenn Sie es niedrig fahren, während es an 5 V angeschlossen ist?
@pjc50 - Können Sie dies bearbeiten, um dies zu verdeutlichen? Ich nahm an, dass der nicht vorhandene Widerstand bedeutet, dass der Pin mit nichts verbunden ist (was meiner Meinung nach viele andere auch tun könnten), im Gegensatz zu einem Kurzschluss zwischen dem Pin und 5 V.
Ich habe meine Ablehnung nach der Klarstellung entfernt. Beachten Sie jedoch, dass das 1-Wire-Gerät über den +5-V-Anschluss immer noch mit Strom versorgt wird, wenn Sie den Widerstand entfernen.
Die +5 V sind nicht mit dem 1-Draht-Gerät (nicht gezeigt) verbunden, nur Daten und Masse sind es.
Wie kannst du das Wissen?
maximintegrated.com/products/ibutton/ibuttons/standard.pdf : Die Hauptverwendung von One-Wire sind „ibutton“-Geräte, die die gleiche Form wie Knopfzellen haben.
Es gibt auch Temperatursensoren wie den DS18B20 , ein nettes Teil. Sie können mit zwei Drähten (Daten und Masse) betrieben werden, wobei "Parasitenstrom" von der Datenleitung kommt, oder im Standard-3-Draht-Modus, wobei die Stromversorgung stattdessen über den Stromanschluss erfolgt.

Nein, es müssen nicht 4,7k sein, die ursprüngliche Spezifikation sagte "ungefähr 5k", 4,7k ist nur ein allgemein verfügbarer Wert in diesem Bereich. Es gibt einen Artikel über das Ansteuern von 1-Draht-Temperatursensoren nur mit dem internen Widerstand des Arduino (und ich kann bestätigen, dass es auch mit dem 1,8-kΩ-Widerstand eines Pi funktioniert).

Grundsätzlich zieht der Master (Mikrocontroller) den Draht nach unten, um ein Slave-Gerät zu bitten, eine Anzeige zu geben. Der Slave wartet eine vorbestimmte Zeitdauer, nachdem der Master die Leitung auf Low gezogen hat, um zu antworten, indem er die Leitung ebenfalls auf Low zieht. Der Master überprüft dann die Spannung auf der Leitung, um 0 oder 1 zu bestimmen.

Die Obergrenze

Dies gibt uns die Obergrenze für den Widerstand, der funktioniert. Angesichts der Kapazität der Drähte und der angeschlossenen Sensoren muss sie niedrig genug sein, um die Spannung auf der Leitung hoch zu bringen, bevor der Host den Wert überprüft. Für ein einzelnes Gerät und eine kurze Kabellänge sind 100.000 wahrscheinlich niedrig genug, 50.000 sind niedrig genug für 3 Geräte und einen Meter Kabel (oder so ungefähr) oder 1 Gerät und 10 m Kabel. Außerdem kannst du im Pull-Up-Modus schummeln und einen zweiten Pin anbringen, wenn du mehr Power Delivery benötigst.

Das setzt voraus, dass Sie eine dedizierte Stromleitung betreiben. Wenn Sie es im parasitären Leistungsmodus verwenden, müssen Sie die Leistungsaufnahme des Geräts am anderen Ende berücksichtigen, was einen Blick auf die entsprechenden Datenblätter erfordert.

Die Untergrenze

Was die untere Grenze betrifft, so gibt es keine zum Wiederherstellen des hohen Signals. In dem Moment, in dem die Leitung ruhig ist, ist es sicher, sie hoch zu fahren. Das Problem tritt auf, wenn Sie es hoch treiben, während eines der Slave-Geräte versucht zu "sprechen". Die Verstärker, die Sie über Ihren Pull-up-Widerstand einspeisen, müssen vom Slave abgelassen werden, abhängig vom Innenwiderstand des Slaves, während er zieht die Leitung niedrig und ihre thermischen Grenzen, wird sie entweder den Slave kochen oder das Signal nicht niedrig ziehen. Welchen Fehlermodus Sie erhalten und wie hoch der sichere Mindestwiderstand ist, können Sie normalerweise dem Datenblatt des Slave-Geräts entnehmen. Als allgemeine Regel versuche ich normalerweise, diese Art von Komponenten im Bereich von <10 mA zu halten (vorausgesetzt, sie haben einen Innenwiderstand von 0, während sie die Leitung niedrig ziehen). Dies bedeutet, dass der Mindestwiderstand, den Sie für Ihren Pull-up benötigen (unter der Annahme einer 5-V-Ansteuerung), 500 Ω beträgt. Es ist wahrscheinlich einigermaßen sicher, je nach Umgebungstemperatur und wie oft der Slave "spricht", etwas höher zu gehen, aber bei Temperatursensoren verzerren Sie Ihren Messwert, wenn Sie genügend Strom durch den Sensor leiten, damit er sich erwärmt.

Den Widerstand weglassen

Wenn Sie es weglassen und den internen Widerstand verwenden, werden Sie mit einer Handvoll Komponenten auf einer kleinen Schaltung zufrieden sein. Wenn Sie es weglassen und die Leitung direkt hoch treiben, erhalten Sie keine 0 Ω, aber Sie erhalten einen Widerstand, der niedrig genug ist, dass Sie die Dinge zumindest aufheizen (der Master, wenn er die Leitung niedrig zieht, und welche Sklaven versuchen zu antworten). Dies wird mit ziemlicher Sicherheit die Lebensdauer Ihrer Komponenten verkürzen. Wenn Sie es weglassen und nichts anschließen, um die Spannung hochzuziehen, funktioniert die Schaltung einfach nicht.

Eine Anmerkung zur parasitären Leistung

Es ist möglich, One-Wire-Geräte ohne dedizierte Stromleitung zu verwenden. Nur Signal und Masse. Dazu muss die Signalleitung so lange hochgehalten werden, dass die angeschlossenen Geräte die internen Kondensatoren füllen können, damit sie für kurze Zeiträume funktionieren können, wenn die Datenleitung auf Low gezogen wird. Dies belastet natürlich die Datenleitung und zieht sie tiefer, je mehr Geräte parasitäre Energie verbrauchen. Sie können dies kompensieren, indem Sie einen niedrigeren Nennwiderstand verwenden. Sie können die Leitung auch ohne den Widerstand hoch treiben, indem Sie den Kommunikations-Pin des Masters in den Spannungsausgabemodus versetzen. Per Spezifikation nur die Slavessprechen, nachdem der Meister zu ihnen gesprochen hat, und nur für eine sehr kurze Dauer. Dies bedeutet, dass der Master sicher vom Ausgangsmodus am Signal-Pin in den Eingangsmodus wechseln und ihn auf Low ziehen kann, um einem Slave mitzuteilen, dass er antworten soll. Dann stellt der Pull-up-Widerstand die Spannung auf der Datenleitung wieder her und der Slave wird sie als Antwort entweder herunterziehen oder nicht. Der Master muss warten, bis alle Slaves fertig gesprochen haben, bevor er die Leitung erneut hochtreibt. Das bringt Sie nicht davon ab, etwas für einen Pull-up-Widerstand zu brauchen, da etwas die Leitung hochziehen muss, während der Slave spricht. (Nun, du könntesttreiben Sie die Leitung vom Master hoch, indem Sie sie pulsieren, wenn die Taktrate des Mikrocontrollers und die Kapazität des Schaltkreises hoch genug sind, aber ich vermute, es wäre unglaublich zerbrechlich mit einem schrecklichen Fehlermodus).

Schießen, vergessen, den Link zu dem oben genannten Artikel einzufügen: https://wp.josh.com/2014/06/23/no-external-pull-up-needed-for-ds18b20-temp-sensor/

Wenn die Datenleitung ohne Widerstand direkt mit +V verbunden ist, macht die Leitung den Master nicht nur sehr unglücklich, wenn er versucht, die Leitung auf Low zu ziehen (sprich: NPN oder NMOS seiner Ausgangsstufe durchbrennen), sondern die Leitung wird dies niemals tun Gehen Sie niedrig, und Sie müssen sich keine Sorgen machen, die Sklaven zu verbrennen, da sie niemals einen Puls haben werden, auf den sie reagieren können.
Sie können nicht "keinen Widerstand" haben, Sie können "keinen diskreten Widerstand" haben, die von Ihnen verwendeten Drähte haben einen gewissen Widerstand. Ob der Slave den Niederspannungsimpuls sieht und versucht zu reagieren, hängt von den relativen Widerständen der logischen Drähte, dem maximalen Strom Ihrer Versorgung ab, bevor er abfällt, und so weiter. Dies setzt voraus, dass Sie Daten auf + V kurzschließen, anstatt dass der Controller den Datenpin direkt hoch treibt. In diesem Fall ist der Controller in Ordnung, da er den Pin auf Low treibt und damit aufhört, den Pin auf High zu treiben (zumindest bis der Slave antwortet). Sie könnten auch einen anderen VRM als einen Widerstand verwenden.
Ich stimme zu, dass Sie nicht "keinen Widerstand" haben können. Ein "Widerstand" ist ein absichtlicher Widerstand, sei es eine diskrete Komponente oder ein Teil eines Buswiderstands oder einer anderen Ansammlung von Komponenten, und steht im Gegensatz zu "parasitärem Widerstand", der jeden unbeabsichtigten Widerstand bedeutet, unabhängig davon, ob es sich um eine effektive Ausgangsimpedanz einer Quelle handelt, Widerstand von Leiterplattenspuren, Widerstand von Bauteilleitungen usw. Ihre Analyse ist insofern falsch, als sie sich auf den Drahtwiderstand konzentriert. Der dominierende parasitäre Widerstand liegt im IC-Ausgangstreiber – kein Niederspannungsimpuls gelangt jemals bis zum Pin.
Wenn Sie also Ihren Temperatursensor an das andere Ende eines 1 km langen 40-ga-Lautsprecherkabels und die Pull-up-Quelle 10 km weiter unten in der Leitung anbringen , wird er auf magische Weise sterben, weil Sie keinen absichtlichen Widerstand eingebaut haben, verstanden. Ich habe keinen Zweifel, dass Ihre Analyse für die Schaltung, die Sie sich vorstellen, korrekt ist, aber ich glaube, Sie gehen von Dingen aus, die nicht falsch angegeben sind . Wie auch immer, Streiten löst nichts. Ich habe ein "Ersatz" -Arduino, das ich riskieren kann, auszubrennen, und ein Zielfernrohr. Angenommen, ich wache morgen nicht krank auf (schlechte Chancen, c19 ist scheiße), werde ich genau sehen, wie ein Arduino in jedem der oben genannten Szenarien abschneidet.
In diesem Szenario ist der parasitäre Widerstand im Ausgangstreiber wahrscheinlich immer noch der wichtigste, aber wenn Sie jetzt am Pin messen, sehen Sie eine erhebliche Verzögerung der Reflexionen, bevor sich die Spannung auf ihren endgültigen Wert einpendelt. Sie müssten Ihr Lautsprecherkabel also als Übertragungsleitung mit charakteristischer Impedanz und Verzögerung betrachten. Ich bin nur davon ausgegangen, dass es sich bei der Frage um etwas handelt, das vernünftigerweise als "ein Kabel" bezeichnet werden kann, und Ihre 10 km lange Übertragungsleitung ist kein Kabel.
Ich habe es nicht geschafft, den Arduino Nano auszubrennen, aber es war interessant. 1: Der Edge-Trigger von OpenHantek friert den Bereich nicht ein und kann keine Daten in eine Datei ausgeben. Daher habe ich die Timing-Informationen nicht so gut untersucht, wie ich es mir gewünscht hätte (was erwarten Sie von einem 30-Dollar-Oszilloskop?). 2: Überbrückung von D11 zu D10, mit beiden in OUTPUT, 11 HIGH und 10 LOW lassen etwa 100 mA durch und überhitzen die Platine nicht. 3: Die Spannung an Pin 10 in dieser Konfiguration liegt bei 2 V, unter der Schwelle für D1Ws 0, aber über ihrer 1. Durch Verbinden von Pin 9 mit Pin 10 kann die Spannung auf 0,7 gezogen werden, was niedrig genug ist, um den Slaves ein Signal zu geben. YMMV

Ich habe vor einiger Zeit ein Drahtprotokoll implementiert, indem ich das 1-Draht-Protokoll mit einem GPIO-Pin gebissen habe. Ich kann mich nicht an den genauen Wert des verwendeten Widerstands erinnern, aber er verwendet einen Widerstand, wahrscheinlich 4,7 kΩ, um die Spannung auf 5 V hochzuziehen, da der Bus mit parasitärer Leistung arbeitet. Alle Slave-Geräte arbeiten mit parasitärer Leistung, die vom 1-Draht-Bus bezogen wird wenn sie es brauchen. Wenn Sie den Widerstand nicht verwenden, wäre der Bus logisch niedrig. Selbst wenn Sie einen falschen Wert des Widerstands verwenden, kann mit nur einer 5-V-Stromversorgung, die Sie von der Platine verwenden, nichts passieren. Das einzige Ergebnis scheint, dass der Bus an wäre ein niedrigerer Pegel als 5 V, was für den Master oder einen Slave wahrscheinlich nicht ausreicht, um zu interpretieren, dass der Bus im Leerlauf ist. Ein 5-V-Pegel auf dem Bus bedeutet, dass der Bus im Leerlauf ist. Die Pins der MCU befinden sich im Open-Drain-Modus, weshalb Sie einen Pull-up-Widerstand benötigen, um den Bus immer auf 5 V zu halten, außer wenn die MCU oder ein Slave den Bus steuert. Lesen Sie mehr über Open-Drain- und Push-Pull-Modi von GPIO-Pins Ihrer MCU.

1-Draht ermöglicht, benötigt aber keine parasitäre Leistung. Auch wenn keine parasitäre Leistung verwendet wird, wird ein Widerstand benötigt.
Parasitäre Energie wird für Sklaven benötigt, die sie benötigen. Ansonsten ist es nicht erforderlich.
Ich glaube jedoch, dass der Master keine bestimmte Menge an parasitärer Leistung liefern muss. Es ist also theoretisch möglich, dass der Pull-up-Widerstand des Masters zu groß ist, um ein Gerät über den Bus zu versorgen.
Die meisten 1-Wire-Geräte wie Temperatursensoren scheinen mit 3,3 V oder 5 V zu arbeiten. Es ist eines von diesen. Selbst wenn die Slaves keinen Strom ziehen, wird der Bus im Leerlauf immer noch hoch gehalten. Dazu werden 4V benötigt. ti.com/lit/ds/symlink/lm35.pdf . Es gibt vier Spannungsbereiche für 1-Wrie-Geräte. wie hier angegeben maximintegrated.com/en/design/technical-documents/tutorials/1/… . Ich weiß nicht mehr, welche Spannung es war. Wahrscheinlich 3,3 V für den Temperatursensor LM35.