Falsche Werte beim Lesen von Analogsensor

Hi,

ich versuche den Temperaturwert eines NTC Sensors auf einem LCD anzuzeigen. Leider ist die ermittelte Temperatur zu hoch.

Der Sensor ist angegeben mit 2400 Ohm bei 20°C (+- 5,4%) und 2000 Ohm bei 25°C (+-5%).

Wenn ich den Sensor bei Zimmertemperatur mit dem Multimeter messe, bekomme ich 1900 Ohm, was eher plausibel wäre.

Der Arduino mißt aber ~1726 Ohm (28,1°).

Zur Schaltung:
Ich gebe 5 V auf ein Breadbord Seite
=> 100 Ohm Vorwiderstand brückt auf die zweite Breadbord-Hälfte
=> Von dort geht ein Kabel zum NTC Sensor und ein zweites zu Analaog3
=> Vom NTC-Sensor geht ein zweites Kabel auf GRND

Der Arduino liest auf A3 einen Wert von 967.

Zum Ermitteln des tatsächlichen Widerstands rechne ich wie folgt:

RefWert = 967/1023
100*RefWert/ (1-RefWert) = 1726

Das ist mein erstes richtiges Arduino-Projekt, kenne mich daher noch nicht sehr gut aus. Auch bei der Wahl des richtigen Vorwiderstands bin ich mir unsicher.

Vielleicht findet jemand einen Fehler in meiner Logik?

Hier die Daten zum Sensor:

Es ist der 0 280 130 085

Liebe Grüße,
Jens

Ich habe mich auch eine Weile mit den Ntc beschäftigt. Bin mit den Weren aber nicht so zufrieden gewesen.Ich hatte mich auf dieser Seite belesen

https://we-mod-it.com/board258-diy-do-it-yourself/board263-diy-how-to/board231-raspberry-arduino/2682-arduino-tutorial-5-sensoren/

Darüber bin ich auch auf den DS18B20 Sensor gekommen. Sehr genau und einfach in seine Projekte einzufügen.

Hi

Der DS18B20 geht nur bis +125°C.
Drüber 'läuft der Messwert über' - hatte Das Mal getestet, man kann also auch Temperaturen knapp über 125°C noch mit dem DS18B20 'erkennen' - man muß Sich nur merken, daß man gerade über dem Maximal-Wert ist und zu dem Ergebnis des Sensor einen Offset dazu zählen muß.

Welchen Offset kann ich aber nicht mehr sagen - hatte vor, die Sensoren in einer thermischen Solar-Anlage einzubauen, dort sollte im Normalbetrieb die Temperatur eh unter 125°C bleiben, mich interessierte halt, was so ein Sensor macht, wenn'S doch mal kuschelig warm wird ... ob der Sensor dabei an Genauigkeit verliert ist unbekannt, denke, den damals gequälten Sensor habe ich irgendwo verbaut und bis jetzt keine Auffälligkeiten (was nicht sagt, daß dieser Sensor dadurch jetzt nicht doch falsch geht, also auf eigene Gefahr).

Der Sensor wird von den Arduino-5V versorgt?
Wenn nicht, könnte hier schon der Grund sein: Der Arduino nutzt die Versorgungsspannung standardmäßig als Referenz - Diese kann schwanken bzw. nicht genau auf 5,0000V stehen.
Wenn der Sensor von 'anderen 5V' versorgt wird, würde Das abweichende Ergebnisse erklären.
(befürchte aber, daß der Sensor 'normal' am Arduino hängt, mit allen drei 'Beinchen' (sofern man den Spannungsteiler-Widerstand zum Sensor zählt) - also halt normal angeschlossen ist)

Ist diese Fehlmessung stabil, oder bekommst Du Schwankungen?

MfG

Wenn der Widerstand ungefähr die Größe deines NTC hat, ist die Auflösung maximal.

Ich verstehe dich so, dass du es so angeschlossen hast:

Vref --- 100 --+-- NTC --- GND
               |
A3   ----------+

Miss den 100 Ohm Widerstand mal nach und nimm besser einen 1k Widerstand (natürlich auch gemessen).

Vref sind die nominellen Arduino-5V, möglichst aus dem Aref-Pin, die dem Analog-Vollausschlag von 1023 entsprechen, richtig?

DS18B20 ist einfacher, das stimmt schon, aber besser als 20% Fehler sollte man schon hinkriegen...

Hier steht, wie es geht.

Den DS18B20 kann ich leider nicht nutzen. Ich benötige wasserdichte Sensoren zum einschrauben. Hätte erwähnen sollen, dass es um einen Bordcomputer für einen VW Käfer geht. Konkret habe ich aktuell zwei Sensoren angeklemmt: Wasser und Lufttemperatur. Beides von Bosch und NTC. Der, um den es oben ging ist der Lufttemperatursensor. Es liefern allerdings beide etwas hohe Werte.

