The last log dealt with testing a 24-bit ADC, the AD7718 , and I may have mentioned that its main aim for now was to serve as a calibration tool.
However, In order to use it as one, It itself must first be calibrated against some industry standard high resolution DMM. Even though the datasheet for the AD7718 claims a pretty high accuracy, any measurement tool is only as accurate as its reference, which in this case is the REF196. The REF196 is an ultra stable voltage reference, but may have an initial offset.
Another source of error is the OPA2277 level shifting op-amps.
I have access to a Keithley 2100 multimeter, and am using it for this calibration.
Using python-usbtmc, it can easily be interfaced . Code is as simple as
import usbtmc DMM = usbtmc.Instrument(0x05E6,0x2100) #V-id,P-id print DMM.ask('*IDN?') DMM.write('SENS:VOLT:NPLC 1\n') DMM.write(':SENS:VOLT:DC:RES 1E-6\n')
For now I've calibrated the unipolar inputs on the PCB.
Here's a screenshot of a simple calibration program that sweeps a voltage source and records the values read by the Keithley2100, and the AD7718. The data will be used to generate a fitting polynomial.
At lower voltages, both agree pretty well, but en route to 3.3V, the gap increases to about 1.5mV roughly linearly. This offset is to be expected from the voltage reference, and calibration will take care of it. What's important is that the calibration be valid over a wide temperature range, and that's the whole point of using a voltage reference and low drift op-amps.
Update: After applying the calibration factors, the readings from the AD7718 correspond to professional DDMs to within a +/-100uV margin. Averaging brings it down to <10uV, since the noise floor for this roughly designed board is around 100uV. Moving on to opto-isolation.