Most of the multimeters do not offer resistance measurement in the milliohm range. In most meters a typically Ohm range has an accuracy of 0.1 ohm and is too coarse for measuring small resistance. Of course, some of the high-end multimeters have milliohm range and there are also dedicated micro ohmmeters for even more accurate small resistance measurements, but most of them are priced way out of the range for personal use.

The key in resistance measurement is nothing more than Ohm’s law. And any unknown resistance can be calculated by using either a known voltage source and measure the current or a known current source and measure the voltage drop across the resistance to be measured. Typically, small resistance in the milliohm range is measured using the 4-point Kelvin sensing method to eliminate wiring resistance of the probes and thus makes the measurement more accurate.

One of the problems of measuring small resistance is that for a given current value, as the resistance to be measured goes lower, the voltage drop becomes smaller as well and in most of the cases this voltage drop becomes too small to be measured accurately. For instance the voltage generated across a 10 milli-ohm resistor from 100 mA current is only 1 mV, which is too small for most multimeters.

Although the issue mentioned above can be somewhat resolved by increasing the current passed through the resistor, there is an other issue associated with this approach. Unfortunately, the heat generated from the excessive current flow affects the accuracy of the measurement. And sometimes, the target to be measured simply cannot handle current this high.

To effectively measure small resistance values in the milliohm range, we need to accurately measure the current flowing through and at the same time accurately capture the minute voltage drop across the terminals.

To accurately measure small voltages, one can use a programmable-gain precision instrumentation operational amplifier such as National Semiconductor‘s LMP8358. While you can use other op-amps with varies gains, one of the key benefits of using a programmable-gain gain precision instrumentation op-amp is that there is no need to match the gain setting resistors. LMP8358’s gain can be programmatically set to 10, 20, 50, 100, 200, 500 and 1000, which is superb for amplifing the millivolts voltage drop.

An accurate constant current source is needed to generate a known current reference. We could use an additional multimeter to measure the current and thus eliminating the need for a current source, but it would be too cumbersome for regular use.

For the ease of metering, it is usually a good idea to set the current source so that the current and voltage product is a power of 10. For instance, for a gain of 100, setting the current to 10 mA seems to be a good compromise between the current flow and the overall accuracy. The resultant measurement readings will be one 1mV per milliohm which is quite convenient. With this setting, you should be able to measure accurately down to 10 milliohm (10 mV reading). And by setting the gain to 1000 (10 mV/milliohm) we can measure resistance all the way down to 1 milliohm.

The circuit for accurate milliohm measurement is shown below. It basically is a 10 mA precision current source followed by an zero-offset instrumentation amplifier with a gain of 100.

I used the reference design for the unity-gain difference amplifier AD8276 and a precision Op-Amp AD8603 from Analog Devices to form the precision constant current source. An AS431 precision shunt voltage reference is used for the 2.5V reference voltage. Using this design, the constant load current is Vref/R2. R2 (250 Ohm) will need to have relatively high precision in order for the load current to be accurate. If you are using other precision voltage references, the value of R2 will need to be adjusted so that Vref/R2=10 mA.

The amplifier stage uses an LMP8358 from National Semiconductor. LMP8358 can be controlled via an MCU using SPI (serial mode) or via three pins (parallel mode) for range-setting. Using an MCU to control LMP8358 has some additional advantages as some of the additional functionality such as input fault detection is only available in serial mode. But for this project, we use the pins (G2, G1, G0) to set amplifier gains directly. I may decide to switch to serial mode for the finished project as in serial mode the gains can be set more easily via commands.

For now, I have setup the LMP8358 circuit on a breadboard:

The gain for LMP8358 can be set via pin 11,12 and 13 as follows:

G2 | G1 | G0 | Gain |

0 | 0 | 0 | 10 |

0 | 0 | 1 | 20 |

0 | 1 | 0 | 50 |

0 | 1 | 1 | 100 |

1 | 0 | 0 | 200 |

1 | 0 | 1 | 500 |

1 | 1 | 0 | 1000 |

More details can be found in the datasheet.

The picture below shows the measurement of a 0.5 Ohm power resistor. Note that 4-point probes were used for maximum accuracy:

The measured voltage for the 0.5 Ohm resistor (±10%) is 0.492 V, which is dead on compared to readings obtained using a professional milliohm meter.

I am curious as to what you are using for 4-point probes. Are you using alligator clips in which each jaw is insulated from the other jaw? It is important that each probe makes independent contact with the device under test.

