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.

ads248 pt1000 reading incorrect values

Other Parts Discussed in Thread: ADS1248

I have a strange problem in reading pt000 connected to ads1248.

when i measure resistance of pt000 by external meter values comes out to be  1070 ohms correctly.

but when i try to measure it by ads1248, it is less than half.

so i checked it by  fixed resistance of 1070 ohms created by pot i gt correct values.

no change in code & hardware. i am using 100ua current

i also used other pt1000, all are giving same problem.

if pt1000 have problem it shouldn't correct value on external meter also.

  • Dear Aamir,

    from you explanations it is hard to tell what could be wrong. Could you send us the schematic of your implementation, how you connect the PT1000 and also the register settings of the ADS1248?

    Regards,

  • Hi,

    Below is link for schematic :

    http://e2e.ti.com/support/data_converters/precision_data_converters/f/73/p/311992/1116112.aspx#1116112

    I came across strange problem. I have two arrangements. I am reading only one PT1000 in this case. All other settings in both arrangements are same except below mentioned.

    1. I had used fixed 1K resistor & used 50uA source internal. PGA = 32.  Put a ammeter in between. (Fluke                      ammeter used) 

         Below are reading:

         current = 48.495uA (instead of 50uA)

        digital data read = 6438486 ; which comes out to be 49.121mV &  982 ohms.

       After that to confirm I put a second voltmeter across fixed resistance, drop equals to 49.115mV.

      Which is correct. Minor errors can be corrected after calibration.

    2. I had used fixed 1K resistor & used 100uA source internal. PGA = 32.  Put a ammeter in between. (Fluke                      ammeter used) 

         Below are reading:

         current = 90uA (instead of 100uA)

        digital data read = 3406552 ; which comes out to be 426mV

       I put a second voltmeter across fixed resistance, drop is varying between 90-92mV

    In second case I have error even if current has been increased.

    change highlight code to (0x01) for 50ua and (0x02) for 100ua

    Attached is my code:

    static void configure_register_setup_ads1248(void)
    {
    /* Fosc = 4.096Mhz internal ADS1248 , Tosc = 1/Fosc */
        
        ADS_START_ENABLE();
        ADS_CS_DISABLE();
        
        wait_delay_us(16000);      /* wait for 2^16 cycles after start up , Tosc = 4.096 in ADS12489 so it form 16ms delay */ 
        wait_delay_us(4000);       /* add extra 4 ms delay to comensate any variation in iunternal osc freq */
        
    /* config initial settings */
        ADS_CS_ENABLE();
        wait_delay_us(1);                 /* Tcssc = 10ns */
        (void)ads_spi_byte(0x40);         /* WREG command & register 0 is selected , discard the received byte */
        (void)ads_spi_byte(0x03);         /* total 4 register to write , so 4-1 = 3 , discard the received byte */   
        (void)ads_spi_byte(0x07);         /* MUX0 - burnout current source off , AIN0 is +ve & AIN7 is -ve ,discard the received byte */
        (void)ads_spi_byte(0x00);         /* No VBIAS ,discard the received byte */  
        (void)ads_spi_byte(0x30);         /* MUX1 - internal reference is on & selected , discard the received byte */  
        (void)ads_spi_byte(0x59);         /* SYS0 - 2000s/sec & PGA = 32 */      
        wait_delay_us(10);                /* Tsccs = 7 Tosc = 1.7us */
        ADS_CS_DISABLE();
        wait_delay_us(10);                /* Tsccs = 5 Tosc = 1.2us */    
    
        wait_delay_us(20);                /* ime b/w two successive write commands = 64 tosc = 15us */  
    
    /* configure IDAC0 */
        ADS_CS_ENABLE();
        wait_delay_us(1);                 /* Tcssc = 10ns */
        (void)ads_spi_byte(0x4A);         /* WREG command & register IDAC0 is selected , discard the received byte */
        (void)ads_spi_byte(0x01);         /* total 2 register to write , so 2-1 = 1 , discard the received byte */   
        (void)ads_spi_byte(0x02);         /* IDAC0 - current = 100uA , discard the received byte */   
        (void)ads_spi_byte(0x8F);         /* IDAC1 - first curent source on IEXT1 , discard the received byte */      
        wait_delay_us(10);                /* Tsccs = 7 Tosc = 1.7us */
        ADS_CS_DISABLE();
        wait_delay_us(10);                /* Tsccs = 5 Tosc = 1.2us */    
        wait_delay_us(20);                /* ime b/w two successive write commands = 64 tosc = 15us */  
        
    /* disable start */ 
        ADS_START_DISABLE();
        wait_delay_us(10000);              /* give some delay */ 
    
        ADS_CS_ENABLE();
        wait_delay_us(10000);              /* give some delay */ 
    
    } /* function ends here */ 
    
    
    
    
    
    uint32_t read_ads_channel_value(void)
    {
    /* channel 0 */
        ADS_START_ENABLE();
    
        /* connect current souce to AN0 */
        ADS_CS_ENABLE();
        wait_delay_us(1);                                                 /* Tcssc = 10ns */
        (void)ads_spi_byte(0x4B);                                         /* WREG command & register IDAC1 is slected */
        (void)ads_spi_byte(0x00);                                         /* only 1 register to write */        
        (void)ads_spi_byte(0x0f);                                         /* connect current source to AN0 */
        wait_delay_us(10);                                                /* Tsccs = 7 Tosc = 1.7us */
        ADS_CS_DISABLE();
        wait_delay_us(10);                                                /* Tsccs = 5 Tosc = 1.2us */    
    
        wait_delay_us(20);                                                /* time b/w two successive write commands = 64 tosc = 15us */  
    
        /* select AN0 & AN7 from MUX0 */
        ADS_CS_ENABLE();
        wait_delay_us(1);                                                 /* Tcssc = 10ns */
        (void)ads_spi_byte(0x40);                                         /* WREG command & register MUX0 is selected , discard the received byte */
        (void)ads_spi_byte(0x00);                                         /* total 1 register to write , so 1-1 = 0 , discard the received byte */   
        (void)ads_spi_byte(0x07);                                         /* select AN0 as +ve & AN7 as -ve */      
        wait_delay_us(10);                                                /* Tsccs = 7 Tosc = 1.7us */
        ADS_CS_DISABLE();
    
        /* wait for conversion complete */
        ADS_START_DISABLE();    
        while( (u32_t)0 != READ_ADS_DRDY_PIN() );  /* while pin does not go low */
    
    
    /* read channel 6 data by sending NOP */
        ADS_CS_ENABLE();
        wait_delay_us(1);                                       /* Tcssc = 10ns */
        channel[0][0] = ads_spi_byte(0xFF);                     /* send random data to read data */
        channel[0][1] = ads_spi_byte(0xFF); 
        channel[0][2] = ads_spi_byte(0xFF); 
        wait_delay_us(10);                                      /* Tsccs = 7 Tosc = 1.7us */
        ADS_CS_DISABLE();
        
    /* give some delay */
        wait_delay_us(100);
        
    }    

  • Hi Aamir,

    Follow precisely the current path.  If you have a 1k in series with 50k and current is 100uA you will have a problem as you will be outside the voltage compliance range for the IDAC. 

    For the 50uA case I believe this should work, but your measurement is not ratiometric as you are using the internal reference voltage.  When using your analysis you must be careful about the precision based on using a specific current.  A ratiometric measurement takes the current out of the equation and you actually measure the ratio of reference resistance to the RTD resistance.  The way that you are making the measurement you measure a voltage and assume a current.  As you have already determined the current may be off.  As per the datasheet, the initial current error can be as much as 6% of full-scale.  The value you measured with the amp meter is within this tolerance and is actually pretty close to what I would expect.

    Best regards,

    Bob B

  • Thanks Bob,

    This was the problem exactly.

    It was silly mistake that I just missed it.  

    Thanks