www.mikrocontroller.net

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


Autor: Ben Lex (joee1)
Datum:

Bewertung
0 lesenswert
nicht 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°).

'***********Compiler Informationen****************************
$regfile = "m32def.dat"                                     '*
'Taktfrequenz 16MHz                                           '*
 $crystal = 16000000                                        '*
'Baudrate für UART                                           '*
 $baud = 2400                                               '*
'*************************************************************

'**************************************
'********* Datenrichtungsregister *****
'**************************************
Ddra = &B00000000
Admux = &B01100000
Adcsr = &B11100010


do
    W = Adch
    Print "Temperatur: " ; W ; " Grad"
    waitms 1000
loop



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


Vielen Dank
Joe

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ben Lex (joee1)
Datum:

Bewertung
0 lesenswert
nicht 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.
 
       Temp = Getadc(0)
       Temp1 = Temp * 4.88281
       Temp1 = Temp1 / 100

      
      'Displayposition Zeile 2, Position 1
       Locate 2 , 1
      'Display-Textausgabe
       Lcd "Temperatur: " ; Temp1 ; " C"

       Print "Analogwert: " ; Temp
       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

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.