Electronic – arduino – Amplifying particular range of analog signal

adcanalogarduino

I am working on an a project where I need to get the reading of an analog transducer via Arduino's 10 bit ADC.
The problem is, the range of the signal is such that the 10 bit ADC value is moving from 200-500 (1V-2.5V) on a scale of 0-1023(0V-5V).

My question is, is there something I could do to magnify the analog signal part such that the signal varies from 0-1023 instead of 200-500 so that I can get much better resolution?
I know I can use a better resolution ADC but I want to use the full range of 10 bit ADC of Arduino.

Best Answer

the range of the signal is such that the 10 bit ADC value is moving from 200-500 (1V-2.5V) on a scale of 0-1023(0V-5V).

You are right at the point where it’s tricky to get a decent benefit without significant attention to detail. Currently you occupy a range of 1.5 volts (1 volt to 2.5 volt) out of 5 volts but, you don’t really have a useable range of 5 volts. You might think you do but, it’s probably going to be affected by anything up to 100 mV at the top and bottom of the range (due to zero offsets and gain error factor). All this will be in the small print of the data sheet.

So, your full guaranteed range might be only 4.8 volts but do read the data sheet to confirm what the upper and lower guaranteed limits are.

What about amplifying the signal by 1.96 thus taking the upper part of your signal range to 4.9 volts? This would also take the lower range of your signal to 1.96 volts. You will now have a new range of 2.94 volts i.e. about 60 % of what you thought was your full scale range.

With this comes errors and, those are due to resistor value tolerances and the opamp input offset voltage. Be aware of this and choose wisely.

You may decide that 60 % is fine but if not, you can add (or rather subtract) an offset but, implementing this requires a stable voltage source and possibly two more resistors added to the original opamp circuit implied above. You just might find that the cost and messing around just isn’t worth it.

Personally, I’d sample at a much higher rate and try and retrieve resolution through dithering in software.