PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturmessung mit einem KTY81-220



elkokiller
10.01.2009, 16:32
Hallo,

das Thema ist nicht neu, "wie messe ich die Temeperatur mit einem KTY81-220?"
Es wurde zwar schon sehr oft hier im Forum behandelt. So ganz schlau bin ich allerdings nicht daraus geworden.

Es geht darum:
Zunächst wird die Spannung, die über den Spannungsteiler am Eingangsport ankommt mit einem Wert multipliziert werden. Wie ermittle ich diesen Wert?
Dann wird ein Referenzwert davon abgezogen. In allen Beispielen die ich gefunden haben wird hier der selebe Wert beschrieben.
Woher kommt der Wert von 1.1593?
Um die Spannungsänderung, z.B. 1V = 1Krad, anzupassen wird hier durch 0.0077125 geteilt. Wo kommt dieser Wert her?

Bei mir kommt mit diesen Werten, bei 0 Krad eine Anzeige von -10 Krad und bei einer Außentemp von 36 Krad eine Anzeige von 14,6Krad.
Wie nehme ich hier einen Abgleich vor?


'************************************************* ******************************
'Temperaturmessung mit einem KTY 81-220
'************************************************* ******************************

$regfile = "m32def.dat"
$crystal = 7372800
$baud = 9600


Dim W As Word
Dim V_alt As Single


Config Adc = Single , Prescaler = Auto , Reference = Avcc
Const Refer = 1.1593


Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
Config Lcdmode = Port
Config Lcdbus = 4 '4 bit mode
Config Lcd = 16 * 2 'LCD-Display mit 16 Zeichen in 2 Zeilen verwendet


Initlcd
Wait 1
Start Adc

Cursor Off Noblink
Cls



'************************************************* ******************************

Do

Gosub Temperatur





Loop


'************************************************* ******************************
Temperatur:

'Anschluss Spannungsteiler +5V---R2,7K---|---KTY81-220---GND
' ADC7
'AGND - GND
'AVCC - +5V
'AVREF - +5V


W = Getadc(7)
Waitms 200

V_alt = W * 0.0025

V_alt = V_alt - Refer

V_alt = V_alt / 0.0077125


Locate 1 , 8
Lcd Fusing(v_alt , "#.#") ; Chr(4) ; "C" '


Return

Sauerbruch
11.01.2009, 16:43
Hmmm.. das ist einfach ´n bisschen Mathe.

Am einfachsten ist es, wenn Du mal ein Blatt Milimeterpapier nimmst und ein Koordinatensystem draufmalst. X-Achse = Temperatur, Y-Achse = GetADC-Wert. Dann misst Du bei ein paar beliebigen Temperaturen innerhalb des Messbereiches die GetADC-Werte, trägst die Punkte in das Koordinatensystem ein und verbindest sie mit ´ner Linie.

Weil der ADC-Wert von 0 Grad nicht 0 sein wird, musst Du genau diesen Wert als erstes abziehen - dann ist 0 Grad schon mal 0.

Als nächstes rechnest Du aus, wieviele ADC-Einheiten einem Grad entsprechen (d.h. also wie "steil" die Gerade ist). Das kannst Du machen, indem Du Dir die Wertepaare von zwei beliebigen Punkten auf der Gerade nimmst.

Und durch diese (konstante) Zahl teilst Du dann den GetADC-Wert (nachdem Du die erste Konstante abgezogen hast) - fertig.

elkokiller
11.01.2009, 17:32
super, das werde ich gleich mal versuchen!

elkokiller
11.01.2009, 17:58
jetzt fehlt mir aber doch noch ein Wert?!
Wie kommt es zu dem Multiplikator ( V_alt = W * 0.0025 ) bzw. welche Rolle spielt er überhaupt?

Sauerbruch
12.01.2009, 08:57
Poste doch einfach mal ein paar Werte-Paare - am konkreten Beispiel geht das immer viel besser!