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.
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.6 |
10000 | 2.048 | 1023.5 |
10 | 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.