Use this forum to chat about hardware specific topics for the ESP8266 (peripherals, memory, clocks, JTAG, programming)

User avatar
By btidey
#87310 The internal adc on the esp8266 is well known to have issues particularly with significant noise well beyond that expected of a decent 10 bit resolution converter.

This investigation started out as a check on the effect of wifi settings on adc noise readings as these have been reported to have an effect.

I used a esp-12F with raw adc input. This was fed with about 0.57V from a forward biased diode (0.5mA). This provides a pretty stable voltage over the short period of the test and isolates it from noise or variations on the 3.3V supply. The series resistance and dynamic resistance of the diode effectively attenuate any variations by about 80.

500 readings each were taken under conditions of normal high power wifi, minimum power wifi, and wifi off.

I was surprised at how stable the readings were compared to my previous experience so I decided to check with different amounts of source impedance as the effective source impedance of the diode is very low (~50Ohm). I retested with a 1k, 10k, 47k,100k and 220k resistor in series between the diode and the adc input.

The impedance results were as follows for low power and wifi off settings where I show the rms deviation in from the average, and also the maximum deviation from the average.

0K rms 0.45 max 2.8
1K rms 0.75 max 3.1
10K rms 1.03 max 3.2
47k rms 1.58 max 5.8
100k rms 1.97 max 5.3
220K rms 2.05 max 6.03

The results from normal wifi power were actually very close but there was the occasional (about 1 in 500) large deviations from the average by up to 30 probably caused by a transmission power surge on the chip occurring during an adc conversion.

The level of noise was better than I had expected and might make the adc more useful for some applications although it still suffers from poor absolute accuracy and some linearity problems particularly at the bottom end.

Other conclusions are

1) If using it with normal wifi then take measures to reject 'rogue' readings (e.g. take at least 3 quick readings and reject any away from the average.

2) If possible reduce tx power to minimum while taking readings. This should avoid having to worry about 1)

3) Keep source impedance as low as possible (10K or less) to minimise noise. This does have implications for modules like NodeMCU which have built in dividers with 100K source impedance and also with battery powered projets where it is sometimes desirable to use high impedance dividers to minimise current drain.