|
M5-int ADC: Unterschied zwischen den Versionen
Aus Attraktor Wiki
|
|
Zeile 13: |
Zeile 13: |
| * 2MSps bei normalem Takt | | * 2MSps bei normalem Takt |
| | | |
− | Es es dort auch von der großen Ungenauigkeit zwischen verschiedenen Chipxs 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. | + | 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. |
| | | |
− | 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 sind. | + | 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. | | 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. |
Version vom 18. Mai 2020, 14:58 Uhr
Von Peter (peter@attraktor.org)
Bilderprefix: M5-HW-iADC-...
Übersicht
Dem internen ADC des ESP32 geht der Ruf vorraus, 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
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.
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?
|