Author Topic: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp  (Read 18779 times)

0 Members and 1 Guest are viewing this topic.

Online Zero999

  • Super Contributor
  • ***
  • Posts: 19519
  • Country: gb
  • 0999
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #25 on: November 21, 2015, 10:44:19 pm »
An instrumentation amplifier such as the INA126, is definitely the way to go.

Your local scupplier sells the OP07 and it's not expensive.
https://www.gotron.be/en/componenten/ic-s/lineair/opamp/op-amp-prec-18v-dip8.html
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #26 on: November 21, 2015, 10:56:15 pm »
You want to get 10uv range out of 1.6v common mode voltage, let's say you want 1% accuracy, then it is 100nv out of 1.6v. How can you match you input gain resistor to that level of accuracy?

Therefore, auto zeroing is crucial, or heavy trimming and software compensation is needed.
I am going to trim my sensors with 10 Ohms Cermets (or equivalent).
With 100 Ohms it's possible to get all sensors to 0.01mV to the ref but requires patience, I want to get to 0.001mV  :scared:
Then apply a gradual high pass filter on my results in software.
These sensors work with 3.2V to 3.5V. After testing, 3.3V gives the most linear result to signal range.
The bridge of the sensor is 3.3/~2=1.64V to the ground.
So I am going to "cheat" in the final version by supplying 1.7V to the "positive" and -1.6 to the "ground" (added benefit of removing any remaining noise from the ground in the sensors).
This will give a common mode voltage of 50mV for a range of 0.1mV. Still not perfect, but a ratio of 500 to 1, not 16000 to 1.

