www.mikrocontroller.net

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


Autor: T. Öztürk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Ulla (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: T. Öztürk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: T. Öztürk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso ist dort von log anstatt von ln die Rede?

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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Andreas Langer (u-110)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Schau mal hier hilft vielleicht weiter:
http://www.daycounter.com/Calculators/Steinhart-Ha...

Gruss A.L.

Autor: Robin R. (elec-lisper)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
>> T1 = 253.15
T1 =  253.15
>> R1 = 74400
R1 =  74400
>> T2 = 408.15
T2 =  408.15
>> R2 = 428.8
R2 =  428.80
>> T3 = 572.5
T3 =  572.50
>> R3 = 37.7249
R3 =  37.725
>> A = [ 1, log(R1), log(R1) ^ 3;
         1, log(R2), log(R2) ^ 3;
         1, log(R3), log(R3) ^ 3 ]
A =
      1.0000     11.2172   1411.4149
      1.0000      6.0610    222.6542
      1.0000      3.6303     47.8448

>> b = [ 1/T1; 1/T2; 1/T3 ]
b =
   0.0039502
   0.0024501
   0.0017467

>> A \ b
ans =
  6.9835e-004
  2.8865e-004
  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%2... 
- Screenshot siehe Anhang )

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

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Epcos hat auch Applikationen zu NTCs
http://de.tdk.eu/tdk-de/194474/tech-library/publik...
http://de.tdk.eu/tdk-de/194580/design-support/tool...
aber zum Download gibts anscheinend nur Kurzdaten

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab da mal was rausgekramt:
1. Vorbereitungen 
zuvor zu messen:
 R_lowest  bei T_lowest
 R_middle  bei T_middle
 R_highest bei T_highest
 R_current bei gesuchter Temperatur (in °C)

  float Divisor;
  float edTl, edTm, edTh;
  float lnRm, lnRh;
  float ln3Rm, ln3Rh;
  float Ergebnis;
  float lgR;
  float R_current;

  edTl = 1/(Temp_lowest + 273.15);
  edTm = 1/(Temp_middle + 273.15);
  edTh = 1/(Temp_highest + 273.15);
  lnRm  = log(R_middle);
  ln3Rm = lnRm*lnRm*lnRm;
  lnRh  = log(R_high);
  ln3Rh = lnRh*lnRh*lnRh;
  Divisor = lnRm*ln3Rh - lnRh*ln3Rm;
  AA = 1/(Temp_lowest + 273.15);
  BB = ((edTm - edTl)*ln3Rh - (edTh - edTl)*ln3Rm) / Divisor;
  CC = ((edTh - edTl)*lnRm - (edTm - edTl)*lnRh) / Divisor;

2. die Temperaturberechnung

  lgR = log(R_current/R_lowest);
  Ergebnis = 1.0/(AA + BB*lgR + CC*lgR*lgR*lgR) - 273.15; // in °Celsius

vielleicht hilft's.

W.S.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.