Hallo, ich möchte einen NTC als Temperaturfühler an den ADC eines µCs hängen. Dazu würde ich einen Spannungsteiler mit 100K und dem NTC 47K aufbauen. Wenn ich nun im Datenblatt nachsehe stellen sich mir folgende Fragen: 1. Auf Seite 3 steht bei 47K der Typ wäre 4012, mit einem Widerstandswert bei 25°C von 3455 Ohm (+- 3%) Wieso ist der dann mit 47K angegeben? Wenn er doch bei 25°C bestimmt wird? 2. Also weiter auf Seite 10. - T(°C) ist die Temperatur - B25/100 ist mir nicht ganz klar, B25 wird der Widerstand bei 25°C sein. Was bedeutet die 100? - Was bedeutet RT/R25 was gibt dieses Verhältnis an? - und was bedeutet das alpha % / K ? 3. Wenn ich in meinem µC die Temperatur in Abhängigkeit von gemessenm Widerstand (Spannung) berechnen will. Muss ich wohl eine Formel erstellen. Wie kann ich dort am besten vorgehen? Ich hätte jetzt die Tabelle aus dem Datenblatt in EXCEL eingetragen und mir die Formel ausgeben lassen. Ist das der richtige Weg oder geht das einfacher? Danke für Eure Antworten Maik
Hi, ich glaube da bringst Du war durcheinander. Auf Seite 3 stehen in der ersten Spalte die von Epcos angebotenen NTC´s dieser Serie (1k - 470kOhm @ 25°C). Die zweite Spalte gibt den characteristischen Temperaturverlauf an, diesen kannst du dir in den hinteren Tabellen anschauen und die Werte z.B. für deine Lookup-Table nutzen oder anber du benutzt den Wert aus der dritten Spalte (B-Wert) und berechnest den Kurvenverlauf R=f(T) nach einer Formel (Formel steht u.a. im Tabellenbuch, Tieze/Schenk, I-Net etc.) Bei der Umsetzung würde ich dir empfehlen, den Kurvenverlauf stückchenweise zu liniearisieren und dann als Tabelle abzulegen. Der aktuelle Temperaturwert kann dann mit der Formel : f(x) = f_0 + ((f_1 - f_0 / x_1 - x_0) * (x - x_0)) berechnet werden. f ^ | f_1 + * | / | / f(x)+ / | / teil-linearisierte Strecke | / | / f_0 + * | | --------------+-----+--+------> x x_0 x x_1
Hi, zu 1. und2.: Also der Typ heißt 4012, gehst du nun auf Seite 10, und guckst in der Spalte "4012" nach, so findest du hier das Verhältniss(Rt/Rt25) zwischen Grundwert (47k) und dem Wert bei der jeweiligen Temperatur. Sprich bei 50°C (Rt/Rt25 = 0.33229) hast du einen Widerstandswert von 15,61763 kOhm, da 47k * 0.33229 = 15,61763k ist. Auf Seite 21 findest du zudem eine Legende wo B25/100 erklärt wird, es handelt sich hierbei um den sogenannten B-Wert, wobei es sich hier um die Materialkonstante handelt. Alpha in (%/K) ist der Temperaturkoeffizient, der sich natürlich im Laufe der Erwärmung stetig ändert, da NTC's bekanntlich eine nichtlienare Kennlinie haben, im Gegensatz zu z.B. Festwiderständen oder Platin-PTC's. Alpha- und B-Wert sind so lange uninteressant für dich, wie du dich an die Tabelle hälst. Willst du genauere Werte, z.B. bei 47,52°C, so musst diese Werte benutzen und in der Formel Rt=Rn * e^(B*((1/T)-(1/Tn)) einsetzen. Rn und Tn sind jeweils Nennwiderstand und Nenntemperatur, sprch 47k bei 25°C. Hoffe das hilft schon mal, und es ist verständlich genug
Hallo, danke für Eure Ausführungen. Jetzt ist mir einiges klarer. @Gast Bei der stückweisen Linearisierung muss ich im µC einen recht hohen Aufwand treiben. Da ist mir die Berechnung der e-Funktion sympatischer. Ich hoffe auch genauer. @Christian Funke Interpretiere ich die Formel ( Rt=Rn * e^(B*((1/T)-(1/Tn)) ) so richtig? Rt = Widerstand bei aktueller Umgebungstemperatur(z.B. 50°C) Rn = 47k (Nennwiderstand ) B = 4355 (B-Wert, Widerstandsmessungen bei 25 °C und 100 °C) T = aktuelle Umgebungstemperatur Tn = 25°C (Nenntemperatur) D.h. wenn ich vom gemessenen Widerstand auf die Temperatur kommen will, muss ich die Formel nach T umstellen? Was mache ich aber mit alpha? Maik
Hallo, Ich habe mal versucht anhand der Formel die Tabellenwerte nachzurechnen. Das klappt aber nicht. Irgendwas setze ich wohl noch falsch ein. Kann mir jemand noch mal auf die Sprünge helfen? Maik
Temperaturen sind in Kelvin und nicht in Grad einzusetzen!! Dann sollte es gehen. hans
>Bei der stückweisen Linearisierung muss ich im µC einen recht hohen >Aufwand treiben. Da ist mir die Berechnung der e-Funktion sympatischer. >Ich hoffe auch genauer. Das will ich mal stark bezweifeln, dass eine e-Fkt im µC einfacher zu berechnen ist... genauer ist sie auf jedenfall nicht! Denn die Formel Rt=Rn * e^(B*((1/T)-(1/Tn)) ist auch nur eine Näherung. Die genaueste Abhängigkeit des Widerstands von der Temperatur findet sich immer noch in der R-T-Tabelle des Datenblatts!
Zuerst sollte man sich ueberlegen, welche Genauigkeit man braucht, wie genau der Sensor ist, und dann kann man auch eine aussage machen, ob allenfalls eine Polynom approximation sinvoll ist. Ich glaube mich zu erinneren, dann man mit einer Taylorreihe bis zur 6 Potenz um die Mitte des interessanten Bereiches schon relativ gut dabei ist.
Hallo Stefan, wie würdest Du die Berechnung der Temperatur im µC vornehmen? Muss man nicht die Tabelle aus dem Datenblatt komplett in den µC eintragen und dann zwischen den Angaben ( 47.000 - 37.272 ) jeweils die Temperatur aus dem Widerstandswert ermitteln? Maik
Maik schrieb: > Hallo Stefan, > > wie würdest Du die Berechnung der Temperatur im µC vornehmen? Ich würde als erstes hergehen und mir mit der Tabelle im Excel ein Sheet basteln, bei dem ich mit den Tabellentemperaturen die Widerstandswerte ausrechne, damit in den von dir dimensionierten Spannungsteiler gehe und die Umrechnung in ADC Werte mache. Ziel ist es, ein Diagramm zu erhalten in welches ich mit den ADC Werten hineingehen kann und daraus die Temperatur ablesen kann. Dann lege ich fest, welcher Temperaturbereich mich überhaupt interessiert und ich schau mir im Diagramm an, wie in diesem Bereich die Kurve verläuft. Gibt es ein Polynom mit Grad 2 oder 3, welches diese Kurve hinreichend gut annähert? Dazu muss ich festlegen, was für mich 'hinreichend gut' bedeutet. Also bstimme ich mir ein derartiges Polynom (oder lasse das Excel machen) und lass mir in einer weiteren Tabellenspalte die Differenz der Polynomumrechnung zum Wert, den ich aus der Tabelle erhalten würde ausgeben. Ist die Abweichung für mich akzeptabel genug, dann nehme ich das Polynom. Ansonsten nehme ich die 15 oder 20 Werte, die ich aus der Tabelle brauche, rechne auf die ADC Werte zurück und schreib mir Code, der für einen gegebenen ADC Wert die jeweils benachbarten Tabellenwerte sucht und dazwischen linear interpoliert. > jeweils die > Temperatur aus dem Widerstandswert ermitteln? Im Prinzip ja. Aber so macht man das nicht. Letztenendes hast du ja den Widerstandswert nicht, sondern du hast die Spannung im Spannungsteiler, ausgedrückt durch eine Zahl, die dir der ADC gibt. Der Widerstandswert an sich interessiert nicht, deine Umrechnung geht von diesem ADC Wert weg und liefert eine Temperatur. Je mehr Berechnungen du im µC machst, desto * langsamer * ungenauer wird das Ganze. Also musst du dir im Vorfeld schon möglichst viele Berechnungen aus dem µC herausziehen und in deiner Vorbereitungsphase erledigen.
Prinzipiell JA, am besten gehst du so vor : Der NTC ist i.d.R. der Teil eines Spannungsteilers welcher mit der einen Seite an GND angebunden ist und mit der anderen die Verbindung des analogen Pin des µC darstellt. Nun musst du zuerst den Spannungsteiler dimensionieren, d.h. den zweiten Widerstand des Spannungsteilers so auslegen, dass der Spannungshub im gewünschten Temperaturbereich (z.B. -20 ... +50°C, hängt von deiner Anwendung ab) sehr hoch ist. Ein Bsp: Sollte es möglich sein mit einer Dimensionierung einen Hub von 4V (-20°C = 4.5V und +50 = 0.5V am AD-Eingang) zu erreichen, dann hättest du eine Auflösung bei 10Bit von 0.086°C. Um das Maximum des Spannungshubs herauszufinden musst du bei deiner Dimensinieren einwenig mit Excel spielen. Nachdem der Spannungsteiler dimensioniert ist, solltest du nun in Excel die Informationen über Temperatur in Abhängigkeit des AD-Wanderwertes vorliegen haben T = f(AD). Die Kurve stellst Du grafisch dar und fänst an sie linearisieren (so wie ich gestern vorgeschlagen habe!). Du wirst sehen, dass am Ende eine Tabelle von weniger Zeilen benötigt wird als ursprünglich in deiner Vorbetrachtung notwendig war. Ich gebe dir recht, dass die Erstellung der Funktion zur Berechnung der aktuellen Temperatur auf der teillinearisierten Geraden einen gewissen Aufwand darstellt. Wenn du die Funktion aber allgemeingültig definierst, dann schaffst du dir ein universelles Tool für die Zukunft. Hier ein Ansatz : 1) Eingangsgröße x = aktueller AD-Wert, durchlaufe die hinterlegte Tabelle bis x >= Tabellenwert. => x_0 gefunden 2) Aktueller Tabellen Index ist x_0 und Index+1 = x_1 3) Führe Teilberechnungen für die Formel f(x) = f_0 + ((f_1 - f_0 / x_1 - x_0) * (x - x_0)) durch. 4) Am Ende hast du deine gewünschte Temperatur.
>Nun musst du zuerst den Spannungsteiler dimensionieren, d.h. den zweiten >Widerstand des Spannungsteilers so auslegen, dass der Spannungshub im >gewünschten Temperaturbereich (z.B. -20 ... +50°C, hängt von deiner >Anwendung ab) sehr hoch ist. Ein Bsp: Sollte es möglich sein mit einer >Dimensionierung einen Hub von 4V (-20°C = 4.5V und +50 = 0.5V am >AD-Eingang) zu erreichen, dann hättest du eine Auflösung bei 10Bit von >0.086°C. Um das Maximum des Spannungshubs herauszufinden musst du bei >deiner Dimensinieren einwenig mit Excel spielen. Da braucht man nicht herumprobieren, die größte Steigung der R(T)-Kennlinie bekommt man, wenn R(T) und R (Spannungsteiler) gleich groß sind! Wenn man also z.B. im Bereich 20°C - 60°C messen möchte, ermittelt man in der Mitte des Messbereichs R(T=40°C) und wählt den Spannungsteiler-Widerstand genauso groß.
Genau. Und dann sollte man die Genauigkeit des Referenzwiderstandes nicht vergessen. Je nach Anforderung sind 5% nicht genug. Die meisten Widerstande gibt es als 1%, gewisse selektierte Werte auch als 0.1%.
Und bei dem Festwiderstand unter Umständen, ich weiss ja nicht in welchem Temperaturbereich du messen möchtest, auch dessen Widerstandszunahme oder Abnahme beachten. Kommt natürlich auch auf die Genaugikeit an, mit der das Messsystem aufgebaut werden soll und wie nah das Messsystem am Messobjekt liegt. Am besten geeignet sind hier hierfür Widerstände mit geringem Temperaturkoeffizienten, zum Beispiel 10ppm.
Hallo, Danke für Eure Anregungen und Tipps. Ich habe mich jetzt für die Lösung mit der Teillinearisierung entschieden. Ist zwar im ersten Moment recht aufwändig, kann man aber immer wieder verwenden :-) Es ist für meine Zwecke auch genau genug. Maik
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.