This is not for a classic indoor industrial setting where I can get a "0" situation when everybody is having lunch etc (I'd just get cheap industrial scales and hack them).
These sensors will be working 24/7 measuring wind force on a object - there is ALWAYS wind in Belgium...
I'll have two sensor sets with two objects and I'll be comparing results between the two.
If they both drift in a similar manner due to heat/humidity/barometric pressure, then I don't really care, only the difference between the sets matters.
So far, the 24 hour tests have shown me that the sensors create far less drift than the connectors to the test board - they MUST be soldered.
The max drift I get is 0.01mV for 20°C, but this the limit of what I can detect...

I may sound confident, but I might be a total idiot, so don't hesitate to call me out/recommend a part.
« Last Edit: November 21, 2015, 11:29:56 pm by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #27 on: November 21, 2015, 11:11:08 pm »
An instrumentation amplifier such as the INA126, is definitely the way to go.

Your local scupplier sells the OP07 and it's not expensive.
https://www.gotron.be/en/componenten/ic-s/lineair/opamp/op-amp-prec-18v-dip8.html
Completely forgot about it "slaps forehead"... It's even pin compatible with the 741... Used some on a project last year... Still got one on my desk...
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #28 on: November 21, 2015, 11:20:19 pm »
For 10uv resolution, I will go for an at least 24 bit differential input ADC. There are very cheap ones used in scales, all you need to do is to software trim -- you have 24 bit to fuck around.

TI announced a new part recently, providing 32 bit ADC resolution, all sorts of excitation source for sensors and fully programmable digital filter. Expensive, but just $1x.xx USD, not that bad.

Or if you can live with 5V IO voltage, LTC244x is your best shot -- fully differential input, max output for signal conditioning, and cheap if bought from 3rd party distributors.
The 10uV is going to be amplified 330ex in an INA126 (1/3 of the max) then the result fed directly to the ADC of the Arduino.
This is for the "1st gen" version, next year I'll have to do an evolution of my thesis in Flemish to get my diploma in two languages (has to with Port State Authority, IMO, Belgian government rules mumbo jumbo) and pushing the resolution way up, like you suggest, is amongst my plans.
As an example, this year, I'm summing the result of the sensors per set, next year I'll be doing it separately per sensor, so I'll need exterior ADC's in any case.
Thanks for your suggestions.
« Last Edit: November 21, 2015, 11:27:05 pm by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #29 on: November 21, 2015, 11:44:23 pm »
An instrumentation amplifier such as the INA126, is definitely the way to go.

Your local scupplier sells the OP07 and it's not expensive.
https://www.gotron.be/en/componenten/ic-s/lineair/opamp/op-amp-prec-18v-dip8.html
Completely forgot about it "slaps forehead"... It's even pin compatible with the 741... Used some on a project last year... Still got one on my desk...
FFS... Put an OP07 as the third opamp of the circuit and at 500 Ohms, the range jumped from 23mV to 32mV "bangs head on desk".

Edit: If one should feel the need to bang ones head upon ones desk, one should check for upturned 14 pins through hole parts, it hurts and ruins the legs.
« Last Edit: November 21, 2015, 11:49:47 pm by gildasd »
I'm electronically illiterate
 

Online Zero999

  • Super Contributor
  • ***
  • Posts: 19519
  • Country: gb
  • 0999
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #30 on: November 22, 2015, 10:19:26 am »
How about replacing all the op-amps with the OP07? They're not expensive!

I really want to avoid a professor going "you could have done this with a 741 for less" during the defence stage of my thesis...
I have to dedicate a page to "developing" each part, thus rejecting components.

Having been an industrial designer, this is a bit senseless to me, but that's how they want it in my Uni...
They may also want you to consider other, cheaper microcontrollers.
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #31 on: November 22, 2015, 11:27:39 am »
How about replacing all the op-amps with the OP07? They're not expensive!

I really want to avoid a professor going "you could have done this with a 741 for less" during the defence stage of my thesis...
I have to dedicate a page to "developing" each part, thus rejecting components.

Having been an industrial designer, this is a bit senseless to me, but that's how they want it in my Uni...
They may also want you to consider other, cheaper microcontrollers.
The Arduino was kinda imposed, this being outside on a roof, there is possibility of damage... Quick replacement parts are a must.
Additionally, the datalogger from Adafruit is cheap and quite good, I2C parts are common etc.

Only the sensor board will be marked in the electronics class, thusly, all the other "stuff" will be 100% off the shelf.
The thesis itself is 90% the analysis of the data, 5% will be the electronics (mostly documentation) and 5 % the physical construction.
« Last Edit: November 22, 2015, 11:51:34 am by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #32 on: November 22, 2015, 11:44:40 am »
I worked out a method that cancels common mode bias voltage caused by resistor mismatch COMPLETELY. Please see the schematics attached.
That's so simple it should have been obvious!
In fact I already did a test of basically what you are proposing, but it was outputting 0.8V with no signal...
The 741 board was to understand what I was doing wrong.

The only issue I have with your proposition is plugging in the sensor directly into the A and B pin.
In my tests, the variable resistor on the sensor interferes with the input resistor on the Op amp.
However, if I have proved that jelly bean Opamps are crap at amplifying 100uV to 10uV class signals, they do a great job at buffering them.
So with a buffer upstream of your A an B pins, this should work.

Then with a mV class signal, referencing to ground should be a far simpler proposition.
In any case, this should be done with OP07 and not LM741's !

This will be the way to go if for some weird reason reason I can't use the INA126's or the AD8237...

I'll do a test Monday, thanks!

Blueskull's proposition:
« Last Edit: November 22, 2015, 11:59:54 am by gildasd »
I'm electronically illiterate
 

Offline Kalvin

  • Super Contributor
  • ***
  • Posts: 2145
  • Country: fi
  • Embedded SW/HW.
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #33 on: November 22, 2015, 05:48:01 pm »
I worked out a method that cancels common mode bias voltage caused by resistor mismatch COMPLETELY. Please see the schematics attached.
I tried to verify your calculations. The voltage at input node a will not cancel out which will produce quite poor CMRR.
« Last Edit: November 22, 2015, 05:52:32 pm by Kalvin »
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #34 on: November 27, 2015, 03:45:46 pm »
I did a small circuit to test small voltage amplification of Op amps with varying burden voltages.

Seems to work, I'll do a table of measurements of various Opamps tonight

The unity amp is done by a LM358, originally I used a Tl082, but that thing was drifting like a Japanese teen with an Acura up a mountain road.
The weird loop is the ground linking all the unused pads: the circuit was picking up something RF.
« Last Edit: November 27, 2015, 06:04:42 pm by gildasd »
I'm electronically illiterate
 

Online exe

  • Supporter
  • ****
  • Posts: 2562
  • Country: nl
  • self-educated hobbyist
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #35 on: November 27, 2015, 04:35:29 pm »
Wow, I thought 0.01mV is well below the noise floor of an "open air" scheme...
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #36 on: November 27, 2015, 04:50:44 pm »
Wow, I thought 0.01mV is well below the noise floor of an "open air" scheme...
If I get a nice curve to 0.1mV, then job done. Anything below that is a bonus.

The common mode is selected on the unity op amp that goes to the non inverting, then the difference chosen  on the second. All that remains is to mark the output of the test. Repeat till fingers bleed.
Makes me wish I had a digital scope!
I'm electronically illiterate
 

Offline Aodhan145

  • Frequent Contributor
  • **
  • Posts: 403
  • Country: 00
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #37 on: November 27, 2015, 05:09:51 pm »
I did a small circuit to test small voltage amplification of Op amps with varying burden voltages.

Seems to work, I'll do a table of measurements of various Opamps tonight

Have you ever heard of one of these things called a solderless breadboard?
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #38 on: November 27, 2015, 05:17:34 pm »
I did a small circuit to test small voltage amplification of Op amps with varying burden voltages.

Seems to work, I'll do a table of measurements of various Opamps tonight

Have you ever heard of one of these things called a solderless breadboard?
In the uV domain the contacts on individual pins  begins to dominate the measurements. In this case the cermet trimmers being a real pain.
« Last Edit: November 27, 2015, 06:03:21 pm by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #39 on: November 27, 2015, 08:47:28 pm »
A simple inverting amp, with a common mode of 100mV, does not work properly with a signal below 100mV.
It basically flatlines with a 741 or an Op07 below 50mV with an output of -360mV. I can see that it starts trending to a straight above, but I can really test that because this circuit was not designed to test that.
I tested in positive and negative to roughly the same result.
Probably because the common mode begins to be reduced in size compared to the signal to be amplified.
Using an amplifier this way, with a sensor like this, would impose having a super precise and stable common mode in the 1 to 10uV range... Nope.
Building a sensor setup below 100mV common is difficult with the tools I have (Uni scopes don't go below 20mV per division and are noisy below 1mV...)

I'm going more and more in the direction of doing this with Zener diodes furnishing a reference fed into a Unity amp.
One at -1.6V (on a -3V rail) and the other +1.7V (on a 6V rail) = common mode of 100mV.

So I'm going to rewire my board as a simple differential amplifier the test Amp.
This is the setup I'm going to use:

http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/opampvar6.html#c2
R1=10kOhms
R3=100Kohms
« Last Edit: November 27, 2015, 09:08:05 pm by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #40 on: November 29, 2015, 01:07:34 am »
Test results:
19 measurements done between -100mV to +100mV.
100mV, 50mV, 25mV, 10mV, 5mV, 2.5mV, 1mV, 0.5mV, 0.25mV, 0.1mV, -0.25mV, - 0.5mV etc...
The "error" is between the predicted result and the measurement.

Common mode voltage of 100mV

LM358 as unity amp - OP07 as difference amplifier:
Average error at output: 4.84mV
Mostly due to a spike at 0.25mV (tested multiple times).

OP082 as unity amp - OP07 as difference amplifier:
Average error at output: 3.10mV
The error between 0.25mV and 0.10mV (the zone I'm interested in) is about an order of magnitude better than all my other tests.
It's probably even better, but I can't test it more finely with my tools.

OP082 as unity amp - LM741 as difference amplifier:
Measurement breaks down below 1mV. It drifts erratically from positive to negative.
However, down to to 2.5mV, it is far more stable than the OP07, so not so good for measuring, great for fine tuned power rails.

500mV of common mode:

LM358 as unity amp - OP07 as difference amplifier:
Error in the critical zone multiplied by 2.
Something I can't quantify; the measurement takes noticeably more time to stabilise.

1.64V of common mode:
LM358 as unity amp - OP07 as difference amplifier:
Does not want to stabilise, keeps ramping up and down over multiple mV even with a signal of 100mV
This is exactly what is happening with the instrumentation amp I built earlier.

Conclusion:

The issue with the instrumentation has been found: common mode too high by over a magnitude.
Don't use a 741 for DC measurements below 2.5mV! As expected.
LM082 (thus LM084) works great with the OP07. Not what I expected.

« Last Edit: November 29, 2015, 02:41:16 pm by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #41 on: December 11, 2015, 09:53:00 pm »
Prof asked for another round of tests:
I've gone all modular...

1) Top right: 555 based negative current supply.
2) Middle right: LM317 T positive negative rail micro supply (via voltage dividers this goes down to + and - 0,01mV stable.
3) Bottom right: Opamp test board, bunch of voltage dividers, second connector to also test with common mode.
4) Left: Power rails status leds. If I cross wires, the leds change. Avoids having to test the rails every time.

It seems my multimeter's null is off by 0.0004V...
This proves that a common mode is a must, below 0.0004 the results go nuts...
« Last Edit: December 12, 2015, 12:45:51 am by gildasd »
I'm electronically illiterate
 

Offline gildasdTopic starter

  • Frequent Contributor
  • **
  • Posts: 935
  • Country: be
  • Engineering watch officer - Apprentice Officer
    • Sci-fi Meanderings
Re: Amplifying a 0.01mV to 3.2mV signal to Arduino ADC strength - Op Amp
« Reply #42 on: December 12, 2015, 01:02:33 am »
If I was to use an OP07, having 0.5mV "below" the signal seems imperative.
Above that the amplification is shockingly linear (even with my tools). Below that, it goes a bit weird...
More tests tomorrow. |O

However I'm beginning that that the best approach/compromise with the tools at hand is:
1) Between 50 and 100mV of common mode.
2) About 0.5mV of offset (easy to remove post amplification).

Testing to be done:
1) Put 100mV instead of ground.
2) Summing amp.
3) Full instrument amp.
I'm electronically illiterate
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf