Scaling Voltage for Arduino Analog In, Beyond Voltage Dividers

Signal conditioning in this sense is extremely common. You want to use an amplifier in order to make that 10mV range span (for example) the entire 0-5V range of the arduino. This can be done using op-amps such as the LM741. You'll proabably also want to use a "voltage clamp" (ex: two zener diodes) on the output of your signal conditioner/input into the ADC to make sure that the value does not exceed 5V. If you look around online at op-amp data sheets and/or signal conditioning circuits, you should find guides as to exactly what you are looking for.


So if I understand correctly, you want to be able to "read" a 10 mV variation on top of a 1.9V signal?

If that is the case then I would suggest two separate stages. The first will be a photodiode amplifier (page 9 is the most standard of circuits). This will help to get the current from your photodiode translated into voltage.

The second stage will be an instrumentatation amplifier, such as the INA family from Texas Instruments (the best but also can be expensive). This will help to remove your "common mode" signal, which in this case is the 1.9 V. You can also add gain in to the instrumentation amp or alternately add a simple op amp in a non-inverting configuration at the end to help gain your signal up to the necessary 5 V.

I'm not saying it'll be perfect, but I think that's a good start.

As a final note, I like David's idea above about the clamps, even though those can cause some measurement errors at the A/D converter. What is more important though is if you can swing it, try a better op amp than the 741. Those are common but the specs are terrible. The 3 or 4 mV of offset voltage at the input terminals could really mess up a small signal like you're trying to measure.

~Chris Gammell


Suggest you look at the combination of a differential PGA (programmable gain amplifier) and a DAC, with the sensor output going to the "+" input and the DAC going to the "-" input. (Or something integrated that gives you equivalent functionality.) Basically, look at the signal with low gain, figure out what its offset is, put that voltage on the DAC, and crank the gain up.

TI's PGA308 looks like it might be a nice solution.

If you want a less expensive solution, use a fixed-gain differential amplifier (the standard 4-resistor + op-amp would do) + a stable, quiet 8-bit DAC (stability/noise characteristics more important than accuracy), again put the sensor output on the "+" input to the diff amp and the DAC output on the "-" input.

Exercise for the reader: show that you can bring the diff-amp output out of saturation and into a linear range by using a binary search technique with the DAC, and ensuring that the gain is not larger than G1 = the fullscale ADC input voltage, divided by the sum of the DAC's nominal step size and its DNL (differential nonlinearity). I'd probably use the smaller of (G1/2) and G2, where G2 = the fullscale ADC input voltage divided by the sensor output voltage range that you care about.

Tags:

Arduino

Sensor