OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3673|回复: 4

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

[复制链接]

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2019-2-7
在线时间
29 小时
发表于 2019-2-7 19:28:30 | 显示全部楼层 |阅读模式
本帖最后由 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\r\n",ads.vol);
                printf("\r\n");
                delay_ms(3000);


        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-2-8 09:43:51 | 显示全部楼层
回复 支持 反对

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2020-2-19
在线时间
10 小时
发表于 2020-7-9 11:47:34 | 显示全部楼层
推荐使用max31855KASA很简单的电路图
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2019-2-7
在线时间
29 小时
 楼主| 发表于 2020-7-15 09:40:59 | 显示全部楼层
qq820270087 发表于 2020-7-9 11:47
推荐使用max31855KASA很简单的电路图

谢谢,已经解决了
回复 支持 反对

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2020-2-19
在线时间
10 小时
发表于 2020-7-15 17:27:38 | 显示全部楼层
哪里出问题了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 21:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表