Measuring a small difference in resistance

Hi All,

I have a need to test a resistor value on a board in an automatic tester machine I have built. The resistance of the resistor needs to be between 990-1010 ohms according to the customer. Its spec'ed as a 1K ohm. The problem I'm having is how do I accurately measure such a small range of resistance with an Arduino? I have come across Wheatstone bridges, but I am not understanding how to implement that with an arduino since the Bridge needs a variable resistor to balance it. I don't know how to make the Arduino control a resistance.

any Ideas?

Thanks!

Todd

Use metal film resistors 1k Ohm 1 %, 990-1010 ohms, in practice better than so.

Pelle

The tolerance is not the issue. I need to be able to tell with the machine if the wrong resistors have been installed for instance. We could just use a multimeter, but all the other voltages and currents are already being measured by the tester, It would be a lot nicer to have it do everything.

I currently have a setup where the resistor i need to check is part of a voltage divider and I'm sending the resultant voltage through an Instrumentation amplifier to get the voltage back up to something that the A/D converter can read. I still don't have much resolution to tell the difference easily between 990 or 1010 ohms and the noise in the circuit. I get results that jump around a little.

Wheatstone bridge circuit is the way. Some nice 0.1% metal film as the reference
resistors - you already have an instrumentation opamp to boost the difference. The
wheatstone bridge makes the measurement ratiometric to the supply.

Is the resistor totally isolated? It does not take much parallel resistance to mess up a 1% measurement.

test a resistor value on a board in an automatic tester machine

If it is already on the board, and you are the one who is soldering the components, then buy precision resistors.

toddm:
I currently have a setup where the resistor i need to check is part of a voltage divider and I'm sending the resultant voltage through an Instrumentation amplifier to get the voltage back up to something that the A/D converter can read. I still don't have much resolution to tell the difference easily between 990 or 1010 ohms and the noise in the circuit. I get results that jump around a little.

