Post Go back to editing

AD7949 temperature drift

Hi team,

we are using external ADC AD7949 for one of our project

we need technical support regarding External ADC AD7949 temperature drift Find the below query and provide your inputs at the earliest.

  • How to derive the temperature compensation equation ?


As per the Ad7949 data sheet page no-13 as mentioned the formula, but I have some confusion in using formula data.

Please support to me , as soon as possible.


Krishna K H

  • Krishna,

    The equation on page 13 is used to derive the first order (linear) temperature coefficient of the internal voltage reference.  The intention of the formula is to state that for multiple measurements of that reference voltage at temperatures across the span of -40'C to 85'C, the drift for the reference is computed as the normalized maximum difference ((max value - min value)/nom value) divided by the entire temperature span.  This means that the slope coefficient computed by this method could result in underreporting the gain error introduced by the reference over a given temperature range.  This method is known as the box method and is an industry standard however in the last decade or so manufacturers have moved to other methods for specifying the temperature coefficient, especially for standalone precision references.  The details behind this are fairly extensive so I'll leave you a couple of references here to read more.

    With regards to applying the correction coefficient to your project what we need to remember is that the voltage reference sets the full-scale detection range (0 to VREF (unipolar) or -VREF to VREF (differential, bipolar)..   Thus what we should expect is that for a given input voltage, Vin, that the output code will change by a proportional constant that changes inversely to the change in the voltage reference value, Vref.  Computationally we must also realize that as this is a gain term and the observable change at any given code is a function of the position in the full-scale range range.  That is to say that for a unipolar converter, the code at mid-scale (50%) sees ~2x less error than a code at full-scale; note however this error naturally is accounted for in the conversion from codes to volts so you don't need to account for it as a separate term.  Also for the change to be observable (lsb flip) we must assume that we must accumulate enough error to change the output code by 1 LSB.  If we assume worst case for this 14-bit converter that would be 1/2^14 * 1e6 = 61ppm, meaning for a 10ppm/'C reference we'd need 6 degrees of temperature difference to observe a 1 LSB error at full-scale input. 

    In terms of applying this theory to your system correction consider the following.

    Vcode = CODE/16383 * VREF(T)

    where Vcode is the output voltage corresponding to the output code (assuming unipolar output), CODE, read back from the ADC.  In this case the AD7949 is 14 bits that the proportionality constant (or LSB weight) is VREF/16383, where VREF(T) is the absolute reference voltage at the current temperature T.  In your application without specifically measuring that voltage you can approximate it as (VREF(To) *(1 + TC1*(T-To)))  where VREF(To) is the initial voltage measured in your setup at a reference temperature (To) ,  TC1 is the temperature coefficient of your reference  and T is the current temperature.  

    In practice what you'll need to do is estimate TC1 either from measurement of each instance of your solution using lab calibration OR directly using the typical value from the datasheet.   Note that the selection of your method will require some understanding of the error you can tolerate in your measurement.  You'll need to decide on the best course for your particular case.   You will then need an estimate of the relative change in temperature from the calibration point.   For this purpose you can use the on-board temperature sensor to estimate the change in temperature to about 1'C accuracy.  Note that you should store the initial value of the temperature sensor for each AD7949 in your system memory at calibration as the absolute value of this reading is not well controlled; however the slope is.  Thus you can just subtract the calibration value from the current value to arrive at your estimate of the change in temperature.   Armed with TC1 and dT (T-To) you can correct the output code by adjusting VREF(To) appropriately to arrive at a more accurate estimate of Vout.

    Hope this helps.


  • Sean , thanks for your reply.

     I read your answer and designed a formula on excel sheet, please find attached the same.

     How to composite temperature drift values? or give me a any linear equation or suggest me how to derive?

     Let me know for any more information.

    Reference Voltage Temperature Coefficient
    Description Parameter Value Unit
    Maximum Voltage reference @25°C Vref(max) 2.51 V
    Minimum Voltage reference @25°C Vref(min) 2.49 V
    Voltage reference @25°C Vref(25°C) 2.5 V
    Maximum Temperature  Tmax 85 °C
    Minimum Temperature  Tmin -40 °C
    Constant K 1.00E+06  
    Temperature co-efficient TCVref 64 ppm/°C
    Temperature co-efficient in % TCVref 0.0064 %
    Reference Voltage at Current Temperature 
    Description Parameter Value Unit
    Reference Voltage at room Temperature  Vref(T0) 2.5 V
    Temperature co-efficient TC1 0.0064  
    Current temperature T -40 °C
    Reference temperature T0 25 °C
    Reference Voltage at Current Temperature  Vref(T) 1.46 ppm/°C
      Vref(T) 1.46E-04 %/V
    Reference Voltage at Current Temperature 
    Description Parameter Value Unit
    ADC value Code 6578 1V=6578 count
    Resolution 2^N 16383  
    ADC volt V 5.86E-01 V
    1LSB voltage 
    Description Parameter Value Unit
    Reference Voltage at room Temperature  Vref(T0) 2.5 V
    Resolution 2^N 16383  
      1LSB/Volt 0.000152597 152uV


    Krishna K H

  • Krishna,

    I don't think I understand your question but I will try to answer.

    1) First section 1 of your spreadsheet seems to account for the max absolute voltage error range specified in the datasheet.  This is NOT the information you should be using.   What you'll need to do is measure your individual device voltage reference values at room temperature and a minimum of 1 additional temperature to extract the linear coefficient.  Adding more measurement points will allow you to more accurately estimate any higher order coefficients you may need but this of course will require a more complicated correction.

    2) In section 2 I'm not sure exactly what you are attempting.  You should simply multiply your 2.5V reference (if that's what you are using) by the sum of 1 plus the product of the temperature coefficient (TC1) and the difference in temperature.  By example if we assume the drift is 10ppm/C and the reference is 2.5V then for a -65degree change

    VREF = 2.5*(1+(-65*0.000010)) = 2.5 *(1-0.000650) = 2.498V.

    As an example, for a fixed 1.25V into the input you should see two distinct codes at 25 and -40C as follows given the reference voltage change.

    Temp Reference Voltage Average Code for 1.25V input Voltage Error @ VREF = 2.5V
    25C 2.500 8192d  (1.250000V) 0
    -40C 2.498 8198d  (1.250910V) 910uV

    This error of course can be corrected by scalar multiplier of (0.999350)*1.250910 = 1.250010V.  

    So as you can see rounding errors will still result in some error in the output but you should be able to reduce that error to a level commensurate with the converter resolution or better.

    Hopefully that answers your question.