Forum: Mikrocontroller und Digitale Elektronik NTC und Steinhart-Hart-Gleichung


von T. Öztürk (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich beschäftige mich zur Zeit mit der Temperaturmessung mittels eines 
Heißleiters und AD-Umsetzers. Zur Messung der Spannung am NTC verwende 
ich die Methode des Spannungsteilers und ermittelte so über die 
gemessene Spannung des NTC mit Hilfe der Berechnungsgleichung für einen 
Spannungsteiler den jeweiligen Widerstandswert des NTCs. Um aus dem 
berechneten Widerstand die jeweilige Temperatur zu ermitteln, habe ich 
zuerst die allgemeine Berechnungsgleichung für Heißleiter benutzt:

wobei R0 der Nennwiderstand und T0 die Nenntemperatur ist, die bei 
meinem
benutzen NTC jeweils 10kOhm und 25°C betragen. Die Größe b ist eine 
Materialkonstante und beträgt bei diesem Sensor 3474 K.

Aufgrund der Nichtlinearität des Heißleiters, ist diese 
Berechnungsgleichung
über größere Messbereiche zu ungenau und habe somit beschlossen, die 
Steinhart-Hart-Gleichung für die Berechnung der Temperatur zu benutzen.
Die Steinhart-Hart-Gleichung lautet:
Die Gleichung enthält noch ein quadratisches Glied, welcher aber öfters 
weggelassen wird, da er "angeblich" vernachlässigbar klein ist. (Was 
meint ihr dazu ?)

Um die drei unbekannten Koeffizienten (a,b und c) zu bestimmen, habe ich 
ein Gleichungssystem aufgestellt:

und es ,aus Faulheitsgründen, mit dem CAS Programm Maxima lösen 
lassen.
Natürlich könnte man einfach ln(R) und 1/T substituieren und
für R bzw. T feste Werte einsetzen und es schnell lösen,
aber ich wollte erstmal eine allgemeine Lösung mit Paramtern haben.

Um die Koeffizienten nun zu bestimmen habe ich für die einzelnen 
Temperaturen und Widerstände die Werte aus dem Datenblatt entnommen.
Im Datenblatt sind einige Temperatur-Widerstand-Werte aufgelistet, wobei
der Widerstand nicht direkt, sondern als Verhältnis zum Nennwiderstand 
angegeben ist. Dementsprechend wurden die Verhältnisse mit 10kOhm 
multipliziert und in die Berechnungsgleichungen(Lösungen vom CAS 
Programm) eingesetzt. Als Wertepaare habe ich einmal meine minimale, 
maximale und mittlere zu messende Temperatur benutzt. Wobei die mittlere 
Temperatur einfach der Mittelwert von max. und min. Temperatur ist. Da 
aber in dem Datenblatt das Wertepaar für die Temperatur 300°C nicht 
angegeben ist, habe ich den zugehörigen Widerstandswert nach Gleichung 1 
(siehe oben) berechnet, auch wenn dies nicht sehr genau ist.

Die Werte wurden selbstverständlich in Kelvin und Ohm eingesetzt und
berechnet.

Hier sind die ausgewählten Temperaturen bzw. Widerstände, sowie die 
berechneten Koeffizienten aufgelistet:

T1=253.15 K
R1= 74400 Ohm

T2=408.15 K
R2= 428.8 Ohm

T3=572.5 K
R3= 37.7249 Ohm

daraus ergaben sich folgende Koeffizienten:
a=0,000967715160951651
b=-0,000330375963722738
c=5,37390450491747E-07

Die Berechnung der Koeffizienten erfolgten in dem selbst geschriebenen 
Programm, welches über den SerialPort den AD-Wert vom Mikrocontroller 
(Atmega8) holt und diesen anschließend berechnet und
zwar einmal nach der allgemeinen, ungenauen, Berechnungsgleichung 
(Gleichung 1) und nach der Steinhart-Hart-Gleichung.
Ich habe mal grob die Koeffizienten mit anderen
Koeffizienten von anderen Heißleitern verglichen (Ja, es gibt auch 
Hersteller, die in dem Datenblatt die Steinhart-Hart-Koeffizienten 
auflisten) um zu schauen ob diese von der Größenordnung her 
übereinstimmen und das ist auch der Fall.

Mein Problem ist nun, dass die berechnete Temperatur nach der 
Steinhart-Hart-Gleichung falsch ist bzw. sehr klein. Da kommt immer ein 
Wert mit der Größenordnung 10^-5 raus (in Kelvin !), was ja nicht sein 
kann. (Die Luft liegt nicht Flüssig neben mir herum...:-] ). Die 
berechnete Temperatur nach Gleichung 1 beträgt c.a. 294 K (21°C).

