Forum: Mikrocontroller und Digitale Elektronik NTC Temperatur Messung stimmt nicht Arduino


von Martin A. (airmartl)


Angehängte Dateien:

Lesenswert?

Hi,

bitte um Hilfe.

Einfacher aufbau
Spannungsteiler 5V, NTC10k, 10k, GND.

Ich messe im Bereich 15 bis 35°C richtig.
Bei höheren Temperaturen stimmt es gar nicht. Bei 100°C messe ich nur ca 
55°C.


Über
https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator/ntccalculator.html
trage ich die Werte aus dem Datenblatt ein und berechne ich die 3 Werte 
für die Ummrechnung.

Generell will ich mit dem Sensor eine Öltemperatur überwachen und bei 
einer Temperatur von 150°C eine Warnlampe schalten.

C CODE:

int ThermistorPin = 1;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 2.697884055e-03, c2 = 0.06364604926e-04, c3 = 
9.148053125e-07;

void setup() {
Serial.begin(9600);
pinMode(12, OUTPUT);
}

void loop() {
  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  Tc = T - 273.15;

  Serial.print("Temperature: ");
  Serial.print(Tc);
  Serial.println(" C");

  if
    (Tc > 25){ digitalWrite(12, HIGH);
  }
  else
  {
    digitalWrite(12, LOW);
  }
  delay(500);
}

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Martin A. schrieb:
> Ich messe im Bereich 15 bis 35°C richtig.

dann unterteile doch deine Messung oder erstelle dir eine Wertetabelle

http://www.fahrzeug-elektrik.de/inbe.gif

bei 100°C bis 150°C kannst du ja fast linerar rechnen dR / dT

von Martin A. (airmartl)


Lesenswert?

OK, linear hört sich unkomplizierter an.
Ich will ja prinzipiell eh nur über 100°C messen.

Wie würdest du das im C code schreiben?

von my2ct (Gast)


Lesenswert?

Martin A. schrieb:
> Generell will ich mit dem Sensor eine Öltemperatur überwachen und bei
> einer Temperatur von 150°C eine Warnlampe schalten.

Martin A. schrieb:
> Wie würdest du das im C code schreiben?

if (measuredValue >= ValueAt150deg)
  WarningLamp = ON
else
  WarningLamp = OFF

von Michael B. (laberkopp)


Lesenswert?

Martin A. schrieb:
> Spannungsteiler 5V, NTC10k, 10k, GND.
>
> Ich messe im Bereich 15 bis 35°C richtig.

Na ja, du hast ja auch deinen Gegenwiderstand auf 25 GradC eingestellt.
Das sollte die Mitte des Messbereichs sein.
Wenn du nun von 0 bis 200 messen willst, sollte der Widerstand den Wert 
haben, den der NTC bei 100 GradC hat, damit es keinen so gewaltigen 
Verlust an Präzision gibt.

Insgesamt solltest du mal in Ecxel für die 1024 A/D-Wandlermesswerte 
auflisten lassen für welche Temperatur sie gelten.

Joachim B. schrieb:
> bei 100°C bis 150°C kannst du ja fast linerar rechnen dR / dT

Wenn man beliebige Fehler akzeptiert weil man die Grundlagen der 
Mathemnatik so gar nicht verstanden hat, die Kruve ist dort nicht 
weniger kurvig als bei 15-35.

Man könnte aber durch Parallelschaltung einen Widerstandes die Kennlinie 
etwas linearisieren.
Linearisierung eines NTC R(parallel) = Rntc(T) * (B-2T)/(B+2T) mit T
mittlerer Temperatur.

von Achim S. (Gast)


Lesenswert?

Martin A. schrieb:
> Ich will ja prinzipiell eh nur über 100°C messen.

Dann ist dein NTC ungünstig gewählt. Der hat bei 25° seine 10kOhm und 
damit die höchste Empfindlichkeit in deinem Spannungsteiler mit 10kOhm 
Festwiderstand. Aber bei 100° ist er schon unter 100Ohm, und er hat 
damit kaum mehr einen Einfluss auf die Spannung des Spannungsteilers. 
Der für dich interessante Temperaturbereich wird damit auf weniger als 
1% des Spannungsbereichs zusammgeschoben, den dein Arduino messen kann, 
die Spannung im interessanten Temperaturbereich von 100° bis 150° änder 
sich nur von ~4,96V bis 5V.

