Post Go back to editing

Internal temperature sensor accuracy for uncalibrated AD7124-8

Category: Hardware
Product Number: AD7124-8

Hello!

How precise is uncalibrated internal temperature sensor? I'm asking, because I've got 3°C readout in room with about 23°C. Is it normal, or I did something wrong?

PS. I know the datasheet reports typical +-0,5°C accuracy. But I'm not sure if it's for calibrated or uncalibrated device.

  • Hi  

    Could you share you configuration setting on the 3C readout of your internal temperature sensor? 

    The device is factory calibrated at gain of 1, however, internal temperature measure is uncalibrated with a typical +/- 0.5C accuracy. 

    Thanks and regards, 

    Rod

  • Thank you for your reply. So my suspicion was confirmed - 0,5C accuracy with uncalibared device.

    Today I see 0..1 readout at comparable room temperature. I attach my initial registers configuration below:

    {0x00, 0x00, 1, 2},                  /* AD7124_Status */
    {AD7124_ADC_Control, AD7124_ADC_CTRL_REG_DATA_STATUS | AD7124_ADC_CTRL_REG_POWER_MODE(0x2) | AD7124_ADC_CTRL_REG_REF_EN, 2, 1}, // Power mode: full
    {AD7124_Data, 0x0000, 3, 2},         /* AD7124_Data */
    {AD7124_IOCon1, 0x810, 3, 1},        // CH1
    {AD7124_IOCon2, 0x0000, 2, 1},       /* AD7124_IOCon2 */
    {AD7124_ID, 0x02, 1, 2},             /* AD7124_ID */
    {AD7124_Error, 0x0000, 3, 2},        /* AD7124_Error */
    {AD7124_Error_En, 0xFFFFFF, 3, 1},
    {AD7124_Mclk_Count, 0x00, 1, 2},     /* AD7124_Mclk_Count */
    
    {AD7124_Channel_0, 0x0000, 2, 1},
    {AD7124_Channel_1, 0x0000, 2, 1},
    {AD7124_Channel_2, 0x0000, 2, 1},
    {AD7124_Channel_3, 0x0000, 2, 1},
    {AD7124_Channel_4, 0x0000, 2, 1},
    {AD7124_Channel_5, 0x0000, 2, 1},
    {AD7124_Channel_6, 0x0000, 2, 1},
    {AD7124_Channel_7, 0x0000, 2, 1},
    {AD7124_Channel_8, 0x0000, 2, 1},
    {AD7124_Channel_9, 0x0000, 2, 1},
    {AD7124_Channel_10, 0x0000, 2, 1},
    {AD7124_Channel_11, 0x0000, 2, 1},
    {AD7124_Channel_12, 0x0000, 2, 1},
    {AD7124_Channel_13, 0x0000, 2, 1},
    {AD7124_Channel_14, 0x0000, 2, 1},
    {AD7124_Channel_15, 0x0000, 2, 1},
    
    // {AD7124_Config_0, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_SEL(0x2), 2, 1}, /* Unipolar, PGA=1 */ // internal reference
    {AD7124_Config_0, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_SEL(0x2) | AD7124_CFG_REG_BIPOLAR, 2, 1},
    
    {AD7124_Config_1, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    {AD7124_Config_2, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    {AD7124_Config_3, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    {AD7124_Config_4, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    {AD7124_Config_5, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    {AD7124_Config_6, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    {AD7124_Config_7, AD7124_CFG_REG_BURNOUT(0x0) | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AIN_BUFM | AD7124_CFG_REG_REF_SEL(0x0), 2, 1}, /* Unipolar, PGA=1 */
    
    {0x21, 0x060180, 3, 1}, /* AD7124_Filter_0: As in evboard design */
    {0x22, 0x060180, 3, 1}, /* AD7124_Filter_1 */
    {0x23, 0x060180, 3, 1}, /* AD7124_Filter_2 */
    {0x24, 0x060180, 3, 1}, /* AD7124_Filter_3 */
    {0x25, 0x060180, 3, 1}, /* AD7124_Filter_4 */
    {0x26, 0x060180, 3, 1}, /* AD7124_Filter_5 */
    {0x27, 0x060180, 3, 1}, /* AD7124_Filter_6 */
    {0x28, 0x060180, 3, 1}, /* AD7124_Filter_7 */
    
    // **************************************************************************************
    // added 24.03.2025: the below valuse aren't sent to AD7124 - the default values are left
    
    {0x29, 0x800000, 3, 1}, /* AD7124_Offset_0 */
    {0x2A, 0x800000, 3, 1}, /* AD7124_Offset_1 */
    {0x2B, 0x800000, 3, 1}, /* AD7124_Offset_2 */
    {0x2C, 0x800000, 3, 1}, /* AD7124_Offset_3 */
    {0x2D, 0x800000, 3, 1}, /* AD7124_Offset_4 */
    {0x2E, 0x800000, 3, 1}, /* AD7124_Offset_5 */
    {0x2F, 0x800000, 3, 1}, /* AD7124_Offset_6 */
    {0x30, 0x800000, 3, 1}, /* AD7124_Offset_7 */
    {0x31, 0x500000, 3, 1}, /* AD7124_Gain_0 */
    {0x32, 0x500000, 3, 1}, /* AD7124_Gain_1 */
    {0x33, 0x500000, 3, 1}, /* AD7124_Gain_2 */
    {0x34, 0x500000, 3, 1}, /* AD7124_Gain_3 */
    {0x35, 0x500000, 3, 1}, /* AD7124_Gain_4 */
    {0x36, 0x500000, 3, 1}, /* AD7124_Gain_5 */
    {0x37, 0x500000, 3, 1}, /* AD7124_Gain_6 */
    {0x38, 0x500000, 3, 1}, /* AD7124_Gain_7 */

    I configure AD7124_Channel_0 (channel, which I use to measure internal temperature) at runtime with value 0x8211.

    I tried bipolar and unipolar modes. In both cases the result is the same. Below my temperature calculations:

    	debug[0] = ((adc_g[0] - 0x800000) / 13584) - 272.5; // bipolar
    	// debug[0] = (adc_g[0] / (2*13584)) - 272.5; // unipolar

  • I had the similar experience. I got 1.5 Celsius from the chip of my eval board while my room temperature was 22 degrees. No matter how I adjust the settings of the channel the result is the same. if I heated it up, the reading could increase, etc.

  • Thanks for your reply! So I'm not the only one with such a strange problem.

    I have something new, but unfortunately it is not a solution to the problem. The situation I have described so far has concerned a device designed in our company. But yesterday I did some test on the evaluation board. I configured the board in the same way as it is done in our device (hopefully didn't miss something) and, strangely enough, this time the temperature is only a few degrees higher than room temperature.

    Is it possible that the measurement may be influenced by some hardware connections on my board which don't exist on evboard, even if in this particular case I use only internal AD7124 components (like VREF, temperature sensor)?

  • change your gain setting from 0x500000 to 0x5***** and you will get sensible internal temperature sensor reading.

  • Thank you for your suggestion. Unfortunately this is not the case. I leaved the default values. These 0x500000 aren't send to AD7124 in my init(). I return to the topic after many months and forgot that the initialization function does not touch the offset and gain registers.

  • I told you already you need to set the gain register to 0x5xxxxx in order to correct the initial reading roughly. Then you can calibrate the system later. That is all. 

  • But the default value in my case is 0x0055563A (value read from ADC). What better value do you suggest?

  • You can adjust the value until it makes sense!

    Make sure you set the register value and read back, check the read back value to make sure it matches what you set. In my case, the original value was 0x500000 and the temperature was 0.5 C. I change the gain to be around 0x555xx, the temperature is adjusted to be 21.5 C now.  get "AD7124 Eval+ Installer" from A/D website and hardware set. Run the software by yourself and compare the registers. That is what I did and the problem was figured it out. I am A/D's customer also not the tech support guy. Good luck.

  • You can adjust the value until it makes sense!

    Yes, but what I wanted was to get a repeatable effect without a calibration for each produced copy.

    I also tried tests with evboard. The effects surprised me a bit:
    - both, in my device and in the evboard, the ADCs had identical coefficients values entered;
    - the evboard ADC measured about 24 degrees temperature (which was almost correct);
    - in my device the measured temperature was 27..28 (4..5 degrees to much);
    - in both cases there are no elements in the ADC area that could heat it up;
    - in both cases PCBs are in open spaces (no housing);
    - what is strange, I swapped the ADCs on both PCBs, and still my device overestimates the temperature.
    I originally thought, that maybe something is wrong with ADC on my board. But it seems to be a matter of some subtle difference in the connections. This is puzzling to me, because I use INTERNAL temperature sensor, INTERNAL reference voltage, the same supply voltages. Finally, just in case, I disconnected all signals from the converter inputs. But still the same result.

    PS. Thank you very much for the interest in the topic!