Ja, die Schemazeichnung ist korrekt. So habe ich es angeschlossen. Der Zweite Sensor, den ich zu Beginn außen vor gelassen habe, hängt parallel an VREF und hat einen eigenen Vorwiderstand (hab ihn zum Tests mal abgeklemmt - keine Änderung).

Den 100 Ohm Widerstand habe ich mit 100.2 Ohm gemessen. Habe ihn jetzt mal Deiner Empfehlung folgend durch einen geößeren (1194 Ohm) ersetzt. Es ist etwas besser geworden!

Ergebnis mit 100Ohm: Sensor1 => 24,0°C, Sensor2 => 28,6°C
Ergebnis mit 1194Ohm: Sensor1 => 23,1°C, Sensor2 => 25,3°C

Im Raum sind es eigentlich 21.6°C, die Ergebnisse sind also immer noch etwas zu hoch. Die höchste Genauigkeit bräuchte ich bei 90°.

Die Fehlmessung ist sehr stabil und reproduzierbar.

Das Datenblatt zum Wasser-Sensor: http://www.bosch-motorsport.de/content/downloads/Products/resources/2782642827/en/pdf/Temperature_Sensor_NTC_M12-H_Datasheet_51_en_2782610059.pdf

Hier nochmal die Differenz in Ohm:

Multimeter sagt: Sensor hat 2177
Arduino sagt: Sensor hat 2030

Wenn ich die fehlenden 100 Öhme drauf rechne, wird das Ergebnis besserer.

Hi,

ich schätze mal, daß Du den Sensor bereits mit Deinem Messstrom erwärmst! Das Messgerät dürfte eine sehr geringe Messspannung für die Widerstandsmessung haben, beim Arduino legst Du aber ~5V an.
Im Datenblatt steht was von max. 1mA Messstrom, mit 1,2k + ~2kOhm bist Du aber bereits bei ~1,56mA.
Du solltest also schauen, welchen Sensor-Widerstand Du bei Deiner gewünschten Temperatur hast, und den Spannungsteiler dann auf kleiner 1mA auslegen. Da Du dann aber vermutlich ein zu schlechtes Spannungsteilerverhältnis hast, was sich schlecht messen läss, solltest Du über eine Referenzspannung von 1,1V statt 5V nachdenken.

Gruß André

Das beste Meßergebnis ergibt sich wenn der Festwiderstand des Spannungsteilers dem Widerstand des NTC im Meßpunkt entspricht.
ZB: wenn Du 30 °C messen sollst (zB Du baust eine Temperaturregelung für 30°C) dann nimmst Du den Widerstand den der NTC bei 30 °C hat.

Grüße Uwe

Ja, laut TO geht es um ~ 90°C, bei einem 1:1 Teilerverhältnis muss dann eben die Versorgungsspannung für den Sensor (stabilisiert) entsprechend runter, damit der Messstrom kleiner 1mA bleibt.

Gruß André

Kannst Du mir kurz erläutern, wie Du den Messstrom errechnet hast?

Hi,

Du hast einen 1,2k Widerstand und den temperaturabhängigen Sensorwiderstand von ~ 2k bei Zimmertemperatur.
Macht in Summe 3,2k Ohm, und bei 5V fließen dann halt 1,56 mA durch beide Widerstände. I=U/R

Hast Du den Sensorwiderstand bei ~90 °C griffbereit?

Gruß André

Ah, danke!

Für den Wassertemperatursensor steht im Datenblatt: 90° - 243 Ohm

Für den Luft-Sensor gibts im Datenblatt nur Angaben zu
80°c: 312...370 Ohm
100°c: 184...222 Ohm

Ich habe mir eine For-Schleife geschrieben, welche alle Werte von 0 bis 1023 in die Formel wirft und das Ergebnis auf die Console schreibt. Damit errechnet er folgende Werte für den Bereich um 90°:

286.56 Ohm - 91.23°
288.36 Ohm - 90.97°
290.16 Ohm - 90.71°
291.96 Ohm - 90.45°
293.77 Ohm - 90.20°
295.59 Ohm - 89.94°

Nun, im Verhältnis zum erlaubten Messstrom ist der Widerstand des Sensors bei ~90°C schon sehr gering.

