mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperatursensor (schnell)


Autor: Tausday (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy Leute,

habe die Suchfunktion schon verwendet, aber nichts passendes gefunden.

Folgendes Problem habe ich. bzw. Frage.

Ich suche einen Temperatursensor der zwischen ca. -10C und +60C mit ner 
genauigkeit um die 1C mist.

Ich dachte an den DS1820 doch dieser braucht ja eine Wartezeit von 600us 
wenn ich mich recht erinnere.

Ich wollte aber einen haben, den ich anspreche und er mir direkt den 
Wert liefert.

Desweitern sollte er gut mit Bascom ansprechbar sein.

und zu guter letzt. sollte man auch 2 davon am Atmel anschließen können. 
(Das sollte aber eher das kleinere Problem sein.)

Danke schonmal im Vorraus

Bis denne JungS!

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auslesen kannst du den DS1820 ja sofort, nur ist der Wert den du 
ausgelesen hast dann halt schon "alt".

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich dachte an den DS1820 doch dieser braucht ja eine Wartezeit von 600us
>wenn ich mich recht erinnere.

Was sollte sich innerhalb von 600us an der Temperatur
schon ändern. In der Zeit merkst du nicht mal ob du dir grad
die Flossen verbrannt hast.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DS18B20: Bei 9 Bit Auflösung, was für 1°C Genauigkeit ausreicht, sind es 
knapp 100ms, bei voller Auflösung 750ms. Was nicht heisst, dass der DS 
in 100ms auf die Temperatur reagiert, das ist nur die Messzeit.

Wenn der Sensor tatsächlich im Bereich unter 1s reagieren soll, sollte 
man sich erst einmal Gedanken um Kontakt und Wärmekapazität des Sensors 
machen.

Autor: Tausday (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wie lange dauert denn die Abfrage an den Ds1820 um mir Temperatur 
zu geben?

Versteh ich das richtig, das der DS1820 nur selbständig 600ms braucht um 
seinen Wert neu zu regenerieren oder brauche ich so lange mit dem uC den 
Wert auszulesen.

Ganz genau möchte ich wissen, wie lange ich von Startzeile des Auslesens 
brauche, bis zur Ausgabe.

Vielen Dank hoffe, man konnte mir folgen

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Sensor besitzt in diesem Zusammenhang 2 Kommandos: Mit dem einen 
wird die Messung gestartet, mit dem anderen das Ergebnis ausgelesen. 
Dazwischen müssen für volle Auflösung 750ms liegen.

Die Übertragungszeit für die Kommandos liegt grob bei 1-5ms, je nach 
Länge.

Autor: Tausday (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibt es nicht einen schnelleren, der kein start und stop benötigt 
sondern direkt den wert per read auslesen kann..

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hindert dich daran das Ding kontinuierlich zu starten, also so etwa 
jede Sekunde?

Stört dich die Tatsache dass die Temperatur dann veraltet ist? Hast du 
so schnelle Temperaturwechsel?

Ich würd das so machen:
Interrupt Routine die jede Sekunde oder so anspringt, den aktuellen Wert 
in ein Register schreibt und dann eine neue Messung initiiert.

Wenn du dann einmal in deinem Hauptprogramm den Wert brauchst, musst du 
nur das / die Register auslesen, das geht in kürzester Zeit.

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ganz genau möchte ich wissen, wie lange ich von Startzeile des Auslesens 
brauche, bis zur Ausgabe

Der DS18B20 im TO92-Gehäuse ist ein langsamer Sensoren. Dass die 
12-Bit-Conversion bis zu 750ms dauert, ist in dem Zusammenhang 
zweirangig. Das ist immer noch rasend schnell im Vergleich zu der 
Geschwindigkeit, mit der der Sensor eine Temperatur richtig erfasst: er 
ist zu dick in Plastik eingepackt, um für schnelle Messungen brauchbar 
zu sein. Wenn man den Sensor zwischen die Fingerspitzen presst, dauert 
es 5-7 Sekunden, bis er die Temperatur weitgehend erkannt hat. Und 
danach Minuten, bis er wieder Raumtemperatur sieht.

Vergleich:

- Ein TSIC306 im SOP8-Gehäuse (auch ein kalibierter digitaler Sensor, 
ungefähr gleicher Preis, etwas genauer) schafft es in etwa 2-3 Sekunden. 
Für die Auswertung liefert er ca 10 Werte pro Sekunde. Gibt es auch in 
einem leicht abgewandelten TO92-Gehäuse, habe ich aber noch nicht 
getestet.

- Ein KTY11-5 (PTC) im TO92-mini-Gehäuse erkennt die Temperatur in etwa 
2 Sekunden. Auswertung nahezu belibig schnell ("sofort") mit ADC. Das 
ist aber ein nicht kalibierter analoger Sensor.

- Ein Thermoelement Typ K (offen) mit MAX6674 erkennt die neue 
Temperatur in ca einer Sekunde. Die Conversion dauert 180ms, liefert 
also ca 5 Werte pro Sekunde. Analog, aber einigermassen genau auch ohne 
Kalibration (typischerweise 1-2 Grad Fehler).

Autor: 6636 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schnell aendert sich die Temperatur am Messpunkt und wie schnell 
muss der Temperaturwert bekannt sein ? Soll ein schnelles Regelsystem 
gebaut werden ? Was geschieht bei einer Verzoegerung ? Wie gross ist die 
thermische Masse ? Und die Leitfaehigkeit ?

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibt es nicht einen schnelleren, der kein start und stop benötigt
>sondern direkt den wert per read auslesen kann..

Bei Temperaturänderungen folgt die Temperatur des Sensors der Temperatur 
des Mediums, in dem er sich befindet, nie instantan.  Die Wärme muss 
schließlich erst von der Oberfläche des Sensors zum Chip im Inneren 
durch Wärmeleitung wandern.  Die Strecke ist zwar klein, aber endlich 
groß.  So entsteht, wenn es wärmer oder kälter wird, immer eine mehr 
oder weniger große Verzögerung zwischen der Temperatur des Mediums um 
den Sensor und dem ausgegebenen Messwert (und wenn die Temperatur gleich 
bleibt, ist eine Verzögerung irrelevant!).  Das gilt für alle 
Temperatursensoren.

Einen DS1820 viel öfter als ungefähr einmal pro Sekunde auszulesen, 
macht aus diesem Grund wenig Sinn.

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das gilt für alle Temperatursensoren

Wobei die thermische Zeitkonstante von Sensoren, die per Kontakt mit dem 
Medium messen, gewaltig unterschiedlich ausfällt:

Ein dünnes Thermoelement (z.B. D=0.025mm) kann eine thermische 
Zeitkonstante von 0.002 sec haben. d.h. in 0.002 Sekunde ist ein 
beliebiger Temperatursprung zu 63,2% korrekt erfasst, bei Messung in 
Wasser. Das kann man schon "instantan" nennen.

Beispiel:
http://www.omega.com/ppt/pptsc.asp?ref=IRCO_CHAL_P13R_P10R

Autor: Tausday (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy, danke schonmal für die vielen Infos...

Es geht mir eigentlich nicht darum, wie schnell er den "aktuellen" wert 
erfasst sondern das er mir einen zurückgibt...

Es soll soetwas wie ein Boardcomputer werden.

Ich wollte eine Schaltung bauen, in der die Einspritzdauer berechnet 
wird und mit der letzten addiert wird und so weiter und zum schluss bzw. 
immer wieder auf einem display eine durschnitswert der Einspritzungdauer 
anzeigt.

Dazu wird der Timer gestartet immer wieder überprüft ob noch ein signal 
anliegt. wenn nicht, wird der Timer gestoppt, mit dem letzten wert 
addiert die dauer die der Timer festhält liegt zwischen 1,5ms und 9ms. 
Danach hat er ca. 2ms Pause bis die nächste Einspritzung erfolgt und 
genau in dieser zeit muss der Wert der Temperatur ausgelesen werden und 
das Display die ausgabe für Einspritzungsdauer und temperatur übertragen 
werden.

Vielen Dank Jungs

Autor: 6636 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Temperatur wird gemessen ? Eine Gastemperatur ? Eine 
Fluessigkeit ? Der Motorblock ? Falls es eine Gastemperatur gemessen 
werden soll, die Temperatur eines dynamischen Gases in einer 
Waermekraftmaschine, so ist das wertloser Aufwand, denn die 
Gasgleichungen sind bekannt. Adiabatische Kompression... alles bekannt. 
Temperaturen waehrend der Explosion kann man so eh nicht messen, so ganz 
nebenbei.

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> genau in dieser zeit muss der Wert der Temperatur ausgelesen werden

Wieso genau in dieser Zeit? Das Messen der Einschaltdauer belastet den 
Microcontroller, wenn man es mit Timer und Interrupts macht (z.B. Input 
Capture), mit beispielsweise 5us per Messung. Damit ist die CPU zu 
0,001% ausgelastet - man hat also noch reichlich Leistung frei, 
jederzeit was anderes zu machen. Die 1-Wire-Kommunikation kann man 
problemlos nebenher laufen lassen.

Autor: Klaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh mann, wollt Ihr ihn nicht verstehen ? Er meint dass die Messabfrage 
750 mS CPU Zeit verheizt. Vermutlich will er einfach nur Raumtemperatur 
messen (-10 - 60 °C). Also: Nimm den angesprochenen Sensor, das haut 
alles locker hin. Tss, immer diese 
IT-Einmal-mit-der-Kirche-ums-Dorf-Denker... Ein Wunder dass da nicht 
mehr verhungern, so ein Einkaufszettel kann echt komplex sein :-)

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nimm den angesprochenen Sensor, das haut alles locker hin.
Ich habs jetzt nicht nachgeschaut, aber wenn man für den DS1820 über 2ms 
zum auslesen benötigt, haut das bei ihm nicht hin, da er ja nur 2ms Zeit 
hat.
Wie schon angesprochen würde ich mir da aber auch überlegen das Programm 
grundsätzlich umzubauen (Interrupt gesteuert?). Hast du nicht vielleicht 
noch ein Hardware I2C Bus an deinem µC? Da könntest du doch einefach 
einen LM75 nehmen und die Kommunikation mit dem Sensor läuft im 
Hintergrund ab (über Interrupts).

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Da könntest du doch einefach einen LM75 nehmen und die Kommunikation mit dem 
Sensor läuft im Hintergrund ab (über Interrupts).

Wenn er lernen würde, mit Interrupts zu programmieren (was doch wohl 
eine Selbstverständlichkeit ist), gilt das Gleiche für 1-Wire und 
DS18B20. Es dauert zwar inklusive Conversion rund 750ms, den 
1-Wire-Sensor mit 12bit auszulesen. Aber in diesen 750ms muss man den 
Microcontroller nur jeweils ein paar us lang am Stück und ohne 
Unterbrechung mit 1-Wire-Protokoll-Aufgaben beschäftigen. Zwischen den 
Bits kann man Pausen machen und die einzelnen Bitmuster bestehen fast 
nur aus "Luft" (0 und 1 sind mindestens 60us lang, wobei man die 
eigentliche Arbeit in 2us unterbringen kann, wenn man das Timing 
ausreizt - der Rest ist Leerlauf). Von den 750ms kann er also ca 749ms 
mnutzen, um andere Aufgaben zu erledigen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.