我用msp430读DS18B20温度来校准我的NTC热敏电阻,现在发现应该是读数不准,可能差了2度左右
我有个德州仪器的那个无线运动手表,里面有测量大气压力的传感器,这个传感器是带温度测量的,手册上写着误差不超过0.5度,但是我发现我的手表显示温度和DS18B20读出来的不一样,心里正纳闷到底是哪一个错误?(我把手表外壳都卸下来了,为了更好地反映环境温度)难道是我改写的手表软件错误,那可是直接读取的传感器的温度呀,应该不太容易有错误呀。
昨天折腾了一天搞一个软件来根据三点法来计算各个温度点的NTC阻值,因为根据DS18B20读出的温度输入的数据导致程序中遇到复数之类的一时没法得到正确的求解,还好现在已经解决,编写的软件已经能够正确地计算。可就是好像是读DS18B20温度不准导致我折腾了半天呀
现在的问题是,大家有碰到过读DS18B20不准的情况么?是我引用的读DS18B20的程序有错误还是我在淘宝上买的这个器件有问题?还是我的手表软件有问题?(原手表中虽然没有直接显示传感器温度的功能,但是程序中还是使用传感器的温度来计算海拔高度的,我是直接引用的这个读值呀)
[ 本帖最后由 wangfuchong 于 2013-2-26 11:05 编辑 ]
ds1820精度是0.5度。 ds1820温度=(Temperature REG)*0.5
ds18b20精度是0.0625度. ds18b20温度=(Temperature REG)*0.0625
会不会是DS18B20是打磨过的ds1820。 0.5和0.625 算下来也就差那么几度。
ds1820精度是0.5度。 ds1820温度=(Temperature REG)*0.5
ds18b20精度是0.0625度. ds18b20温度=(Temperature REG)*0.0625
传感器专家网 http://www.sensorexpert.com.cn/
回复 5楼 sensorexpert 的帖子
程序中这样处理没错吧?
unsigned char signBit=0;
if((data&0x8000))
{
signBit=1;//负值
data=data^0xFFFF+1;
}
unsigned int temp=6*data+data/4;
回复 6楼 wangfuchong 的帖子
为什么这么算?读出来的16位数就是16位有符号数,正值表示零上,负值表示零下,除以16不就是实际的温度值??
引用: 原帖由 ahuzhangbo 于 2013-2-28 11:08 发表
为什么这么算?读出来的16位数就是16位有符号数,正值表示零上,负值表示零下,除以16不就是实际的温度值??
那不就只能分辨率为1度了?人家分辨率可是0.0625度呀
[
本帖最后由 wangfuchong 于 2013-2-28 11:38 编辑 ]
如果器件本身没有问题(有问题的几率极小),那么检查电路和软件,注意供电要温,特别是传感器连线较长时,测温也要等器件达到温度均衡稳定以后读取的数值才可信。
回复 8楼 wangfuchong 的帖子
除16后直接用浮点型变量存着不就行了?或者不除16,你知道这个是实际值的16倍就行了
换个DS18B20试试,楼主的DS18B20不知是否为正品呢?
已经解决,经粗糙的实验,还是大致准的,有可能是在指标范围之内但是普遍偏差大一点的货。
请问是如何解决的,我将三个芯片放在同一个地方,高低能差两度多(低的为21.3高的为23.5)