7018|22

108

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ADS1247温度转换的问题 [复制链接]

本帖最后由 曹世鹏 于 2015-5-18 18:57 编辑

最近在做用STM32F103的SPI总线和TI的ADS1247通信读取三线制的PT100的温度值,要求精度为0.5摄氏度。
现在遇到了一些问题。不知道该怎么处理。下面我就把问题总结一下。希望能在论坛里帮我解决一下。谢谢大家。
事情是这样的,我也想好了方案。就是用恒流源设置一个电流流过PT100,然后测PT100两端的电压,从而得出电阻值,然后对应PT100的电阻温度表格就能得出温度值了。但是因为不能让PT100流经的电流过大,因为那样会发热,影响实际的温度值。而且电阻变化范围很窄,最低是18.5欧姆,最高是390.48欧姆。这是PT100的整个量程,就是-200摄氏度到850摄氏度。实际上我们用到的范围很窄,就是-40到100摄氏度之间变化,对应的电阻变化就是84欧姆到138欧姆之间。如果流经1mA的话,那么电压变化范围就是0.084V-0.138V之间变化。这么小的变化范围,必须用运放将电压放大的,不然检测到的范围太窄了。那么本来我是想用运放自己搭一个的。后来发现自己的水平有限,放弃了。
然后在TI的官网上查看看有没有对应的芯片。嗯,查到了就是现在正在调试的ADS1247。它是SPI总线的。精度也很高。自带恒流源和放大器。正好适合我的需求。而且看了下还有Demo板。原理图什么的。

然后我就照着它的原理图画了一版板子。板子回来前就开始写程序。发现了一个问题。我在TI给的这个datasheet上面没有找到如何计算电阻值或者直接计算温度值的例子。我把我在这上面整理的资料压缩成一个文件共大家下载。这是我找到的唯一感觉是这个计算公式的东西。



其中我在这二个公式里代入了一个值,也就是当0摄氏度的时候,PT100的电阻值是100欧。这两个等式的两边都是成立的。即RTD(T)=100欧姆,T=0℃
但是我将别的值代入的时候就不对了。我看不懂这个到底是怎么算的。
下面贴一下我的源码,其中完整的.c和.h文件在我的压缩包里。
        ADS1247WREG(ADS1247_REG_MUX1,0x38);   //内部参考电压打开。
        bsp_DelayMS(1);
        ADS1247WREG(ADS1247_REG_IDAC0,0x06);  //DOUT/DRDY pin functions only as Data Out (default)   并且1mA。
        bsp_DelayMS(1);
        ADS1247WREG(ADS1247_REG_IDAC1,0x03);  // IDAC1->AIN0  IDAC2->AIN3.
        bsp_DelayMS(1);
        ADS1247WREG(ADS1247_REG_SYS0,0x26);     //增益4,320sps        
        bsp_DelayMS(1);
        SPI_ADS1247_SendByte(ADS1247_CMD_SYNC);   //同步AD转换
        bsp_DelayMS(1);
        data22=ADS1247_ReadData_Ave();//将转换的24位转换值取出。
        bsp_DelayMS(1);
        printf("通道:%x\r\n",data22);

这是我在ADS1247的模拟输入端接了一个100欧姆的电阻代替PT100。如果读数正确的话,计算结果应该是0摄氏度。



打印出来的数据变化很大,而且不稳定。我是隔2秒钟打印一次的。
我现在也不理解这个ADS1247_ReadData_Ave()读出来的值是什么。做什么用的。到底是代表阻值还是电压呢,不知道。有用过这个芯片的朋友吗,给解释下吧,着实的弄不懂了。



ADS1247_.rar

11.21 MB, 下载次数: 117

最新回复

您好 请问您ADS1247温度转换的问题解决了吗,我现在测得与实际温度相差3-4℃   详情 回复 发表于 2021-1-12 09:23
点赞 关注(1)

回复
举报

29

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
ADS1247WREG(ADS1247_REG_MUX1,0x38);   不对
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
应该是ADS1247WREG(ADS1247_REG_MUX1,0x20);   才合理
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

4
 
还有 读取的是 电压值  需要自己转换

点评

[attachimg]198437[/attachimg] 刚才我用万用表量了下A点电压为1.614V。按道理讲的话,这里的电压应该为820*1*2=1.64V。因为流经电阻R9的电流为2mA,所以电压为1.64V。我实际测的的值为1.614V。而我测的的B电电压  详情 回复 发表于 2015-5-19 09:24
非常感谢您的回复。刚才我按照您说的方法把MUX1的0x38换成了0x20。然后再烧进STM32内,PT100仍然使用的是100欧姆电阻。发现读出来的值是这样的。 通道:feaa3d 通道:feace9 通道:feaaa8 通道:fead05  详情 回复 发表于 2015-5-19 08:52
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