Da ich in diesem Gebiet noch keine große Erfahrung habe, würde ich gerne 
wissen, ob ich irgendwelche Fehler bei der Vorgehensweise gemacht habe? 
Darf ich für die Berechnung der Koeffizienten die Wertepaare aus dem 
Datenblatt nehmen, oder muss ich die schon selbst messen ?!

Als Serienwiderstand für den Spannungsteiler habe ich 1KOhm benutzt.

Das Datenblatt ist im Anhang wieder zu finden, wobei ich sagen muss, 
dass die Qualität des Datenblattes zu Wünschen übrig lässt. (Meiner 
Meinung nach). Im Datenblatt ist der Heißleiter (bzw. die Heißleiter, da 
es auch eine 5KOhm Variante gibt) jeweils markiert. Der Heißleiter hat 
die R/T-Kennlinie 8010 und ist vom Typ: M87/10k/K100.

Aus mathematischer Sicht sehe ich kein Fehler. Vielleicht habe ich 
etwas
missverstanden...

Bei Bedarf kann ich gerne die Lösungen des CAS Programms posten.

Bin für jeden Tipp dankbar.

mfGruß und einen guten Start in die Woche.

T. Öztürk

von Ulla (Gast)


Lesenswert?

Angesichts der Herstellungstoleranzen der entscheidenden Parameter im 
%-Bereich und der zusätzlichen unvermeidlichen zeitlichen Inkonstanz, 
würde ich mir nicht die Mühe einer exakten Berechnung mittels der von 
dir angegebenen Gleichungen machen, zumal auch diese nur eine Näherung 
sind. Stattdessen würde ich eine stückweise lineare Approximation 
mithilfe einiger, weniger tabellierter Referenzwerte durchführen.

von T. Öztürk (Gast)


Lesenswert?

Hallo Ulla,

danke für deine schnelle Antwort.

Ich finde, dass man über die hier eingesetzte Mühe nicht mehr zu reden 
braucht, da die Gleichungen  schon stehen und es wirklich kein Akt war 
diese aufzustellen. Viel mehr ist die Frage die hier interessiert, ob 
bei der Vorgehensweise bzw. vom Gedankengang her was falsch gemacht bzw. 
missverstanden wurde.

von Anja (Gast)


Lesenswert?

Hallo,

Ich will das jetzt nicht nachprüfen aber
bei Vishay sehen die Gleichungen etwas anders aus:
Der quadratische Therm wird dort auch nicht vernachlässigt.

http://www.vishay.com/docs/29049/23816403.pdf

Vielleicht hilfts bei der Analyse.

Gruß Anja