If you mean to say you're using an instrumentation amplifier like an INA125P -- which only amplifies the voltage and forces you to use the Arduino's ADC -- what you really should have done is use a "precision ADC" which will convert the analog voltage directly into a digital signal. A chip like an ADS1110 interfaces to the Arduino with I2C and has 16 bits of precision (64 times more precise than the Arduino's 10 bit ADC).

You might also want to google "Ardutester" for ideas on how to more accurately measure a wide range of resistances.

MarkT : How do I deal with balancing the Bridge with the arduino?

KeithRB: There are 2 resistors i need to measure. They are in series on a pair of RS485 communication lines that pass through this particular board. I'm not quite sure why the designer put them there but I assume it is for some sort of immunity to transients. I have 2 connectors on the board and without the resistors in the circuit the lines would pass straight through the board from one connector to the other.

LarryD: The boards come to me already assembled. I do not want to mess with the resistors unless they are the incorrect value.

Chagrin: Its actually an INA122U, and the only reason I used it was because I had some on hand and I was somewhat familiar with them. I will look into the ADS1110 you mentioned. Part of the problem is that the current tester is based on a Siliconlabs micro controller, a C8051f121. I want to switch it over to arduino since I'm not a programmer and I find it a lot easier to use, especially if I want to add an LCD display to the tester-which I do.

If you have to measure them to 1% they are not there for "immunity to transients"!

You need to measure the resistance without the resistors in the circuit to see how much parallel resistance is there that might influence the measurement.

KeithRB:
If you have to measure them to 1% they are not there for "immunity to transients"!

Like i said I don't know why they are there, but they are and I need to measure them.

KeithRB:
You need to measure the resistance without the resistors in the circuit to see how much parallel resistance is there that might influence the measurement.

A poor explanation on my part. There is no parallel resistance. There are 2 circuits with one resistor each. The resistors are not in series with each other. I meant they were in series with the separate circuits. The circuits are as simple as you can get, basically a piece of wire with a resistor in the middle and connectors on each end. I'm connecting to each end of the wires through the connectors and measuring the total resistance of the circuit of which the traces and connectors add virtually nothing.

Post the circuit. You are wasting our time otherwise. :astonished:

Hi, what does the arduino do if the resistor is out of spec, how are you calibrating the arduino?

I'd go out and buy a FLUKE meter they come with a calibration report, use that to measure the resistors.

Tom...... :slight_smile:

If you need to measure values to spec you will have to have a calibrated meter.

As requested the circuit is attached.

We have several Calibrated Fluke 787 process meters since we do a lot of current loop calibration. I'm not at all interested in using a fluke to measure the resistors. I would much rather use an automatic tester- time is money.

I'm not calibrating the Arduino yet because I don't know what type of Circuit I need yet. I did order a couple of the AD1110 to try out.

In the current design if the resistors are out of spec a red LED illuminates. If they are in spec a green one illuminates. Like I mentioned before I would like to add an LCD to show actual values. But the measuring circuit must be improved first because as is its not stable enough.

Does anyone have any guidance on using a Wheatstone bridge with an Arduino?

R15 &R16.pdf (5.22 KB)

Its not a very complex circuit!

For wheatstone bridge setup remember that strain guages (as in a load-cell)
are exectly that - 4 resistors in a bridge. The amplifiers used with a load cell
(with the gain reduced) should work nicely - you just have to connect the
unknown resistor into a bridge with 3 known resistors and measure the voltage
difference.

The AD620 and INA125P are examples of the sort of chip used.

MarkT:
Its not a very complex circuit!

For wheatstone bridge setup remember that strain guages (as in a load-cell)
are exectly that - 4 resistors in a bridge. The amplifiers used with a load cell
(with the gain reduced) should work nicely - you just have to connect the
unknown resistor into a bridge with 3 known resistors and measure the voltage
difference.

The AD620 and INA125P are examples of the sort of chip used.

OK, I like where this is going, but I still have some gaps in my Wheatstone Bridge knowledge. Should I set the Bridge up to be "balanced" at 990 ohms, then if the resistance i'm testing goes higher i will get a positive voltage difference from the bridge? I suppose it matters which resistor I swap? Thanks!!

I'm ordering a few INA125P's too.

I've done more thinking on this.

My assumptions:

  1. The differential inputs of the INA do not care if my differential voltage is positive or negative, the output will be positive if single supply.

  2. If i setup my bridge to be balanced at 1000 ohms i will not be able to tell the difference between a positive or negative output of the bridge within my measurement range. A 990 ohm would output about the same voltage as a 1010 ohm but negative.

So if the above is true I need to set the bridge to balance somewhere below or above my measurement range. if i set it to balance at 970 ohms and i put in a 990 ohm resistor to test i should get 25.5mV out of the bridge. That will let me measure resistors all the way down to 970 ohms. A higher value test resistor will only make the voltage output go higher and never negative unless the resistor is below 970.

I should have some parts to test the above by Monday.

Does this sound like a good plan?

toddm:
I've done more thinking on this.

My assumptions:

  1. The differential inputs of the INA do not care if my differential voltage is positive or negative, the output will be positive if single supply.

Wrong

  1. If i setup my bridge to be balanced at 1000 ohms i will not be able to tell the difference between a positive or negative output of the bridge within my measurement range. A 990 ohm would output about the same voltage as a 1010 ohm but negative.

You need to look at what a differential amplifier does - produce a voltage difference
between output and reference that is directly proportional to the input voltage
difference. Set your reference mid-rail and you'll get meaning output for either input
difference sign.

toddm:
snip...2. If i setup my bridge to be balanced at 1000 ohms i will not be able to tell the difference between a positive or negative output of the bridge within my measurement range. A 990 ohm would output about the same voltage as a 1010 ohm but negative.
... snip

Yes, you can tell the difference between positive and negative... and this is the behavior we both want and need.

To expand on what MarkT has said, you want the bridge to be balanced at the value you want to measure. A Wheatstone bridge is nothing more than two independent voltage dividers which uses four resistors with your differential meter measuring between the center points of those two voltage dividers.

To explain in painful detail, lets assume all four resistors (includes the R under test) are exactly 1000 ohms. Also, let's use 10.0 volts dc as the voltage applied to the bridge.

Since all values have been defined, calculate the voltage at the mid-point of each divider circuit using Vo= Vin * r2/(r2+r1) and you'll see it is exactly 0.5 times your applied voltage which gives us five volts at center point since 10.0 * 0.5 = 5.0 volts. Since the bridge is as we say, balanced, there is exactly five volts at the center point of the other two resistors which gives us a differential voltage of exactly zero volts which means our resistor under test is in fact 1000 ohms, no more, no less.

Now, let's say your resistor under test is 1010 ohms. Recalculating the voltage on that side of the bridge yields 0.5025 * Vin giving us +5.025 volts. Since the other side of the bridge has not changed, its output is 0.5 * Vin and the differential voltage is 0.025 volts (5.025-5.0). Since that voltage represents the upper limit of our resistor under test we can use that to set the gain of our amplifier. Again, lets use 10 volts out of our amplifier as the limit so the gain needs to be 10.0/0.025 = 400. So, with an amplifier output of +10.0 volts, the resistor under test is exactly 1% greater than 1000 ohms. +5.0 volts would mean the resistor is 0.5 % high or 1005 ohms.

Let's now flip the test case and say the R under test is 990 ohms. Doing the math gives us 0.4975 for the ratio and plugging that into our amplifier gives an output of 400 * (4.975v - 5.0v) = -10.0 volts. This is same as the example above with the only difference being the sign of the output which means our resistor under test is -1.0% low.

Since you want to do this with an Arduino, you can easily drop the supply voltage to 5 volts and leaving the amp gain at 400 gives you a +/-5 volts amp output equaling a range of +/- 1% tolerance of your 1k resistor under test.

So now hopefully you can see why the center point of the bridge needs to be 1000 ohms?

If you want to increase the test range to say +/- 2%, all that needs to be done is to reduce the differential amp gain to 200 and you're there. Extrapolating to 5% or what ever range you want is just as easy.

As a side topic, the amplifiers used in bridge circuits are usually very high gain with low bandwidths and are "chopper" stabilized to prevent drift from input bias current drift. Have a look at David Jones µCurrent device over at EEVBlog for a quick tour on the current technology in chopper stabilized op amps.

I just re-read my own post and I see the problem... Arduino analog inputs are not bipolar so Tooddm's post at the top of the page is the correct approach when you're stuck with a unipolar input. Bummer!

Toddm- you might find one of these amps are easier to implement than rolling your own...

http://www.ebay.com/itm/New-Weighing-Sensor-AD-Module-Dual-channel-24-bit-A-D-Conversion-HX711-Shieding-/400567204760?pt=LH_DefaultDomain_0&hash=item5d43aa7b98

While they were designed as a strain-guage amplifier, it would be a good solution for your application.