Forum: Mikrocontroller und Digitale Elektronik ADC Temperatur-Messung am T-Sensor LM335


von Cimbom G. (cimbomgs)


Lesenswert?

Hi,

ich versuche die Temperatur mit Hilfe von LM335-Baustein am ADC zu 
messen aber bekomme ganz falsche Ergebnisse.

mit einem Timer messe ich alle 20 us den Wert am ADC und speichere es in 
einem Array.
Wenn ich mir die Werte anschaue:

48780
48784
48791
46747
...

Das Problem ist, es ergibt eine Temperatur von ca. 39 °C
( Vref: 3,3 V; ADC: 12 Bit -> 48780 *3,3 V / 2^12 ~ 39)
und das kann einfach nicht sein. Im zimmer kann es nicht wärmer als 25°C 
sein.

Wenn ich die Gleichung ansehe, dann fällt mir auf dass die Einheit Volt 
rauskommt. Wie ist die Umrechnung in °C?

letzte Frage:
interne Vref ist 3,3 V. Wie/wo kann ich sehen, dass wirklich Vref=3,3V 
genommen wird?

Gruß
Cimbomgs

von helmi (Gast)


Lesenswert?

>Wenn ich die Gleichung ansehe, dann fällt mir auf dass die Einheit Volt
>rauskommt. Wie ist die Umrechnung in °C?

umrechnung ist 10mV/K

also bei 25Grad Raumtemperatur 2.98V

(273+25) * 10mV = 2.98V

Gruss Helmi

von Andreas K. (a-k)


Lesenswert?

Ein 12bit ADC liefert Werte von 0..4096. Zumindest wenn das Ergebnis 
rechtsbündig im Register liegt.

Der LM335 liefert 10mV pro K, das sind 2,73V bei 0°C. Und ca. 3,3V bei 
30°C. Wenn er kann. Wenn du also nicht grad am Nordpol lebst, sind 3,3V 
am obere Ende des Widerstands am LM335 zu wenig.

Und wie schon richtig feststellst, kommt bei Volt/N immer noch Volt 
raus, nicht Temperatur. Bei 2,73V sollte der ADC 2,73V/3,30V * 4096 = 
3388 anzeigen.

von Cimbom G. (cimbomgs)


Lesenswert?

hmmm..

