M5-int ADC

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche

Von Peter (peter@attraktor.org)

Bilderprefix: M5-HW-iADC-...

Kpst-Baustelle.jpg

Übersicht

Dem internen ADC des ESP32 geht der Ruf voraus, dass er ziemlich unbrauchbar sein soll.

Im Datenblatt sind zum ADC folgende Daten zu finden:

  • DNL (Differential nonlinearity) von -7 bis 7 LSB > 0,17% auf den Maximalen Messwert bezogen und
  • INL (Integral nonlinearity) von -12 bis 12 LSB > 0,29% auf den Maximalen Messwert bezogen
  • 200kSps bei RTC-Takt
  • 2MSps bei normalem Takt
Description Min Max Unit
Atten=0, effective measurement range of 100 ~ 950 mV –23 23 mV
Atten=1, effective measurement range of 100 ~ 1250 mV –30 30 mV
Atten=2, effective measurement range of 150 ~ 1750 mV –40 40 mV
Atten=3, effective measurement range of 150 ~ 2450 mV –60 60 mV

Es ist dort auch von der großen Ungenauigkeit zwischen verschiedenen Chips von +- 6% die Rede und es wird darauf hingewiesen, dass die Esprif-IDE Methoden zur Kompensation zur Verfügung stellt. Inwieweit die Kompensationsmethoden in die Programmierung der MicroPython und Blockly Elemente eingeflossen sind ist mir nicht bekannt.

Meine Motivation

Da ich auf der Suche nach einer einfachen Möglichkeit war die Temperatur eines Leistungs-MOS-Fet zu überwachen, hat es mich interessiert, ob dieser ADC zusammen mit einem NTC dazu in der Lage ist.

Dazu habe ich ein kleines Programm mit UIFlow-Blockly geschrieben, das den Wert des ADC ausliest daraus einen maximalen und minimalen Wert ermittelt und ggf. speichert. Weiterhin wird die Summe aller Mesungen gebildet und daraus der Mittelwert ermittelt. Schließlich wird der Mittelwert, der Max- und der Min-Wert und die Anzahl der Durchläufe auf dem Display des M5-StickC angezeigt. Damit habe ich erste Erkenntnisse gewonnen. Leider kann ich dieses Programm hier nicht veröffentlichen, weil ich es in der OnLine-Version von UIFlow entwickelt habe, der Rechner zwischen drinnen abgestürtzt ist und ich natürlich noch nichts gespeichert hatte - weil ich ja noch in der Entwicklung war. Ich weiss, ich verdiene kein Mitgefühl - ich habe ganz einfach selber schuld! Zum Glück hatte ich es schon im M5StickC gespeichert, so dass ich weiterhin damit arbeiten konnte.

Messaufbau

Die Ergebnisse der Einzelmessungen mit einem Vorteiler von 6dB:

Messspannung[mV] Messungen Mittelwert[mV] Max[%] Min[%] Bemerkung
99,65 100 107,2 8,19 -0,20 kleinste Spannung gemäß Datenblatt 100mV
99,65 500 107,2 18,5 -0,17
99,65 1000 107,2 24,1 -0,16
99,65 2000 107,2 24,1 -0,16
99,65 3000 107,1 24,1 -0,14
99,65 4000 107,1 24,1 -0,13
256,0 100 257,1 2,32 -0,82 Spannung am NTC bei 125°C
256,0 500 257,0 7,02 -7,40
256,0 1000 256,9 10,56 -11,24
256,0 2000 256,9 10,55 -11,27
256,0 3000 257,0 10,90 -11,28
256,0 4000 257,0 10,90 -11,30
443,2 100 441,5 4,61 -5,18 Spannung am NTC bei 100°C
443,2 500 442,1 6,31 -6,81
443,2 1000 442,2 6,28 -6,84
443,2 2000 442,1 6,30 -6,81
443,1 3000 442,1 6,31 -6,81
443,1 4000 442,1 6,32 -6,81
705,2 100 702,0 1,09 -2,17 Spannung am NTC bei 80°C
705,2 500 702,5 3,50 -3,92
705,2 1000 702,6 3,48 -3,92
705,2 2000 702,6 4,05 -3,93
705,2 3000 702,5 4,05 -3,93
705,2 4000 702,5 4,06 -4,06
1141,7 100 1137,4 1,12 -0,47 Spannung am NTC bei 60°C
1141,7 500 1137,4 2,43 -1,97
1141,7 1000 1137,4 2,43 -1,97
1141,7 2000 1137,4 2,78 -2,67
1141,7 3000 1137,3 2,78 -2,67
1141,7 4000 1137,3 2,79 -2,67

Fazit der Einzelmessungen

Der ADC des ESP32 macht seinem Schlechten Ruf alle Ehre! Die Abweichung einzelner Messungen zwischen fast 3% am oberen Ende des Messbereichs und mit bis zu 25% am unteren Ende sind schlechter als die eines alten Drehspulmessgerätes mit 1,5% am Skalenendwert.

Nun gibt es aber ein Licht am Horizont, wenn man die Mittelwerte der Messungen betrachtet. Hier sind die Abweichungen erheblich geringer. Deshalb habe ich aus den Werten der ersten Tabelle eine weitere angefertigt, die die Abweichung der Mittelwerte von den tatsächlichen Spannungswerten ausgibt:

Messspannung[mV] Messungen Mittelwert[mV] Abweichung [mV] Abweichung[%]
99,65 100 107,2 7,55 7,58
99,65 500 107,2 7,55 7,58
99,65 1000 107,2 7,55 7,58
99,65 2000 107,2 7,55 7,58
99,65 3000 107,1 7,45 7,48
99,65 4000 107,1 7,45 7,48
256,0 100 257,1 1,1 0,43
256,0 500 257,0 1,0 0,39
256,0 1000 256,9 0,9 0,35
256,0 2000 256,9 0,9 0,35
256,0 3000 257,0 1,0 0,39
256,0 4000 257,0 1,0 0,39
443,2 100 441,5 -1,7 -0,38
443,2 500 442,1 -1,1 -0,25
443,2 1000 442,2 -1,0 -0,23
443,2 2000 442,1 -1,1 -0,25
443,2 3000 442,1 -1,1 -0,25
443,2 4000 442,1 -1,1 -0,25
705,2 100 702,0 -3,2 -0,45
705,2 500 702,5 -2,7 -0,38
705,2 1000 702,6 -2,6 -0,37
705,2 2000 702,6 -2,6 -0,37
705,2 3000 702,5 -2,7 -0,38
705,2 4000 702,5 -2,7 -0,38
1141,7 100 1137,4 -4,3 -0,38
1141,7 500 1137,4 -4,3 -0,38
1141,7 1000 1137,4 -4,3 -0,38
1141,7 2000 1137,4 -4,3 -0,38
1141,7 3000 1137,3 -4,4 -0,39
1141,7 4000 1137,3 -4,4 -0,39

Fazit der kumulierten Messungen

Diese Tabelle bestätigt die Annahme, dass mit kumulierten Messungen die Genauigkeit deutlich erhöht werden kann und extremen Schwankungen der Messwerte gemildert werden können. Bei der Spannung von 99,65 mV treten zwar noch immer Abweichungen 7,5% auf, aber alle Spannungen > 256 mV werden mit einer Genauigkeit besser 0,5% erkannt. Damit lässt sich arbeiten.

Nun interessiert noch der Bereich zwischen 99,65 mV und 256 mV.


Wie kommt die große Streuung der Messwerte zustande?