cancel
Showing results for 
Search instead for 
Did you mean: 

zany idea: getting more bits resolution out of the ADC

dennis
Associate II
Posted on May 30, 2016 at 16:28

The STM32F7 onboard DAC is only 12 bits.  I only need mono audio input.  Suppose I drive the left ADC input directly and the right from an op amp gain stage of say x16 and then combine the lowest 4 bits of R with left-shifted L?  Do I have something akin to a 16 bit ADC?  Should I diode-clamp the output of R so I don't generate overages to the ADC?

3 REPLIES 3
Danish1
Lead II
Posted on May 30, 2016 at 22:14

ST Only make the ADC 12 bits rather than 16 because ''other errors'' accumulate to make any further bits largely worthless.

There could be differential nonlinearity, such that a step from 0x7ff to 0x800 is guaranteed to be not backwards, whereas if you have 0x7ff and add 15/16 of a bit, you could well end up higher than 0x800. (I know this is describing a DAC; the equivalent in an ADC is missing codes).

There could be electrical noise (if the statistics are in your favour you might find that simply summing 16 readings will give you an extra bit or two in useful resolution).

As to your proposed technique, my guess is that for a lot of the time the op-amp output would be saturated and the right ADC would either be reading 0xfff or 0x000. But remember that even when the right ADC is not saturated, there will be some delay / phase-shift / change in frequency-response / gain error through the op-amp. I think you'd do better using the entire right ADC where the reading from the left ADC tells you that the right one isn't saturated, and otherwise use a left-shifted version of the left ADC.

I have used this technique in the past to improve dynamic range but I know that at best I only ever had 12 useful bits of reading. In my case the op-amp ran of the same supply as the stm32 so I did not need to worry about clamping.

Hope this helps,

Danish

LMI2
Lead
Posted on May 31, 2016 at 11:44

I once saw this kind design. Luckily not mine. It failed,  because there was temperature drift and all other errors which were good for a low resolution but not for higher resolution. You could tune it in production, but in use it just drifted.

Buy a better ADC, they are not expensive. Averaging several conversion results is one way, but I don't know how much more resolution you actually get in use.

mark239955_stm1
Associate II
Posted on May 31, 2016 at 12:27

The STM32L476 can be configured to oversample it's 12-bit ADC to work as an up to 16-bit ADC.  The oversampling is zero-overhead because it's done in hardware.

I don't know how well it works, I haven't tried it; I just noticed it in the reference manual last week.