NTC 10K im ESP32

Hi,

mein ESP32 zeigt nicht den reellen Wert beim NTC10K an. Es besteht immer eine Abweichung von 5-10K. Die errechnete Temperatur steigt und sinkt je nach Temperatur, also das funktioniert, aber mir wird immer ein falscher wert errechnet.

float fb_temp_convert(int i_pin, float f_offset){
  
    //** local **//
    float f_bit_value;
    float f_resistence;
    float f_kelvin;

    f_bit_value = float(  analogRead( i_pin )  );

    f_resistence = 10000 / ( ( 4095 / f_bit_value ) - 1 ) ;

    f_kelvin = 3380 / ( log( f_resistence / 10000 ) + ( 3380 / 298.15) );
      
    return  (f_kelvin - 273.15 + f_offset);
  
  }

Hat jemand von euch schon erfahrungen damit sammeln können?

Parallel zum NTC10K ist ein Kondensator eingelötet.

lg
Tom

Der im ESP32 eingebaute AD-Wandler ist im ganz unteren und ganz oberen Bereich nicht linear
NTCs haben eine gewisse Toleranz und die Referenzspannung wird auch eine Toleranz haben.
Der Spannungsteiler in dem der NTC "drinsteckt" hat zwangsweise eine Nichtlinearität.

Alles in allem jede Menge Gründe warum ich selbst digitale Sensoren einsetze und überhaupt keine analogen Sensoren. Bis man aus einem superbilligen analogen Sensor ein einigermaßen genauen Temperaturmesswert bekommt muss man ihn doch in eine Schaltung einbauen (die auch Geld kostet) und diese Schaltung dann auch noch abgleichen.

Eine Möglichkeit wäre noch mit einem hochpräzisen Temperatursensor eine AD-Wert / Temperaturtabelle zu erstellen. Ist halt auch Aufwand und da ist mir persönlich digitalen Sensor anschliessen evtl. ID-Nummer auslesen und ID-Nummer programmieren lieber.
vgs

Wenn 0,5°C Genauigkeit genügen Typ DS18B20
https://www.christians-shop.de/DS18B20-Digitaler-Temperatursensor-Temperaturfuehler-1-wire-TO-92-TE242
und wenn es 0,1°C Genauigkeit sein müssen

Hallo,
Welcher Sensor verwendet werden soll hängt ja stark vom Messbereich ab.
Aber für dein konkretes Problem würd ich jetzt erst mal ein paar Referenzen Messungen machen. Dann kannst du die Kennlinie z.B mittels map oder auch einem Dreisatz umrechnen. In den meisten Fällen ist eine Korrektur mit einer linearen Gleichung y=ax+b ja völlig ausreichend.

Hi StefanL38,

vielen Dank für deine Antwort. Ein digitaler Sensor wäre natürlich schön, aber für meine Anwendung nicht brauchbar, da ich genau 4mm x 4mm Platz habe für einen Sensor. Beim NTC 10kOhm ist das schöne, dass die Kennline gerade bei kalten Temperaturen sehr genau ist. So wird ein Temperaturunterschied von 1K teilweise mit 1kOhm differenz dargestellt.
Ich muss daher deine Genannten Abweichungen ergründen und so gut es geht ausgleichen.

Hi Rentner,

ja an sich schon. Aber ich möchte erstmal die Abweichung so gering wie möglich halten.

Mir ist heute morgen eingefallen, dass ich vergessen habe den Innenwiderstand des ESP zu beachten. So werde ich heute eine Referenzmessung mit einem 10kOhm Widerstand machen und mal gucken, woran es liegt.

Wie sieht denn die Schaltung aus mit der du den 10KOhm-NTC benutzt?

vgs

Ich messe klassisch über einen Spannungsteiler mit 10kOhm. Quasi nach diesem Beispiel: Arduino Tutorial: Der Temperatursensor - Werde zum Maker mit MyMakerStuff

Ich halte mich bloß nicht 100%ig dran, da der Sensor natürlich anders ist.

Vcc -----[ 10kOhm ]----------[ R NTC ]----- GND

Bei RT = 10 kΩ wird mir ungefähr 8 kΩ angezeigt.

Auch wenn Du die Formeln umgestellt hast, erscheint mir Dein Programm plausibel.

Also die Lösung des Problems:

Die Kennline des ADC ist nich linear. Nicht nur am Ende, sonder die Komplette Kennline weicht vom erwarteten Werd ab und erreicht erst zum Ende den Wert von z.B. 4095.

Ich konnte diese Abweichung im Programm ausgleichen und zack perfekte Messungen auf 0.5K genau.