mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperatur mit NTC bestimmen


Autor: olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich weiss, dass das Thema schon mehrfach besprochen wurde. Grundsätzlich 
habe ich auch keine Frage zu Aufbau, Verdrahtung, Berechnungsformel etc.

Mein Problem ist, dass ich, anhand des Datenblattes, nicht weiss, welche 
Werte ich für A1 B1 C1 und D1 nehmen muss... Hab mit den Datenblättern 
zu NTC nicht soviel Erfahrung, eigentlich gar keine...

Ich habe einen NTC mit 2.2K mit folgendem Datenblatt:
[[http://www.reichelt.de/?;ACTION=7;LA=6;OPEN=0;INDE...]]

Kann mir vielleicht jemand helfen?

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

Bewertung
0 lesenswert
nicht lesenswert
Also : R(T):=R(25)*exp(b25*(1/(T+273) - 1/(25+373) ));

oder aehnlich. Das exponentielle Polynom wuerd ich lassen, den besser 
als 2% ist der Sensor nicht.

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf Seite 2 in der Tabelle findest du deinen B-Wert,
hier für 2200 Ohm 3977.

Auf Seite 4 unter der Formel ist das dann der Parametersatz 9

Eine Tabell ist auf Seite 10-11 unter Spalte 6.222

Hoffe, dein µC hat Rechenpower ;)

Hans

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

Bewertung
0 lesenswert
nicht lesenswert
Nee. Ein AVR packt das schon. Vielleicht nicht 10k mal pro sekunde. Aber 
ein paar Duzend mal sollte gehen.

Autor: olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay alles klar...

Also könnte ich mit folgender Formel die Temperatur berechnen:

T(R) = B / [273*(ln(RT/2200)+(1/25+273)]

Ich habe einfach die obige Formel nach T aufgelöst.
Oder habe ich einen Fehler gemacht?

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fuer ein Renesas Board hab ich mal folgende Funktion geschrieben:
float calculate_ntc_temp(void)
{
  float rth;
  float temp;

  // values and formula taken from datasheet at http://www.vishay.com/docs/29049/23226403.pdf
  // NTC type used on SKP board is 2322 640 66103

  const float a = 3.354016e-3;
  const float b = 2.569355e-4;
  const float c = 2.626311e-6;
  const float d = 0.675278e-7;

  temp = ad1_value;
  rth = (temp * 7320.0) / (1024.0 - temp);  // now we have the resistance in ohms

  temp = log(rth/10000.0);

  rth = (1.0/(a+b*temp+c*temp*temp+d*temp*temp*temp))-273.16;
  return rth;
}

Zum Test hatte ich noch einen DS1820 auf dem Board. Die Abweichung 
zwischen den beiden Sensoren war im getesteten Bereich (~10-30 C) immer 
<= 0,1 Grad.

Autor: tom-2940 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  olli,

Ich stand vor dem gleichen Problem.
Ich habe mir mit dem PC ausrechnen lassen und dann in ein Array fest 
codiert.

War halt nur 8 bit.

Gruß,
Tom

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

Bewertung
0 lesenswert
nicht lesenswert
>  rth = (1.0/(a+b*temp+c*temp*temp+d*temp*temp*temp))-273.16;

Nicht optimal. Da kann man sich einiges sparen wenn man mit dem 
Hornerschema arbeitet.
Allenfalls auf Ganzzahl umformen.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nebliger Pfad schrieb:
> Nicht optimal. Da kann man sich einiges sparen wenn man mit dem
> Hornerschema arbeitet.
> Allenfalls auf Ganzzahl umformen.

Hast Du da ein C-Beispiel?
Kommt auch noch auf mich zu und ich muss das Rad ja nicht zum ...zigsten 
Mal neu erfinden.

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

Bewertung
0 lesenswert
nicht lesenswert
C, C ,C ... wenn man die Mathematik begriffen hat ist es nicht sehr 
schwer. Also. Anstelle von
 a*x+b*x*x+c*x*x*x // 6 multiplikationen 2 additionen
schreibt man
 x*(u+x*(w+z*x))    //3 multiplikationen 2 additionen

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olli,

man kann auch für kleinere Temperaturbereiche mittels passendem 
Spannungsteilerwiderstand linearisieren.
-> es reicht eine Geradengleichung um die Temperatur aus dem ADC-Wert zu 
berechnen.
Siehe hier:
Beitrag "Temperatur Messung mit Mega8 und NTC-Widerstand 4,7k"

bei einem NTC mit 2K2 ist bei normalen ADC-Messbereichen die 
Selbsterwärmung des Sensors nicht zu vernachlässigen. Ich würde bei 5V 
ADC einen NTC nicht unter 10 KOhm verwenden.
(5V*5V / 10K = 2,5 mW bei 200K/W ergibt sich ein Fehler von 0,5K)

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach ausklammern, die entsprechende Zeile sieht dann so aus:
rth = (1.0/(a+b*(c+temp*(temp(d+temp))))-273.16;

spart ein paar multiplikationen. war in dem fall relativ egal, da das 
ding nur 1 mal pro sekunde lief und der controller eh nix zu tun hatte.

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh da war jemand schneller, hätt ich mal f5 gedrueckt

Autor: Flea (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mach gerade so was ähnliches mit einem NTC-Widerstand von Conrad, 
bei dem diese Koeffizienten (a, b, c,...) nicht angegeben sind. Jedoch 
ist im Datenblatt eine Tabelle, in der die Widerstandswerte in 
Abhängigkeit der Temperatur angegeben ist.
Die Spannung über dem NTC wird gemessen, damit kann man auch die 
Spannung am Vorwiderstand und den Strom und folglich auch den 
Widerstandswert des NTCs berechnen.
Dann such ich in der Widerstandstabelle aus dem Datenblatt (liegt als 
const im Programm natürlich vor) die beiden benachbarten Werte (darüber 
und darunter), linearisiere zwischen beiden Werten und erhalte damit den 
exakten Temperaturwert!
Ich glaube, diese Methode ist relativ umständlich, aber auch genauer als 
die oben beschriebenen Methoden (oder was meinen die anderen?). Da ich 
bei dieser Methode auch kein Logarithmus benötige, hält sich in Sachen 
Geschwindigkeit wahrscheinlich sogar die Waage.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich glaube, diese Methode ist relativ umständlich, aber auch genauer als
>die oben beschriebenen Methoden (oder was meinen die anderen?).

Nee ist nicht umständlich, sondern die Standard-Methode wenn man kein 
Floating Point verwenden sondern mit Integer-Rechnung auskommen will.
Im Normalfall macht man sich eine Tabelle mit Stützstellen aus 
Eingangsspannung bzw. ADC-Wert (nicht Widerstand) und als Y-Wert die 
Temperatur.

Die Genauigkeit ist (ohne Kalibrierung) limitiert durch den Sensor.
Bei 1% Sensoren ist die Abweichung schon in der Gegend von bis zu 2.5 
Grad.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nebliger Pfad schrieb:
> C, C ,C ... wenn man die Mathematik begriffen hat ist es nicht sehr
> schwer.

Es muss nicht C sein, wäre aber für Copy&Paste ideal (kostet halt keine 
Gehirnzellen und erzeugt keine unnötige Überschusswärme im 
Oberstübchen).

Die Mathematik sollte kein Problem sein. Mit Hornerschema konnte ich 
aber zunächst nichts anfangen, habe mich auch dahingehend schlau 
gemacht.

Trotzdem danke.

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.