注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
曹世鹏的个人空间 https://home.eeworld.com.cn/space-uid-438848.html [收藏] [复制] [分享] [RSS]
日志

ADS1247温度转换的问题

已有 1698 次阅读2015-5-18 16:45 |个人分类:制作

最近在做用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);

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

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章