What's the cheapest way to make a dithered-input ADC?

You don't need to use a noise source, you can generate a square wave and filter it to be a triangle wave. Make the amplitude just a little more than 1 LSB and make the frequency significantly above your highest to be digitized but not so high that you lose time resolution with your base sample rate: -

enter image description here

The triangle wave causes the ADC's D0 bit to be 1 for about 20% of the time when Vin is zero. If Vin increased from 0 volts to say 0.25 LSB, D0 would be 1 for a longer period of time. This is a form of dithering and is probably more easily translated to a practical solution because you can use a spare IO generating a square wave and RC filter to a approximate a low amplitude triangle wave.

There are many variations of what I've decribed above and my suggestion is just an example. For instance, here's an article that gives a little more detail: -

enter image description here

It shows an analogue signal of amplitude 116.357 dithered with a triangle wave producing a count of 117 for 35.7% of the time and 116 for 64.3% of the time. So if you have good time resolution in your sampling you can trade this against poor amplitude resolution.

It's the same idea for sigma delta ADCs - you counter poor amplitude resolution by having great time resolving ability. It also goes right back to early ADCs that used a digital ramp and a comparator: -

enter image description here

In effect, the digital ramp generator is the dither signal and the comparator is resolving whether the net signal of dither plus Vin is above a certain threhold or not.


This is not a direct answer to your question, but addresses your actual problem.

This is probably not the best way to achieve what you want:

Many, probably even most, PICs come with internal A/Ds. Very likely you can find a PIC with built-in A/D that is cheaper than your "cheap PIC" plus external A/D. The result will also be smaller, and the A/D easier to drive in the firmware.

Before you think about dithering a low resolution A/D, consider:

  1. Do you really need to? Noise is everywhere. Often there is enough random noise, or even non-random noise below half your sampling frequency, so that explicit dithering is unnecessary. Just sample a lot faster than you need, and low pass filter the result. I do this routinely. And yes, this is usually with A/Ds built into PICs.

  2. Use a higher resolution A/D. You say you are using a 8 bit A/D. Very low end PICs come with 8 bit A/Ds, but many also have 10 bit A/Ds available. Instead of hoping to pick up another 2 bits with dithering, just get a A/D with two more bits in the first place. Most newer PICs nowadays even have 12 bit A/Ds, although usually not in the absolute lowest cost models.

Tags:

Noise

Adc

Zener