DS18x20温度传感器的可靠性


11

我正在使用Maxim的DS18x20(实际上我有多个变体)1-Wire温度传感器每分钟记录一次我房间中各个房间的温度。大约千分之一的阅读量,我得到的东西完全是假的。在从65F逐渐升高到70F的序列中间,我得到的像是-32.1F或15.64F。

其他人有这种问题吗,或者我的设置有问题吗?如果这只是这些问题的已知问题,我将不得不做一些事情,例如获取三个读数并排除异常值。

关于我的设置的一些声明:

  • 我以3.3V运行
  • 我正在检查读数的校验和,因为它回到了arduino,并且与它匹配(或者我认为确实如此-该代码中总有bug)。
  • 这些正在消耗正常功率,而不是寄生功率。
  • 我有4.7K上拉电阻。
  • 我在每个感应平台上只使用一个传感器。
  • 传感器位于与正在读取它的arduino相连的PCB上。
  • 我从各种不同的arduinos(diecimilla,pro-mini,自制风俗)中读取相同的问题

Answers:


5

我偶尔会在DS18B20上看到这一点。对于我的应用程序来说,用代码过滤掉虚假结果非常简单。


很高兴听到别人看起来像这样。您的过滤算法是什么?
edebill 2009年

我建议您按照您所说的去做,阅读3个,比这好5个,再读7个,但是如果误差在1/1000左右,则只需要3。取中位数。问题将会解决。如果您取5,则会出现问题。
Kortuk

我现在正在做5。我尝试只取2中的较高者,但昨晚仍然犯了一个错误(我每分钟读取3个传感器,因此每天可以获得数千个数据点)。
edebill 2009年

3

如果找不到错误读数的来源,则应该很容易将它们过滤掉并从以前的读数中推断出来,或者在事后分析很重要的情况下在读数之间进行插值。由于您每分钟采样一次,因此您甚至可以复制最后一个读数。室温在一分钟内几乎不会改变。


3

这可能是由于控制器在某些高负载条件下误读了温度响应的一位或多位,或者是由于电干扰破坏了一位或多位。

http://www.rentron.com/Files/ds18b20.pdf上仔细查看数据表

在第5页上,它表明85C的确切二进制序列是:

+85°C 0000 0101 0101 0000

同样,对于25C,它是:

+25.0625°C 0000 0001 1001 0001

在某些情况下,如果控制器遗漏了一点,您将获得一个实际温度值,以二进制和位移位表示。通常,这是目标值C的1/2倍。

有时您会在线路上受到电干扰,并且控制器读取的整个半字节为1s,在这种情况下,您会得到诸如15.64之类的数字,该数字实际上用二进制表示非常接近65到70F之间的数字,除了一开始是一堆1。


2

就其价值而言,几个月前,我对DS18B20做了一些工作。我拍了一段短片,并在博客上写了一篇文章,其中包含示例和示例代码的链接。希望这可以有所帮助! http://dailyduino.com/archives/552


2

自大约四年以来,我有13个人在我家中跑步。数据库已经很难处理了(我一直跟踪所有样本)。但是,我没有看到这种行为。取而代之的是,现在并且不止一个传感器冻结并阻塞所有其他传感器,解决这个问题的唯一方法(我发现)是关闭电源几秒钟。因此,我在板上添加了一个微型继电器,只要微控制器感应到这种行为,它就会重置整个传感器链。一周发生几次。


嗯 也许我只有在要阅读时才给它们加电。
edebill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.