# Conditioning a voltage using constant current for an ADC range

I wish to make a set of temperature measurements inside a relatively inaccessible box.

The measurements can be made using Pt100 sensors - platinum Resistance Temperature Detectors (RTD) with a resistance of $100\Omega$ at $0^{\circ}C$. The change in resistance over $80^{\circ}C$ is around $30\Omega$.

I want to digitize this result within the box. I'm currently looking at microcontrollers like this STM32F373 model, which includes (several) 16-bit ADC.

To minimise the self-heating on the RTD, I want to minimise the current used. To make an accurate measurement, I would seem to need a constant current source. Wikipedia suggests several arrangements, at least one of which is given as an answer to this question - Zener Diode Current Source.

How can I go about arranging a known constant current, with only a constant voltage source?

Should I build a circuit similar to the 'Zener Diode' question, separate from any circuitry near the microcontroller, and then just pass the sense leads to the analogue input?

Is there a simple trick to precondition the voltages to lie within a good range for the ADC? Seemingly a combination of gain to scale the range to fit $V_{DD} = \frac{30\Omega}{I_{const}}$ along with a constant offset from another circuit would be appropriate - but perhaps this is just because I'm stunningly ignorant.

• If you want 25 ppm accuracy (consistent with your 16-bit ADC), you probably want something a lot more fussy than that zener source. Try an image source for "precision current source" and see if anything that shows up looks appropriate, realizing that "precision" probably means up to 1% accuracy. – The Photon Dec 24 '15 at 4:22

Making a constant-current source is, in principle, very easy if you have a precision voltage source. The basis for conditioning your RTDs is simulate this circuit – Schematic created using CircuitLab

In this case the current is set by R1, and is equal to V1/R1. The output of the first op amp is equal to the current times the RTD value, but is negative. So op amp 2 is used to invert the signal (assuming you want a positive voltage to the ADC), and this section may have some gain associated with it. R5 is used to provide an offset to compensate for the fact that the RTD does not produce a zero resistance at one end of the useful range.

You'll need to be careful of your resistors. If you're going to the lengths of using a platinum unit and a 16-bit ADC, this suggests that you're trying for very accurate and precise measurements. Temperature coefficients in the resistors can adversely affect this accuracy, but you can get low-drift resistors with at tempco in the range of 25 ppm/deg C.

I use this constant current source for strain gauges and RTDs: - The strain gauge or RTD fits where the block called "current out" is.

You start with a decent constant voltage source (V+) and you set a voltage at the non-inverting input of the op-amp (called Vref). This is set by R1 and R3.

The op-amp then tries to make the voltage on the inverting input equal the voltage on the non-inverting input. To do so it drives the BJT until the current through R2 produces a voltage across R2 that equals the voltage across R1.

Current through the load is then regulated; if the load resistance rises, the op-amp drives the BJT a bit harder until the voltage across R2 = the voltage across R1.

Ignoring the small current taken through the base/emitter to activate the BJT, the current flowing through R2 is the same as current in the load and this current is defined by the voltage across R1.

Try simulating it in LTSpice (or equivalent) and you'll see that it is pretty effective and accurate. If you find that the very small current drawn from the emitter and taken by the base is too much of an error (I'm talking about 0.2% from experience) then use a P channel MOSFET instead of a BJT.

Maybe if you don't quite follow the circuit, consider this NPN version with the load tied to the positive rail: - • Very nice, and thank you for the detailed explanation – chrisb2244 Dec 24 '15 at 9:45
• Your first circuit is only as accurate as the resistors used to set up the Vref. If OP wants 16-bit readings (over an 80 C temperature range), it would be better to at least use a precision reference. – The Photon Dec 24 '15 at 17:26
• @thephoton I agree precision resistors are what I use and the top resistor can be fed by an npn current generator fed from a voltage reference tied to 0 volts. But a precision voltage shunt can replace the top resistor. – Andy aka Dec 24 '15 at 17:35

As stated in the other answers you can build your own constant current source, but there are also designated ICs available for this purpose like the REF200 from TI.

You have to choose a low current to excite the RTD, or elsewise $I^2R$ losses will heat the sensor, thus affecting your measurements. With a low excitation current you get a low voltage drop across the RTD. To achieve a good signal for your ADC you can use an instrumentation amplifier to amplify the voltage drop over the RTD.

Here is an reference design by TI which shows a expanded version of what I described. It features a three wire connection and details filters on the input and output of the instrumentation amplifier.