Hallo AVR - Gemeinde
ich suche eine Schaltung zur Temperaturerfassung mit einer Auflösung von
0,1 °C
als Controller nehme ich den Mega8 oder einen AT90S4434, als Sensor
nehme ich einen PTC (KTY81-210)
ich habe schon einige Schaltungen mit OPV's ausprobiert (
Brückenschaltung)
eltman
Das du den KTY vergessen musst würd ich nicht sagen, wieviele Bits
Auflösung hast den beim ADU (10 bit minimum!!)? Wennst nur +5V
Versorgung hast musst unbedingt nen Rail to Rail OPV nehmen und wennst
+/- Versorgung hast musst eigentlich die 0,1 °C Auflösung schon
zusammenbringen.
Dank auch allen
das ich den KTY (+/- 2°C) vergessen kann hat mir mittlerweile ein
Ing. auch gesagt ich sollte lieber ein Platin Sensor (+/- 0,1°C) nehmen
hat denn einer eine passende Schaltung
Eltman
Normalerweise kommt bei dem Stichwort 0.1°C Genauigkeit immer sofort der
Hinweis: "Geht nicht, oder nur mit großem Aufwand". Naja, vielleicht
kam das bisher nicht, weil in der Originalfrage "0.1°C _Auflösung_"
stand.
Da hier aber scheinbar trotzdem die Frage nach 0.1°C Genauigkeit
diskutiert wird, will ich den Standardhinweis mal nachholen. (Ich habe
sowas noch nie realisiert und beziehe mich nur auf Aussagen von Leuten,
die sowas schon gemacht haben und sich damit auskennen).
Allgemeines:
Bei 0.1°C Genauigkeit ist die Leiterbahnführung und vor allem die
Stabilität der Versorgungsspannung von großer Bedeutung. Auch
Bauteileschwankungen/toleranzen (z.B. in den Meßbrücken) spielen eine
Rolle (sonst erhältst du in den unteren Bits nur Rauschen). Es hat
seinen Grund warum die 0.1°C-Thermometer ihr Geld kosten. Günstige
Thermometer mit LM75, DS1820 o.ä. bieten nur eine Genauigkeit von 2-3°C
(mit einer Auflösung von 0.5°C und dem Komfort des digitalen
Interfaces).
Konkret:
Mit dem genannten KTY81 kannst du mit den AVR-internen 10Bit-AD-Wandlern
im Bereich von 25°-40°C eine Auflösung von 0.015°C erreichen.
(40°C-25°C)/2^10 = 0.015°C
Für die geforderten 0.1°C (25°C-40°C) würden auch 8Bit reichen - mit dem
AD-Wandler-Rauschen hättest du also hier weniger Probleme.
Wozu willst du das Thermometer einsetzen? PC-Gehäuseinnentemperatur? Für
die wenigsten Anwendungen braucht man 0.1°C _Meß_Genauigkeit, weil die
Meßstelle sowieso nur einen Punkt messen kann (z.B. nicht den
Prozessorkern, sondern im besten Falle nur die Oberflächentemperatur der
CPU; daraus lassen sich zwar Rückschlüsse ziehen, aber 0.1°C ist hier
unnötig (teuer).)
Schmittchen.
Hallo Schmittchen
Ich brauche die hohe Auflösung für einen Brutapparat.
Mit einen LM75 hab ich es auch schon versucht aber na ja...
Ich werde die Auflösung dann wohl ein wenig verkleinern
so 0,4 bis 0,5 °C müste eiglich auch noch reichen.
Den Temperaturbereich konnte ich auch noch eingrenzen 30 bis 42 °C
Eltman
Schade, gerade hab ich meinen Text verfaßt und wollte abschicken, dann
war mikrocontroller.net nicht mehr erreichbar - alles weg :-(
Ok, dann nochmal in Kurzfassung:
Mit deinem knappen Budget <10EUR kommst du leider nicht sehr weit. Zur
Sensorbeschaltung gehören noch OPVs... die Conrad-PT100x sind relativ
günstig. Es gibts fertige Sensoren mit Kabeln usw. für einige 10EUR
bis zu wenigen 100EUR.
Google-Groups liefert einige interessante Diskussionen zum Thema
"PT100".
Theorie zum PT100-Sensor:
http://www.ntb.ch/Pubs/sensordemo/pdf/NTB_03_PT100.pdf
Konstruktion eines PT100-Meßverstärkers (knapp, praktisch, leicht
lesbar):
http://www.thesunscreenman.com/download/msy0000.pdf
Wie so oft stellt sich erst beim genaueren Hinsehen heraus, daß das
anfangs als "einfach" eingeschätze "Problem" doch umfangreicher
ausfällt. Aber das soll ja nicht abschrecken.
Schmittchen.
Hallo,
Conrad ist der einizige "Distributor" wo Du die P1000 als Privatlöter
bekommen wirst. Als Firma kannst Du mal probieren an Heraeus
heranzutreten und die Teile als Muster zu bekommen. Alternativ kannst Du
Dir ja mal den PT100 anschauen, vieleicht reicht der auch. Die Teile
sind aber so teuer da Sie tatsächlich eine Platinschicht besitzen! Haben
halt den Vorteil das Sie absolut linear sind und
einen super weiten Temperaturbereich haben. Ich glaube es waren ca. -70
- +600.
Du solltest aber das Problem mit den OP's und dem Leiterbahnen und
Zuleitungen wirklich nicht unterschätzen, da ist Wissen und guter Aufbau
gefragt.
Gruß Markus
Was soll denn das bitte beudeuten?! Conrad ist ne Servicewüste und
Apotheke, es gibt zig bessere Alternativen! Reichelt, RS-Components,
usw.. alles für Privatanwender! Dass Leybold-Heraeus keine Liefermenge
unter 1000Stk. rausgibt leuchtet ja wohl ein - obwohl da wieder die
Möglichkeit bestünde Muster abzustauben.
Der Unterschied zwischen PT100 und PT1000 ist einzig der Wiederstand bei
Eichtemperatur. PT100 = 100Ohm, PT1000 = 1000Ohm; vom Preis sind beide
gleich. Präzisionsarbeit plus Edelmetall ist halt kostenintensiv. Die
Verstärkerschaltung ist kein Problem, sie sollte aber möglichst nahe am
Fühler selbst liegen, wenn das Signal erstmal digitalisiert worden ist
besteht keine gefahr der verfälschung mehr. Ansonsten die Leitungen
immer geschirmt und kurz halten! Dann sollten 0.5°C für jeden
hinzubekommen sein.
Hallo Retro,
ich habe nicht behauptet im Conrad Fanclub zu sein und nutze das
unverschämte Angebot auch nur wenns nicht anders geht. Aber wenn du
PT1000, PT100 Sensoren als Bauteil und nicht als fertig vergossenes
Modul suchst dazu noch Stückzahlen unter 1000 abnehmen willst wirst Du
selbst von Heraeus an Conrad als deren General-Distributer verwiesen.
Bei RS gibts nur Module und bei Reichelt bin ich auch nicht fündig
geworden. Also erstmal informieren und dann bellen ;-). Aber natürlich
lasse ich mich auch gerne eines besseren belehren. Die Preise für die
Sensoren sind tatsächlich inzwischen gleich, ein PT100 hat 100 R ein
PT1000 sinnigerweise 1000 R und damit einfacher genauere Messwerte
ermöglicht (mit entsprechenden Messverstärkern und angepassten A/D
Wanderen natürlich). Ansonsten ist es richtig das der Messverstärker
möglichst nahe beim Sensor liegen sollte (wenige mm zuviel können schon
für eine Verfälschung reichen) und auf geschirmte Leitungen mit einer
einseitigen Masseanbindung des Schirms.
regards
Markus
Hi,
ich habe Euere Diskussion mit Interesse verfolgt. Insbesondere deshalb,
weil ich vor Jahren mit der Thematik zu kämpfen hatte...
Eine Sache, die mir damals schon nicht klar war: Wenn das alles so
kompliziert und teuer ist, wie bekommen es dann die hin, die die
elektronischen (geeichten !) Fieberthermometer bauen und für ~ 10-20
Euro in jeder Apotheke verkaufen ... ?
Hörst sich jetzt zwar nach Bastelei an, aber ist es nicht eine
Alternative, so ein Teil "auszuschlachten" ?
Bin gespannt auf Euere konstruktiven Kommentare
UBoot-Stocki
Hallo Eltmann,
es gibt keinen Grund, Dein Thermometer nicht mit einem KTY81
auszuführen. Platinsensoren sind zwar besser und für große
Temperaturbereiche geeignet, hier jedoch nicht notwendig. Das
Hauptproblem eines Siliziumsensors ist dessen Alterung. Phillips gibt
für den KTY81-110 eine Drift von max. 1,6 Ohm nach 10000h bei 150° an.
Das ist ein hinreichend guter Wert zumal Deine Schaltung mit max. nur
40° 'gealtert' wird und die Drift deutlich geringer sein sollte.
Der KTY81-110 hat einen nominalen Widerstand von 1000 Ohm bei 25°. Bei
40° sind es 1122 Ohm. Eine Änderung von 1,6 Ohm (Langzeitdrift nach
vielen Jahren) bedeutet einen Meßfehler von 0,2°. Sofern der Anwender es
nicht schon sowieso fordert, muß man die Meßapparatur alle paar Jahre
neu abgleichen.
Du bezeichnest Deinen Sensor mit KTY81-210, der vermutlich 2kOhm bei 25°
hat; mir liegt nur das Datenblatt vom -110 vor, sodaß ich mich
nachfolgend hierauf beziehe.
Vorschlag: Bei einer Referenzspannung Vref von +5V für AD-Wandler und
Meßbrücke, werden Sensor und zusätzlicher 1k Widerstand einerseits mit
0V und über je 3k3 mit Vref angeschlossen. Durch den Sensor fließt damit
ein Strom von ca. 1,16 mA. Bei 122 Ohm Widerstandsänderung (25° -> 40°)
ergibt sich eine Spannungsänderung von ca. 140mV. Bei einem
10bit-AD-Wandler entspricht das 28 Schritte/15°: grob 0,5° Auflösung. Da
0,1° Auflösung gefordert sind, ist die Spannung mindestens 5-fach besser
10- bis 20-fach zu verstärken. Ein Operationsverstärker wird mit +IN an
den Sensor, -IN an der Teiler 3k3 / 1k angeschlossen. Ein 10k Widerstand
wird von OPV-Ausgang auf -IN geschaltet, was eine Verstärkung von ca.
14-fach ergibt. Im Bereich 25° - 40° liegt am Ausgang vom OPV eine
Spannung von ca. 1,2 -> 3,2 Volt. Es müssen Metallfilmwiderstände mit 1%
verwendet werden. Der OPV sollte eine kleine Eingangs-Offsetspannung (<
1mV) haben. Rauschen ist bei diesen Impedanzen kein Problem; eine
gleitende Mittelwertbildung über die letzten zehn Werte gibt eine ruhihe
Anzeige. Soweit alles easy.
Jetzt kommt der schwierige Teil:
Zum Abgleich wird der Sensor auf 25° erwärmt, und der AD-Wandlerwert im
EEPROM abgelegt. Ein weiterer Abgleichpunkt bei 40° wird ebenfalls im
EEPROM abgespeichert. Aus diesen Werten muß der µP den eff.
Temperaturwert errechnen. Du kennst ja einen Ingenieur, der schreibt Dir
die Funktion eben 'mal auf. Wenn Du aber schon eine Apparatur hast (und
die brauchst Du unbedingt), die 0,1° genaue Temperaturen liefern kann,
ist es auch möglich, Abgleichpunkte in 1°-Schritten im EEPROM abzulegen
und das Ergebnis durch lineare Interpolation zwischen diesen
Stützstellen zu errechnen.
Wenn Du Dich dann nach vielen Stunden Arbeit über Deine funktionierende
Schaltung freuen wirst, wird es Dir völlig egal sein, ob Du einen KTY
für 1 oder einen Pt1000 für 5 einsetzen wirst (was dann immer noch
möglich ist).
Ich hoffe, ich war nicht zu lang !(?) Gruß Michael
Hi,
steigt der Widerstand des Platin-Sensors linear mit der Temperatur? Oder
brauche ich eine Vergleichtabelle?
Und kennt jemand einen einfachen Schaltplan, wo wirklich nur ein 4433
(o.ä.) und ein Sensor angeschlossen ist, ohne großen Schnick-Schnack?
Ein kleines Beispielprogramm in Assembler dazu wäre auch super!
Danke!
Sebastian
Hallo Michael
hab erstmal Dank für deine Antwort ich werd mal sehen ob
die Zeit noch ausreicht diese Projekt weiter zutreiben.
Andere Projekt und mein Studium im Oktober haben Vorrang.
Eltman
Hallo Eltmann,
kein Problem. Die Werte, über die der Mittelwert gebildet wird, werden
in einem Ringpuffer (hier: feld[MAX_ELEMENTE]) gespeichert. Der
Mittelwert ergibt sich aus der Summe_der_Werte / MAX_ELEMENTE. Anfangs
wird das feld[] komplett gelöscht - ebenfalls die Summe. Bei Eintreffen
eines neuen Wertes, wird der älteste von der Summe abgezogen, der neue
Werte zur Summe addiert und an die Stelle des ältesten Wertes im Puffer
abgelegt. Der Pufferindex wird erhöht und zeigt dann wieder auf den
jetzt ältesten Wert. Am Ende des Puffers angekommen, wird der
Pufferindex wieder auf 0 gesetzt. Da die Summe immer aktuell ist, ist
der neue Mittelwert schnell errechnet.
#define MAX_ELEMENTE 10
char pufferindex;
short feld[MAX_ELEMENTE]; //short = 2 Byte
long Summe_der_Werte; //long = 4 Byte
void init_puffer()
{
for(pufferindex=0; pufferindex < MAX_ELEMENTE; pufferindex++)
feld[pufferindex]=0; // Einzelwerte löschen
Summe_der_Werte = 0L;
pufferindex = 0;
}
short berechne_mittelwert(short neuer_wert)
{
Summe_der_Werte -= feld[pufferindex]; // alten Wert abziehen
Summe_der_Werte += neuer_wert; // neue aktuelle Summe
feld[pufferindex] = neuer_wert; // ablegen
pufferindex++;
if(pufferindex >= MAX_ELEMENTE) pufferindex = 0; // wieder von vorne
anfangen
return(Summe_der_Werte / MAX_ELEMENTE);
}
Ich hoffe, der Text ist lesbar und fehlerfrei getippt!
Wenn ein neuer Meßwert vorliegt, reicht der Aufruf:
mittelwert = berechne_mittelwert(neuer_wert);
In der Regel sind alle Variablen beim Programmstart gelöscht, sodaß
init_puffer(); entfallen könnte. Da ich tagtäglich mit Ausnahmen von
Regeln zu tun habe: init_puffer(); schadet nicht !
Bei Meßwerten, die nicht bei 0 beginnen ist es ratsam, eine Messung zu
machen, und die Mittelwert-Routine MAX_ELEMENTE-mal aufzurufen, um den
Puffer mit geeigneten Startwerten zu füllen. Die Routine wirkt letzlich
als Tiefpaßfilter: wird der Puffer zu groß gemacht, ist die Verzögerung
entsprechend lang. Ist der Puffer zu klein, werden die Schwankungen der
Einzelwerte sichtbar (in der Anzeige). Soweit.
Michael