Forum: Mikrocontroller und Digitale Elektronik Temperatur mit NTC bestimmen


von olli (Gast)


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;INDEX=0;FILENAME=B400%252FNTC-02_Serie.pdf;SID=29AA3x0qwQAR0AACxbmjwae0bb57c39b21a6831d1a0752384d586]]

Kann mir vielleicht jemand helfen?

von Purzel H. (hacky)


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.

von hans (Gast)


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

von Purzel H. (hacky)


Lesenswert?

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

von olli (Gast)


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?

von Marko B. (glagnar)


Lesenswert?

Fuer ein Renesas Board hab ich mal folgende Funktion geschrieben:
1
float calculate_ntc_temp(void)
2
{
3
  float rth;
4
  float temp;
5
6
  // values and formula taken from datasheet at http://www.vishay.com/docs/29049/23226403.pdf
7
  // NTC type used on SKP board is 2322 640 66103
8
9
  const float a = 3.354016e-3;
10
  const float b = 2.569355e-4;
11
  const float c = 2.626311e-6;
12
  const float d = 0.675278e-7;
13
14
  temp = ad1_value;
15
  rth = (temp * 7320.0) / (1024.0 - temp);  // now we have the resistance in ohms
16
17
  temp = log(rth/10000.0);
18
19
  rth = (1.0/(a+b*temp+c*temp*temp+d*temp*temp*temp))-273.16;
20
  return rth;
21
}

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.

von tom-2940 (Gast)


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

von Purzel H. (hacky)


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.

von Christian H. (netzwanze) Benutzerseite


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.

von Purzel H. (hacky)


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

von Anja (Gast)


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)

von Marko (Gast)


Lesenswert?

einfach ausklammern, die entsprechende Zeile sieht dann so aus:
1
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.

von Marko (Gast)


Lesenswert?

oh da war jemand schneller, hätt ich mal f5 gedrueckt

von Flea (Gast)


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.

von Anja (Gast)


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.

von Christian H. (netzwanze) Benutzerseite


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.

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.