Hat wer Erfahrung mit dem internen Temperatursensor der Atmegas 168/328
?
Mein "Problem" (eigentlich frag ich nur der Interesse halber) ist, dass
bei meinem aktuell benutzten 168 der Temperaturoffset bei schmalen ~30
°C liegt. Das Datenblatt sagt aber eigentlich sollten es maximal 10 °C
sein. Ist das normal? Da bin ich ja mit ner 1N4148 defaultmäßig genauer.
Mich interessiert eh nur die ungefähre Temperaturänderung, ich frag hier
wirklich nur interessehalber.
1
#include<avr/io.h>
2
#include<stdlib.h>
3
#include"adc.h"
4
#include"lcd.h"
5
6
intmain(void)
7
{
8
// insert your hardware initialization here
9
// setUp ADC, Parameter siehe adc.h/.c
10
// Prescaler: 128, ADLAR aus, Refquelle: 1.1V Bandgap
11
adcInit(128,0,3);
12
// andere Initialisierungen
13
lcd_init(LCD_DISP_ON);
14
lcd_clrscr();
15
lcd_puts_p(PSTR("Temperatur: "));
16
17
charvalueToPrint[5];
18
19
for(;;){
20
// insert your main loop code here
21
22
dtostrf(ADC*1100.0/1024.0-314.0+25.0,
23
5,
24
2,
25
valueToPrint);
26
lcd_gotoxy(13,0);
27
lcd_puts(valueToPrint);
28
adcReadMittel(8,10);// von www.microcontroller.net
In jedem AVR Datenblatt steht, frei Übersetzt:
"Verwende die 2 Punkt Kalibrierung!"
Tipp:
Tue das!
Ursache deiner Fehlmessung:
Der Sensor liegt 10% daneben
Deine 1,1V Referenz liegt 10% daneben.
Das kann sich bei manchen fast ausgleichen, bei dir scheint es eher
andersrum zu gehen.
Arduino F. schrieb:> Ursache deiner Fehlmessung:> Der Sensor liegt 10% daneben> Deine 1,1V Referenz liegt 10% daneben.
10% + 10% macht bei mir Pi mal Daumen 20%. Bei mir ists ca 30 ° zu hoch,
bzgl. der Raumtempertur hier sind das > 100% daneben.
Arduino F. schrieb:> In jedem AVR Datenblatt steht, frei Übersetzt:> "Verwende die 2 Punkt Kalibrierung!"
Ich weiß, so genau brauch ichs aber gar nicht. Ich muss quasi nur grob
schätzen...und zwar die Temperaturänderung und da genügt mir der interne
Sensor, der Offset kann mir hierbei sogar egal sein. Mich verwundert nur
grade der große Offset weil er nicht zum Datenblatt passt, daher wollte
ich nur wissen ob der normal/erwartungsgemäß ist.
M. K. schrieb:> 10% + 10% macht bei mir Pi mal Daumen 20%.
Da du deine Messgrößen nicht additiv verarbeitst, sonden eher die
Multiplikation verwendest, multiplizieren sich die Abweichungen auch
eher.
Die Eigenerwärmung auch schon mit eingerechnet?
so ca 3 bis 5°C sind da auch immer zu erwarten.
M. K. schrieb:> der Raumtempertur hier sind das > 100% daneben.
10 * 10 = 100
M. K. schrieb:> daher wollte> ich nur wissen ob der normal/erwartungsgemäß ist.
Ist er.
-------
Ich verwende den internen Sensor gerne um OSCAL Values zu ermitteln.
Dazu wird eine Lookup Tabelle (Array) ins Flash oder EEPROM gelegt, und
gut ist.
Die Abweichungen von Aref und Sensor interessieren mich da nicht.
Meine Ansicht:
Du sägst Sägemehl.
Arduino F. schrieb:>> 10% + 10% macht bei mir Pi mal Daumen 20%.>> Da du deine Messgrößen nicht additiv verarbeitst, sonden eher die> Multiplikation verwendest, multiplizieren sich die Abweichungen auch> eher.
Dann sinds 21%, soviel mehr also auch nicht.
Arduino F. schrieb:> M. K. schrieb:>> der Raumtempertur hier sind das > 100% daneben.> 10 * 10 = 100
Das üben wir aber noch. 10% * 10% sind nicht 100% sondern 1%: 10%*10% =>
0.1 * 0.1 = 0.01 => 1% ;)
Arduino F. schrieb:> Die Eigenerwärmung auch schon mit eingerechnet?> so ca 3 bis 5°C sind da auch immer zu erwarten.
Yo, die würde jetzt auch nicht soviel ändern. Wie gesagt, im Datenblatt
steht eigentlich dass der Sensor auf ±10 °C genau sein soll, mit meinen
+30 °C bin ich hier schon um die Faktor 2 neben dem maximalen Fehler.
Das verwunderte ;)
Arduino F. schrieb:> Ist er.
OK
M. K. schrieb:> Das üben wir aber noch. 10% * 10% sind nicht 100% sondern 1%: 10%*10% =>> 0.1 * 0.1 = 0.01 => 1% ;)
Da denken wir aber nochmal genau nach... ;)
Wenn das so wäre könnte man ja superhohe Genauigkeiten durch einfaches
Hintereinanderschalten von toleranzbehafteten Stufen erreichen. Die
richtige Lösung steht 1 drüber. (1+10%)*(1+10%)=1,21 -> 21%.
Meiner Meinung nach ist der Temperaturmesswert unabhängig von der
Toleranz der 1.1V, da diese sowohl als ADC-Referenz als auch als
Temperatursensor-Referenz verwendet wird.
Ansonsten:
Es werden hier unterschiedliche Werte verglichen. +/- 10°C hat nichts
mit +/- 10% zu tun und kann auch nicht (direkt) miteinander verrechnet
werden. Sollte die Ungenauigkeit der 1.1V Referenzspannung tatsächlich
den Messwert beeinflussen, dann würde bereits eine Toleranz von 2% eine
Temperaturänderung von 20°C bewirken, da: 1mV entspricht ca. 1°C:
"The voltage sensitivity is approximately 1 mV/°C" (datasheet 24.8).
Kann es sein, dass Dein Messwert gar nicht so weit daneben liegt, weil
der ATmega sich in Deiner Schaltung bereits selbst erwärmt?
Um das auszuschliessen, könntest Du die Schaltung eine Weile unbestromt
lassen (> 30min), dann einschalten und den 2. Messwert speichern und
anzeigen.
Gruß, Stefan
Bernd S. schrieb:> Da denken wir aber nochmal genau nach... ;)
Ich habe nur gesagt, dass 10% * 10% nicht 100% ergibt, ich habe nicht
gesagt, dass die Multiplikation richtig ist, vergleiche Beitrag 3 ;)
Du hast natürlich völlig recht ;)
Arduino F. schrieb:> Mit der Formel stimmt was nicht!
Hab nur vom Datenblatt abgeschrieben: 314 mV sollen 25 °C entsprechen
und die Empfindlichkeit liegt bei 1 mV/K. Ich rechne also den ADC-Wert
in eine Spannung um (ADC*1100.0/1024.0), ziehe ich 314 mV
(ADC*1100.0/1024.0-314) ab und addiere 25 °C.
Das VREF hab ich auch gemessen, liegt bei 1,064 V. Erklärt die
Abweichung also nicht komplett.
Stefan K. schrieb:> Kann es sein, dass Dein Messwert gar nicht so weit daneben liegt, weil> der ATmega sich in Deiner Schaltung bereits selbst erwärmt?> Um das auszuschliessen, könntest Du die Schaltung eine Weile unbestromt> lassen (> 30min), dann einschalten und den 2. Messwert speichern und> anzeigen.
War meine erste Idee heute morgen gewesen, hat keine Änderung bewirkt.
Eigenerwärmung ist es also nicht.
Arduino F. schrieb:> Wenn du die Adc Klasse auch noch sehen möchtest, dann gerne..> Aber du kannst auch einfach deine Werte/AdcRoutinen da einsetzen.
Nö, die Adc-Klasse ist nicht erforderlich. Coole Sache auf jeden Fall,
danke dafür ;)
Stefan K. schrieb:> Meiner Meinung nach ist der Temperaturmesswert unabhängig von der> Toleranz der 1.1V, da diese sowohl als ADC-Referenz als auch als> Temperatursensor-Referenz verwendet wird.
Das ist falsch. Die 1.1V-Referenz wird nur als Referenzspannung für die
Temperaturmessung benutzt. Der Temperatursensor selber (also der andere
Eingang der ADC) wird davon in keinster Weise behelligt.
Sprich: die zulässigen relativen Fehler von Sensor und Referenz sind in
erster Näherung völlig unabhängig voneinander (müssen also schlicht
addiert werden -> 20%).
In zweiter Näherung allerdings sind sie über die gemeinsame
Chip-Temperatur und die ebenfalls gemeinsame Verorgungsspannung
gekoppelt. Wie sich das auswirkt, kann man durch Einrechnung der drei
relevanten typischen Kennlinien ermitteln. Also Referenzspannung vs.
Temperatur und vs. Versorgung sowie Sensor vs. Versorgung. Was da am
Ende rauskommt, sind aber Peanuts im Verhältnis zum zulässigen
Grundfehler. Wenn ich mich nicht verrechnet habe, ergeben sich über den
gesamten Bereich der zulässigen Spannung und Temperatur nur knappe zwei
Extraprozentpunkte, sind wir also bei 22%.
Davon ist nicht mehr sehr weit bis zu den ANGEBLICH beobachteten 30%.
Nach meiner Erfahrung allerdings landet man in der Realität bei den AVR8
eher irgendwo im Bereich deutlich unter 5%. Man muss bloß richtig
rechnen, nämlich in Kelvin. Wie es Physiker, Elektroniker und überhaupt
alle tun, die irgendetwas von der Sache verstehen, mit der sie da
hantieren...
Selbst wenn man weder Physiker noch Elektroniker noch sonst irgendwer
mit einem Hauch einer Andeutung einer Ahnung ist, aber immerhin
wenigstens über grundlegendste mathematische Fähigkeiten verfügt, sollte
einem immer noch der dramatische Sprung (inclusive Singularität) des
ANGEBLICHEN Fehlers in der Umgebung von 0°C (oder im Falle von Amis
auch 0°F) ordentlich auffallen. Und Leute mit einer minimalen
Eigenintelligenz würden sich dann fragen: wo kommt das eigentlich her,
da kann doch irgendwas grundsätzlich nicht stimmen in meinem Ansatz zur
Betrachtung der Messwerte...
M. K. schrieb:> Hat wer Erfahrung mit dem internen Temperatursensor der Atmegas 168/328> ?
"Wer hat Erfahrung" oder "hat jemand Erfahrung"
> Mein "Problem" (eigentlich frag ich nur der Interesse halber)
Ich frage mit e am Ende.
Wenn Du mit dem internen Sensor die Umgebungstempertur messen willst,
kann das nicht funktionieren: Der Sensor befindet sich auf dem Die des
Controllers und wird sehr fix auf Stromänderungen des µC reagieren. Wir
reden hier nur um einige oder einige zehn Milliwatt, aber diese fallen
in direkter Nähe des Sensor auf einer sehr kleinen Fläche an. Durch das
umgebende Gehäuse dauert es recht lange, bis diese an die Umwelt
abgegeben werden.
Im Datenblatt finde ich dazu keinen eindeutigen Hinweis, meine aber, es
in einer Apllikationsschrift von Atmel gesehen zu haben.
Ich habe hier die Tage eine Temperaturmessung mit einem niederohmigen
NTC aufgebaut. Da erlaube ich mir, dessen Speisestrom nur für die Zeit
der Messung aufzuschalten, um Eigenerwärmung auszuschließen.
Manfred schrieb:> M. K. schrieb:>> Hat wer Erfahrung mit dem internen Temperatursensor der Atmegas 168/328>> ?> "Wer hat Erfahrung" oder "hat jemand Erfahrung"
Da hat wer ganz viel deutsch, wa
Manfred schrieb:> Wenn Du mit dem internen Sensor die Umgebungstempertur messen willst,> kann das nicht funktionieren: Der Sensor befindet sich auf dem Die des> Controllers und wird sehr fix auf Stromänderungen des µC reagieren. Wir> reden hier nur um einige oder einige zehn Milliwatt, aber diese fallen> in direkter Nähe des Sensor auf einer sehr kleinen Fläche an. Durch das> umgebende Gehäuse dauert es recht lange, bis diese an die Umwelt> abgegeben werden.
Kann ich so nicht bestätigen. Lasse ich den ATmega48PA aus obigem Test
mit minimalem Strom von 0.4 mA, d.h. 2.0 mW, laufen, liefert der ADC
332, mit hohem Strom von 5.1 mA, d.h. 25.5 mW, sind es 333, gerade mal 1
mehr.
Diese Datenblattangabe von 314 mV bei 25 °C ist einfach irreführend,
auch wenn darüber "Typical Case" steht.
Hi
S. Landolt schrieb:> Diese Datenblattangabe von 314 mV bei 25 °C ist einfach irreführend,> auch wenn darüber "Typical Case" steht.
Wenn bei 10 Millionen µC im Schnitt 314mV gemessen wurden, ist Das der
Duchschnitt.
Daß dort dann einzelne Exemplare (massiv) abweichen, lässt Herr Gauß
erwarten.
Warum aber Du gerade nur extrem abweichende Exemplare hast, gleicht
einem Lotto-Gewinn :)
Nimm Es, wie ein Mann:
Es ist so, mach was draus!
MfG
Mal so als neuer Gedanke, falls Eigenerwärmung als Ursache
ausgeschlossen werden konnte:
Hast du womöglich aus einer dubiosen Quelle gekauft (ebay, Chinamann),
welche die Chips aus dem Müllcontainer der Fertigung gekratzt und
billigst in Umlauf gebracht hat?
Soll ja schon vorgekommen sein, und nicht so unwahrscheinlich, da du
wohl nur den einen Chip hast. ;-)
S. Landolt schrieb:>> womöglich aus einer dubiosen Quelle>> Also wo M. Köhler sein Exemplar her hat, muss er beantworten. Meine> kommen von Reichelt.
Da kommen meine auch her. Für mich ist eh alles geklärt, Abweichungen
von 30 Grad und mehr können durchaus vorkommen. Ich dachte nur, dass
bei den 10 Grad schon alle Fehlerquellen enthalten sind. Sind sie
anscheinend nicht, ok. Damit ist für mich alles klar.