TI论坛
直播中

康辅佑

9年用户 1054经验值
擅长:控制/MCU
私信 关注
[问答]

用ads1247驱动PT100时,数据采集不准确是哪里的问题?


  • 我的原理图采用的时ads1247手册上的电路图,但是我在使用时得不到正确的值,我用程序读取ads1247内部的寄存器,可以得到初始化的值,说明程序是没问题的,芯片应该也没坏,但是参考电阻RRef=820的电阻上始终得不到1.64v的电压,VREfcom和VREFOUT之间的电容的电压是2.04V,我想采集不到正确的值,应该和RREF两端得不到1.64V的电压有关,但是我不知道哪里有问题了,求助啊

    我的初始化代码如下
    void ADS1247_init(void){    SPI2_Config();    Delay_ms(2);    START_HIGH;    Delay_ms(20);    RESET_HIGH;    Delay_ms(2);    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8) == 1);    CS_LOW;    Delay_ms(2);    SPI2_SendByte(CMD_Reset);    Delay_ms(2);    ADS1247_Calibrate();    Delay_ms(2);    SPI2_SendByte(CMD_RDataC);    Delay_ms(2);    ADS1247WREG(Reg_MUX0, 0x0A); ////¹Ø±ÕµçÁ÷Ô´£¬ÕýÊäÈëͨµÀAIN1£¬¸ºÊäÈëͨµÀAIN2.    Delay_ms(2);    ADS1247WREG(Reg_VBias, 0x00); //¹Ø±ÕÆ«Öõçѹ    Delay_ms(2);    ADS1247WREG(Reg_MUX1, 0x38); //ʽÖдò¿ªÄÚ²¿²Î¿¼    Delay_ms(2);    ADS1247WREG(Reg_SYS0, 0x22); //PGA=4, 20sps    Delay_ms(2);    ADS1247WREG(Reg_IDAC0, 0x06); //µçÁ÷Ô´µçÁ÷1ma    Delay_ms(2);    ADS1247WREG(Reg_IDAC1, 0x03); //µÚÒ»¸ö¼¤ÀøµçÁ÷Êä³öÒý½ÅAIN0£¬µÚ¶þ¸öÊÇAIN3    Delay_ms(2);    SPI2_SendByte(CMD_SYNC);    Delay_ms(2);    SPI2_SendByte(0xff);    Delay_ms(2);    //    CS_HIGH;}float ADS1247_DATA(void){    u32 value;    float temp1,temp2;                while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8) == 1);    CS_LOW;    SPI2_SendByte(CMD_RData);    Delay_ms(2);    value = SPI2_SendByte(0xff) << 16;    value += SPI2_SendByte(0xff) << 8;    value += SPI2_SendByte(0xff);    Delay_ms(2);    CS_HIGH;    if(value < 0x7fffff || value == 0x7fffff)    {        temp1 = (1.64*value/0x7fffff*1000/4- 100) / 0.39;    }    if(value > 0x7fffff)    {        temp1 = (-1.64 * (0xffffff - value + 1) / 0x7fffff * 1000 / 4 - 99) / 0.39;    }    return temp1 ;}void ADS1247_Calibrate(void){    ADS1247WREG(Reg_SYS0, 0x22); //PGA=4, 20sps    ADS1247WREG(Reg_MUX1, 0x20);    SPI2_SendByte(CMD_SELFOCAL);    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8) == 1);    ADS1247WREG(Reg_MUX1, 0x21);    SPI2_SendByte(CMD_SYSOCAL);    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8) == 1);    ADS1247WREG(Reg_MUX1, 0x22);    SPI2_SendByte(CMD_SYSGCAL);    while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8) == 1);}
                                                                   

回帖(1)

醉清歌

2025-1-6 17:27:40
根据您提供的信息,您在使用ADS1247驱动PT100时遇到了数据采集不准确的问题。您已经确认了程序和芯片都没有问题,那么可能的原因有以下几点:

1. 参考电阻RRef的问题:您提到RRef两端得不到1.64V的电压,这可能是导致数据采集不准确的原因之一。请检查RRef的阻值是否正确,以及连接是否牢固。

2. VREFCOM和VREFOUT之间的电容问题:您提到VREFCOM和VREFOUT之间的电容电压为2.04V,这可能与参考电压不匹配。请检查电容的容值是否正确,以及连接是否牢固。

3. 电源问题:请检查ADS1247的电源是否稳定,以及电源电压是否符合要求。不稳定的电源可能会导致数据采集不准确。

4. 电路板布局问题:请检查电路板的布局是否合理,是否存在干扰源。不合理的布局可能会导致信号干扰,从而影响数据采集的准确性。

5. ADS1247配置问题:请检查ADS1247的配置是否正确,包括采样率、增益等参数。错误的配置可能会导致数据采集不准确。

建议您按照以上几点进行检查和调整,以解决数据采集不准确的问题。如果问题仍然存在,您可以尝试更换参考电阻、电容或者ADS1247芯片,以排除硬件故障的可能性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分