5
 
nuaa041020518 发表于 2015-5-18 22:59
还有 读取的是 电压值  需要自己转换

非常感谢您的回复。刚才我按照您说的方法把MUX1的0x38换成了0x20。然后再烧进STM32内,PT100仍然使用的是100欧姆电阻。发现读出来的值是这样的。

通道:feaa3d

通道:feace9

通道:feaaa8

通道:fead05

通道:feabe1

通道:feab02

通道:fead78

通道:feab43

通道:feacaf

通道:fead28

通道:feadb4

通道:feac9a

通道:fead22

通道:fead5b

通道:feacf9

通道:feae28

通道:feb0c1

通道:feac92

通道:feaf80

通道:feae77

通道:fead87

通道:feae54

通道:feae0d

通道:feaf24

通道:feb070

通道:feaf21

通道:feae9a

通道:feac37

通道:feadcc


但是这个数据和电压有什么关系呢。我计算了一下。随便取了一个这个读出来的转换值数据。例如  (通道:fead05) 我将fead05转换成十进制后是16690437。这个和电压有什么关系呢?我现在设定的是流经PT100的电流应该是1mA。U=I*R。即电压U=0.001*100=0.1V。这个数值和16690437有什么关系呢。算了下,这个读出来的值都是差不多前三位都是166.这个值和输入电压3.3V的一半差不多。请问这个电压值该如何转化出来呢。期待您的回复。

 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

6
 
nuaa041020518 发表于 2015-5-18 22:59
还有 读取的是 电压值  需要自己转换



刚才我用万用表量了下A点电压为1.614V。按道理讲的话,这里的电压应该为820*1*2=1.64V。因为流经电阻R9的电流为2mA,所以电压为1.64V。我实际测的的值为1.614V。而我测的的B电电压为1.713V,按道理讲,这里的电压应该是1.74V。读到的值和实际测量的值不一样呢。我用1.74-1.713就是PT100两端的电压。除以电流1mA正好是100欧姆。这样做是正确的。但是实际读到的值却不行。是不是我的电源有问题呢?
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

7
 
为什么你没有配置 MUX0

点评

我是按照它的数据手册做的。其实是没看懂,就是按照人家让怎么配就照着做了。 [attachimg]198439[/attachimg] [attachimg]198440[/attachimg] 我再看看MUX0是怎么要求的。  详情 回复 发表于 2015-5-19 09:43
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

8
 
关于你的静态电压不准 是因为电阻的初始误造成的

点评

电阻的初始误差?您是指的我的R9需要软件配置还是?不太明白呢。我以为就是电流配置正确,R9电阻阻值稳定就行了。那样R9两端的电压就会稳定了。  详情 回复 发表于 2015-5-19 09:46
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

9
 
nuaa041020518 发表于 2015-5-19 09:39
为什么你没有配置 MUX0

我是按照它的数据手册做的。其实是没看懂,就是按照人家让怎么配就照着做了。









我再看看MUX0是怎么要求的。
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

10
 
采样电阻并不是 820 欧 而且 恒流也有初始误差  但这都不重要 。最重要的是 采样电阻一定要低温漂。

点评

您的意思是我的R9要换成低温飘的精密电阻是吗。我现在用的是普通的百一精度的电阻。看来我得去市场上买些去了。  详情 回复 发表于 2015-5-19 09:48
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

11
 
nuaa041020518 发表于 2015-5-19 09:43
关于你的静态电压不准 是因为电阻的初始误造成的

电阻的初始误差?您是指的我的R9需要软件配置还是?不太明白呢。我以为就是电流配置正确,R9电阻阻值稳定就行了。那样R9两端的电压就会稳定了。
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

12
 
MUX0 要配置为 AIN1 AIN2 输入
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

13
 
nuaa041020518 发表于 2015-5-19 09:45
采样电阻并不是 820 欧 而且 恒流也有初始误差  但这都不重要 。最重要的是 采样电阻一定要低温漂。

您的意思是我的R9要换成低温飘的精密电阻是吗。我现在用的是普通的百一精度的电阻。看来我得去市场上买些去了。
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

14
 
手册里面可能忽略了  但是MUX0 要配置为 AIN1 AIN2 输入

点评

