哪位大神用过ADS1118内部的温度传感器,用差分方式读热电偶测温,用温度传感器读取的温度不随温度而变化,求大神指点,谢谢!!

2019-07-21 05:25发布

本帖最后由 XiaoXueDi 于 2019-2-7 19:32 编辑

搜狗截图19年02月07日1931_2.png
电路板是根据以上原理图来做的,能读取电压,读取电压用差分方式的配置读取冷端和热端电压差,电压能随温度变化而变化,但误差较大。用内部高精度温度传感器读取温度时出现了问题,同样是采用差分方式的配置输入,内部温度传感器不随温度变化而变化,在36度左右 和 10度左右的以及其它温度的环境下读出的数据始终在 17.937500 左右,并且不接热电偶也是前面这个值的左右,下面是串口打印的温度值,调了好几天了,一直没找到问题,不知道是不是寄存器配置错误,感觉内部温度传感器没起作用,下面有ADS1118部分驱动代码,求大神指点,谢谢!!!
*******************************
串口打印温度:
*******************************
vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.906250

vol = 17.937500

vol = 17.937500

vol = 17.937500

vol = 17.937500
************************

/*******************************************************************************
* 函 数 名 : ADS1118_Start
* 功    能 : ADS1118启动信号
* 函数说明 : 初始化I/O口之后调用
* 创建日期 :2018.5.12
********************************************************************************/
u16 ADS1118_Start(u8 CS)
{
    u16 dat;        
        u16 temp;
        
        dat = 0x0E9B;        //0X0E8B;
        delay_ms(1);        //等待启动
               
    if(CS==CS1) ADS1118_CS1 = 0;        
        else                 ADS1118_CS2 = 0;
        
        delay_us(1);               
        temp = ADS1118_ReadWriteByte(dat>>8);        //MSB
        temp<<=8;               
        temp |= ADS1118_ReadWriteByte(dat);                //LSB
        
    if(CS==CS1) ADS1118_CS1 = 1;        
        else                 ADS1118_CS2 = 1;               
    return temp;   
}


/*******************************************************************************
* 函 数 名 : ADS1118_ReadValue
* 功    能 : 读取ADS1118给定通道值
* 输入参数 : ch,通道号,0x00和0x03
* 创建日期 :2018.5.12
********************************************************************************/
void ADS1118_ReadValue(u8 ch,u8 CS)
{
        u8 k,i;
        u16 temp;
        u16 dat;
        double voltage;

        k=ch;        
        if(ch==1)                dat = 0X0E8B;                  //0.256V
        else if(ch==2)        dat = 0X3E8B;
        else                         return;
        
        temp = ADS1118_ReadWrite2Byte(dat,CS);        
        temp = ADS1118_ReadWrite2Byte(dat,CS);        

        if(temp>=0x8000)
        {
                temp = 0xFFFF-temp;
                voltage = (-1.0)*(((double)temp)*256/32768);//mv
        }        
        else
        {               
                voltage = (1.0)*((double) temp)*256/32768;
        }
        ads.ad[k-1]  = temp;
        ads.vol = voltage;


}
/*******************************************************************************
* 函 数 名 : ADS1118_ReadValue
* 功    能 : 读取ADS1118给定通道值
* 输入参数 : ch,通道号,0x00和0x03
* 创建日期 :2018.5.12
********************************************************************************/
void ADS1118_ReadTemperature(u8 ch,u8 CS)
{
        u8 k,i;
        u16 temp;
        u16 dat;
        double voltage;

        k=ch;        
        if(ch==1)                dat = 0x0E9B;                  //0.256V
        else if(ch==2)        dat = 0X3E9B;
        else                         return;
        
        temp = ADS1118_ReadWrite2Byte(dat,CS);
        temp = ADS1118_ReadWrite2Byte(0x0000,CS);

        if(temp>=0x8000)
        {
                temp = (~((temp>>2)-1))&0x3FFF;
                voltage = (-1.0)*(((double)temp)*0.03125);//mv
        }        
        else
        {        
                temp>>=2;
                voltage = (1.0)*(((double)temp)*0.03125);
        }

        ads.ad[k-1]  = temp;
        ads.vol = voltage;


}



/*******************************************************************************
* 函 数 名 : ADS1118_Test_ReadValue
* 功    能 : ADS1118数据读取测试
* 函数说明 : 将读取到的数据发送至上位机
* 创建日期 :2018.5.12
********************************************************************************/
void ADS1118_Test_ReadValue(u8 CS)
{
        ADS1118_GPIO_Init();
        ADS1118_Start(CS);                        
        while(1)
        {               
//                ADS1118_ReadValue(2,CS);                //读取电压值
               
                ADS1118_ReadTemperature(1,CS);        //读取温度
                printf("vol = %f ",ads.vol);
                printf(" ");
                delay_ms(3000);


        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。