Other Parts Discussed in Thread: ADS1248
您好,我使用四线制PT100测温,使用芯片ADS1247,使用100Ω标准电阻模拟PT100接入看测温是否准确,设置的恒流源电流为500uA,PGA增益为8,已经计算过共模输入范围是符合的,出现的问题是,有一个2.5℃恒定误差,多次复位会偶尔正常,复位20次左右会有一次正常值。
正常值是多次复位偶尔可以得到一次,表格中是正常值与异常值对比,复位采取对板卡断电又上电,后面我又尝试了只使用RESET引脚复位,还是同样的情况。
使用示波器看波形:波形完全正常
原理图和代码附上:
void task_ads1248_Reset()
{
RESET_OPEN();//复位拉低
Delay_ms(20);
RESET_CLOSE();//复位拉高
Delay_ms(20);
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_IDAC0, 0x04); /* 设置恒流源IDACs的输出电流 *///0000 0100 电流为500微安
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_SYS0, 0x31);//0011 0001 系统控制寄存器,PGA增益为8,ADC的输出数据率为10SPS
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_MUX1, 0x20);//0010 0000 内部电压总是启动,REF0
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_IDAC1,0xf0);//0000 0000 恒流源输出通道,选择通道0
Dev_Ads1248_Write_Reg_Byte(DEV_ADS1248_MUX0,0x11); //0001 0001 通道选择,Pos:AIN2 Neg:AIN1
}
float Get_adsTemp()//得到当前温度值
{
static u8 Flag = 0;
int32_t adc_raw;/* -8388608 至 8388607 *///2的23次方
float value_of_res; /* 阻值 */
// DRDY数据转换完成标志
if(ADS1248_DRDY_Flag == 1)
{
ADS1248_DRDY_Flag = 0;
adc_raw = Dev_Ads1248_Read_Data(); // read the value from the selected channel
printf("adc_raw:%x\r\n",adc_raw);
value_of_res=(float)adc_raw/8388608.f*2000.f/8.f;//参考电阻为2000Ω,PGA增益为8
printf("value_of_res:%f\r\n",value_of_res);
Temp=TEMP_ADS1248(value_of_res);
printf("Temp:%f\r\n",Temp);
}
return Temp;
}