我将MUX0设置成0x0A,即正输入通道选择位为AIN1,负输入通道选择位为AIN2。读出来的值有点儿离谱。随便取了一个值,1F6D3C(16进制) = 2059580 (10进制)。下面是我采集到的值的多次打印结果。不过相对来说数据稳定了  详情 回复 发表于 2015-5-19 10:04
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

15
 
R9要换成低温飘的精密电阻   这样才能保证长期的精度
 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

16
 
R9电阻阻值稳定就行了。那样R9两端的电压就会稳定了。   这就话是对的  但是R9绝对不会等于820 他的初始误差大概有几欧姆
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

17
 
nuaa041020518 发表于 2015-5-19 09:49
手册里面可能忽略了  但是MUX0 要配置为 AIN1 AIN2 输入

我将MUX0设置成0x0A,即正输入通道选择位为AIN1,负输入通道选择位为AIN2。读出来的值有点儿离谱。随便取了一个值,1F6D3C(16进制) = 2059580 (10进制)。下面是我采集到的值的多次打印结果。不过相对来说数据稳定了很多。




通道:1f6d10

通道:1f6d09

通道:1f6d4d

通道:1f6cd4

通道:1f6cd2

通道:1f6d43

通道:1f6d3c

通道:1f6d61

通道:1f6d3a

通道:1f6d25

通道:1f6d38

通道:1f6d5c

通道:1f6cfd

通道:1f6cd2

通道:1f6ceb

通道:1f6ceb

通道:1f6d2f

通道:1f6d27

通道:1f6d12

通道:1f6d4a

通道:1f6d83

通道:1f6d6a

通道:1f6d4d

通道:1f6d75

通道:1f6d02

通道:1f6d02

通道:1f6ced

通道:1f6d8b

通道:1f6d6c

通道:1f6d55

通道:1f6d58

通道:1f6d6a

通道:1f6d34

通道:1f6d58

通道:1f6d44

通道:1f6cfd

通道:1f6d9d


点评

[attachimg]198442[/attachimg]  详情 回复 发表于 2015-5-19 10:12
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

18
 
曹世鹏 发表于 2015-5-19 10:04
我将MUX0设置成0x0A,即正输入通道选择位为AIN1,负输入通道选择位为AIN2。读出来的值有点儿离谱。随便取了一个值,1F6D3C(16进制) = 2059580 (10进制)。下面是我采集到的值的多次打印结果。不过相对来说数据稳定了很多。




通道:1f6d10

通道:1f6d09

通道:1f6d4d

通道:1f6cd4

通道:1f6cd2

通道:1f6d43

通道:1f6d3c

通道:1f6d61

通道:1f6d3a

通道:1f6d25

通道:1f6d38

通道:1f6d5c

通道:1f6cfd

通道:1f6cd2

通道:1f6ceb

通道:1f6ceb

通道:1f6d2f

通道:1f6d27

通道:1f6d12

通道:1f6d4a

通道:1f6d83

通道:1f6d6a

通道:1f6d4d

通道:1f6d75

通道:1f6d02

通道:1f6d02

通道:1f6ced

通道:1f6d8b

通道:1f6d6c

通道:1f6d55

通道:1f6d58

通道:1f6d6a

通道:1f6d34

通道:1f6d58

通道:1f6d44

通道:1f6cfd

通道:1f6d9d


 
 
 

回复

29

帖子

1

TA的资源

一粒金砂(中级)

19
 
结果是对的啊

点评

我用PT100两端电压=2.059580-1.640000=0.419580V。R=[/backcolor]0.419580/0.001=419.58欧姆吗。我这么算是不是错的?应该是100欧姆的电阻。也就是说电压应该是0.1V。我还是不会计算PT100两端的电压。是不是根据这儿  详情 回复 发表于 2015-5-19 10:39
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

20
 

我用PT100两端电压=2.059580-1.640000=0.419580V。R=0.419580/0.001=419.58欧姆吗。我这么算是不是错的?应该是100欧姆的电阻。也就是说电压应该是0.1V。我还是不会计算PT100两端的电压。是不是根据这儿,还得将得到的电压值再除以4呢?请您帮我指点下吧。谢谢。


点评

其中1F6D3C(16进制) = 2059580 (10进制)是我在串口输出的值里面任意取的一个值。[/backcolor]1.64是R9两端的理论电压值。[/backcolor]谢谢您的帮助。电压值是我上面那么算出来的吗?[/backcolor]  详情 回复 发表于 2015-5-19 10:41
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表