Hallo zusammen,
eines vorweg - durch die hier beschriebenen Massnahmen wird der ADC des
ESP32 auch nicht viel besser, aber man kann ihn vielleicht für
einfachere Projekte ohne viel Grübeln nutzen.
Mein Problem war, am Ain einen MQ-135 Gassensor auszuwerten. Jetzt gibt
der Sensor bei niedrigem CO2-Gehalt nur sehr geringe Spanungen aus
(Beispiele für den AtMega nennen z.B. 55 als Offset, das wären bei 5V
Bereich und 10Bit gerade mal 27mV). Der ADC des ESP32 misst unter 150mV
Eingangsspannung aber einfach gar nichts.
Folgende Beschaltung des Analogeingangs habe ich mir ausgedacht:
1 |
|
2 | VCC 3,3V
|
3 | |
|
4 | .-. R2
|
5 | | | 330k
|
6 | R1 | |
|
7 | 27k '-'
|
8 | ___ ___ |
|
9 | Sensor |___>-----|___|------o-----o--------o Ain0
|
10 | | |
|
11 | | .-. | C1 |
|
12 | | R3 | | --- |
|
13 | Uein | 47k | | --- | Uaus
|
14 | | '-' | 100n |
|
15 | v | | v
|
16 | --- --- --- ---
|
17 | GND
|
18 | (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
|
Die Berechnung der Ausgangsspannung Uaus mit dem Überlagerungssatz:
1 | 1. Fall Uein ist Kurzgeschlossen (R1||R3 = R13)
|
2 | Uaus' = R13 / (R2+R13) * VCC
|
3 | 2. Fall VCC ist Kurzgeschlossen (R2||R3 = R23)
|
4 | Uaus''= R23 / (R1+R23) * Uein
|
5 | Überlagerung
|
6 | Uaus = Uaus' + Uaus''
|
Mit den hier gezeigten Bauteilwerten ergibt sich ungefähr
1 | Uaus = 0,60376 * Uein + 0,0494 * VCC
|
2 | = 0,60376 * Uein + 0,163
|
Nutzen der Schaltung:
- ergibt einen Offset von ca. 160mV, da der ADC des ESP32 unter 150mV
nichts misst.
- ergibt eine Anpassung des Eingansspannungsbereiches auf 0-5V ==>>
0,16-3,18V
- kann mit einer einfachen MAP-Funktion abgebildet werden.
- Variationen der Versorgungsspanung gehen nur gering in die
Ausgangsspannung ein
Damit bekommt man zumindest das Problem in den Griff, dass unter 150mV
nicht mehr gemessen werden kann. Die ADC-Kennlinie verläuft allerdings
nur bis ca. 2,45V Eingangsspannung einigermaßen linear => über 3,8V
Eingangsspannung (Entspricht dann AD-Wert 3040) sollte man auf eine 2.
MAP-Funktion umschalten.