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
Mit nem KTY kannst du das getrost Vergessen. Da musst du schon was genaueres nehmen
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
Hallo Daniel der Temperaturbereich liegt bei 25 bis 40 °C Eltman
Hallo, nim am besten einen P1000 Platinsensor. Ist super genau! Ein Schaltungbeispiel ist z.B unter http://home.t-online.de/home/Matthias.Stehr/diff.htm zu finden. Gruß Markus
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 Dank euch alle Wo bekomme ich die PT1000 Sensoren her Conrad verlagen zu viel dafür :-( Eltman
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 Markus, grad weil mir Conrad ein Dorn im Auge ist war ich so empört ;-) Obwohl die Preise von RS auch nicht die niedrigsten sind bekommt man die beste Qualität. Wie währe es denn mit diesen hübschen PT1000 Sensoren (http://www.rs-components.de/cgi-bin/bv/browse/Module.jsp?BV_SessionID=@@@@0924528459.1029202136@@@@&BV_EngineID=cccdadcflmilhgfcfngcfkmdgkldfhn.0&3206654948=3206654948&stockNo=3629913&prmstocknum=3629913&prodoid=202441)?! Zwar gibt es dort auch nur die Standardtypen aber meistens reichen diese ja vollkommen aus. Sonst muss man zwangsläuftig zu Bussiness-Conrad greifen :-\
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
Hier noch eine sehr lehrreiche Seite zu dieser Thematik: http://home.t-online.de/home/uwe.mnich/Wissen/Messtechnik/tmKap2/tmKap223/tmKap223.html Gruss, Peter
Hallo Michael kannst du mir noch mal etwas über "gleitende Mittelwertbildung" erzählen. 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
Nachtrag Da der Mittelwert aus Integer-Zahlen errechnet wird, muß unbedingt gerundet werden: // Funktionskopf { char rundung; // ... rundung = MAX_ELEMENTE/2; // für pos. Summe if(Summe_der_Werte < 0) rundung = -rundung; // für neg. Summe return((Summe_der_Werte + rundung) / MAX_ELEMENTE); } Michael
I’d prefer reading in my native language, because my knowledge of your languange is no so well. But it was interesting!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.