Der NTC-Widerstand sollte im interessanten Messbereich ungefähr dem 
zweiten Teilerwiderstand entsprechen, damit die Messung sinnvoll 
aufgelöst und halbwegs genau wird. Also nimm dir z.B. einen NTC, der bei 
100°C noch einge kOhm hat (bei 25°C also einen sehr viel höheren 
Widerstand) und schalte den in einen Teiler mit einem 1kOhm 
Festwiderstand.

von Joachim B. (jar)


Lesenswert?

Michael B. schrieb:
> Wenn man beliebige Fehler akzeptiert weil man die Grundlagen der
> Mathemnatik so gar nicht verstanden hat, die Kruve ist dort nicht
> weniger kurvig als bei 15-35.

du kannst jede Kurve beliebig klein unterteilen und die Tangente anlegen 
und an dem Punkt die Steigung berechnen, aber dazu müsstest du selber 
Mathe verstehen :)

von Achim S. (Gast)


Lesenswert?

Hm, @Martin: ich hab mir die Werte, die du in das Berechnungstool 
"Thermistor Calculator" eingetippt hast, nochmal genauer angesehen. Wenn 
deine ersten beiden Wertepaare (bei 0° und 25°) stimmen sollten, dann 
passt der dritte Messpunkt (bei 90°) überhaupt nicht. Für einen 
"normalen" NTC-Verlauf müsste dort etwas in der Gegend von 960 Ohm 
rauskommen, nicht die 92 Ohm, die du in das Tool eingegen hast. Hast du 
dich dort vielleicht einfach das Komma eine Stelle zu weit links 
getippt?

Wenn die 92 Ohm einfach ein Tippfehler von dir waren, ist der 
Messbereich nicht ganz so ungünstig, wie in meinem letzten Beitrag 
geschrieben. Dann würde rechnerisch die Spannung am ADC-Eingang bei 
4,66V bei 100° und 4,9V bei 150° liegen.

Das ist schon besser als in meinem letzten Beitrag geschrieben, aber 
immer noch eine unglückliche Wahl. Ein NTC mit größerem Widerstandswert 
und/oder ein niederohmigerer Festwiderstand im Spannungsteiler würden 
den Messbereich deutlich besser ausnutzen und der Genaugkeit deiner 
Temperaturmessung gut tun.

von Johannes S. (Gast)


Lesenswert?

Da ist ein Komma eingetippt und es muss wohl ein Punkt rein.

von Wolfgang (Gast)


Lesenswert?

Martin A. schrieb:
> float c1 = 2.697884055e-03

Den Nachkommastellenschwanz kannst du dir sparen.
Dein Arduino rechnet normalerweise mit Single Precision.

von Achim S. (Gast)


Lesenswert?

Johannes S. schrieb:
> Da ist ein Komma eingetippt und es muss wohl ein Punkt rein.

Da hast du wahrscheinlich recht, aber auch unabhängig vom Zahlenformat 
(92,62 Ohm oder 92.62 Ohm): um auf einer realistischen NTC-Kennlinie zu 
liegen müssten es eher 926 Ohm sein. Oder einer der beiden anderen Werte 
(bei 0° und bei 25°) ist falsch.

In der Grafik sieht man aufgrund der Skalierung den Unterschied kaum, 
aber es ist ein Faktor 10. Wenn schon ein Kalibrierwert im interessanten 
Temperaturbereich einen Faktor 10 daneben liegt, können die später 
errechneten Messwerte nicht wirklich gut werden.

von HildeK (Gast)


Lesenswert?

Achim S. schrieb:
> Da hast du wahrscheinlich recht, aber auch unabhängig vom Zahlenformat
> (92,62 Ohm oder 92.62 Ohm): um auf einer realistischen NTC-Kennlinie zu
> liegen müssten es eher 926 Ohm sein.

Ist mir auch sofort aufgefallen.
Bei einem ähnlichen Vishay-Typ steht im Datenblatt (Beispiel)

R_0  / R25 = 3.32    → 33.2k bei 0°C
R_90 / R25 = 0.0854  → 854Ω  bei 90°C

Also: die 926.2Ω dürften richtig sein.

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.