This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] HDC2010:数据读数损坏

Guru**** 1138100 points
Other Parts Discussed in Thread: HDC2010
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1187654/hdc2010-corrupted-data-readings

器件型号:HDC2010

您好!

需要您的支持来更好地解决问题。

我们使用 HDC2010、使用时间超过一年、但在2-3个月之前首次读取错误值。

您可以在下面附加的图片中看到它。

我检查了 i2c 通信、它是稳定的。 速度为90kHz、电压也不错。

我想问您我的解决方案是否好?

我决定降低器件工作条件、因此如果温度高于或等于0摄氏度、低于或等于60摄氏度、则接受有效温度。

如果我的软件检测到无效温度、则执行 HDC2010软件复位(将0x80写入寄存器。 0x0E)。

您对我的问题解决方案有何看法?

此致、

Martin Peevski

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:  

    感谢您发帖-我想如果您能分享 I2C 通信和原理图的截屏、那将不胜感激。

    问题可能包括(以及相关的常见问题解答):  

    1.在软件复位后等待的时间(与某些其他供应商器件不是真正需要的)-在发出软件复位时、您在尝试与器件通信之前需要至少300uSec 的延迟时间。   

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/878720/faq-hdc2080-hdc2010---how-long-must-i-wait-after-powering-up-the-hdc20x0-family-sensor-for-good-data-to-be-returned-by-sensor-first-read?tisearch=e2e-sitesearch&keymatch=HDC2010#

    2.您没有等待足够长的时间来开始进行有效的测量-您实际上可能总是落后于测量、并且当您更改了一些触发点时、您可能已经在固件中发现了"错误"。 这也可以在逻辑分析仪或输出日志上轻松捕获、作为第一次读取、在这里会显示为常见问题解答中所述的内容。  

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/878721/faq-hdc2080-hdc2010---i-am-getting-incorrect-values-for-example--40c-or-0-rh-or-both-from-hdc-device-for-my-first-read-or-for-any-read-how-to-troubleshoot-the-problem?tisearch=e2e-sitesearch&keymatch=HDC2010# 

    此外、如果您可以在发生错误时读取寄存器0x04至0x0F、这也会很有帮助-如果寄存器损坏、这将使我们看到我在该主题末尾概述的解决方案。  

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/879641/hdc2080-taking-more-time-for-data-ready 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Josh:

    感谢您的努力。 这是我们的部分原理图的截图:

    关于复位-我仅在检测到无效数据时复位 HDC2010。 Тhat 我的创新是从无效数据中恢复、但仍然不知道这是否有用、我问了您。  此外、在复位后等待定义的时间、以便开始传感器通信。

    我无法连接 i2c 通信、因为我没有相应的工具、但我将介绍 HDC2010测量过程。

    简要:

    传感器持续通电。

    -我通过将0x61写入寄存器0x0F 来定期开始测量。

    -等待3ms 并直接读取温度和湿度寄存器。

    此致、

    Martin Peevski

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    马丁-  

    感谢您的回复和抽签。  

    如果您正在编写固件或设计在通信总线上运行的硬件、我强烈建议您使用逻辑分析仪。  

    我们使用的设备: https://usd.saleae.com/products/saleae-logic-pro-16 、 https://digilent.com/shop/test-and-measurement-equipment/usb-oscilloscopes-analyzers-and-signal-generators/ 

    至少、尝试访问多通道的示波器、以查看您的时序。  

    我还建议您在器件附近的原理图中为 I2C 放置上拉电阻器。

    接下来-我很好奇为什么您将器件设置为0x61。 这是11位温度和9位%RH? 这是一个有效的设置、但我想了解  降级测量的用例。 上电后的等待时间为3mSec。 软复位后的等待时间为300uSec、您选择使用的分辨率的典型转换时间为625uSec。 这意味着您已经等待了大量时间来完成转换。  

    您可以尝试一种技术、因为在这里 、我们对实际发生的情况(不使用分析仪)有点盲目-在继续读取 temp 和%RH 寄存器之前、将使用读取寄存器0x04作为状态。 这基本上会阻止所有这些错误、并且在该寄存器为0x80之前不会返回值。 在这里、您要么会陷入无限循环、要么会"解决"问题。  

    看起来像这样(单击图像以放大)

    这里我向您展示了如何发出0x01到0x0F、等待1.3mSec (因为我在默认14位模式下使用该器件)、获取 IRQ、读取0x04、获取0x80、然后读取0x00到0x03以获取 temp 和%RH、然后从 UART 打印。 (这是使用 Saleae LSA)-在这里、您没有将器件的 DRDY 线路连接到控制器、但您可以像这样等待、然后在循环中读取0x04、直到您获得0x80 (这应该是第一次)、然后读出测量值。  

    您可以打印任何 UART 来帮助您解决此问题吗? 您是否仍然可以读出0x04到0x0F 并打印出来(出错时)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复、Josh、

    我降级测量值、因为这对于器件来说足够了、并且消耗的能量更少。 我们由电池供电。

    我进行了软件更改、现在我正在等待 HDC2010复位、当读取温度高于60摄氏度或低于0摄氏度时、是否会修复该问题。 我使用 UART 打印记录所有重要内容。

    我不喜欢先检查0x04寄存器、因为我在这里看到了无限循环的主题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    马丁-  

    好的-感谢您的更新。 读取寄存器0x04是一个故障排除步骤(在本例中)、也是一个一般的良好设计实践、您可能需要考虑更长的时间。 我还将在此向您指出、即使在14位条件下、此器件的电流也比 SHTC3 (您也可以使用)少10倍、测量时间也减少10倍。 您可能无法降级 HDC2010传感器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Josh:

    感谢您的回答。 如果 HDC2010软件复位不能修复无效数据读数、我会让您湿透。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的-谢谢!