I have a sensor that puts out a signal between 0 and 25mV. Of that range, I am only interested in the 16mV to 22mV portion. The output should primarily be a DC signal, and the AC response, if any, will most likely be noise. The output of the sensor is fed into a 5V ADC on an Arduino Uno.

It would be rather simple to just pass the signal through an op amp with a gain of 200. However, the resolution of the output would be reduced compared to conditioning the signal such that only the 16mV - 22mV is read by my ADC. I've played with passing the signal through an instrumentation amplifier to boost the 22mV to ~12VDC. Then passing that through a differential amplifier to reduce the maximum signal to 5VDC to be read by the ADC. The minimum signal received was down to about 9mV.

This circuit did not work correctly. I believe it was due to an impedance mis-match. I'm thinking I need a high-impedance differential amplifier to make this work correctly.

I toyed with the idea of using two instrumentation amplifiers (INA114AP), but the math just doesn't work out.

Does anyone have any ideas on how I can accomplish this? I'm sort of out of ideas.

Oh, and this circuit will be used for brewing beer, if that motivates anyone to reply :)


1 Answer 1


It will be easier to see how to do this after distilling your requirements down to a real spec. You want 16-22 mV to map to 0-5 V. That's a gain of 833 centered around 19 mV. Let's presume you have a well regulated 5 V supply available.

First, leave a little margin. Let's say we'll use a opamp with up to 1 mV offset voltage, and you don't want either extreme of the signal to result in full high or low output. Leaving 1.5 mV room at each end sounds reasonable. That means the input range is 9 mV instead of just the 6 mV you actually care about. The target gain is therefore 5 V / 9 mV = 550.

That's a lot for a single opamp stage. In practise I'd probably use two stages, but it will be easier to show and explain as a single stage amplifier:

The gain is governed by R3 and the parallel combination of R1 and R2, and the point around which the gain applies by the voltage divider of R1 and R2. Everything is ratiometric, so we can pick one resistance. Let's make R3 1 MΩ and see what the others come out to.

R1 and R2 divide the 5 V supply to make the input gain pivot point, which is 19 mV. The ratio of R1/R2 is therefore 4.981V/19mV = 262.

Next we look at the output impedance of the voltage divider, which works against R3 to set the gain. Since the target gain is 550, R3/(R1//R2) = 549, or (R1//R2) = R3 / 549 = 1821 Ω. This gives us two equations to find the two reistances R1 and R2. Solving yields R1 = 479 kΩ and R2 = 1828 Ω.

In reality you're not going to find resistors with exactly these values, and they will have some tolerance anyway. Find the nearest 1% values, then go back and check what input voltage range you end up with that results in 0-5 volts out. Don't forget to run the min/max test with the resistors the full 1% off in the worst direction, and don't forget about the opamp input offset voltage. The nominal gain may have to be reduced to guarantee the minimum 16-22 mV always maps to within the 0-5 V output range. Actually, I'd try to stay away from the top and bottom 50 mV or so of the output range, even with a "rail to rail" CMOS opamp. I've shown you the method, so this checking and re-calculating is your job.

  • \$\begingroup\$ It's probably worth pointing out, that for signals below 16 mV (or thereabouts) the output of the op-amp will go negative and this may not be desirable. I'd use a rail-to-rail (input and output) op-amp with negative supply for the op-amps tied to 0V - now signals can't get below 0V. Just to re-emphasize one point made - don't use the top or bottom 50mV of the ADC - it's almost a golden rule because you can't guarantee (generalism alert) that the ADC offsets and gain slope won't make these areas "convertible" to digital numbers. \$\endgroup\$
    – Andy aka
    Mar 1, 2014 at 19:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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