# High precision resistance meter

I'm designing a high precision resistance meter, which will measure the change of resistance of a given remote resistor, which is not placed on the circuit PCB, against temperature. I want to do this in the easiest possible way, while also achieving a high precision solution. The solution is built around a 3.3V microcontroller. In order to measure change in resistivity, I provide a small current to the test resistor. The current is provided directly by the 3.3V line which powers the microcontroller. The current is limited by a resistor, which is chosen to get a certain voltage drop against the test resistor. In example, I chose to generate a voltage drop of 10 mV @ 20 Celsius degrees across the test resistor. This voltage signal is amplified in an opamp, such as the OPA2333P, in single supply mode (3.3V to ground) A programmable offset signal is generated by the microcontroller DAC (PWM @ 128kHz). The DAC output is filtered by an active low pass filter and then provided to the amplifying opamp.

simulate this circuit – Schematic created using CircuitLab

The target is to measure a change of test test resistor in the order of the 0.05%. I expect to see a signal in the ADC which is proportional to temperature. According to my calculations and measurements I should get a signal in the ADC of 20 mV/degree Celsius.

Do you see any flaws in this circuit?

• Resistivity is a material property. Resistance is what you are likely to be measuring. Commented May 26, 2022 at 16:28
• Probably need also to measure the temperature around the "remote resistor" ... ? Commented May 26, 2022 at 21:07

You are trying to measure a low resistance of ~1$$\\Omega\$$ (not resistivity) and (presumably) fairly accurately, perhaps << +/-0.1% I would guess.

You're measuring the resistance of both of the conductors running to the remote resistance because you've not used a Kelvin or even a 3-wire compensation scheme. The 'obvious' solution is to use an instrumentation amplifier and Kelvin (4 wire force/sense) connection, but there are other approaches and there are pitfalls with the inamp approach, especially with only a single supply available.

It might be a bit much to expect OA1 to output 10mV-ish voltage accurately, that's very close to the supply rail, though with a pull-down it might work. I would suggest having OA1 operate at about 1V output and divide that down, which only adds one resistor.

Generally speaking, the offset circuit should work (the resistor values are dubious), with about 0.1°C HF ripple ideally (of course things may not be ideal) but there is no reference other than the supply voltage so it's a bit crude. If your ADC is only using the supply voltage as a reference that may be okay. Consider the effect of only 0.1pF of stray capacitance across R1 at 128kHz (just assume sine wave for back-of envelope) that's several percent of your 430k resistor- go down by at least 20:1 and watch the layout.

At 128kHz PWM the changes in switching speed of the MCU output with temperature may show up-- total PWM cycle is 7.8$$\\mu\$$s, and 100% is about 20mV so 15$$\\mu\$$V is about 6ns.

You have a gain of about 1300 so you are expecting 15$$\\mu\$$V/°C or about 1300ppm/°C in a 1.2$$\\Omega\$$ resistor. Not so easy to get good results, depending on how you define 'good', of course.

• Correct, I'm trying to measure a 0.05% change in resistance. That would be enough as accuracy. No problems for using an INA, but what should I do if I am limited to a single supply rail at 3.3V? Regarding the offset circuit, should I select a lower PWM frequency from the DAC? Here again I am limited in using the PWM to generate the voltage reference. I am aware of the huge gain of the opamp. As said, I could use an INA instead. Should I offset the target resistor voltage by 1V to keep the input higher than the ground power rail of the INA? Commented May 27, 2022 at 7:28
• You could create a negative rail with a DC-DC or charge pump. You could offset the inpu, which is simple. Maybe a zero-drift type of inamp would be best. And, you could always use a DAC rather than PWM. Commented May 27, 2022 at 14:13

This is not a precision circuit, there are just too many moving parts.

That's before you start to critique specific things like too low a target voltage on your resistor, or the resistance of M1 being variable.

If you want to measure changes in a resistor to 'precision' levels, then use an already proven technique to do that well, the Wheatstone Bridge. It's used for strain gauges and PT100 temperature sensors, where you are measuring small changes in resistance with high precision.

Make three of the arms low tempco resistors, and the 4th your resistor under test. Use the bridge in 'measure' mode, where you nominally balance it, to remove the large static signal from your resistor, and then you can measure the changes to high precision. Use an instrumentation amplifier if you want to amplifiy the voltage out of the bridge, or an ADC like the HX711, which is intended to measure strain gauges.

• I can't use a Wheatstone bridge unfortunately... Commented May 27, 2022 at 7:31
• @Francesco Just curious. What aspect of your application stops you configuring your measurement as a Wheatstone Bridge? This is both the easiest and best method to measure small changes in a resistor. Is it resistor dissipation? Is it you've been told not to? Concerns over reading speed? Need to cope with many resistors of different values? Some aspect of the 'remote' part of it? I can't see anything in your proposed solution that cannot be replaced with a bridge. Commented May 27, 2022 at 10:23

I don't know what your requirements are, but I doubt the circuit could work. Some flaws I can see:

• The MOSFET has an on-resistance at VGS = 3.6 V of ~0.14 ohm. That is large compared to the signal you are trying to measure.

• You are sensitive to changes in supply voltage. I doubt the pwer supply (if intended for powering the MCU) has particularly good stability (with time & temperature...).

• Are you confident that the resistors you are testing your DUT against (R3, R4, R5) are sufficiently stable? For instance, the current through R5 will lead to self-heating.

