The ARD-LTC2499 was designed from the beginning with the intent to get as close to perfect accuracy as one could with an out-of-the-box Arduino Shield, while still keeping the cost affordable for mere mortals like us. We chose one of the best 16-channel ADCs on the market and matched it up with a high-performance voltage reference. To see what the accuracy really was, I borrowed Nathan’s 34401A meter and put them both to the test.
For this experiment, the ARD-LTC2499 was configured for differential input mode. An LT1004 1.2V shunt reference was connected between the input terminal and biased with a 1k resistor from the 4.096V output of the shield.
At the same time, the Agilent 34401A meter was connected to the same terminals. A short sketch (Source Code) was written to measure the input voltage and present it on a VFD display.
That result is pretty good! The readings differ by just ~70uV. Is this what you can expect every time? Let’s look at the numbers…
From the LTC2499 datasheet, under the Normal Speed section, we find:
Offset Error = 2.5uV
Positive Full-Scale Error = 25ppm of VREF
Integral Nonlinearity (INL) = 10ppm of VREF
How do we make sense of this? Well, first of all, you might have noticed that I chose the maximum numbers and not the typical ones listed in the EC table. This is because the maximums (and minimums) are the only ones tested and guaranteed by the manufacturer. The typical numbers shouldn’t be used for error budget calculations.
The total error due to the ADC will be its offset contribution + gain error + INL. The maximum offset error is easy: 2.5uV. The gain error can be found from the Positive Full-Scale Error spec. In this case, 25ppm. Multiply that by the actual measurement, 1.235V and the maximum expected gain error for the measurement above should be 31uV. Finally, the INL can contribute up to 10ppm * 4.096V = 41uV of error. Note, the INL cannot be scaled to the measurement value since you don’t really know where the maximum deviation of the transfer function occurs. Adding all these up gives a maximum expected error from the ADC of 2.5uV + 31uV + 41uV = +/-75uV.
Hmmm… We just measured an error of 70uV. Are we really this close to the maximum expected error? Is our shield bad? Maybe not. We forgot to include the contribution of the 4.096V voltage reference feeding the ADC. The LT6654 specifies a maximum 0.1% initial accuracy for the B-Grade reference (B-Grade is used by default on the ARD-LTC2499 shield for cost reasons – A-Grade is available by special request). This additional error (1.235V * 0.1% = 1.235mV) needs to be added into the error calculation above. After doing so, the 70uV we measured is well within the +/-1.31mV maximum error of the design.
So, now you might be asking if the 70uV we measured above is too good to be true, given a maximum error of 1.31mV? The VREF output of the particular ARD-LTC2499 shield used in this experiment measures 4.09618V. This results in an additional 44ppm (4.09618 / 4.096) gain error due to the reference. Since VREF is larger than expected by the software, this causes any measurements to appear smaller by a proportionate amount, which matches what we saw above. Multiplying our measurement above (1.235324V) by the VREF gain factor (4.09618 / 4.096) gives us a corrected output of 1.235378V, only 10-20uV different from the 34401 reading! This is nicely within the expected 75uV maximum error due to the ADC. Phew!
Here’s a homework problem… what is the expected error if using the 2x Speed mode of the ADC? What’s the reason for the difference? (Hint, read page 18 of the LTC2499 datasheet, and refer to the appropriate section of the EC Table)
With some simple calculations, determining error budgets for an analog-to-digital conversion is easy. The ARD-LTC2499 makes an affordable, yet accurate, measurement system for the Arduino platform.