DS18B20 快速振荡

物联网 传感器 监控 农业
2021-06-10 04:35:17

我有一个物联网设备在现场测量风力机旁边的温度。观看此视频以了解什么是风力机 - 基本上是连接到发动机的大风扇。

昨晚,当风力机运行时,我开始获得快速变化的温度读数,在 7 秒内最大变化为 29F。见下图,以及此链接中的数据描述正常和振荡操作的图表

我以前从未见过这样的事情,而且我在现场有 50 多个 DS18B20 探头用于类似的用例。我确保从探头重新计算 CRC 并对实际值进行了许多测试,所以我很确定下面的值等于 DS18B20 实际认为的温度。

我最好的理论是温度探头弄湿了,然后风扇吹过它的空气冷却了探头。这种解释似乎最合适,但我不明白它是如何使 DS18B20 像数据中那样低的——记录的最低温度是 -24C°/-12F°,这似乎是不可能的。

还有什么可能导致这种情况吗?

2个回答

请记住,从 DS18B20 返回的值取决于接收到的电压。如果这个电压有波动,那么你的读数也会发生变化。我已经看到我的在几秒钟内从 20C 升至 -127C……发现我的一根电线开始短路。换了线,问题就解决了。我冒昧地猜测一下,您的传感器可能发生了类似的事情?

关于之前的答案:DS18B20 是一个数字传感器 - 它在本地读取读数,将其存储在本地,尽管单独的读取过程在它所连接的 OneWire 总线上以数字方式传输结果(通常为 12 位分辨率)。向主机传输读数对电压不敏感(因为不同的电压将代表不同的温度值)。然而,电压问题会破坏信号。

-127C 读数实际上是从 OneWire 总线代码返回 0xFF(即 1111 1111),这是来自总线的错误,它未能从 DS18B20 接收读数。作为 -127 的十进制有符号整数。

对于异常读数(似乎在数字上有效),我没有确切的根本原因答案,但经历过并解决了类似的问题。

在我的情况下,较长电缆上的特定传感器(约 20m)在与他人共享巴士时和单独使用时偶尔会返回 80c(而对于集水箱中的水温而言,通常的范围是 15-25)。

我起初虽然它是由不匹配的信号反射引起的数字损坏,尤其是当与较短的运行混合时,但是这应该已经在 CRC 中检测到并且隔离到单个总线时问题仍然存在。

有趣的是,我将问题缩小到电线温度的快速热变化(一个小时左右从 20C 下降到 10C),即使 DS 保持非常稳定,浸入 20K 升水中也是如此。我把这归结为电压供应线上的电导率的轻微变化。(如果它与信号线相关,则 CRC 应该再次捕获它)。这很可能与您的风扇激活类似。

我已经通过两种电气方式(尽管两者都不是 100% 可靠)和一种软件方式解决了这个问题。

在电气上,将上拉电阻放置在传感器附近(而不是在总线终端处)通常在总线错误(避免 -127s)方面提供更稳定的结果。另一种电气解决方案是增加电源电压以补偿长期运行至 5.2v,并将总线端电阻降低至 2.2K。这几乎摆脱了奇怪的 80C 读数,但并非完全如此。

在软件方面,我接受了不可靠性的处理,并实施了一些健全性检查,如果结果出现明显错误,那么我的系统(每 2 分钟轮询一次),简单地重复之前的有效结果并发出警告。

我的软件健全性检查包括:适用于我所有传感器的可能有效值 (> -5 < 70) 的基本范围检查;并使用可调时间窗口检查自上次有效结果以来的越界增量变化(如果一系列无效结果继续超过该窗口 - 在这种情况下,我接受下一个有效范围值作为真正有效)。考虑到您的风力机可能触发的快速变化,这可能合适也可能不合适。

另一个可能不容忽视的是,您可能只有一个不可靠的传感器。