Question
ADuC834: I am changing ranges and I am seeing much more than 2uV gain
mis-match. Why?
Answer
You should not see much more than 2uV gain matching. i.e. as you changes the
range from one
range to another the difference in an ADC results between one range and the
next should typically
correspond to less than 2uV.
However if you have performed a system offset calibration then you will have
changed the offset
calibration registers (OF0H/M/L). Since the ADCs use chopping there is no need
for an offset
calibrated in the factory. Hence the default offset calibration coefficients
are 800000h. Once a
system offset calibration is performed the OF0H/M/L get overwritten by values
that when
subtracted with a zero input will produce a zero reading. When the range is
changed, however, the
offset calibration registers still apply to the previous range.
e.g. if on the 20mV range a system offset of 10uV existed producing an offset
calibration
coefficient of 802100h. Now imagine that the range is changed to the 40mV
range. The OF0L
register still reads 802100h. This corresponds to an offset of 20uV on the 40mV
range. On the
2.56V range the offset would correspond to 1.28mV.
There are two ways to prevent large offset gain errors from occurring when the
ranges are
changed. The first way is to calibrate the system offset at each of the ranges,
and store the different
calibration results into flash/EE data memory. Then whenever the gain is
changed the appropriate
calibration coefficients can be downloaded from flash/EE data memory. The
second way is to
calibrate the offset at the 20mV range. Then whenever you change the range you
should
appropriately change the OF0H/M/L SFRs so that the difference between OF0H/M/L
and 800000h
is halved every time the range is increased one level as shown in the following
expression:
OF0H/M/Lnew range = 800000h + (OF0H/M/L20mV range – 800000h) / 2^RN