Forum: Mikrocontroller und Digitale Elektronik Temperaturmessung mit Atmega32 und KTY 81-121


von Ben L. (joee1)


Lesenswert?

Hallo,

ich versuche mit einem Atmega32 die Temperatur zu ermitteln. Als Sensor 
soll ein KTY 81-121 herhalten. Ich habe schon einige Ergebnisse, leider 
verstehe ich die ganze Sache nicht richtig.

Angeschluss:

+5V---Widerstand---KTY81---GND
                 |
                 |
              Atmega32 PA.0

Nun zu meiner ersten Frage, Dimensionierung des Widerstandes.

Ich habe in einigen Beiträgen gelesen man soll einfach einen 4,7KOhm 
wdst. benutzen. Wie kommt man darauf? Das kann man doch so pauschal 
nicht sagen, oder doch?

Andere User benutzen anscheinend diese Formel:

(Rϑ_min + Rϑ_max) / 2

Wie kommt man denn auf diese Formel?


Naja wie Ihr seht kapier ich es noch nicht so ganz.

Nun, wie ich mir die Funktion vorstelle:

Ich möchte gerne die Interne Referenzspannung des Atmega zur Messung 
benutzen. Leider weiss ich nicht wie man den Vorwiderstand berechnet. 
Ich denke das ich dann noch eine Umrechnung im Programm machen muss, es 
wird also nicht gleich der richtige Temperaturwert vom AD-Wandler 
übergeben.

Mit diesem Code kann ich sehen das der KTY auf Temperatur reagiert, 
allerdings keine richtige Temp. ausgibt (83°).
1
'***********Compiler Informationen****************************
2
$regfile = "m32def.dat"                                     '*
3
'Taktfrequenz 16MHz                                           '*
4
 $crystal = 16000000                                        '*
5
'Baudrate für UART                                           '*
6
 $baud = 2400                                               '*
7
'*************************************************************
8
9
'**************************************
10
'********* Datenrichtungsregister *****
11
'**************************************
12
Ddra = &B00000000
13
Admux = &B01100000
14
Adcsr = &B11100010
15
16
17
do
18
    W = Adch
19
    Print "Temperatur: " ; W ; " Grad"
20
    waitms 1000
21
loop



Über eine ausführliche Hilfe, vorallem bei der Dimensionierung des 
Vorwiderstandes, würde ich mich sehr freuen.


Vielen Dank
Joe

von Anja (Gast)


Lesenswert?

Ben Lex schrieb:
> Wie kommt man denn auf diese Formel?

Mach mal folgendes:
Nimm einfach einen Widerstand (z.B. die 4,7K) und rechne hierfür für 
alle möglichen Temperaturen die Eingangsspannung am ADC und den 
ADC-Wandlungswert sowie die Verlustleistung am Sensor und daraus die 
Eigenerwärmung (mittels Wärmewiderstand des Sensors). Beobachte die 
Empfindlichkeit (ADC-Digits je Kelvin) und die Linearität sowie die 
Eigenerwärmung.

Dann nimmst Du den nächstkleineren und den nächstgrößeren Wert und 
rechnest wieder.

Zum Schluß suchst Du dir diejenige Berechnung heraus die den für Dich 
optimalen Widerstand ergibt: Also entweder den der die höchstmögliche 
Empfindlichkeit in Messbereichsmitte oder an der tiefsten Temperatur 
ergibt (falls Du im Kühlschrank messen willst) oder den der die 
geringste Eigenerwärmung des Sensors oder die beste Linearität zur Folge 
hat.

Ben Lex schrieb:
> Ich möchte gerne die Interne Referenzspannung des Atmega zur Messung
> benutzen.

Gaaanz schlecht: ein ADC kann immer nur das Verhältnis zwischen 2 
Spannungen messen aber nicht sehr gut den absoluten Wert.
Wenn Du extern die 5V für die Sensorversorgung verwendest dann solltest 
Du dieselben 5V auch als Referenz verwenden. Der absolute Wert der 
Referenzspannung geht dann nicht mehr als zusätzlicher Messfehler ein.