Jody

Yes Jody, I am glad you pointed it out. The alligator clips were modified so that each side is isolated from each other. If the measurement is not as critical, this rule can be relaxed a little bit. Even with regular alligator clips, this four-wire method can still significantly improve accuracy assuming that the clip induced resistance is small enough.

Nice work!

Have you checked what kind of offset you have on the voltage reading if you short the probes? There’s always that danger with single-reading resistance measurements.

You can get around it by either:

1) zeroing the offset before each measurement

2) Taking a second measurement where you reverse the current, and you fit a line to those two points (though this means your analog stuff has to be able to go negative)

3) Sweeping the current, though this obviously requires a more complicated current source.

There is an offset voltage which is around 50mV in the x100 mode (probes shorted). You will need to subtract this value from your measurement.

Using a DMM with relative function makes this measurement easier as the offset can be zero’d out prior to measuring. In x1000 mode, this offset voltage can reach 500mV and thus it is important to take this voltage into consideration when doing measurement.

Kerry,

I just built your milliohm adapter. Nice project!

When my test leads are shorted, my meter shows .044 Volts, any way to compensate for that in the circuit?

When measuring 6 feet of #22 hookup wire, I measured .143 mv, minus .044, gave me .099 mv, which is within 2% !!! (.097, by the wire table)

Where are the other two test leads of your 4 point leads coming from ?

Thanks Phil. The 0.044V seems a bit too high as the maximum offset voltage 8358 is only 10uV so even with a gain of 1000 you should only get a 10mV output. I suspect that the excess error comes from the wiring. Which comes to the second part of your question. When using Kelvin sensing, one set of wires are used to supply the current to the DUT (device under test), and the other set is used to measure the voltage across the DUT. So in the schematics, the terminal marked as “Test” is actually connected to two red wires, one goes to AD8603 pin 3, and the other one goes to LMP8358 pin 1. And the other set were connected to the ground (the ground point is at the other end of the DUT).

So you can still improve your measurement accuracy quite a bit.

The offset voltage cannot be totally removed with a single supply. But if you use both positive and negative power rail for LMP8358, the offset would be greatly reduced.

This might be exactly what I need! I need to measure across unknown R where unknown R will be between 0.04ohms and 4 ohms. Will this circuit be able to do this? For reference, the existing circuit I’d be augmenting is already feeding into a 24bit ADC, I just don’t have confidence that it’s worth it as the accuracy is poor, so who cares about precision? Will this be precise and accurate down to 0.04 ohms?

Thank you!

Well the circuit can be built with the accuracy level you needed if you use high precision, low tempco resistors and a better voltage reference.

Hi Kerry,

nice job !

I would like to have a big range with your milliohm meter (0.1 Ohm to 500Ohms for example).

I’ll do this by modifying the gain on the lmp with a microcontroller, using Vout connected on an ADC pin of the microcontroller. Here are the steps :

1) I connect a resistor

2) The uC sets a default gain of 100. If the measured voltage is too low/big, the uC will set the gain which is bigger/lower.

3)Step 2 is done until the measurement can be made with accuracy enough.

But here is the problem : I put a 500 Ohms resistor with the lowest gain (10). With this gain, the max voltage on the IN pin can be 0.5V (my supply voltage is 5V => 5 / 10 = 0.5). So the current should be : 0.5V / 500 = 1mA

Will it work if I put the resistor R2 at 2.5kOhms instead of 250 Ohms ? (Is not the 1mA current too small ? )

Thank you in advance for your response ;)

And one more time nice job Kerry !

Alex

You can definitely put a 2.5K resistor there.

But thermal noise increases as resistor value gets higher. And the voltage drop across a a 0.1 Ohm resistor would be too low (0.1 mV) and the noise from the opamp would likely to be significant.

If you are using 1mA across the full range. So an alternative may be is set your voltage cutoff range at 4.0V and if the measured voltage is higher than that you can assume an “overrange” condition had occurred and switch to a higher range accordingly.

If I use a LM336Z-2.5 instead of the AS431 (difficult to find), it may compromise the precision of the measure, right? But, how much could it be compromised?

LM136 actually has lower temperature coefficient so it is better as far as the temperature stability is concerned. For this application, it is more than adequate.

How can I measure milliohm using 3.3v @ 300 uA

Interested in this as I’m trying to find a good circuit to make a resistivity meter for archaeology.