1
\$\begingroup\$

I often find the Arduino 10-bit A/Ds lacking in resolution for my needs. I much prefer auto-ranging voltmeters. Can I play the same game?

Can I divide my target voltage range into segments to increase resolution? How do you protect the inputs from over-voltage?

\$\endgroup\$
4
\$\begingroup\$

Auto ranging would typically be handled by adding a PGA (programmable gain amplifier) in front of your A/D converter. In some instances to make maximum utility of the range of your A/D converter you would also add a programmable offset into the PGA as well. The output of the PGA would get clamped via some diodes to the A/D converter reference voltage range.

Another scheme is to design multiple amplifiers, each with its own gain and offset, that sample the input signal and condition it in a particular way. Each of these amplifiers could be setup with trimpots to permit calibrating to a precise operating range. The outputs of these amplifiers would be gated to the A/D converter through a many to one Analog Multiplexor.

It is still possible to "calibrate" the scheme with the PGA amplifier with programmable offset by feeding known signal levels through the circuit and then noting the programmable settings it takes to get an aimed for output from the A/D converter. These would get stored into some non-volatile memory of the MCU to be used for adjusting/scaling the A/D readings to the proper values when taking readings of actual signals.

\$\endgroup\$
1
\$\begingroup\$

Depending on your voltage levels, you can do these.

  • Voltage divider, where resistors are switched with a multiplexor
  • Variable gain amplifier
  • External A/D with more bits. This is usually the easiest, and produces good results. Look-up these Analog Devices' A/Ds. Many of them have built-in programmable gain amplifiers (PGA).

Protection against over-voltage or reverse-voltage is usually done with a resistor or fuse and a diode or Zener diode.

\$\endgroup\$
1
\$\begingroup\$

You could add a 10x and 100x amplified version of the same signal (or multiply some other convenient factor, like 16x and 256x) , and feed that to other analog inputs. The rest is software.

Note that those amplifiers must be very accurate, both in gain and in offset, but you might be able to do some trikery by comparing the readings of values in different ranges. Use 5V opamps so you don't have to worry about out-of-range inputs.

\$\endgroup\$
0
\$\begingroup\$

You need to define how you're lacking in resolution - are your signals too small (amplification required), too large (attenuation required) or both (maybe scale your input logarithmically).

Unfortunately the arduino ADC itself is not great quality, so you will not be able to gain ADC accuracy in terms of signal-to-noise on the ADC pin & its output readings.

I would look at a good analogue solution to conditioning the input signal - there's some good low-noise ADC appnotes on Linear Tech's website, search for Jim Williams / Bob Pease, both masters of analogue.

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.