Reading voltage difference between -1000mV and 1000mV

Hi,

I have an Arduino Nano where I read three different analog inputs from potentiometes and print them through Serial separated by newlines, where I read them in Python afterwards. For the potentiomenters I use the board's 5V power supply.

But now I want to also read an oxidation-reduction potential, where I have two electrodes which potential difference must be read for the interval -1000mV to 1000mV. I've been trying for long to find the answer but I am just too newbee for interpreting them correctly.

How can I achieve the highest mV resolution while also reading the negative voltages?

Looking forward to get some help :slight_smile:

Cheers Ivan

Directly you can't. But you can use a opamp to buffer the incomming voltage and ofset it by 1000mV.

septillion:
Directly you can't. But you can use a opamp to buffer the incomming voltage and ofset it by 1000mV.

Pretty concise, but well that's at least something! Thanks

Use an opamp in a differential-amplifier configuration.

However you'll need to set the reference input to mid-rail (in that circuit replace R4 by two resistors
of double the value, one to ground, one to 5V, emulating a 2.5V reference of the same source impedance as R4.

MarkT:
Use an opamp in a differential-amplifier configuration.

However you'll need to set the reference input to mid-rail (in that circuit replace R4 by two resistors
of double the value, one to ground, one to 5V, emulating a 2.5V reference of the same source impedance as R4.

Hi Mark,

First of all thanks! I have attached some schematics. If someone would take a look at them would be great?

If then I got it right, then I just need to find the right Op-Amp chip. Would someone be kind of handing me some guidance? I've thought about the MCP6022-I from mouser electronics, which has a power supply of 2.5 to 5.5.

Cheers


Nope, that circuit looks nowhere near the one from Mark or me...

What are those resistors marked 2R doing there? (Which btw mean "two time the value of R", if you ment to number them it's R2 (but then you need a R1 as well :wink: )

And as for an opamp, something like a cheap LM741/UA741 should work fine.

The MCP6022 is a good choice. But you could probably get away with a LM358 - cheaper. And....

Your circuit won't work - for 3 reasons

1/ you don't need resistors in the + and - supply rails.

2/ the opamp -ve input must have a resistor value R between it and ground - not directly connected

3/ It still wouldn't work, as the the negative input will be below the -0.3 v input spec of the MCO6022.

Use septillion's circuit in reply #1, but bias the +ve opamp input to 1/2 the supply .

See enclosed

regards

Allan

difpre.pdf (18.8 KB)

I'm an idiot - my circuit gave the sum, not the difference of the inputs!

try this one

regards

Allan

difpre1.pdf (18.9 KB)

If you want to work on a negative input signal the negative power supply of your OP-Amp should be at least 1 Volt lower than the voltage you want to measure.

A TC7660 chip will do the job.

All it requires is the chip (costs almost nothing) and two 10µF capacitors. A +5V input voltage (from your Arduino) will give you a -5V output voltage. Ideal for most OP-Amps.

Now you can use your preferred OP-Amp circuit to shift the -1000mV/+1000mV inputs to a 0mV/2000mV level.

TC7660.png

But in this case, you don't need a negative rail :wink: Because the voltage will never be negative with respect to GND :wink: That's why you make a virtual ground at 2,5V. That way you say between 1,5V and 4,5V :smiley:

I know nothing about an oxidation-reduction sensor, but I got the feeling that sensor voltage has to be read with a high impedance input.
As far as I can see, all the posted solutions use an opamp with low impedance input (inverting opamp).
That, and the fact that A/D result depends on VCC if measured with default Aref.
I did not read how the Nano is powered, A Nano on USB power runs on ~4.6volt.
Leo..

Fair point Wawa.

If the redox sensor needs a high impedance a conventional instrumentation amplifier ( eg AD620) would be required. And for accuracy, a precision reference for the arduino.

regards

Allan

Don't know how high is high... But you can increase the resistors. Or make a buffer in front of it with a opamp (but then you do need the negative voltage for the opamp). After a few replies I forgot it was a sensor and thought it was just for a battery :stuck_out_tongue:

allanhurst:
I'm an idiot - my circuit gave the sum, not the difference of the inputs!

try this one

regards

Allan

Well I wish I was just as idiot as to come with something like that! Thanks for your drawing Allanhurst. I've tried out the circuit with a LM358 and is quite not working. The Arduino reads 2.46V and when I connect the inputs/electrodes to it it just introduces a bit of noise to it. I attach 3 pictures showing how with a multimeter I can read the voltage difference between the electrodes for a solution with a known Redox potentian; a bit of the wiring, and the noise.

Thanks for your input guys! I am not giving up on that .-)

So now I have to replace the opamp I've got with an AD620, and use the ARef from the Arduino?

Doing my best here!

Forgot the pictures....

pic1.jpg

pic2.jpg

pic3.jpg

ivino:
Hi Mark,

First of all thanks! I have attached some schematics. If someone would take a look at them would be great?

If then I got it right, then I just need to find the right Op-Amp chip. Would someone be kind of handing me some guidance? I've thought about the MCP6022-I from mouser electronics, which has a power supply of 2.5 to 5.5.

Cheers

That circuit makes no sense - I said replace R4 with a potential divider, the centre-tap goes to the non-inverting input in place of R4. IE there will be 3 resistors to the non-inverting input.

Have you said what the sensor is? Its source impedance is essential to know.

MarkT:
That circuit makes no sense - I said replace R4 with a potential divider, the centre-tap goes to the non-inverting input in place of R4. IE there will be 3 resistors to the non-inverting input.

Have you said what the sensor is? Its source impedance is essential to know.

Hey MarkT,

it's just two electrodes: a piece of platinum, and a half electrochemical cell consisting of a silver electrode submersed in a silver chloride solution :slight_smile:

Attached a picture of both

+/-1000mV (2volt) from the sensor is quite a large span, that shouldn't need amplification.
I would try reading that directly with the A/D.
My thoughts (could be wrong).
4k7 resistor from the 3.3volt pin to the Aref pin.
2 x 4k7 resistors in series from the Aref pin to ground, each with a 100n cap across
Reference electrode connected to the center tap of the two 4k7 resistors.
Active electrode to the analogue input.
100n cap across the sensor.
Must set Aref to EXTERNAL in void setup(), and sensor values must be averaged because of the high impedance.

That setup produces a stable 2volt Aref, and creates a 1volt virtual ground for the reference electrode.
Doesn't "load" the sensor, and gives an A/D value of ~512 when sensor outputs 0volt.

Problem is the pots mentioned in post#0.
Leo..

Wawa:
2 x 4k7 resistors in series from the Aref pin to ground, each with a 100n cap across
Reference electrode connected to the center tap of the two 4k7 resistors.
Active electrode to the analogue input.
100n cap across the sensor.
Must set Aref to EXTERNAL in void setup(), and sensor values must be averaged because of the high impedance.

But then what about the rest of my sensors connected to the same Arduino Nano? They do also change their reference Voltage?

Kind regards

ivino:
But then what about the rest of my sensors connected to the same Arduino Nano? They do also change their reference Voltage?

If you mean the three pots, then yes.
You could "power" the pots from the 3.3volt pin.
Maybe with a series resistor to drop "pot supply" to the same ~2volt, so you use the full turn of the pots.
Leo..