Ich nähere mich mal von der Versorgungsspannung des Spannungsteilers:
Es gibt gängige Spannugsreferenzen mit 1,235V die werden wie eine Z-Diode benutzt, nur viel stabiler.
Da Du nur 1mA Messstrom haben darfst, brauchst Du in Summe also ~ 1,235 kOhm (R=U / I), bei 100°C würden davon minimal 184 Ohm auf den Sensor entfallen.
Nehmen wir mal einen geraden Wert:
1kOhm Widerstand und 200Ohm Sensor-Widerstand, dann fällt 1 sechstel der angelegten 1,235V über Deinem Sensor ab (0,206V).
Bei 20°C wären es (2,4K + 1k) ca. 0,872V die über dem Sensor zu messen sind (2,4K hat dann der Sensor).
Das lässt sich noch optimieren, war erstmal ein Schuss ins Blaue ...

Nachtrag:

Du könntest auch mit Konstantstromquelle (KSQ) arbeiten, die Dir konstant ~1mA zur Verfügung stellt.
Damit wird die Messung einfacher, da es kein Spannungsteilerverhältnis mehr ist, sondern durch den konstanten Strom die Spannung über dem Sensor ein direkter Ausdruck seines momentanen Widerstandes ist. Ich selbst habe noch nichts mit KSQs gemacht, aber mal 2 URLs:

Gruß André

Ich würde da einen anderen NTC benutzen, der bei 90°C einen höheren Widerstand hat.

Auch die DS18B20 gibt es gekapselt. zB https://german.alibaba.com/product-detail/screw-thread-probe-housing-threaded-ds18b20-temperature-sensor-probe-60654891483.html?spm=a2700.8699010.29.27.7f7e2f6fiIfevI

Grüße Uwe

Wie errechnen sich die Volts am Sensor, wenn die Eingangsspannung und der Gesamtwiderstand gegeben ist?

Wenn ichs richtig verstehe, müsste mein Vorwiderstand beim 5V-Betrieb mindestens etwa 5k haben, damit ich selbst beim niedrigsten Sensorwiderstand (bei 130°/91 Ohm) den Strom unter 1 mA halte (5V/5091Ohm=0,98mA).

Damit sollte er sich dann nicht mehr so erwärmen, liefert aber ungenaue Ergebnisse.

Ich würde gerne so wenig zusätzliche Teile wie möglich verbauen. Irgendwann muss ich die Teile ja mal vom Breadbord auf eine Platine setzen und irgendwie verlöten. Davor graut es mir jetzt schon. Das stelle ich mir nicht einfach vor.

Der Arduino hat doch auch einen 3V Anschluss. Wäre es evtl. eine Lösung, diesen statt den 5V zu nutzen? Der AD-Konverter geht allerdings ja weiterhin von 1023 = 5V aus. Wie macht man soetwas dann? Den gelesenen Wert einfach "im Verhältnis 5/3" hochrechnen?

LG
Jens

Edit:
Hey super! Ich habe die Vorwiderstände jetzt mal testhalber durch 5k Widerstände ersetzt. Siehe da: Beide Sensoren liefern zum ersten mal identischen Werte! Sie stimmen für die Zimmertemperatur jetzt auch mit meinem digitalen Thermometer überein.

Ich werde sie später mal in den Backofen legen und schauen, wie der Temperaturverlauf ist. .-)

Hi,

Deine Rechnung oben stimmt, wenn Du tatsächlich bis 130 Grad messen können musst.
Die 3,3V bringen Dir nur was, wenn Du auch die 1,1V Referenz nimmst, bekommst dann aber bei Zimmertemperatur einen Überlauf, da V Sensor dan größer V Referenz!

Gruß André

wenn Du auch die 1,1V Referenz nimmst

.. holst du diese natürlich auch aus dem Aref Pin.

Das ist doch grade der Vorteil der NTC - Spannungsteiler Messmethode, dass die absolute Spannung sich rauskürzt und nur das Verhältnis der zwei Widerstände zueinander gemessen wird.

Dann kann man auch keinen Überlauf beim Messen haben.

Die 130°c sind schon realistisch für die Ladelufttemperatur.

Ich habe mit das AREF gerade mal genauer angesehen und festgesstellt, dass man es via analogReference(INTERNAL) auf 1,1V setzen kann. Hab es dann in Verbindung mit einem 1k Widerstand ausprobiert. Mit der Kombi käme ich im 130°-Worstcase auf 1091 Ohm, also sensorkompatible 0,92 mA.

Kann ich das so machen oder ist diese 1,1v Spannung zu instabil oder aus anderem Grund ungeeignet?

Damit erreiche ich nun folgende Werte:

Multimeter sagt: 2124 Ohm
Arduino sagt: 2100 Ohm

Ist das schon ganz gut, oder müsste das noch genauer gehen?

Multimeter sagt: 2124 Ohm
Arduino sagt: 2100 Ohm

Ist das schon ganz gut, oder müsste das noch genauer gehen?

Da hast du schon ein ordentliches Multimeter, schätze ich mal. ( 1% bei Widerstandsmessung )

Mit einer Uhr weiß man immer wie spät es ist,
mit zweien nicht mehr.