von T. Öztürk (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Anja,

danke für die Antwort.

Die Gleichungen stimmen doch. Das Problem lag an meinem Programm und 
zwar war es ein blöder und fieser Bug, der sich eingeschlichen hat.
Die Lösungen der Berechnungsgleichungen für die 
Steinhart-Hart-Koeffizienten habe ich im Anhang als JPEG Bild angefügt.

mfGruß

T. Öztürk

von Alex (Gast)


Lesenswert?

Sorry, dass ich den Thread wieder hochpushe, aber ich sitze vor einem 
ähnlichem Problem. Und das letzte Posting wirft fragen auf: Wieso ist 
dort von log anstatt von ln die Rede?

von Purzel H. (hacky)


Lesenswert?

Wieso ist dort von log anstatt von ln die Rede?

> ist doch dasselbe - unterscheidet sich nur um eine Konstante.

von Michael (Gast)


Lesenswert?

Alex schrieb:
> Und das letzte Posting wirft fragen auf: Wieso ist
> dort von log anstatt von ln die Rede?

Das sieht eher so aus, als ob das Programm für den natürlichen 
Logarithmus das Formelzeichen "log" verwendet?

von Alex (Gast)


Lesenswert?

Ah, OK, soweit ich die Antworten verstanden hab, wäre die Gleichung auch 
mit ln korrekt.
Ich probier es mal so zu implementieren. Danke für die Antworten!

von Andreas L. (u-110)


Lesenswert?

Hallo
Schau mal hier hilft vielleicht weiter:
http://www.daycounter.com/Calculators/Steinhart-Hart-Thermistor-Calculator.phtml

Gruss A.L.

von R. R. (elec-lisper)


Angehängte Dateien:

Lesenswert?

Da der original Autor des Threads so schön viel Info geschrieben
hat und ich gerade an einem ähnlichen Projekt sitze,
krame ich diesen Thread nochmal raus.

Ich wollte anmerken, dass ich beim Lösen des Gleichungssystems
auf komplett andere Werte für a, b und c komme.
Hier ein Transkript aus GNU Octave:
1
>> T1 = 253.15
2
T1 =  253.15
3
>> R1 = 74400
4
R1 =  74400
5
>> T2 = 408.15
6
T2 =  408.15
7
>> R2 = 428.8
8
R2 =  428.80
9
>> T3 = 572.5
10
T3 =  572.50
11
>> R3 = 37.7249
12
R3 =  37.725
13
>> A = [ 1, log(R1), log(R1) ^ 3;
14
         1, log(R2), log(R2) ^ 3;
15
         1, log(R3), log(R3) ^ 3 ]
16
A =
17
      1.0000     11.2172   1411.4149
18
      1.0000      6.0610    222.6542
19
      1.0000      3.6303     47.8448
20
21
>> b = [ 1/T1; 1/T2; 1/T3 ]
22
b =
23
   0.0039502
24
   0.0024501
25
   0.0017467
26
27
>> A \ b
28
ans =
29
  6.9835e-004
30
  2.8865e-004
31
  9.9147e-009

Die drei letzten Werte sind a, b und c für die Formel.
Diese stimmen mit der Berechnung über einen online verfügbaren
Rechner überein ( 
http://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm 
- Screenshot siehe Anhang )

Da die Größenordnungen der Werte aber ca. stimmen, frage ich
mich woher die Differenzen kommen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?


von Sepp (Gast)


Lesenswert?

Michael schrieb:
> Alex schrieb:
>> Und das letzte Posting wirft fragen auf: Wieso ist
>> dort von log anstatt von ln die Rede?

Wäre aber in diesem Fall völlig egal da aufgrund der anderen Basis des 
Logarithmus nur ein konstanter Faktor als Abweichung entsteht welcher 
dann einfach beim Lösen der Gleichungen in den jeweiligen Koeffizienten 
b und c berücksichtigt wird.

Hier wäre es evtl. sogar vorteilhaft den Logarithmus Dual zu verwenden, 
da man diesen bei der Verwendung von Gleitkommazahlen bereits implizit 
in der Zahl hat.... Also nur falls es schnell gehen soll...

von W.S. (Gast)


Lesenswert?

Hab da mal was rausgekramt:
1
1. Vorbereitungen 
2
zuvor zu messen:
3
 R_lowest  bei T_lowest
4
 R_middle  bei T_middle
5
 R_highest bei T_highest
6
 R_current bei gesuchter Temperatur (in °C)
7
8
  float Divisor;
9
  float edTl, edTm, edTh;
10
  float lnRm, lnRh;
11
  float ln3Rm, ln3Rh;
12
  float Ergebnis;
13
  float lgR;
14
  float R_current;
15
16
  edTl = 1/(Temp_lowest + 273.15);
17
  edTm = 1/(Temp_middle + 273.15);
18
  edTh = 1/(Temp_highest + 273.15);
19
  lnRm  = log(R_middle);
20
  ln3Rm = lnRm*lnRm*lnRm;
21
  lnRh  = log(R_high);
22
  ln3Rh = lnRh*lnRh*lnRh;
23
  Divisor = lnRm*ln3Rh - lnRh*ln3Rm;
24
  AA = 1/(Temp_lowest + 273.15);
25
  BB = ((edTm - edTl)*ln3Rh - (edTh - edTl)*ln3Rm) / Divisor;
26
  CC = ((edTh - edTl)*lnRm - (edTm - edTl)*lnRh) / Divisor;
27
28
2. die Temperaturberechnung
29
30
  lgR = log(R_current/R_lowest);
31
  Ergebnis = 1.0/(AA + BB*lgR + CC*lgR*lgR*lgR) - 273.15; // in °Celsius

vielleicht hilft's.

W.S.

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
Noch kein Account? Hier anmelden.