PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temp: LM61 richtig auswerten



xlanhackerx
22.11.2009, 15:47
Hallo liebe Community.

Ich habe seit einigen Tagen eine handvoll LM61 Tempsensoren bei mir liegen und würde diese gerne über die ADC Channel eines Atmega32 einlesen um so eine Temperatur über ein Display auszugeben !!

Hier einmal der Link zu dem Datenblatt des LM 61 Temperatursensors. (www.national.com/ds/LM/LM61.pdf)

Ich habe eines der Module ganz simple an ADC0 angeschlossen:

+5V Versorgungsspannung an +VS, GND an GND und Vo an ADC0.

Jetzt ist meine Frage: Sollte ich bei der Wandlung eine Referenzspannung von 2,56V nehmen oder 5V ???

Wäre euch echt dankbar...


Mfg. Oliver

Hubert.G
22.11.2009, 16:52
Für die Auflösung ist 2,56V Referenz besser. Kondensator an AREF und Spannung an AVCC nicht vergessen.

xlanhackerx
22.11.2009, 18:06
Hey vielen Dank..
Ich habe die Kondensatoren bereits angeschlossen gehabt !

Jetzt habe ich noch eine Frage bezüglich der Umrechnung in Grad.

Ich messe nun meinen ADC0 und bekomme verschiedene Werte.

Ich dachte nun an folgende Umrechnung:

(gemessener Wert - 0.6)/10

Ist dies richtig ??

Ich ziehe die 0.6 vom gemessenen Wert ab damit ich das Offset des LM61 beseitige. Die Teilung durch 10 mache ich nur um so auf ein 2stellige Zahl zu kommen !!!!

Jetzt habe ich das Problem, dass meine Idee nicht hinhaut denn laut Ausgabe hätte ich einen TempWert von 33 Grad !!!!

Vielleicht könnte mir da jemand noch helfen ?

Danke schonmal...

Mfg. Oliver

damfino
22.11.2009, 18:36
Die Berechnung musst anders durchführen:
Du hast 2,56V Referenzspannung, die misst der ADC normalerweise in 1024 Schritten, und man bekommt daher keine Volt oder Temperatur raus, sondern nur die Schritte. Der Offset ist egal, das berücksichtigt die Berechnung
+25°C entsprechen 850mV lt dem Datenblatt.
daher 1024/2,56 * 0,85= 340, ein ADC Wert von 340 entspricht 25°C.
Für eine Ausgabe in °C muss man immer erst den ADC Wert entsprechend umrechnen.
Jetzt kommt der Offset ins Spiel der entspricht nach obiger Formel einem Wert von 240, 1°C enspricht 4 Schritten.
=> 1024/2,56*,85=340, =>340-240=100, =>100/4=25°C

Als Vergleich dazu der Wert von 85°C, =1,45V:
1024/2,56*1,45=580
=> 580-240= 340, =>340/4=85°C
=> ADC-Offset, Ergebnis /4 = °C


LG

xlanhackerx
22.11.2009, 19:26
Hey vielen Dank.
Hab doch gewusst dass ich was falsch mache...
Also heißt das eigentlich dass ich folgendes machen müsste:

ADC messen: Wert entspricht z.B. 300

jetzt ziehe ich 240 davon ab: 300-240 = 60
und dieses ergebniss teile ich durch: 60/4 = 15°C

adcval = (adcval-240)/4;

Ist dieser Rechenschritt richtig???

Danke nochmal..

Lg

damfino
22.11.2009, 22:22
Ja, so passt es.
Jetzt kannst noch aussuchen ob dir eine 1° Auflösung genügt, oder ob du mit Fließkomma, bzw mit ein bisschen herumtüfteln mit Integervariablen, auf 0,25° genau die Temperatur anzeigen willst.

LG

xlanhackerx
23.11.2009, 14:46
Hey vielen Dank..
Ja die 1 Grad-Auflösung reicht mir eigentlich, vielleicht werde ich später eine genauere Auflösung wählen...

Ich habe einen LM61 an einem ca. 12 M langem Kabel gelötet um damit die außentemperatur zu messen... was ich nicht bedacht hatte, war dass die Leitungslänge das Messergebniss verfälscht..

Heute kam mir die Idee einfach eine Emitterfolgeschaltung zu dem LM61 dazu zu bauen um so ein relativ genaues Ergebniss zu erzielen..

Ich habe gelesen dass bei dieser Schaltung die Ausgangspannung immer ca. 0,99 V weniger ist als die Eingangspannung..

Rechne ich dies nun mit einem gerundeten Wert von 1V ergibt dies folgendes.
1024/2,56 * 1,00= 400.

Muss ich jetzt diesen Wert vom eigentlich gemessenen abziehen ??

Vielleicht könnte mir da jemand noch helfen !!

