Temperaturmessung mit ESP32 und NTC

Das der ADC der ESP’s ziemlich umbrauchbar ist ist inzwischen hinlänglich bekannt. Allerdings benötigt man ja nicht immer eine hohe Genauigkeit. Zum Ein- und Ausschalten eines Lüfters kommt es meist ein 1, 2 Grad nicht an. Genau das ist meine Anwendung. Ich möchte einen Lüfter bei ca 45 °C ein- und bei ca. 35 °C wieder ausschalten. Dazu bedarf es keiner exakten Werte, sondern nur Schwellwerte, die ggf. per Test ermittelt werden können. Genauigkeit und Linearität des ADC spielen hier keine Rolle. Deshalb scheint mir der intere ADC des ESP32 dafür geeignet zu sein. Das möchte ich hier ausprobieren.

Hier noch ein paar interessante Infos über den ADC aus dem Programmierhandbuch von Espressif (Link unten):

Rauschen minimieren

Der ESP32 ADC kann empfindlich auf Rauschen reagieren, was zu großen Diskrepanzen in den ADC-Messwerten führen kann. Um das Rauschen zu minimieren, kann der Anwender einen 0,1uF-Kondensator an das verwendete ADC-Eingangspad anschließen. Multisampling kann auch verwendet werden, um die Auswirkungen des Rauschens weiter zu minimieren.

ADC-Kalibrierung

Die API esp_adc_cal/include/esp_adc_cal.h bietet Funktionen zur Korrektur von Unterschieden in den gemessenen Spannungen, die durch Variation der ADC-Referenzspannungen (Vref) zwischen den Chips verursacht werden. Per Design ist die ADC-Referenzspannung 1100mV, die tatsächliche Referenzspannung kann jedoch zwischen 1000mV und 1200mV bei verschiedenen ESP32 liegen.

Die Kurve von randomnerdtutorials.com zeigt auch noch eine ausgeprägte Nichtlinearität im oberen Bereich:

Test

Für den Test habe ich eine kleine Platine gebaut. Sie ist für einen M5Stack C bzw. M5Stack C Plus vorgesehen. Sie enthält eine Reihe Vorwiderstände, die mittels Jumper umgesteckt werden können, einen 3poligen Sockel für den NTC. Der parallele Sockel ermöglicht es die Spannung am NTC direkt zu messen.

Um die Temperatur am NTC zu messen habe ich ein Termoelement daran montiert.

Für den Test habe ich eine Heissluftpistole benutzt und für die Temperatureinstellung den Abstand zum NTC variiert.

Diese Schaltung habe ich angewendet:

Meine Tests haben die folgenden Werte erbracht.

  • 21,4 °C – 2850
  • 35 °C – 2200
  • 45 °C – 1750
  • 50 °C – 1500
  • 60 °C – 1150

Dabei muss man berücksichtigen, dass die Messwerte des ADC schwanken (siehe oben).

Software:

Dieses Programm ließt die Temperatur und reagiert auf das Über- und Unterschreiten der Grenzwerte, die ich hier als Raw-Werte des ADC eingesetzt habe.

Das die Abfragen in einer Interrupt-Service-Routine laufen hat mit diesem Thema hier nichts zu tun. Sie gehören üblicherweise in die Mainloop.

Links:

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.