Hallo,
ich möchte an meiner Heizungsanlage Temperaturen (Vorlauf, Rücklauf,
Kessel, Brauchwasser) messen.
Dazu möchte ich KTY-Sensoren nehmen, die ich mit Wärmeleitpaste in
Kupferröhrchen einsetze. Mein Controller ist ein AVR Mega 32. Wie
dimensioniere ich KTY (1000 oder 2000 Ohm ?) und Widerstände ?
Schonmal danke
Ich würde über einen 1000-Ohm-KTY einen Konstantstrom von 1mA schicken
und per Vierleiterschaltung das Ganze auf den ATmega32 schicken. Am µC
eine Verstärkung x10 und differentielle Messung einstellen, Interne
Referenz (2.56V), dann sollte das gehen. Hab' die Kennlinie nicht im
Kopf, aber evtl. muss die Referenzspannung noch angepasst werden, um den
gewünschten Messbereich mit max. Auflösung zu kriegen. Dann noch
Mittelwertbildung mit Double oder Float, dann wird's recht genau!
Schonmal vielen Dank für Eure Hilfe.
Wie stelle ich denn die Verstärkung und differentielle Messung ein, und
wie realisiere ich das mit der Konstantstromquelle ?
Hallo,
ich habe meine Heizungsregelung (Heizungsmischer, Solarpumpe,
Speicher-Umwälzpumpe, etc.) komplett selber gebaut. Ich würde Dir raten
keine PTC, sondern NTC Fühler zu nehmen, da die Widerstandsänderung bei
PTC Fühlern pro Grad recht klein ist und so für solche Zwecke eine nur
unzureichende Auflösung hinbekommst. Ich habe für jeweils 8 NTC Fühler
einen Tiny26 benutzt, welche vom Hauptprozessor direkt in Grad abgefragt
werden können. Aussenbeschaltung ist lediglich ein Widerstand pro
Fühler.
Gruß
Stefan
Als Konstantstromquelle kannst du eine Stromspiegelschaltung (CA3046 =>
Transistorarray) mit Spannungsregler als Konstantspannungsversorgung
benutzen. Wie der ADC eingestellt wird ist im jeweiligen Datenblatt
recht gut beschrieben.
Ich habe wie Stefan einen pt100 (NTC) für eine Heizungsregelung an einer
Nebelmaschine benutzt. NTCs haben auch den Vorteil, dass sie bei
Leitungsbruch in die richtige Richtung (max. Temperatur) ausfallen, und
so die Regelung die Heizung abstellt.
Hallo,
aber ich könnte doch auch an meinem AVR32 die 8 NTC + Widerstände direkt
anschliessen, oder muss ich einen anderen Prozessor (Tiny o.ä.)
zusätzlich verwenden ? Wie dimensioniere ich den Widerstand ?
>aber ich könnte doch auch an meinem AVR32 die 8 NTC + Widerstände direkt>anschliessen, oder muss ich einen anderen Prozessor (Tiny o.ä.)
Ja kanns du mit ATmega32 und 8 stück KTY81,und genauso wie du am Anfang
geschrieben hast.
AVCC
|
|
R
R R=2,7K 1% für KTY81-110(1000 Ohm)
R oder R=5,4K 1% für KTY-210(2000 ohm)
|
ADCIN---
|
|
K
T
Y
8
1
|
AGND
KTY81 ist so Konstruiert dass mit einam Widerstand von 2,7Kohm eine
lineare Temperatur-Spannung Kennlinie gibt, nicht aber mit Eine
Strommquelle.
KTY81-110
AVCC( mV ) R(Ohm) Vref= NULLTEMP=
5000 2700 3,975V 298
Temperatur
(°C) Rt(Ohm) I(mA) Uadc( V ) ADCW ADCtemp Messfehler
(x0,5°C) (°C)
-30 623,5 1,504 0,938 241 -57 1,5
-20 683,5 1,478 1,010 260 -38 1
-10 747,5 1,450 1,084 279 -19 0,5
0 815 1,422 1,159 298 0 0
10 886 1,394 1,235 318 20 0
20 961 1,366 1,312 338 40 0
30 1040 1,337 1,390 358 60 0
40 1122,5 1,308 1,468 378 80 0
50 1208,5 1,279 1,546 398 100 0
60 1298,5 1,250 1,624 418 120 0
70 1392,5 1,222 1,701 438 140 0
80 1490 1,193 1,778 458 160 0
90 1591 1,165 1,854 477 179 -0,5
100 1696 1,137 1,929 496 198 -1
110 1803,5 1,110 2,002 515 217 -1,5
120 1908,5 1,085 2,071 533 235 -2,5
130 2004 1,063 2,130 548 250 -5
Wenn Aref geschickt gewält ist(in dem Fall 3,975V),entspricht
Temperaturänderung von +-0,5°C, enderung von +-1LSB bei ADCW.
Code Beispiel:
#define NULLTEMPERATUR 298
char adc_in;
unsigned int Temp;
.
.
signed int read_KTY81(char adc_in)
{
signed int temperatur;
temperatur=read_adc(adc_in);
temperatur-=NULLTEMPERATUR;
return temperatur;
}
.
.
Temp=read_KTY81(adc-in);
Printf("Temperatur1=%d,%-d\xf8\x43";Temp/2,abs((Temp%2)*5));
^^^^
//Temperaturanzeige mi °C
Temperaturmessung ist in Bereich von -20°C bis 100°C Linear, und
die Auflösung ist 0,5°C.
Konstantstromquelle,Verstärkung x10 und differentielle Messung ist
Quatsch.
Dass brauch du nicht,ganz in gegenteil.Mit Konstantstromquelle bekommst
du
nichleneare Temperatur-Spannung Kennlinie weil Temperatur-Widerstand
verlauf von KTY81 nicht linear ist.Das heist, Messwerte muss du über
Software linearisiern.
Rkty = R25 * (1 + (dT * a) + (dT2 * b))
a=0,0788K^-1
b=0,000019K^-2
Auserdem ist eine Konstantstromquelle viel mehr temperaturabhängig als
ein
Metall-Schicht Widerstand.
Grüße Branko
@ Sonic
wie meinst Du das, die NTCs würden bei Leitungsbruch in die richtige
Richtung ausfallen? NTC haben ja einen negativen
Temperaturkoeffizienten, d.h. mehr Temperatur -> weniger Widerstand. Ein
open gibt dann die minimale, nicht die maximale Temperatur zurück. Von
daher würde ich einen PTC vorziehen, oder sehe ich das falsch?
@ Hansel
Wenn Deine Anforderungen an die Auflösung nicht so gewaltig sind,
könntest Du meine Schaltung hier übernehmen (siehe Bild). Der KTY wird
über einen Spannungsteiler gemessen, die Speisung erfolgt über einen I/O
Pin, dessen Ausgangsspannung gleichzeitig als Referenz dient. Dadurch
wird eventuelle Drift der Referenz ausgeglichen, ausserdem ist der
Bauteileaufwand sehr gering und Du kannst die Sensorspeisung vom AVR
ein- und ausschalten lassen (prima für batteriebetriebene Geräte, um den
Stromverbrauch in Grenzen zu halten). Dafür kannst Du halt nicht die
gesamten 10bit des ADC ausnutzen. Eventuell könnte man die Referenz noch
über einen Spannungsteiler anschliessen, um die Auflösung zu verbessern.
Gruss,
Thorsten
Hast recht, Thorsten, der pt100 ist'n PTC! Sind zwar nicht ganz billig,
aber Industrienorm und in allen möglichen Bauformen zu kriegen. Gibt's
auch als pt1000 (1000 Ohm bei 0°C).
@ Hansel
Was hälst Du vom Einsatz eines (oder mehrerer) LM75 ???
Messwert stimmt bis auf +-1Grad genau, ohne rumzubasteln. Linearisierung
ist nicht nötig. Ausserdem ist der ATmega32 mit I2C ausgerüstet. Was
will man mehr....billig ist er auch noch.
Gruß.
Branko Golubovic wrote:
>>aber ich könnte doch auch an meinem AVR32 die 8 NTC + Widerstände direkt>>anschliessen, oder muss ich einen anderen Prozessor (Tiny o.ä.)>> Ja kanns du mit ATmega32 und 8 stück KTY81,und genauso wie du am Anfang> geschrieben hast.>> AVCC> |> |> R> R R=2,7K 1% für KTY81-110(1000 Ohm)> R oder R=5,4K 1% für KTY-210(2000 ohm)> |> ADCIN---> |> |> K> T> Y> 8> 1> |> AGND>
kurze frage dazu!
wie kommt man darauf bei einem kty81-210 einen doppelt so großen
widerstand zu nehmen?
denn im tutorial steht folgendes.
>Die Größe des zweiten Widerstandes im Spannungsteiler richtet sich nach>dem Wertebereich, in dem der Sensor seinen Wert ändert. Als Daumenregel>kann man sagen, dass der Widerstand so gross sein sollte wie der>Widerstand des Sensors in der Mitte des Messbereichs.>Beispiel: Wenn ein Temperatursensor seinen Widerstand von 0..100 Grad von>2kΩ auf 5kΩ ändert, sollte der zweite Widerstand eine Grösse von etwa>(2+5)/2 = 3,5kΩ haben.
der wertebereich des kty-81 210 geht von min: 980 bis max: 4400
also laut tut:
(980+4400)/2=2,7kohm
schöne grüße
Hallo Amir,
mit dem KTY(81-120) laesst sich Dein Messproblem leicht loesen.
Die Hauptsache ist, dass Dein ADC eine ratiometrische Messung ausfuehrt
indem VREF=VDD konfiguriert wird. Es ist also falsch eine stabilisierte
VREF Spannung zu verwenden.
Mit einem 2.7K Widerstand linearisiert den Spannungsverlauf. Der
Rechenaufwand wird relative klein wenn man wie in dem unten stehenden
Artikel beschrieben aus jeweils 64 ADC Messungen den Mittelwert bildet
und dann mit 101 dividiert. Das ergibt nach Abzug von 150 direkt Grad
Celsius Eichung. Wie man Anhand einer Rechnung mit EXCEL sehr schoen
sehen kann ist die Liniearitaet erstaunlich gut. Kleine Offest Fehler
lassen sich mit dem 150 Offset leicht korrigieren.
Hier ist das Anhand eines Thermometer Projektes genau beschrieben :
http://www.sprut.de/electronic/pic/projekte/thermo/thermo.htm
mfg,
Gerhard
Hallo zusammen,
will gerade was ähnliches machen versteh aber nicht wie es zu dem Offset
von 150 bzw. der Auflösung von 7,712 mV/°C kommt. Kann mir das mal
jemand erklären? Achja, ich benutze den KTY81-210, vielleicht ist es ja
bei dem anders?
Danke schon mal :-)
Hallo Roger,
Hier ein Auszug von der Link:
...Temperatur-Messung
Als Sensor sollte ein billiger PTC benutzt werden. Wie man den (im
Bereich von -20°C bis +120°C) als quasi-linearen Temperatursensor
benutzen kann, ist schon an anderer Stelle beschrieben worden. Der PTC
liefert in dieser Schaltung eine Spannung, mit einem
Temperaturkoeffizient von 7,7125 mV/K. Bei einem Temperaturanstieg um 1
Grad steigt die vom PTC abgegebene Spannung also um 7,7125 mV.
Der ADC des PIC mißt (ohne besondere Maßnahmen) externe Spannungen mit
einer Auflösung von 4,883 mV/digit. Eine Änderung der Eingangsspannung
um 4,883 mV verändert den vom ADC ausgegebenen Zahlenwert also um 1.
Aus diesen beiden Zahlen ergibt sich, dass die Änderung des
ADC-Ergebnisses um 1 einer Temperaturveränderung um 0,633 Grad
entspricht. Deshalb ist es nötig, das ADC-Ergebnis im PIC durch den
Korrekturwert 1,579 zu dividieren (oder mit 0,633 zu multiplizieren), um
ein Ergebnis zu erhalten, das sich bei einer Temperaturveränderung um 1
Grad um den Wert 1 ändert. Diese Zahl kann aber noch nicht direkt
angezeigt werden, da sie um ca. 150 über der Temperatur in °C liegt
(Offset).
Wenn man aber noch diese 150 subtraiert, und die Zahl aus dem binären
Zahlensystem in eine Dezimalzahl umrechnet, hat man eine Anzeige in °C.
Der Linearitätsfehler des PTC liegt im interessierenden
Temperaturbereich (0°C..+100°C) bei unter 1 Grad, allerdings wird der
ADC an der Grenze seiner Auflösung betrieben. Deshalb sollte der ADC die
Sensorspannung mehrfach messen, und dann aus diesen Messungen der
Durchschnitt gebildet werden, um Rauschen zu unterdrücken.
Schwankungen der Beteriebsspannung zwischen 4,0V und 6,0V wirken sich
praktisch nicht auf die Meßgenauigkeit aus, da PTC und ADC aus der
gleichen Spannung versorgt werden...
Obwohl die Beschreibung die Hauptpunkte beschreibt, kommt warscheinlich
das Verstehen erst wenn Du Dich mit der Materierie einmal praktisch
befasst.
Als Anhaltspunkt hast Du ja die Baubeschreibung in der Link. Wenn Du Dir
das erst mal baust und dann mit dem Programm experimentierst, dann kommt
das richtige Verstehen automatisch weil praktische Befassung etwas total
anderes ist, wie einfach durchlesen.
Es ist auch wichtig sich mit den Datenblaettern der Bauteile vertraut zu
machen.
Auch ist es wichtig dass Du Dich mit der Materie des uC Programmieren
und Verstaendnis seiner Peripherien erst einmal vertraut machst. Bei
Deinem Projekt ist es es wichtig dass Du versteht wie der AD-Converter
des uC funktioniert bzw. zu gebrauchen ist.
Vergiss nicht Dich durch die entsprechenden Tutorials (hier im Forum)
durch zu arbeiten. Nur Mut! Es wird schon gehen. Es geht vielen so dass
man am Anfang nicht das richtige Bild sieht. Die Hauptsache ist, einmal
anzufangen. Alles andere ergibt sich dann mit der Zeit. Jeder macht das
mehr oder weniger am Anfang durch.
mfg,
Gerhard
Roger Petri wrote:
> will gerade was ähnliches machen versteh aber nicht wie es zu dem Offset> von 150 bzw. der Auflösung von 7,712 mV/°C kommt. Kann mir das mal> jemand erklären? Achja, ich benutze den KTY81-210, vielleicht ist es ja> bei dem anders?
Das hier
Rkty = R25 * (1 + (dT * a) + (dT2 * b))
ist die Gleichung, wie sich der Widerstand des PTC abhängig von der
Temperatur verändert. Die stammt aus dem Datenblatt des PTC (und ist auf
einer der von dir verlinkten Seite zu finden)
Jetzt nimmst du deine Eingangswiderstandsbeschaltung her, löst alle
Serien und Parallel Schaltungen auf und erhälts damit eine Gleichung,
wie sich der Gesamtwiderstand deiner Schaltung in Abhängigkeit der
Temperatur verändert. Daraus kannst du errechnen welche Spannung sich
ergeben wird.
Dann schnapst du dir ein Excel und machst dir mal eine Tabelle wo du die
Temperatur in eine Spannung umrechnung lässt, und lässt das mal für
Temperaturen von -20 bis +100 Grad durchrechnen.
Und dann wirst du die oben angegebenen Werte wiederfinden.
Hallo Karl-Heinz und Gerhard,
Danke für Eure Antworten. Es ist nicht so dass ich bisher nur die
Theorie gepaukt habe. Ich hab die Schaltung hier schon auf ein
Steckbrett aufgebaut und messe momentan auch schon die Spannung die am
NTC abfällt und lasse sie mir im Terminal anzeigen. Funktioniert soweit
auch Bestens :-). Da ich ja ber nicht die Spannung bzw. die Digits
angezeigt haben möchte, suche ich nach den Umrechnungsformeln um auf die
Temperatur zu kommen. Hab mich jetzt schon mal ein bisschen weiter
eingelesen und festgestellt, dass es den KTY81 auch in einer Version
gibt die bei 25°C 1000 Ohm hat. Meiner hat 2000 Ohm was dann natürlich
auch zu anderen Spannungsabfällen führt. Ich versuch mal detailierter zu
beschreiben was ich machen will.
Im 1. Schritt möchte ich einen Aussenthermometer bauen der einen
Temperaturbereich von -30°C bis +50°C messen kann. Zur Verfügung habe
ich dafür einen Atmega8 bzw. Atmega8535 (für später) und einen
KTY81-210.
Momentan habe ich einen Poti (eingsetellt auf 2k7) in reihe zum KTY81 an
VTG und Ground vom STK500 angeschlossen. Eine Leitung zwisdhen NTC und
Widerstand geht zum A/D - Wandler vom Atmega8.
Jetzt hab ich aus dem Datenblatt des KTY die Wiederstandswerte bei -30°C
und +50°C abgelesen und mir die Sapnnungsabfälle ausgerechnet. Das sind
bei -30°C -> 1,56V und bei
+50°C -> 2,333 V
d.h. mein Messbereich liegt bei DeltaU = (2,33V - 1,56V) = 0,77V
So, jetzt hab ich mir gedacht ich kann ja noch den guten alten 3 Satz
und da ja alles nahezu linear ist, rechne ich mir mal aus wie die
Spannungsdifferenz für 1°C ist. D.h. also 0,77V/80°C = 9,625mV/°C
Ich hab das gerade nochmal quergecheckt mit den Werten des KTY81-110 und
das sieht gar nicht so schlecht aus. Jetzt bräuchte ich nur ein paar
Tipps wie ich das im Programmcode so umsetze dass nicht mehr 415 Digit,
sondern 13,5°C oder gar negative Werte im Terminalfenster erscheinen
:-).
Bisher hab ich einfach nur die Beispielprogramme vom Tutorial Thema ADC
und Festkommaarithmetik kopiert und ein bisschen mit den Werten
gespielt. Eigentlich will ich in Assembler programmieren aber die
Umrechnungen mit Division und Zweierkomplement usw. schrecken mich ein
bisschen ab. Hab schon mal ein bisschen programmiert bin aber kein
Experte.
Im zweiten Schritt soll die Temperatur dann auf einem 7-Segment LED
Display angezeigt werden und ganz viel später soll es eine Wetterstation
mit mehreren Sensoren und Funkübertragung werden ;-). Aber eins nach dem
anderen ...
Jetzt wäre ich erstmal danbar wenn mir jemand hilft die Temperatur im
Terminalfenster zu sehen :-)
Roger Petri wrote:
> So, jetzt hab ich mir gedacht ich kann ja noch den guten alten 3 Satz> und da ja alles nahezu linear ist, rechne ich mir mal aus wie die> Spannungsdifferenz für 1°C ist. D.h. also 0,77V/80°C = 9,625mV/°C
Wow. Hast dir aber jetzt wirklich Mühe gegeben.
Ich hätt das ganz anders gemacht :-)
Unter der Voraussetzung, dass der Temperatur/Widerstandsverlauf
hinreichend linear ist:
Ich hätt mir mein Zimmerthermometer genommen, abgelesen und nachgesehen,
welchen ADC Wert ich kriege.
Zb. 23 Grad, ADC: 856
Dann hätt ich ein Glas Eiswasser genommen, den PTC da reingehängt (in
einem Plastiksackerl, will ja keinen Kurzen) und gewartet, bis der PTC
sich abgekühlt hat
zb. 0 Grad, ADC: 128
Tja. und damit hab ich 2 Punkte meiner Geraden:
Temp = k * ADC + d
muss nur noch k und d bestimmen
23 = k * 856 + d ( der ADC sagt zu 23 Grad 856)
0 = k * 128 + d ( der ADC sagt zu 0 Grad 128)
aus der letzten Gleichung ergibt sich sofort d = -128 * k
in die erste GLeichung eingesetzt
23 = k 856 - k 128
23 = 728 * k
oder
k = 23 / 728 = 0.03159
mit d = -128 * k -> d = -4.0439
Wenn du also einen ADC Wert hast, errechnet sich die Temperatur zu
Temp = 0.03159 * ADC - 4.0439
> Bisher hab ich einfach nur die Beispielprogramme vom Tutorial Thema ADC> und Festkommaarithmetik kopiert
Wäre eine Möglichkeit, alle Wert zb. mal Tausen zu nehmen und dafür bei
der Ausgabe wieder ein Komma an der richtigen Stelle einfügen
Temp = 31 * ADC - 4044
> gespielt. Eigentlich will ich in Assembler programmieren aber die> Umrechnungen mit Division
Division brauchst keine. Nur Multiplikation und Subtraktion. Müsste man
bei deiner realen Umrechnung mal klären, ob sich das mit dem
Wertebereich (wenn man alles mal 1000 nimmt) noch ausgeht.
> und Zweierkomplement usw. schrecken mich ein> bisschen ab.
Aber ganz ehrlich.
Ich würd sowas in C schreiben. Mich schreckt nämlich die Rechnerei in
Assmebler auch immer ab :-)
Hallo Leute,
falls es noch hilft: im Anhang ist eine gerechnete Schaltung u.a. für 1
Kelvin pro LSB mit minimaler Beschaltung und Arithmetik.
Viele Grüße
Axel
UUURALT.......;)
hab mich aber auch gerad damit beschäftigt.
Die Lösung von Sprut.de mit dem 2700 Ohm ist doch sehr speziell.
Natürlich....die Geradengleichung ......wie oben schon beschrieben.
Damit geht es wunderbar.
Hab mal ein Excel-sheet zusammengebastelt, damit kann man etwas
rumspielen.