4576|13

35

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

launchpad c2000 tms320f28027 [复制链接]

launchpad c2000 tms320f28027    Example_2802xAdc_TempSensorConv.c中温度转换程序((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;怎样解释呢?菜鸟求大神

最新回复

点击这个人的ID 就能到他的空间,看下他的主题帖即可。  详情 回复 发表于 2015-9-10 11:24
 
点赞 关注

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
TI的库,版本很多,最好说一下

--- 纯粹帮顶。
 
 

回复

667

帖子

3

TA的资源

版主

板凳
 
楼主你好,在28027 ADC用户手册中,有一节降到了internal temperature sensor,就是内部温度传感器。
具体来说,在1.12节。
这里把图粘贴给你看一下。

点评

非常感谢您的支持,我在运行TI例程之后,观察sensorSample值为1841(十进制),地址0x3D7E80和0x3D7E83中存放的数值为28A9,分别对应offset 和slope,自己带入TI例程中所给的公式((sensorSample - getTempOffset())*  详情 回复 发表于 2015-3-24 15:34
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

4
 
nemo1991 发表于 2015-3-24 09:16
楼主你好,在28027 ADC用户手册中,有一节降到了internal temperature sensor,就是内部温度传感器。
具体来说,在1.12节。
这里把图粘贴给你看一下。

非常感谢您的支持,我在运行TI例程之后,观察sensorSample值为1841(十进制),地址0x3D7E80和0x3D7E83中存放的数值为28A9,分别对应offset 和slope,自己带入TI例程中所给的公式((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;中后,(sensorSample - getTempOffset())这一项为负值了,可在CCS中显示的结果为32度左右,自己没有搞懂,再求大神,万分感谢

点评

其实ti的注释非常清楚,你读读应该能明白。 那个值计算出来可能是负的,因为他的offset你并不知道是多少,可能是五六十度呢。 我建议你把这个式子每一段计算结果都拿出来看看,我也想了解一下。  详情 回复 发表于 2015-3-24 17:49
 
 
 

回复

667

帖子

3

TA的资源

版主

5
 
the_wanted 发表于 2015-3-24 15:34
非常感谢您的支持,我在运行TI例程之后,观察sensorSample值为1841(十进制),地址0x3D7E80和0x3D7E83中存放的数值为28A9,分别对应offset 和slope,自己带入TI例程中所给的公式((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;中后,(sensorSample - getTempOffset())这一项为负值了,可在CCS中显示的结果为32度左右,自己没有搞懂,再求大神,万分感谢

其实ti的注释非常清楚,你读读应该能明白。

  1. // Useful definitions
  2.   #define FP_SCALE 32768       //Scale factor for Q15 fixed point numbers (2^15)
  3.   #define FP_ROUND FP_SCALE/2  //Added to Q15 numbers before converting to integer to round the number

  4. // Amount to add to Q15 fixed point numbers to shift from Celsius to Kelvin
  5. // (Converting guarantees number is positive, which makes rounding more efficient)
  6.   #define KELVIN 273
  7.   #define KELVIN_OFF FP_SCALE*KELVIN


  8. // The folloing pointers to function calls are:
  9. //Slope of temperature sensor (deg. C / ADC code).  Stored in fixed point Q15 format.
  10.   #define getTempSlope() (*(int (*)(void))0x3D7E82)()
  11. //ADC code corresponding to temperature sensor output at 0 deg. C
  12.   #define getTempOffset() (*(int (*)(void))0x3D7E85)()

  13. //This function uses the reference data stored in OTP to convert the raw temperature
  14. //sensor reading into degrees C
  15. int16 GetTemperatureC(int16 sensorSample)
  16. {
  17.     return ((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;
  18. }
复制代码
那个值计算出来可能是负的,因为他的offset你并不知道是多少,可能是五六十度呢。

我建议你把这个式子每一段计算结果都拿出来看看,我也想了解一下。

点评

今天下午实验室大拿帮我研究了一下,果真是自己getTempOffset()找错了,应该是低十六位064E,感谢帮助[/backcolor]  详情 回复 发表于 2015-3-25 16:16
这是在ccs中观察的各个变量,自己用计算器计算出来的结果和CCS中显示的结果不一样呢,return ((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;整个式子中只有  详情 回复 发表于 2015-3-24 21:41
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

6
 
nemo1991 发表于 2015-3-24 17:49
其实ti的注释非常清楚,你读读应该能明白。

那个值计算出来可能是负的,因为他的offset你并不知道是多少,可能是五六十度呢。

我建议你把这个式子每一段计算结果都拿出来看看,我也想了解一下。

这是在ccs中观察的各个变量,自己用计算器计算出来的结果和CCS中显示的结果不一样呢,return ((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;整个式子中只有sensorsample是变量,其他的都是常数,我把#define getTempSlope() (*(int (*)(void))0x3D7E80)()这一句理解的是从地址0x3D7E80取的值为28A9,但是sensorsimple-getTempOffset()为负值,乘上getTempSlope()=28a9之后会更负,FP_ROUND =32768/2;KELVIN_OFF=32768*273;FP_SCALE=32768; KELVIN=273;怎么算也算不出它的返回值为dec=33呢,自己是不是理解上有错误呢

QQ截图20150324213013.png (21.98 KB, 下载次数: 0)

QQ截图20150324213013.png

QQ截图20150324213200.png (24.04 KB, 下载次数: 0)

QQ截图20150324213200.png

点评

你好? 我觉得你自己解决了问题,也应该分享一下吧。。。。 隐隐感觉不爽。。  详情 回复 发表于 2015-3-27 12:16
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

7
 
nemo1991 发表于 2015-3-24 17:49
其实ti的注释非常清楚,你读读应该能明白。

那个值计算出来可能是负的,因为他的offset你并不知道是多少,可能是五六十度呢。

我建议你把这个式子每一段计算结果都拿出来看看,我也想了解一下。

今天下午实验室大拿帮我研究了一下,果真是自己getTempOffset()找错了,应该是低十六位064E,感谢帮助

点评

请问可以说一下吗?  详情 回复 发表于 2015-3-26 13:40
你好。 这个视窗我是第一次使用,可否分享一下如何使用? 为什么只看低十六位呢?  详情 回复 发表于 2015-3-25 21:04
 
 
 

回复

667

帖子

3

TA的资源

版主

8
 
the_wanted 发表于 2015-3-25 16:16
今天下午实验室大拿帮我研究了一下,果真是自己getTempOffset()找错了,应该是低十六位064E,感谢帮助

你好。

这个视窗我是第一次使用,可否分享一下如何使用?

为什么只看低十六位呢?
 
 
 

回复

667

帖子

3

TA的资源

版主

9
 
the_wanted 发表于 2015-3-25 16:16
今天下午实验室大拿帮我研究了一下,果真是自己getTempOffset()找错了,应该是低十六位064E,感谢帮助

请问可以说一下吗?
 
 
 

回复

667

帖子

3

TA的资源

版主

10
 
the_wanted 发表于 2015-3-24 21:41
这是在ccs中观察的各个变量,自己用计算器计算出来的结果和CCS中显示的结果不一样呢,return ((sensorSample - getTempOffset())*(int32)getTempSlope() + FP_ROUND + KELVIN_OFF)/FP_SCALE - KELVIN;整个式子中只有sensorsample是变量,其他的都是常数,我把#define getTempSlope() (*(int (*)(void))0x3D7E80)()这一句理解的是从地址0x3D7E80取的值为28A9,但是sensorsimple-getTempOffset()为负值,乘上getTempSlope()=28a9之后会更负,FP_ROUND =32768/2;KELVIN_OFF=32768*273;FP_SCALE=32768; KELVIN=273;怎么算也算不出它的返回值为dec=33呢,自己是不是理解上有错误呢

你好?

我觉得你自己解决了问题,也应该分享一下吧。。。。

隐隐感觉不爽。。

点评

非常抱歉啊,这两天实验室的网络不知道怎么的,一直刷不出网页来,现在才弄好,还请您谅解啊。 我用的CCS5,连接上DSP烧写进程序后,点击view--memory browser 就会出来那个界面,把地址输上后即可显示该地址的  详情 回复 发表于 2015-3-27 21:35
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

11
 
nemo1991 发表于 2015-3-27 12:16
你好?

我觉得你自己解决了问题,也应该分享一下吧。。。。

隐隐感觉不爽。。

非常抱歉啊,这两天实验室的网络不知道怎么的,一直刷不出网页来,现在才弄好,还请您谅解啊。

我用的CCS5,连接上DSP烧写进程序后,点击view--memory browser  就会出来那个界面,把地址输上后即可显示该地址的值,程序中定义的OX3D7E80为地址,通过观察其应存储着getTempSlope()的值,程序中getTempSlope()的值为32位,故其应取值OX3D7E80和OX3D7E81中的值构成32位,另外的getTempOffset()可同理,不知道您能看明白么,相互帮助,共同进步啊

点评

其实,你这样的理解完全错了。。 一定程度上,我纠结这个问题这么久就是被你误导了。。 去看看我新的帖子吧。  详情 回复 发表于 2015-3-27 22:07
 
 
 

回复

667

帖子

3

TA的资源

版主

12
 
the_wanted 发表于 2015-3-27 21:35
非常抱歉啊,这两天实验室的网络不知道怎么的,一直刷不出网页来,现在才弄好,还请您谅解啊。

我用的CCS5,连接上DSP烧写进程序后,点击view--memory browser  就会出来那个界面,把地址输上后即可显示该地址的值,程序中定义的OX3D7E80为地址,通过观察其应存储着getTempSlope()的值,程序中getTempSlope()的值为32位,故其应取值OX3D7E80和OX3D7E81中的值构成32位,另外的getTempOffset()可同理,不知道您能看明白么,相互帮助,共同进步啊

其实,你这样的理解完全错了。。

一定程度上,我纠结这个问题这么久就是被你误导了。。

去看看我新的帖子吧。
 
 
 

回复

1

帖子

2

TA的资源

一粒金砂(初级)

13
 
nemo1991 发表于 2015-3-27 22:07
其实,你这样的理解完全错了。。

一定程度上,我纠结这个问题这么久就是被你误导了。。

去看看我 ...

新帖在哪里啊?求链接!我就是不明白(*(int(*)(void))0x3D7E82)() 是什么意思,是取地址中的值吗?后面为什么又有一个括号,感觉又像是函数,求版主指教啊

点评

点击这个人的ID 就能到他的空间,看下他的主题帖即可。  详情 回复 发表于 2015-9-10 11:24
 
 
 

回复

2万

帖子

74

TA的资源

管理员

14
 
nfc19921991 发表于 2015-9-9 21:25
新帖在哪里啊?求链接!我就是不明白(*(int(*)(void))0x3D7E82)() 是什么意思,是取地址中的值吗?后面为 ...

点击这个人的ID 就能到他的空间,看下他的主题帖即可。
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表