Hallo! Ich will mit folgendem NTC eine Temperaturmessung durchführen: http://at.mouser.com/ProductDetail/Murata-Electronics/NXFT15WB473FA1B150/?qs=MY6wChARw2zH6fHzHxCaIA== Mein verwendeter Sensor ist der NXFT15WB473FA1B150 (siehe Datenblatt Seite 25), also jener, der bei 25°C einen R von 47kOhm hat. Ich würde das ganz einfach mit einem Spannungsteiler (fixer Vorwiderstand zum NTC) machen, und die Spannung am NTC (parallel dazu ein kleiner C) zu einem ADC Eingang führen. Ich will die Temperatur in einem Bereich von 0°C bis 30°C messen. Um den Vorwiderstand so einzustellen, dass ich die optimale Auflösung des ADC ausnutze, benötige ich die Widerstandswerte des NTC bei gegebener Temperatur. Wie kann ich die berechnen? Kann ich hier einfach die Formel für T von Wikipedia unter "Grundlagen" http://de.wikipedia.org/wiki/Hei%C3%9Fleiter hernehmen, und einen B-Wert von 4050 annehmen? Dann könnte ich aus dieser Gleichung die beiden Punkte 0° und 30°C einsetzen und mir daraus den Vorwiderstand berechnen. Kann ich das so machen?
Werner13 schrieb: > Kann ich hier einfach die Formel > für T von Wikipedia unter "Grundlagen" > http://de.wikipedia.org/wiki/Hei%C3%9Fleiter > hernehmen, und einen B-Wert von 4050 annehmen? Ganz so einfach wird es nicht werden. Du wirst zumindest Referenzmessungen machen müssen und daraus dann die Materialkonstante genau deines NTCs ermitteln. Warum nimmst du nicht einen DS18B20, einfacher und genauer gehts (ohne größeren Aufwand) fast nicht. Für verschiedenste Messmethoden siehe auch: Temperatursensor
OK, hab ich das richtig verstanden, dass ich die Materialkonstante bestimmen muss, weil Sie von Sensor zu Sensor verschieden ist (Toleranzen)? D.h. jedesmal, wenn ich einen neuen Sensor einsetze (theoretisch), müsste ich die Konstante neu bestimmen? Wenn ich aber die Konstante einmal berechnet habe, dann kann ich diese immer für die Berechnung der Temperatur hernehmen?
Ich hab nun 3 Referenzwerte gemessen (bei 0, 23 und 50°C). Wie kann ich daraus nun die B-Werte bestimmen? Formel auf B umformen und ausrechnen?
Wenn ich die beiden Werte für 23 und 0°C in die Formel einsetze, bekomme ich für B einen Wert von 4024 raus. Das liegt im gegebenen Bereich. Da die Messtemperaturen auch ungefähr in dem Bereich liegen (0-30°), werde ich diesen Wert für B heranziehen. Ich muss nun den Spannungsteiler so einstellen, dass ich möglichst den ganzen verfügbaren Spannungsbereich für die Messung nutzen kann (Die Referenzspannung beträgt 2.5V, als Spannungsversorgung für den U-Teiler stehen 3.3V zur Verfügung. Das heißt, für einen Extremwert (30°) soll möglichst wenig Spannung gemessen werden, bei 0° sollen gerade 2.5V am Messwiederstand abfallen, sodass ich bei 0° die maximale Spannung messe. Kann man das überhaupt für beide Grenzwerte abstimmen oder muss ich einfach schaun, dass ich gerade bei 0° eine Spannung von 2.5V messe, der Wert für 30° ergibt sich dann? Danke, lG
Fuer maximale Aufloesung muessen die beiden Widerstande gleich sein. Wie man das rechnet? Die Steigung deltaU/deltaT muss maximal sein. Also Ableiten Null setzen, nach R aufloesen.
Welche beiden Widerstände müssen gleich sein? Und welche Formel soll ich nach was ableiten? Sorry, komm da nicht ganz mit... Ich weiß, dass ich bei 0° einen Widerstand von 157kOhm und bei 30°C einen Widerstand von 37,5kOhm hab. Im ersten Fall soll nun die höchstmögliche Spannung (also idealerweise 2,5V) und im zweiten Fall die niedrigste Spannung (also idealerweise 0V) gemessen werde, um die Auflösung optimal auszunutzen. Könnt Ihr mir einen Tip geben? Danke, lG
Um den 2. Fall zu erfüllen müsstest du schon einen Operationsverstärker einsetzen oder den NTC an eine negative Spannung statt GND anschließen. Ansonsten wirst du nicht drum herum kommen, dass bei 30° rund 0,6V an deinem Eingang anliegen. Gruß
Hallo Werner, hier mal ein Beispiel falls du eine 5V Referenzspannung hast. Da reicht dann eine rein passive Schaltung. Wenn du "nur" eine 2,5V Referenz hast, dann benötigt man halt einen Opamp. Die untere Kurve ist die Ableitung die gibt an wie viel mV/°C du bekommst. Um zu simulieren musst du dir LTspice von www.linear.com herunterladen. Das ist kostenlos. Meine Dateien nach C:\Test kopieren. Dann die .asc mit LTspice öffnen. Gruß Helmut http://ltspice.linear-tech.com/software/LTspiceIV.exe
:
Bearbeitet durch User
Der Spannungsteiler kann auch aus nur zwei widerstaenden bestehen, dem 47k NTC und einem 47k festwiderstand. Nehmen wir den festwiderstand unten : Ua : = U0 * Rntc/(Rntc+Rfest) Nun Rntc einsetzen als R0* (...)(T) Dann ableiten als dUa/dT = .. f(T) Sowas rechnet man zB mit Mathematica, Maple, ...
und schrieb: > Der Spannungsteiler kann auch aus nur zwei widerstaenden bestehen Dann wird die Krümmung der Gesamtkennlinie aber größer ;-)
@Thomas: Hallo, Ich hab den Wert für den Vorwiderstand berechnet, damit bei 0° 2,5V anliegen, es kommt 50,4 kOhm raus. Der Widerstand des NTC bei 30° beträgt 37,5kOhm, das ergibt dann eine Spannung von 1,4V. Ich würde damit also nur den Bereich von 1,4V bis 2,5V und somit weniger als 50% des nutzbaren Spannungsbereiches ausnutzen. Wie kommst du auf 0,6V? Als µC verwende ich den AT32UC3C1128C: http://www.atmel.com/devices/at32uc3c1128c.aspx Muss ich eigentlich für diese Berechnungen auch einen Eingangswiderstand des ADC berücksichtigen? Weiters würde mich interessieren, ob mit dieser Dimensionierung (50kOhm Vorwiderstand, und z.B. 157kOhm Messwiderstand bei 0°) der ADC genug Strom bekommt? Auf Seite 1252 des Datenblatts (complete) steht, dass der ADC (ADCIFA) 7µA/MHz aufnimmt. Ich verwende 64 Mhz und komme damit auf 448 µA. @Helmut: Was genau meinst du denn mit Referenz: Die Gesamtspannung für den Spannungsteiler oder die Referenzspannung für den ADC? Als Spannung für den U-Teiler stehen mir 3,3V zur Verfügung, als ADC Referenz 2,5V! DANKE!
> Was genau meinst du denn mit Referenz
Die gemessenen Spannung hängt von Spannung ab an der der Spannungsteiler
angeschlossen ist. Wenn du die Versorgungsspannung nimmst, dann ist die
gemessene Spannung eben proportional zur Versorgungsspannung. Du
solltest dann einen zweiten rein Ohmschen Spannungsteiler machen an dem
du die Versorgungsspannung misst. Da die ATmega mehrere ADC-Eingänge
haben ist das kein Problem.
Wenn der Hub zu klein ist, dann muss man halt einen Opamp zur
Verstärkung spendieren.
Hallo Helmut, danke, deine Simulation habe ich runtergeladen. Wenn ich die Spannung auf meine 3,3V ändere, dann bin ich bei 0° bei 1,6V und bei 0° bei unter 0,6V. Das passt mir derweil für versuchszwecke, später wird dann ein anderer NTC eingesetzt. Brauch der ADC (siehe Datenblatt des µC in einem früheren Post) einen Mindeststrom? Ich mache mir bedenken wegen der hohen WIderstände?! Danke, lG
Wenn ich die Widerstände mit 100k und 300k wähle ist bes noch etwas besser... OK, dann messe ich die SPannung und aus diesem digitalen wert kann ich mir (da ich ja die Referenzspannung und die Auflösung kenne) den Widerstandswert des NTC berechnen. Aus diesem Wert kann ich mir mit der Formel aus Wikipedia (Artikel Heißleiter) die Temperatur ausrechnen (Den B-Wert habe ich messtechnisch ermittelt)? Ist das eine gängige Vorgehensweise?
Ich wuerd einen NTC auswaehlen, der einen B Wert spezifiziert hat. zB auf 1%. Ist die absolute Genauigkeit denn wichtig? Ich wuerd's nicht nachmessen wollen. Ich wuerd auch einen niederohmigeren NTC auswaehlen und falls Stromaufnahme wichtig ist, schalten.
@radiofox: Super link, danke! Für meine Anwendung kommen für Rs 75k und für Rp 750k raus. Das schaut mit der LTSpice Simulation sehr linear aus und deckt auch einen relativ großen Spannungsbereich ab! Danke!
Werner13 schrieb: > @radiofox: > Super link, danke! > > Für meine Anwendung kommen für Rs 75k und für Rp 750k raus. Das schaut > mit der LTSpice Simulation sehr linear aus und deckt auch einen relativ > großen Spannungsbereich ab! Danke! Super. Ein linearer Zusammenhang ist schon mal die halbe Miete. Denn. Da würde ich nicht lange fackeln um mir den Widerstandswert des NTC auszurechnen. Denn im Grunde interessiert mich der ja nicht. Gesucht ist ja der Zusammenhang zwischen ADC Wert und Temperatur. Der ADC Wert ist linear zur gemessenen Spannung und die wiederrum ist linear zum Widerstandswert, welcher wiederrum linear zur Temperatur ist. D.h. ich fasse all diese Umrechnungen zu einer einzigen zusammen. Bei 3 (oder mehr) Temperaturen den ADC Wert messen und damit hab ich meinen Zusammenhang ohne mich um irgendwelche Materialparameter kümmern zu müssen. Im µC wird dann einfach aus dem ADC Wert direkt die Temperatur ermittelt. Da alle Umrechnungen linear sind, reicht es also aus, ein
1 | Temperatur = k * ADC_Wert + d |
zu postulieren, bei dem einzig k und d unbekannt sind. Anhand der bei bestimmten Temperaturen festgestellten ADC_Werte lassen sich diese beiden Konstanten aber ermitteln. (Mehr Messungen zwischen ADC_Wert und Temperatur sind deshalb gut, weil man die dann in ein Diagramm eintragen kann [zb. Excel] und nachsehen, wie linear die ganze Geschichte in der Praxis wirklich ist. Denn grau, lieber Freund, ist alle Theorie. Aus der Kurvenform im Diagramm sieht man dann auch sehr schnell, ob man mit einer Geraden wirklich durchkommt, oder ob man nicht zb eine Parabel [also eine Gleichung 2. Grades] oder vielleicht etwas noch höheres durch die Punkteschar durchlegt)
:
Bearbeitet durch User
Karl Heinz schrieb: > Bei 3 (oder mehr) Temperaturen den ADC Wert messen Es wäre sinnvoll, ca. 37° mit in den Meßbereich hineinzunehmen. Auf diesen Wert kann man mit Hilfe der eigenen Armbeuge und einem Fieberthermometer recht genau kalibrieren. Das gleiche gilt für die 0° gemessen durch Rühren in Eiswasser. Nur mit den Zwischenwerten wirds schwieriger. Wenn die Linearisierung gut gelungen ist und die Genauigkeitsanforderungen nicht allzuhoch sind, kann man ja vielleicht Zwischenwerte auch errechnen. Gruss Harald
Harald Wilhelms schrieb: > Es wäre sinnvoll, ca. 37° mit in den Meßbereich hineinzunehmen. > Auf diesen Wert kann man mit Hilfe der eigenen Armbeuge und > einem Fieberthermometer recht genau kalibrieren. Das gleiche > gilt für die 0° gemessen durch Rühren in Eiswasser. Ehe ihr so genau kalibrieren wollt, wie genau sind denn die NTCs des TOs Werner13 schrieb: > D.h. jedesmal, wenn ich einen neuen Sensor einsetze > (theoretisch), müsste ich die Konstante neu bestimmen? Keine Ahnung wie weit die Konstante von Einem zum Anderen abweicht. Interessant sind zumindest die Toleranzen: http://www.schukat.com/schukat/schukat_cms_de.nsf/index/CMS1644A08A9DC28A99C1256D710038E16D?OpenDocument Es gibt also 2%tige aber genauso 10 oder gar 20%ige. Die Frage ist welche NTCs hast du und Wie genau willst du messen? ich hatte oben schon auf genauere einfach anzuwendende Sensoren wie DS18B20 hingewiesen, aber vom TO kam keinerlei Reaktion.
Werner13 schrieb: > Ich würde > damit also nur den Bereich von 1,4V bis 2,5V und somit weniger als 50% > des nutzbaren Spannungsbereiches ausnutzen. Was immer noch deutlich genauer ist als die Toleranz des NTCs.
Hallo zusammen, ihr macht da ja eine ganz schöne Wissenschaft aus dem NTC, der nur für 0..30°C eingesetzt werden soll... Ich nehm mir mal den hier her: http://www.reichelt.de/Heissleiter-Varistoren/NTC-0-2-47K/3//index.html?ACTION=3&GROUPID=3114&ARTICLE=13564&SEARCH=NTC%2047k&SHOW=1&OFFSET=16& Der NTC hat bei 25°C 47k (+- seiner Abweichung, aber dazu später mehr). Die Mitte zwischen dem gewünschten Bereich 0..30°C ist bei 15°C und der NTC hat dann 70,2k. Nach diesem Wert wählst du deinen Vergleichswiderstand. GND --- 70k --- [ADC] --- NTC --- VCC Der ADC bekommt als Vref auch die VCC. Das heißt ich sehe nur das Widerstandsteiler-Verhältnis am ADC. Nichts was von der Spannung abhängt! Der maximale Strom über dem NTC ist bei 30°C (39k). Bei 5V wären das (Untc * (5V/(70k+39k)) => 45µA über dem NTC, der 1,8V abbekommt. Also ganze 80µW am NTC, das ist dann wohl vernachlässigbar.... In erster Näherung bei 10Bit ADC macht eine Temperaturänderung von 10°C 100ADC-Schritte am ADC aus. Einfach mal Excel-Tabelle mit Widerstandsteiler und den "idealen" Werten aus dem Datenblatt rechnen. Im Programm rechnest du also Temp = 15°C + (ADC_Wert-512)/10 Das ist erst mal eine verdammt gute Näherung, wenn da der NTC und der Vergleichswiderstand nicht eine Abweichung hätte. Die "512" in der Formel korrigierst du passend zu deinem tatsächlichen Wert des Vergleichswiderstandes. Aber in der Regel reicht es schon eine reine Offset-Korrektur zu machen. Halte den NTC hübsch eingepackt in ein Wasser/Eiswürfelgemisch und bestimme den Offset. Bei einem Bereich von 0..30°C noch Linearitätsfehler zu korrigieren ist unnötig.
Der C-Compiler kann doch Fließkomma. Damit kannst du direkt die Formel mit "log" auswerten um die Temperatur zu berechnen. Die Formeln stehen in meiner Schaltung. Das dauert zwar ein paar Millisekunden aber wenn der Prozessor sonst eh nichts zu tun hat stört das nicht. Ansonsten halt eine Tabelle im Flash ablegen, wenn es ganz schnell gehen muss.
:
Bearbeitet durch User
René B. schrieb: > Hallo zusammen, > ihr macht da ja eine ganz schöne Wissenschaft aus dem NTC, der nur für > 0..30°C eingesetzt werden soll... Was bitte ist am feststellen von 2 ADC Werten bei gleichzeitigem messen der Temperatur mit einem Thermometer eine Wissenschaft? 2 Wertepaare, daraus die beiden Koeffizienten für die Umrechnung bestimmt und ab damit ins Programm. Noch einfacher gehts nicht. Das einzige was aus Benutzersicht noch einfacher wäre, das wäre wenn er den Sensor auf eine bestimmte Temperatur gebracht hat (die er dem Programm einstellen kann) und er dann einen Knopf drückt. Das ganze 2 mal und das Programm rechnet sich dann selbst die Koeffizienten aus. Und Bauteiltoleranzen sind mir dann auch völlig schnuppe, weil die Umrechnung dann nicht auf irgendwelchen Werten basiert, die am grünen Tisch bestimmt wurden sondern real, mit den realen Bauteilen, ermittelt wurden.
:
Bearbeitet durch User
Karl Heinz schrieb: > René B. schrieb: >> Hallo zusammen, >> ihr macht da ja eine ganz schöne Wissenschaft aus dem NTC, der nur für >> 0..30°C eingesetzt werden soll... > > Was bitte ist am feststellen von 2 ADC Werten bei gleichzeitigem messen > der Temperatur mit einem Thermometer eine Wissenschaft? > Also in der Serienfertigung will man nichts über Temperatur abgleichen, weil das viel zu lange dauert bis man sicher ist, dass alles auf 0,1°C eingeschwungen ist.
Karl Heinz schrieb: > Und Bauteiltoleranzen sind mir dann auch völlig schnuppe Nicht Drift/Alterung. :-) Das wird mit einem NTC halt eher ein Schätzeisen. Solange einem die Grenzen klar sind ist das ja auch kein Problem, nur habe ich den Verdacht daß dem TO die Grenzen der Messung und der Unterschied zwischen Genauigkeit und Auflösung nicht ganz klar sind, sonst würde er sich weniger Gedanken darüber machen daß er nur die Hälfte des Messbereichs eines 10 Bit Wandlers nutzen kann.
Helmut S. schrieb: > Also in der Serienfertigung will man nichts über Temperatur abgleichen Meinst du wirklich daß der TO für eine Fertigung entwickelt?
Helmut S. schrieb: > Also in der Serienfertigung will man nichts über Temperatur abgleichen, > weil das viel zu lange dauert bis man sicher ist, dass alles auf 0,1°C > eingeschwungen ist. In der Serienfertigung kann man die Werte ja auch einmalig feststellen/errechnen und im Programm eintragen. Ich denke aber nicht, dass es hier um eine Serie geht
:
Bearbeitet durch User
Wenn du einen einfachen Spannungsteiler aus einer Reihenschaltung Vcc -> Festwiderstand -> NTC -> GND verwendest, bekommst du den maximalen Spannungsunterschied zwischen deinen beiden Extremwerten bei bekannten Widerstandswerten
und
durch den Festwiderstand
Hallo alle, die Variante von KarlHeinz mit der linearen Funktion finde ich super! Funktioniert perfekt, ist sogar ziemlich genau! Ist richtig, der NTC ist natürlich nicht der beste. Ich habe den nur für Testzwecke verwendet, weil er billig ist. Später kommt da ein besserer, aber die Vorgehensweise der Auswertung wird dann die gleich sein. Danke, lG
Hmmm... So linear ist das ganze doch nicht, wie du sagtest, Karl Heinz. Nachdem ich zur Zeit noch keine genauen Werte brauche, reicht mir das aber... Es soll irgendwann tatsächlich für die Serie sein... Mit dem besseren Sensor werde ich dann ev. auf eine lineare Kennlinie kommen, ansonsten muss ich ein Modell höherer Ordnung wählen. LG
> Mit dem besseren Sensor werde ich dann ev. auf eine lineare Kennlinie kommen
Mit einem NTC niemals!
Für was hast du denn einen Mikrocontroller? Der kann rechnen. Dafür ist der da.
Werner13 schrieb: > Hmmm... So linear ist das ganze doch nicht, wie du sagtest, Karl Heinz. Ich? Du hast doch gesagt, dass das in der Simulation schon schön linear aussieht. Welche Kurvenform hast du denn wirklich? Dann nimmst du eben anstelle von
1 | Temp = k * ADC_Wert + d |
eine quadratische Gleichung
1 | Temp = l * ADC_Wert * ADC_Wert + k * ADC_Wert + d |
und benutzt 3 Temperatur/ADC_Wert Pärchen um die Koeffizienten zu bestimmen. Die Genauigkeit bzw. die Linearität wird ja nicht besser oder schlechter, wenn du alle Teilberechnungen zu einer einzigen zusammenfasst. Lediglich der Rechenaufwand ist geringer, weil du Zwischen-Werte, die du eigentlich nicht brauchst erst gar nicht ausrechnest.
:
Bearbeitet durch User
Anbei meine Simulation, wie ich es aufgebaut habe. Sieht zwar schön aus, ist aber nicht ganz linear. Würde sich dafür eine quadratische Gleichung auszahlen? LG
Helmut S. schrieb: > Für was hast du denn einen Mikrocontroller? > Der kann rechnen. Dafür ist der da. Du meinst damit vermutlich das selbe oder? Also eine quadratische Gleichung aufstellen und die Werte aus dem ADC Wert berechnen?
Eine quadratische Gleichung wäre dann gut, wenn die Ableitung eine Gerade wäre. Das ist sie aber nicht wie man in dem unteren Plot sieht. Du müsstest also eine Gleichung 3. Grades nehmen. Ich habe mal T(Spannung) geplottet. Fürs grobe eine Gerade (ca. 1°C systematischer Rechenfehler), als Verbesserung ein Polynom 3. Grades T(Spannung) fitten. Was spricht gegen die Formel mit dem Logarithmus? Siehe die Formel als Kommentar in dem Schaltplan.
Was meinst du damit? Im Datenblatt des Sensors sind auch Widerstandwerte für bestimmte Temperaturen angegeben. Ich könnte die in einer Tabelle hinterlegen und dann linear zwischen den Punkten interpolieren. Was sagt ihr zu dieser Idee? Meinst du das damit? LG
Klar geht das auch mit einer Tabelle und linearer Interpolation. Das würde man dann machen, wenn es auf Rechenzeit ankommt oder der Controller sehr wenig Rechenleistung hat. Ansonsten halt die Formel mit dem Logarithmus nehmen.
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.