TIwilliam hill官网
直播中

李明聪

7年用户 1176经验值
私信 关注
[问答]

ADS1247测量100欧姆电阻,有恒定误差的原因?


  • 你好,我使用四线PT100测温,使用ADS1247,用100欧姆,5ppm,0.01%的电阻模拟,看测得的电阻是否正确.恒流源为500uA,PGA增益8,
    出现的问题是有一个恒定的误差,本来测得的电阻应该在99.99-100.01欧姆之间.但实际测得的电阻永远在100.28-100.29之间徘徊.

    不知道是否万用表的关系,VrefOut测得的电压是:2.043V,
    void ADS1247_Init(void)
    {
    // unsigned char i=0;
    // uint8_t Dataw[10]={0};
    uint8_t Cmd = 0;
    uint8_t ReadData = 0;
    /*对ADC进行复位*/
    ADS1247_Reset();
    Delay_ms(20);
    /*配置MUX0寄存器AIN0为正输入,AIN1为负输入*/
    // Cmd = 0x08;/*0000 0001*/
    // ADS1247_WriteReg(ADS1247_MUX0,&Cmd,1);
    /*打开AN0/AIN1偏置电压*/
    // Cmd = 0x03;/*0000 0001*/
    // ADS1247_WriteReg(ADS1247_VBIAS,&Cmd,1);
    //0010 0000 内部电压总是启动,REF0
    Cmd = 0x20 ; /*0 01 00 000*/
    ADS1247_WriteReg(ADS1247_REG_MUX1, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_MUX1, &ReadData, 1);

    //ADS1247_RWSYSReg();
    //0011 0001 系统控制寄存器,PGA增益为8,ADC的输出数据率为5SPS
    Cmd = 0x30 ; /*0110 0010*/
    ADS1247_WriteReg(ADS1247_REG_SYS0, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_SYS0, &ReadData, 1);
    //设置恒流源IDACs的输出电流 0000 0100 电流为500微安
    Cmd = 0x04 ; /*0000 0000*/
    ADS1247_WriteReg(ADS1247_REG_IDAC0, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_IDAC0, &ReadData, 1);
    //0000 0000 恒流源输出通道,选择通道0
    Cmd = 0xF0; /*1111 1111*/
    ADS1247_WriteReg(ADS1247_REG_IDAC1, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_IDAC1, &ReadData, 1);
    //0001 0001 通道选择,Pos:AIN2 Neg:AIN1
    Cmd = 0x11;
    ADS1247_WriteReg(ADS1247_REG_MUX0, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_MUX0, &ReadData, 1);
    /*配置FSC0为00*/
    Cmd = 0x00; /*0010 0000*/
    ADS1247_WriteReg(ADS1247_REG_FSC0, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_FSC0, &ReadData, 1);
    /*配置FSC1为00*/
    Cmd = 0x00; /*0000 0000*/
    ADS1247_WriteReg(ADS1247_REG_FSC1, &Cmd, 1);
    ADS1247_ReadReg(ADS1247_REG_FSC1, &ReadData, 1);
    /*配置FSC2为40,在公式中需要除以常数0x400000*/
    Cmd = 0x40; /*0000 0100*/
    ADS1247_WriteReg(ADS1247_REG_FSC2,&Cmd,1);
    Delay_ms(20);
    /*拉高START准备ADC转换*/
    O_ADS1247_Start = 1;
    ADS1247_WriteCommand(ADS1247_CMD_SYSOCAL);
    Delay_ms(20);
    // ADS1247_WriteCommand(ADS1247_CMD_SYSGCAL);
    Delay_ms(20);
    ADS1247_WriteCommand(ADS1247_CMD_SELFOCAL);
    Delay_ms(20);
    /*启动连续转换命令*/
    ADS1247_WriteCommand(ADS1247_CMD_RDATAC);
    Delay_ms(20);
    }

    float Get_adsTemp(void)//得到当前温度值
    {
    int32_t adc_raw;/* -8388608 至 8388607 *///2的23次方
    float value_of_res; /* 阻值 */
    float Temp=0;
    // DRDY数据转换完成标志
    if (ADS1247_Wait() == 0)
    {
    adc_raw = ADS1247_Read(); // read the value from the selected channel
    // printf("adc_raw:%xrn", adc_raw);
    value_of_res = (float)adc_raw / 8388608.f * 2000.f / 8.f; //参考电阻为2000Ω,PGA增益为8
    __breakpoint(0);
    // printf("value_of_res:%frn", value_of_res);
    // Temp = TEMP_ADS1247(value_of_res);
    // printf("Temp:%frn", Temp);
    }
    return Temp;
    }

                                                      

回帖(1)

wufan931111

2024-11-13 18:11:46
从您提供的信息来看,使用ADS1247测量100欧姆电阻时出现恒定误差的原因可能有以下几点:

1. 硬件连接问题:请检查您的四线PT100测温传感器和100欧姆电阻的连接是否正确。确保所有连接都牢固且无短路或断路现象。

2. 参考电压误差:您提到的VrefOut电压为2.043V,可能存在一定的误差。请检查您的参考电压源是否稳定且准确。如果可能,请使用更高精度的参考电压源。

3. ADS1247配置问题:请检查您的ADS1247初始化代码是否正确配置了ADC参数,例如采样率、增益、滤波等。错误的配置可能导致测量误差。

4. 万用表误差:您提到可能与万用表有关,可以尝试使用另一款万用表进行测量,以排除万用表误差的可能性。

5. 环境因素:环境温度、湿度等因素可能影响电阻的测量结果。请确保您的测量环境稳定。

6. 软件算法问题:请检查您的软件算法是否正确处理了ADS1247的测量数据。错误的算法可能导致测量误差。

综上所述,要解决这个问题,您需要逐步排查硬件连接、参考电压、ADS1247配置、万用表误差、环境因素和软件算法等方面的原因。希望这些建议能帮助您找到问题所在并解决恒定误差的问题。
举报

更多回帖

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