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
>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