• PWM is terrible for noise and resolution. By comparison, a sigma-delta modulator outperforms it by orders of magnitude. If PWM is sufficient, then I don't think your application qualifies as 'precision' ;)

The LC filter does a really poor job at reducing the PWM ripple, barely 20 dB.

• OA2 is not configured as a difference amplifier. The gain will be different for the inverting and non-inverting paths.

• The closed-loop gain is really high (>1000). Haven't looked at the datasheet, but is the loop gain sufficient for the desired accuracy? Remember that the signal is close to GND as well.

Note: The loop gain (= open-loop gain - closed loop gain) of the opamp determines how well it rejects non-linearities. When insuffient, the actual closed-loop gain may be different from the expected value, and the amplifier is no longer linear.

• How do you trim the 'reference' resistor network to accurately match the DUT? If the reference is off by 0.1%, thats 3.3 mV before OA2, or full scale after amplification.

Some suggestions:

1. Consider an instrumentation amplifier.
2. Get a clear picture of what your accuracy requirements are.
3. Draft your 'error budget', ie how much error each component or subcircuit introduces.
• It all depends on your requirements. Also, sorry, I just added two more points, so your numbering in the comment will likely be off :/ Commented May 26, 2022 at 16:35
• 1) Why? 0.14 ohm in series with the 330 ohm is really nothing. I just take that into account that I have a 330.14 ohm limiting resistor. 2) Nope. Everything is powered by the 3.3V line, changes reflect to both the signal and the offset 3) Good point. However the R5 will dissipate 33 mW. Is this really enough for self-heating? R3/R4 are the amplifier resistors, they can be selected from high accuracy ones 4) Thanks. 5) Which topology should I choose? 6) What do you mean? 7) Good point 8) I trim it by generating a fixed voltage from the DAC of the microcontroller. Commented May 26, 2022 at 16:42
• 1. The FET has a significant tempco, see datasheet. 2. It will affect your measurement. A change in supply voltage will not create an offset (assuming your reference is perfect) but it will change the gain. 3. Probably not (there are bigger issues), but you need to keep it in mind. 5. An instrumentation amplifier, possibly also a transimpedance amplifier. Might want to look into 'auto-balancing bridge' circuits. 6. Added explanantions on loop gain. Ask another question if you need more help. Commented May 26, 2022 at 16:55
• Let me stress this again: you need to formalize your requirements (accuracy, power, price, voltages, application, ...). Otherwise we cannot reason about your circuit. Commented May 26, 2022 at 16:55
• Correct. Accuracy: 0.05% resistance change in test resistor, remotely placed. Power: limited by 3.3V single supply rail, battery operated. Price: no problem. Commented May 27, 2022 at 7:33

Your OA1 has 100% positive feedback, so is unlikely to work very well. Putting only 10 mV across your unknown resistor will give you only a very small signal indeed, e.g. for a 1 % change, you get 100 µV, not good for high precision. I wouldn't use a microcontroller at all, just an opamp DC amplifier, with feedback capacitors to reduce noise by restricting bandwidth. Using metal film resistors, with the circuit in a box to protect from air currents,the gain should be stable enough to qualify as 'high precision'. More complex would be to put the test resistor into an active bridge circuit, but that too much to go into here.

• OA1 had of course a typo, corrected. Mmmmmm I cannot have higher voltage dropp across the test resistor. I would just end up heating the whole thing and thus the whole system would be pointless. Mmmmm2 what do you mean "I woundn't use a microcontroller at all?" I need the micro to read my output. Commented May 26, 2022 at 16:34

That is not a current source, the current depends on the transistor's Resistance chanel (Trc), the R5 and Rtest.

Vdrop = (3.3* Rtest)/ (Trc + R5 + Rtest)

Take care that Trc will depends on temperature and voltage drop through the chanel. R5 will have a value that depends on temperatura, too.

You should use a good current source. Like a mirror source. So, you know the current, and then measure the voltage, drop you get resistance.

• And so? Of course I will take room temperature into account. But here I want to measure a remote test resistor, which is not placed on the circuit PCB. Commented May 26, 2022 at 16:43
• Are you then considering the resistance of the conductors then? To measure one resistance and one more small resistance you must use a current source. This way you become independent from the variations of the other resistances with respect to temperature. because no matter how far away they are, the temperature of the room where the PCB is located will not be constant. I clarify this because you said you were looking for precision Commented May 26, 2022 at 16:52
• Of course. But everything is counterbalanced and perfectly calibrated by the voltage reference provided by the DAC. This is the offset which will be provided to the operational amplifier. All the stray resistance is taken into account. Commented May 26, 2022 at 16:54
• Even if the balancing was perfect (which it is not even close to), you'd be measuring $\frac{V_{dd}R_{\mathrm{test}}}{R_T + R_5 + R_{\mathrm{DUT}} + \Delta R} - \frac{V_{dd}R_{\mathrm{test}}}{R_T + R_5 + R_{\mathrm{DUT}}}$ which still depends on the supply voltage to first order on $\Delta R$. Commented May 26, 2022 at 17:02
• all the stray resistance is taken into account? Also the source's output resistance? Also the wire resistance? The solution is easier. Use a current source (a good one) and read with the ADC the Rtest voltage drop. That's how a resistor meter works. Commented May 26, 2022 at 19:37