This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS1248: Offset calibration

Part Number: ADS1248

Hello,

We're using an ADS1248 for measuring thermocouples and are experiencing some strange results from the System and Self-Offset calibrations.

When performing a self-offset calibration, using the SELFOCAL command, we are getting offset values of about -15 to -17 microvolts.

But when we perform a system calibration by applying a 0V differential input to the input pins we measure an offset of (averaged over 4096 measurements) -6.851 to 9.421 depending on which input we use.

We also lifted the pins of the ADS1248 and then we measure an offset of -1 to -3 microvolts.

We are having difficulties explaining these differences in calibrations and we're not sure if we're doing everything correctly because of it.

Our schematic:

And the 7100_7400_Thermocouple inputs part:

And the code we use for self-offset calibration:

int32_t DRV_ADS1248_SelfOffset(void)
{
    uint8_t writeBuffer[3] = {0};
    uint8_t readBuffer[3]  = {0};
    uint32_t preExtended   = 0;
    int32_t extended       = 0;
    dataReady              = false;

    // Clear the offset register
    writeBuffer[0] = 0x00;
    writeBuffer[1] = 0x00;
    writeBuffer[2] = 0x00;
    DRV_ADS1248_WriteReg(ADS_OFC0_OFFSET, writeBuffer, readBuffer, 3);
    // Set the FSC to 0x400000
    writeBuffer[0] = 0x00;
    writeBuffer[1] = 0x00;
    writeBuffer[2] = 0x40;
    DRV_ADS1248_WriteReg(ADS_FSC0_OFFSET, writeBuffer, readBuffer, 3);

    // Start self offset calibration
    DRV_ADS1248_WriteCmd(ADS_SELFOCAL);
    while(!dataReady);
    // Read the calibration result
    DRV_ADS1248_ReadReg(ADS_OFC0_OFFSET, readBuffer, 3);
    preExtended = (readBuffer[2]<<16 | readBuffer[1]<<8 | readBuffer[0]);
    extended = 0;

    // If bit ADC_SIGN_BIT is 1, extend the sign, otherwise copy
    if(preExtended >> 23 == 1)
    {
        extended = preExtended | (0xFF << 24);
    }
    else
    {
        extended = preExtended;
    }

    //Return extended ADC value
    return extended;
}

We'd like to know why we are experiencing such big (for thermocouples this is big) differences in System Offset calibrations and Self Offset calibrations

  • Bas,


    The input referred offset after calibration is listed in the datasheet as ±15uV. That being said, there still will be some variation in the offset calibration result. During the calibration command, the input is automatically shorted (with SELFOCAL) or the user shorts the inputs together manually (for SYSOCAL). The device then averages 16 readings and stores the average as for the offset calibration register. This result is then subtracted from future readings.

    Note that the calibration result is subject to noise. Averaging the offset with 16 readings may not drop the noise level to what you want to get a proper reading for the offset.

    If you need something better, I would do two things. First using a lower data rate will help reduce the noise in the measurement and may get a less noisy result for the offset. Second, you may want to set your own offset calibration result manually. Short the inputs manually and then take a reading with more data points. For example, use 256 readings instead of 16. Then, average the points and use that as the new offset calibration register result. By averaging more offset results, you'll have less variation in the offset calibration.

    For SYSOCAL, you'll want to set the short the input to the DC voltage of whatever your normal sensor operation is. There is some variance depending on the input voltage level (DC CMR is typ 90dB, max 80dB in gain of 1).

    What data rate and PGA gain are you using? It'll give an ideal of what noise level to expect.


    Joseph Wu
  • We've been using the SELFOCAL and a manual offset calibration, but that's where the problem is for us. We've been seeing an incredible difference between the SELFOCAL, SYSOCAL and a manual offset calibration where we short (or even lift and then short) the pins of the ADS1248 together.
    We do expect a difference in the SYSOCAL and SELFOCAL, because with SYSOCAL we include the full path (with RC filters and MUX). What we did not expect to see is a difference in calculation with SELFOCAL and a measurement with the ADS1248 pins lifted and shorted.
    I'll provide some extra information on our settings:
    - We're using the internal reference of the ADS1248
    - We've set the OFC register to 0 and the FSC register to 400000h before starting calibrations
    - The ADS1248 is used in bipolar operation
    - The PGA is set to 64
    - The data rate is 2000SPS

    I'll start some calibrations today with a lower datarate and see if that gives some better results.

    Bas
  • Bas,


    As you run your tests, there are a few things to keep in mind. Higher data rates are subject to more noise. You are taking fewer oversampled readings to generate one output data point. Another consideration is the power supply. If the power supply is particularly noisy, any periodic signal riding on the supply may couple into the input or the reference and may cause noise. The PSR is listed as 135dB typical, and 100dB max at DC. This may not be an issue, but if you can clean up the power supply, it may help.

    Another test to run would be just to not run the calibration and just make a set of 4096 readings. Report that back, and we can look at the noise in the measurement and compare them with the values in Tables 1 to 6 (depending on which closest matches your setup). Looking at this noise will help determine if you have more noise than expected in your system. If you record a set of 4096 readings, compile them in an excel file and add them to your next post.


    Joseph Wu