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.

ADS1148: The problem with the stability of measurements above 700 degrees Celsius.

Part Number: ADS1148

Hi.

I am using the ADS1148 system to measure temperature through a thermocouple, up to 1200 degrees Celsius. I measure the cold end of the thermocouple through an NTC thermistor. Up to approximately 700 degrees Celsius, the measurement proceeds correctly. However, between 700 and 1000 degrees is a problem with the stability of the measurement. Although an independent meter indicates an increase in the temperature in the furnace, the ADS1148 shows much less. The difference is sometimes 100 degrees Celsius.

I am using a K type thermocouple. The problem occurs when the thermocouple voltage is above 30 mV. The power system is an AC / DC converter on PCB. While the system is running, there is no computer connected to it.

This is my configuration function for ADS1148:

void ADS1148_Init(void)
{
    uint8_t tmp = 0;
    eADS_State = ADS_INIT;

    /*Prepared values for initializing the ADS1148 system*/
    uint8_t ADS_SetMux0[3] = {0x40, 0x00, 0x01};
    uint8_t ADS_SetVBias[3] = {0x41, 0x00, 0x00};
    uint8_t ADS_SetMux1[3] = {0x42, 0x00, 0x30};
    uint8_t ADS_SetSYS0[3] = {0x43, 0x00, 0x41};//0x42};
    uint8_t ADS_SetIDAC0[3] = {0x4A, 0x00, 0x06};
    uint8_t ADS_SetIDAC1[3] = {0x4B, 0x00, 0x89};
    uint8_t ADS_SetGPIOCFG[3] = {0x4C, 0x00, 0x00};
    uint8_t ADS_SetGPIODIR[3] = {0x4D, 0x00, 0x00};
    uint8_t ADS_SetGPIODAT[3] = {0x4E, 0x00, 0x00};

    ADS1148_Close();
    HAL_Delay(10);

    ADS_CS_High();
    ADS_RESET_High();
    ADS_START_High();

    HAL_Delay(16);

    tmp = SDATAC;

    ADS_CS_Low();

/*    Transmission of parameters by SPI*/
    HAL_SPI_Transmit(&hspi1, &tmp, 1, 1);

    HAL_Delay(SPS5DELAY);

    HAL_SPI_Transmit(&hspi1, &ADS_SetSYS0[0], 3, 1);

    HAL_Delay(SPS20DELAY);

    HAL_SPI_Transmit(&hspi1, &ADS_SetMux0[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetMux1[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetVBias[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetIDAC0[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetIDAC1[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetGPIOCFG[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetGPIODIR[0], 3, 1);
    HAL_SPI_Transmit(&hspi1, &ADS_SetGPIODAT[0], 3, 1);

    ADS_CS_High();

    tmp = SELFOCAL;
    ADS_CS_Low();
    HAL_SPI_Transmit(&hspi1, &tmp, 1,1);
    HAL_Delay(SPS20CALIBRATIONDELAY);
    ADS_CS_High();
    ADS_START_Low();
}

Temperature graph:

- The green line is a temperature graph as seen by the ADS1148 chip

  • Slawek,


    It's hard to know what the problem is without knowing much more about the system you put together. Based on your code, this is what you've written to the device:

    uint8_t ADS_SetMux0[3] = {0x40, 0x00, 0x01}; AIN0=AINP, AIN1=AINN
    uint8_t ADS_SetVBias[3] = {0x41, 0x00, 0x00}; VBIAS off
    uint8_t ADS_SetMux1[3] = {0x42, 0x00, 0x30}; Int reference always on, selected
    uint8_t ADS_SetSYS0[3] = {0x43, 0x00, 0x41};//0x42}; PGA=4, 10SPS
    uint8_t ADS_SetIDAC0[3] = {0x4A, 0x00, 0x06}; IDAC on, 1000uA
    uint8_t ADS_SetIDAC1[3] = {0x4B, 0x00, 0x89}; IDAC out IEXC1, IEXC2
    uint8_t ADS_SetGPIOCFG[3] = {0x4C, 0x00, 0x00}; GPIOs disbled
    uint8_t ADS_SetGPIODIR[3] = {0x4D, 0x00, 0x00};
    uint8_t ADS_SetGPIODAT[3] = {0x4E, 0x00, 0x00};

    I'm not sure what this setup is for. The PGA gain seems low for a thermocouple measurement, and the thermocouple doesn't require the IDAC to be on. If this is for the cold-junction thermistor measurement, it would use the IDACs, but often people use a ratiometric measurement, and would use a reference input instead of the internal reference voltage. Regardless, this doesn't give me many details about the whole setup. I'll need more information to help debug this.

    First, it would help to have the raw data that you have in the plot. I don't want the converted data reported in °C, but rather the output code from the ADC. I'd want the reading for both the thermocouple and the cold junction measurement.

    Second, it would be good to have a schematic to work from. I'd like to know how you're biasing the thermocouple and how you make your cold junction measurement from the thermistor. I need more information about your setup, maybe with an explanation of how you setup the measurment, what the

    Looking at the output data plot, it looks like your green line has some sort of alternating error. The data looks like it has values going back and forth by about 40°C. My first guess is that this is some sort of SPI read error, but I'd need more information to be sure. If the error comes from a bad SPI read, is the device in SDATAC mode, while you use the RDATA command to read data?

    You mention that the data is also off by 100°C, I'm not sure if this is part of the alternating temperature read error or if this is some sort of systemic error.

    Please post back with a more information and we can look at different possible reasons for the data errors.


    Joseph Wu
  • Slawek,


    I haven't heard from you in the last week. Were you able to find measurement error in your system? I'll close the post for now. If you haven't found the problem, post back and we can work on this again. Please note that I did mention a few things to check in your system, so if you do post again, I'll expect some reply that includes some of the things I mentioned in my previous post.


    Joseph Wu