ADC dürfte doch garnicht mehr anzeigen als die Referenzspannung.
Warum bekomme ich einen Wert von 39 V :-( ?

von Andreas K. (a-k)


Lesenswert?

Fang mal vorne an und finde raus, wie du den ADC dazu bringst, Werte im 
Bereich 0-4095 zu liefern. Oder alternativ eine saubere Begründung, 
warum nicht. Vorher ist Herumraterei witzlos.

> Warum bekomme ich einen Wert von 39 V :-( ?

Hast du dir selber schon beantwortet.

von Daniel D. (bademeister)


Lesenswert?

Eben, wie sieht denn z.b. die Routine aus um den Wert einzulesen.
Hast du evtl ne Schleife um nen Mittelwert zu bilden? Oder kommen die 
Werte unmittelbar vom ADC?

von Cimbom G. (cimbomgs)


Lesenswert?

> Oder kommen die Werte unmittelbar vom ADC?

die Werte kommen vom ADC.

von Cimbom G. (cimbomgs)


Lesenswert?

ich benutze einen Freescale Microkontroller und die Entwicklungssoftware 
ist CodeWarrior.

Unter CodeWarrior gibt es die Eigenschaft "Processor Expert", was mir 
den Code für Pins,Timer,ADC usw. selber erzeugen kann.
Dann brauche ich nur in meinem Hauptprogramm die gewünschte Funktion zu 
aktivieren/deaktivieren.

Temperatur-Sensor ist am GPIOC5/ANB1 angeschlossen. Ich aktiere den 
ADC-Kanal und hole den Wert.

Wenn ich mir den Wert in Binär ansehe, dann sind die untersten 4 Bits 
immer 0. Also gehe ich davon aus, dass die Bits linksbündig in das 
Register gespeichert werden.

Ich finde nirgends die Auswahlmöglichkeit zwischen links-/rechtsbündig 
:-(

von Daniel D. (bademeister)


Lesenswert?

Hmm ich glaube du bist auf dem richtigen Weg.
Hab gerade mal nen Wert von dir genommen, die untersten 4 Stellen 
weggelassen und nach deiner Rechnung umgewandelt. Kam damit auf etwa 
24-25°C

von Daniel D. (bademeister)


Lesenswert?

Achja, ich hab bei mir beim CodeWarrior nur die Wahl zwischen 8-oder 
10-Bit rechtsbündig.

von Cimbom G. (cimbomgs)


Lesenswert?

wie bist du auf 24-25°C gekommen?

Wenn die unteren 4 Bit weggelassen werden, bleibt die Zahl 3048

3048 *3,3 V / 2^12 = 2,45 V

2,45 V / 10 mV = 245 K -> -28 °C

http://img89.imageshack.us/img89/5637/adctg3.jpg
Auf dem sind die Pin-Einstellungen zu sehen.



Ps.: Wie kann man hier Bilder einfügen?

von Cimbom G. (cimbomgs)


Lesenswert?

hmmm..
ich habe den Sensor mit Heisluftpistole erhitz aber es zeigt immer den 
selben Wert an.

Irgendetwas ist hier faul aber ich komme nicht drauf :-(



Ps.: ich vermute die Bilder kann man nur als "Dateianhang" einfügen

von Cimbom G. (cimbomgs)


Lesenswert?

eine Frage zu Referenzspannung:

wird die Referenzspannung Low/High vom Mikrocontroller eingestellt, dh. 
ist V_ref_LOW intern auf 0 Volt eingestellt und V_ref_High entsprechend 
auf 3,3 V?

Oder muss ich 2 Ports nehmen und das eine mit GRND und das andere mit 
einer Referenzspannung von 3,3 V verbinden und die Ports konfigurieren 
damit der Mikrocontroller die Referenzspannung hat?

von Daniel D. (bademeister)


Angehängte Dateien:

Lesenswert?

Cimbom Bom wrote:
> wie bist du auf 24-25°C gekommen?

Hmm, ja stimmt..hab mich wohl beim abtippen vertan.


>wird die Referenzspannung Low/High vom Mikrocontroller eingestellt, dh.
>ist V_ref_LOW intern auf 0 Volt eingestellt und V_ref_High entsprechend
>auf 3,3 V?

Laut Block Diagram meines Datenblattes wird VrefL und VrefH direkt von 
Vss und Vdd abgezweigt.

von Cimbom G. (cimbomgs)


Lesenswert?

hmm.. laut Datenblatt ist bei mir anders:

----
2.6.1.1 Single-Ended Samples
The ADC module performs a ratio metric conversion. For single ended 
measurements, the digital result is proportional to the ratio of the 
analog input to the reference voltage in the following diagram.

Single Ended Value = round ((VIN – VREFLO)/(VREFH – VREFLO) × 4096 × 8)

VIN = Applied voltage at the input pin
VREFH and VREFLO = Voltage at the external reference pins on the device 
(typically VREFH = VSS and VREFLO = VDD)

NOTE:
The 12-bit result is rounded to the nearest LSB.
The ADC is a 12-bit function with 4096 possible states. However, the 12 
bits have been left shifted three
bits on the 16-bit data bus so its magnitude, as read from the data bus, 
is now 32760.
----

hab auch die Port so eingestellt, dass VrefLO auf GRND und VrefH auf Vss 
liegt.

Vernünftigen Wert bekomme ich trotzdem nicht. So langsam drehe ich durch 
:-$

von Daniel D. (bademeister)


Lesenswert?

>VREFH and VREFLO = Voltage at the external reference pins on the device

Hast du denn da irgendeine externe Beschaltung an den entsprechenden 
Pins?

von Cimbom G. (cimbomgs)


Lesenswert?

ja habe ich..

habe auch die Spannung am T-Sensor gemessen, funktioniert alles.
Wenn ich erhitze, steigt die Spannung.

Wie ist es eigentlich, wieviel Zeit braucht der ADC für die Abtastung?
Wo kann ich abfragen, wann die Messung fertig ist?

von Falk B. (falk)


Lesenswert?

@ Cimbom Bom (cimbomgs)

>Wie ist es eigentlich, wieviel Zeit braucht der ADC für die Abtastung?

Steht im Datenblatt und hängt von deiner Einstellung des ADC ab.

>Wo kann ich abfragen, wann die Messung fertig ist?

Sicher, da gibt es Statusbits in den ADC Registern. Die MUSST du sogar 
abfragen.

MFG
Falk

von Daniel D. (bademeister)


Angehängte Dateien:

Lesenswert?

Laut deinem Bild von oben benötigt die Abtastung 0.531µs...bischen kurz 
wie ich finde..wären ja knapp 2MHz?!?

Also ich kann bei ir für den ADC ne Interrupt Routine festlegen.

von Daniel D. (bademeister)


Lesenswert?

Achso und ja, es gibt in nem Statusregister auch ein entsprechendes bit.

von Cimbom G. (cimbomgs)


Lesenswert?

Daniel Dyla wrote:
> Laut deinem Bild von oben benötigt die Abtastung 0.531µs...bischen kurz
> wie ich finde..wären ja knapp 2MHz?!?

wenn die ADC-AbtastFrequenz 5,33 MHz ist, ist 2 MHz ja kein Problem.

von Cimbom G. (cimbomgs)


Lesenswert?

Ok ich habe die Conversion-Time erhöht UND JETZT GEHT'S.

Verstehe ich nicht, bei 5,33 MHz dürfte es doch kein Problem sein oder 
sehe ich das falsch?

von Cimbom G. (cimbomgs)


Lesenswert?

Habt vielen Dank für Eure Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.