DS18x20 温度传感器的可靠性

电器工程 Arduino 温度 1线
2022-01-21 06:50:25

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

有没有其他人遇到过这种问题,还是我的设置有问题?如果这只是这些事情的一个已知问题,我将不得不做一些事情,比如读取三个读数并抛出异常值。

关于我的设置的一些陈述:

  • 我在 3.3V 运行
  • 我正在检查读数的校验和,因为它返回到 arduino,并且它匹配(或者我认为它匹配 - 该代码中可能总是存在错误)。
  • 这些正在运行正常电源,而不是寄生电源。
  • 我有 4.7K 上拉电阻。
  • 我只在每个传感平台上使用一个传感器。
  • 传感器位于连接到正在读取它的 arduino 的 PCB 上。
  • 我从各种不同的arduinos(diecimilla,pro-mini,自制定制)中看到同样的问题
4个回答

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

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

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

仔细查看此处的数据表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 倍。

有时你会在线路上遇到电气干扰,控制器读取整个半字节 1,在这种情况下,你会得到一些像 15.64 这样的数字,它以二进制表示实际上非常接近 65 到 70F 之间的数字,除了一开始是一堆1。

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