Electronics > Projects, Designs, and Technical Stuff

Measuring resistance with high accuracy

<< < (5/5)

splin:

--- Quote from: madwolfe on September 19, 2019, 12:27:23 pm ---I have achieved an accuracy that I'm pretty happy with (0.06%), just using the 'voltage divider' with a 10k resistor and measuring either side of the resistor. I will probably stick with that as a measurement strategy for now. I will have calibration in firmware.

Since I already have bought a couple of the ADS1115, I would prefer to stick with it and just read the two voltages and calculate from there. It doesn't have an external voltage reference however, is there a significant advantage of referencing the ADC to the voltage divider's voltage? Besides not having to calculate as much.

--- End quote ---

The ADS1115 has a PGA so the possible full scale input ranges are +/-6.144V, +/-4.096V, +/-2.048V etc, but the input voltage must not exceed Vdd. So for the best resolution and noise performance lets choose Vdd = 4.096V and PGA=1 giving an input range of +/- 4.096V. (Lower Vdd can obviously be used but the noise performance will likely be worse).

The input divider is a 10K reference resistor to Vdd with the sensor connected to ground and the ADC is measuring the differential voltage across the sensor (rather than the reference resistor). The following are the voltages across the sensor for varying sensor resistances, and the voltage difference for a 0.1% change in resistance - the ADC needs to be able to resolve to better than that difference if it is to measure the sensor to a resolution of 0.1% across the whole range:

Rsensor (ohms)   Vsensor (V)   Change in Vsensor for 0.1% change in Rsensor (uV)20000   2.731     909.610000   2.048   1023.510        0.0041        4.1
Problem is that the ADC noise in this mode, @8SPS, is probably around 3.5uV rms or 23uV peak to peak (the datasheet only gives noise performance for Vdd = 3.3V and FS = +/-2.048). An LSB is 62.5uV. That means that when the sensor is at 10 ohms the best the ADC can resolve is 1.5%.

Choosing 447ohms for Rref means the ratio Rref:10ohms is equal to 20,000:Rref maximises the minimum sensitivity across the range - the voltages now become:

Rsensor (ohms)   Vsensor (V)   Change in Vsensor for 0.1% change in Rsensor (uV)20000   4.006      87.5    447   2.048   1023.5      10  0.0897      87.7
The sensitivity is now more balanced across the range but the ADC can still barely resolve 0.1%, and that it before all the other error sources including the ADC reference voltage drift (with time and temperature), the ADC gain drift, ADC INL and drift in Rref. The first two are specified as 40ppm/C max, most of which will be the voltage reference. Using an ADC which allows an external reference to be used (which would be the voltage across the divider, Vdd) eliminates most of that error as the measurement becomes ratiometric rather than absolute.

The reference voltage drift can be lagely eliminated by measuring the voltages across both the sensor and the reference resistor and calculating the ratio (which I assume is what you are suggesting). That increases the measurement noise by sqrt(2) but is probably worth doing.

The obvious solution to the resolution problem is to use a higher reference resistor value and use the ADS1115's PGA to amplify the sensor voltage when it gets too low. This introduces a new error source however - the PGA gain match between differing gains. Each gain can be calibrated but different gains will have different gain drift over temperature and time, which aren't properly specified. It also doesn't address the worse case ADC gain drift which isn't specified. The ADC noise, (3.5uV rms) doesn't appear to be any better at a PGA gain of x8 compared to x1, so this solution doesn't seem to work either.

Using a low noise opamp PGA resolves the noise problem but now more precision resistors will be required to set the gains which will drift with time and temperature.

If this is a one off then you can easily calibrate it at various temperatures, but if it is to be commercialised, a better ADC will be required.

Also don't underestimate the reference resistor(s) cost - 5ppm film resistors aren't too expensive but to guarantee long term drifts of < 0.1% probably means decent wirewound or metal foil resistors costing $5 or more apiece if you don't want to have to recalibrate periodically.

Personally I'd use a 24bit lower noise ADC - AD7793 modules are around $5 on ebay and very suitable for your application.

madwolfe:

--- Quote from: splin on September 20, 2019, 12:19:59 am ---
--- Quote from: madwolfe on September 19, 2019, 12:27:23 pm ---I have achieved an accuracy that I'm pretty happy with (0.06%), just using the 'voltage divider' with a 10k resistor and measuring either side of the resistor. I will probably stick with that as a measurement strategy for now. I will have calibration in firmware.

Since I already have bought a couple of the ADS1115, I would prefer to stick with it and just read the two voltages and calculate from there. It doesn't have an external voltage reference however, is there a significant advantage of referencing the ADC to the voltage divider's voltage? Besides not having to calculate as much.

--- End quote ---

The ADS1115 has a PGA so the possible ...

--- End quote ---
Ah ok, I understand. That does make a lot more sense for the lower end of the measurements.

Thanks for the explanation!

Kleinstein:
With a relatively low reference resistor, the worst case power consumption for the DUT and reference resistor can be quite high. With 500 Ohms reference and sensor this could be something like 5 mA * 2.5 V = 12.5 mW. This won't burn the resistor, but self heating could change this quite a bit, especially for the sensor.

The ADC internal PGA actually is only faster input sampling. So it will increase the input current at high gain. One the positive side, the internal PGA gain is quite accurate and stable.
With readings to compare the voltage over the reference resistor and the external resistor, most of the reference errors and also ADC gain drift are not relevant.

madwolfe:

--- Quote from: splin on September 20, 2019, 12:19:59 am ---
--- Quote from: madwolfe on September 19, 2019, 12:27:23 pm ---I have achieved an accuracy that I'm pretty happy with (0.06%), just using the 'voltage divider' with a 10k resistor and measuring either side of the resistor. I will probably stick with that as a measurement strategy for now. I will have calibration in firmware.

Since I already have bought a couple of the ADS1115, I would prefer to stick with it and just read the two voltages and calculate from there. It doesn't have an external voltage reference however, is there a significant advantage of referencing the ADC to the voltage divider's voltage? Besides not having to calculate as much.

--- End quote ---
Personally I'd use a 24bit lower noise ADC - AD7793 modules are around $5 on ebay and very suitable for your application.

--- End quote ---
I just had a look at this ADC, it looks pretty good! It also has an internal programmable current source that I could also use? Is there any reason not to go with that instead?

EDIT: just had a look at the internal current source specifications and it has a 200ppm/C drift and poor regulation and tolerance. So it's not going to be nearly as stable.

madwolfe:

--- Quote from: Kleinstein on September 20, 2019, 09:16:10 am ---With a relatively low reference resistor, the worst case power consumption for the DUT and reference resistor can be quite high. With 500 Ohms reference and sensor this could be something like 5 mA * 2.5 V = 12.5 mW. This won't burn the resistor, but self heating could change this quite a bit, especially for the sensor.

The ADC internal PGA actually is only faster input sampling. So it will increase the input current at high gain. One the positive side, the internal PGA gain is quite accurate and stable.
With readings to compare the voltage over the reference resistor and the external resistor, most of the reference errors and also ADC gain drift are not relevant.


--- End quote ---
Very true - I'll keep that in mind

Navigation

[0] Message Index

[*] Previous page

There was an error while thanking
Thanking...
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod