Zuverlässigkeit von DS18x20-Temperatursensoren

11

Ich verwende Maxim DS18x20 (ich habe tatsächlich mehr als eine Variante) 1-Draht-Temperatursensoren, um die Temperaturen in verschiedenen Räumen in meinem Haus einmal pro Minute zu protokollieren. Bei ungefähr einer Lesung von tausend bekomme ich etwas völlig Falsches zurück. In der Mitte einer Sequenz, die allmählich von 65F auf 70F ansteigt, erhalte ich so etwas wie -32,1F oder 15,64F.

Hat jemand anderes ein solches Problem gehabt oder stimmt etwas mit meinem Setup nicht? Wenn dies nur ein bekanntes Problem mit diesen Dingen ist, muss ich so etwas wie drei Lesungen machen und den Ausreißer rauswerfen.

Nur ein paar Aussagen zu meinem Setup:

  • Ich laufe mit 3,3V
  • Ich überprüfe die Prüfsumme des Lesens, wenn es zum Arduino zurückkehrt, und es stimmt überein (oder ich denke es tut - es könnte immer einen Fehler in diesem Code geben).
  • Diese haben keinen normalen Strom mehr, keinen Parasitenstrom.
  • Ich habe den 4,7K Pullup-Widerstand installiert.
  • Ich verwende nur einen einzigen Sensor auf jeder Sensorplattform.
  • Der Sensor befindet sich auf einer Platine, die an das Arduino angeschlossen ist, das ihn liest.
  • Ich sehe das gleiche Problem beim Lesen aus einer Vielzahl verschiedener Arduinos (Diecimilla, Pro-Mini, hausgemachter Brauch).
edebill
quelle

Antworten:

5

Ich habe dies gelegentlich mit dem DS18B20 gesehen. Für meine Anwendung war es einfach genug, die falschen Ergebnisse mit Code herauszufiltern.

user274
quelle
Es ist gut zu hören, dass jemand anderes so etwas scheint. Was war Ihr Filteralgorithmus?
edebill
Ich würde vorschlagen, dass Sie das getan haben, was Sie gesagt haben. Nehmen Sie 3 Lesungen, 5 wären besser, 7 besser als das, aber wenn es einen Fehler von etwas um 1/1000 gibt, brauchen Sie nur 3. Nehmen Sie den Median. Problem wird gelöst. Wenn Sie 5 nehmen, dauert es ein ungewöhnliches Ereignis, um ein Problem zu haben.
Kortuk
Ich mache jetzt 5. Ich habe versucht, nur die höhere von 2 zu nehmen, aber letzte Nacht ist immer noch ein Fehler aufgetreten (ich habe 3 Sensoren pro Minute, sodass ich täglich Tausende von Datenpunkten erhalte).
edebill
3

Wenn Sie die Quelle der fehlerhaften Messwerte nicht finden können, sollte es einfach sein, sie herauszufiltern und aus früheren Messwerten zu extrapolieren oder zwischen Messwerten zu interpolieren, wenn Rückblick wichtig ist. Da Sie einmal pro Minute abtasten, können Sie sogar nur den letzten Messwert kopieren. Die Raumtemperatur wird sich in einer Minute kaum ändern.

stevenvh
quelle
3

Dies kann daran liegen, dass die Steuerung unter bestimmten Hochlastbedingungen ein oder mehrere Bits der Temperaturantwort falsch liest, oder daran, dass elektrische Störungen ein oder mehrere Bits verfälschen.

Schauen Sie sich das Datenblatt hier genauer an: http://www.rentron.com/Files/ds18b20.pdf

Auf Seite 5 wird gezeigt, dass die genaue Binärsequenz für 85C wie folgt lautet:

+85°C 0000 0101 0101 0000

Ebenso ist es für 25C:

+25.0625°C 0000 0001 1001 0001

In einigen Fällen erhalten Sie einen Wert, der der tatsächlichen Temperatur entspricht, ausgedrückt in binär und bitverschoben. Oft ist dies 1 / 2x der Zielwert in C.

Manchmal kann es zu elektrischen Störungen in der Leitung kommen, und der Controller liest ein ganzes Halbbyte von 1s. In diesem Fall erhalten Sie eine Zahl wie 15,64, die in Binärform tatsächlich sehr nahe an Zahlen zwischen 65 und 70F liegt, außer bei ein paar Einsen am Anfang.

gbronner
quelle
2

Für das, was es wert ist, habe ich vor ein paar Monaten ein bisschen mit dem DS18B20 gearbeitet. Ich habe ein kurzes Video gedreht und einen Artikel in meinem Blog geschrieben, der Links zu Beispielen und Beispielcode enthält. Hoffe das kann ein bisschen helfen! http://dailyduino.com/archives/552

Morgellon
quelle
2

Ich habe seit ungefähr vier Jahren 13 von ihnen in meinem Haus. Die Datenbank ist nicht mehr schwer zu handhaben (ich habe alle Proben im Auge behalten). Aber ich habe dieses Verhalten nicht gesehen. Stattdessen friert ab und zu ein Sensor ein und blockiert alle anderen. Der einzige Ausweg (den ich gefunden habe) bestand darin, die Versorgungsspannung für einige Sekunden abzuschalten. Also habe ich meinem Board ein winziges Relais hinzugefügt und jedes Mal, wenn das Mikro dieses Verhalten erkennt, wird die gesamte Sensorkette zurückgesetzt. Das passiert ein paar Mal pro Woche.


quelle
Hmm. Vielleicht sollte ich sie nur einschalten, wenn ich gerade eine Lesung mache.
edebill