Gruß Anja

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Der Atmega hat einen 10-bit AD-Wandler, es gibt also 2^10 mögliche 
Wandlungsergebnisse, anders gesagt liegt der Wertebereich zwischen 0 und 
1023.

Dieser Bereich deckt den Spannungsbereich zwischen 0 Volt und der 
Referenzspannung ab.

0 Volt ergeben ein Wandlungsergebnis von 0.
Vref ergibt ein Wandlungsergebnis von 1023.

Der Widerstand und der Sensor bilden zusammen einen einfachen 
Spannungsteiler. Je nach Temperatur liegt am AD-Wandler eine 
entsprechende Spannung an, aus der dieser einen bestimmten Wandlungswert 
bestimmt.

Jeder Wert, der aus dem Wandler kommen kann, entspricht einer bestimmten 
Temperatur. Den Vorgang, hier die korrekte Zuordnung herzustellen, nennt 
man Kalibrierung.

Und das ist es, was an der Software noch fehlt. Eine Funktion, die aus 
dem Wandlungsergebnis (Ganzzahl zwischen 0 und 1023) die Temperatur 
(Zahl mit eventuell einigen Nachkommastellen) berechnet.

Dafür gibt es zwei verschiedene Möglichkeiten:

1. Man erstelle eine Tabelle, die für jedes mögliche Wandlungsergebnis 
die Temperatur enthält.
2. Berechnung der Temperatur mit Mathematik.

Üblicherweise wählt man die Berechnung.

Dafür muss man den mathematischen Zusammenhang natürlich kennen. Diesen 
erfährt man entweder durch Nachschlagen im Datenblatt und Nachrechnen 
der eingesetzten Schaltung oder durch Anlegen verschiedener Temperaturen 
an den Sensor und Auslesen der Wandlerergebnisse mit anschließender 
Interpolationsrechnung.


Grüße,

Peter

von Ben L. (joee1)


Lesenswert?

Hallo,

Vielen Dank für eure Antworten!

Habe jetzt ein (hoffentlich) brauchbaren Lösungsweg gefunden.
Die Schaltung ist die gleiche wie oben beschrieben, allerdings benutze 
ich jetzt als Referenzspannung die 5V die auch der KTY bekommt.

Vorwiderstand wurde über die Formel
 bestimmt. Rϑ_min 0°C = 807 Ohm, Rϑ_max = 1679 Ohm (sind Werte meines 
Sensors)

Also ist der Vorwiderstand = 1243 Ohm.

Durch den 10Bit AD-Wander erhalte 1024 Schritte für Vref 5V. Somit:

Als letztes habe ich noch die Software mit Berechnung erstellt und ich 
bekomme die gleiche Temp. als Ergebnis, die auch mein Zimmerthermometer 
anzeigt.
1
 
2
       Temp = Getadc(0)
3
       Temp1 = Temp * 4.88281
4
       Temp1 = Temp1 / 100
5
6
      
7
      'Displayposition Zeile 2, Position 1
8
       Locate 2 , 1
9
      'Display-Textausgabe
10
       Lcd "Temperatur: " ; Temp1 ; " C"
11
12
       Print "Analogwert: " ; Temp
13
       Print "Temperatur: " ; Temp1 ; " Grad"


Ich hoffe das war richtige Weg, sollte ich einen Fehler gemacht haben, 
würde ich mich freuen wenns hier gepostet wird.

Danke nochmals für die Unterstützung

Joe

von Anja (Gast)


Lesenswert?

Ben Lex schrieb:
> Ich hoffe das war richtige Weg,

nicht ganz. Bei 0 Grad hast du ja nicht 0 mV am Eingang sondern etwa 2 
V. Die mußt Du natürlich als Offset abziehen. Bei Max-Temperatur hast Du 
etwas weniger als 3V. Daraus resultiert die Steilheit 
(Dreisatz-Rechnung) und damit die Auflösung (ca 200 ADC-Schritte 
zwischen 0 Grad und Max-Temperatur).

Ferner hast Du etwa 5 mW Verlustleistung am Sensor. Bei 200K/W 
angenommenem Wärmewiderstand des Sensors ergibt sich eine Eigenerwärmung 
um ca 1K bei Windstille.

Gruß Anja

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.