Vielen Dank schonmal für die sehr hilfreichen Tipps..

Lg.. Oliver

damfino
23.11.2009, 16:11
Bei 1V weniger kannst erst ab ca 45° messen, das bringt gar nichts.

Welche Abweichung bringt das lange Kabel? Vielleicht ist die so klein dass man es gar nicht merkt. Die Abweichung wird ausserdem linear sein, mit einem 2. Thermometer kann man korrekt messen und den Unterschied im Offset berücksichtigen.

xlanhackerx
23.11.2009, 16:20
Hi also die Abweichung liegt bei fast 5 Gad wobei ich erwähnen sollte dass ich ein professionelles geschirmtes 4 Adriges Kabel verwende welches normalerweise im Industriebereich eingesetzt wird..

Meinst du dass ich die Schaltung trotzdem verwenden kann bloß nicht nochmal umrechnen brauche ?

Eigentlich war meine Frage vorhin falsch, denn wenn ich 1V weniger messe muss ich doch die 400 dazu addieren und nicht abziehen !!!

damfino
23.11.2009, 17:02
Wie gesagt, mit 1V weniger Spannung am ADC kann man erst Temperaturen messen die man bei uns auch nach einer echten Klimaerwärmung kaum erreichen wird ;)

Die Genauigkeit vom LM61 ist auch nicht so toll, es ist sicher ausreichend zu jedem Ergebnis einfach die 5° aus dem Leitungsverlust zu addieren, dann kann man immer noch bis mindestens minus 25°C messen.

Geschirmte Kabel dämpfen stark, im Privatbereich braucht man die meistens gar nicht. Es ist zB üblich in Europa geschirmte Netzwerkkabel zu verwenden, in den USA verwendet man eher ungeschirmte, bei mir geht es auch mit Gigabit ungeschirmt quer durchs Haus, teilweise parallel zu Stromleitungen, und alles geht bestens.
Daher schließe die Schirmung nur an wenn es wirklich notwendig ist, und dann auch nur auf einer Seite.

xlanhackerx
23.11.2009, 17:59
Ok, also ich habe mal den LM61 direkt am ADC hängen gehabt und eine Temperatur von 17 Grad gemessen.. gleiche Stelle, neues Kabel 15m lang ohne Schirmung: gemessene Temperatur: 15-16 Grad es schwankt heftig..

Ich werde wohl noch einen 100NF Kondensator zwischen GND und ADC hängen... vielleicht flackert es dann nicht mehr so !!!

Ich werde wohl ohne die Schaltung nun arbeiten..

Frage: Wenn ich nun doch eine Kommazahl haben möchte z.B. 16,4 Grad inwiefern muss denn die Formel geändert werden ?? Ich bekomm ja jetzt nur 2 Stellige Zahlen !!!

mein bisheriger code:


int adcval;
char buffer[10];

adcval = Messen(0);
adcval = (adcval-240)/4;

itoa(adcval,buffer,10);
lcd_puts(buffer);


Dank dir....

damfino
23.11.2009, 19:01
Der Sensor geht auch nur +/-3 bis +/-4° genau, da werden Schwankungen nicht ausbleiben.

Die Auflösung kann mit diesen Werten am ADC höchsten 0.25°C betragen, am einfachsten geht es wenn man adcval als float nimmt. Ob man dass dann mit itoa auf das LCD bekommt weiss ich nicht. Buffer müsste dann buffer[4] oder buffer[5] sein damit man es auf 2 Stellen genau anzeigt.

Wenn man mit Ganzzahlen rechnen und trotzdem die Kommastellen sehen will wird es komplizierter, man muss Vor- und Nachkommstelle getrennt ausrechnen. Ich habe es vor kurzem für meine Akkuüberwachung so ausgeführt weil ich aus Performancegründen (und aus Spass) auf Float Variablen verzichten will und kann es raussuchen wenn es notwendig ist.

xlanhackerx
23.11.2009, 20:17
Ok ich habe hier nun eine Lösung gefunden bei der ich angeben kann wieviele Ziffern vor und nach dem Komma sind. Die Nachkommastelle wird gerundet !!



float adcval;
char buffer[5];

adcval = Messen(0);
adcval = (adcval-240)/4;
dtostrf(adcval,2,1,buffer); //(zahl,sges,snach,buffer)
lcd_puts(buffer);


Die funktion benötigt die stdlib.h !!
So bekomme ich z.B eine Anzeige von 16,5 °C.

Danke nochmal für alles..

Lg...

damfino
24.11.2009, 10:18
Gut das es jetzt funktioniert!
Diese Funktion muss ich mir merken, programmiere erst seit Oktober (nach 5 Jahren Pause seit Miniprogrammen beim Studium) und kenne noch nicht alle Feinheiten in C.

LG