Reducing ADC noise with simple circuit on Electron

Hey there!

I’m using my first Electron and have been playing around with some sensors, especially ones that I need low error and low noise. I am curious on any specific techniques or analog circuits I can use to get reduced noise on the Electron’s analog inputs?

As far as analog circuits are concerned:

  • Should I populate an external pull-down resistor (like a 10k on Arduinos inputs) to ground or smoothing capacitor on the analog input pin to reduce noise?
  • Any other analog circuit techniques I can try?

This sort of leads to other questions like:

  • What is the ripple on the 3.3V analog reference? I believe 3.3V is connected directly to the analog reference on the micro. If it’s directly connected, there may be error related to the 3.3V fluctuating. The Spark has a 3v3* reference for sensors. The Electron doesn’t.
  • Can the micro do any kind of differential reading across two analog inputs? (maybe a stupid question)

I’m considering using an ADS1015 or ADS1115 to get an ultra fine resolution measurement and use the I2C bus to send it over to the Electron, but that may be overkill and populating far too many parts. An analog circuit might work just as well.

Cheers

@fishmastaflex - I came here with the same question as yours, so I don't have a complete answer. However, I can answer one of your questions:

Can the micro do any kind of differential reading across two analog inputs?

Looking at the STM32F20xxx datasheet, although the chip has three independent ADCs, I see no evidence that you can configure them to differential mode. (Pity...)

If you're looking for really good performance, an ADS1115 may be a good solution.

I retract my previous statement. The ADCs can be run in "dual mode"...

In dual ADC mode the start of conversion is triggered alternately or simultaneously...

which means you get time-aligned readings on both ADCs. You can then subtract one reading from the other to get the difference. That's not exactly the same as a true analog differential input, but for many applications it's roughly equivalent.

Thanks for finding an answer to my question (about a year later)! Better now than never. I have since moved onto a different application where I use an alternate device like the ADS1115. I would be interested to see (and I’m the community as well) in how you got the differential connected, along with working code.

Cheers