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.

[参考译文] HDC1080温度精度

Guru**** 2553260 points
Other Parts Discussed in Thread: HDC1080

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/632180/hdc1080-temperature-accuracy

主题中讨论的其他器件:HDC1080

我们在设计中将 HDC1080用作温度传感器。

我们最近已将器件发送到外部验证测试、结果显示误差为0.54C (25°C 时)。

这似乎与手册中指定的精度额定值(典型值+-0.2C、最大值+-0.4C)相矛盾。

我的问题如下:

1.此温度传感器的精度是否存在任何已知问题?

2.每个传感器是否经过出厂校准、或者我们是否需要自己执行一些校准? 如果是后者、有没有标准方法可以这样做?

以下是我们使用的转换例程。 正确吗?

双转换 HdcTemperatureToCelsius (_i_ char * raW_DATA)

短 sVar;
双 DVAR;

//恢复字节顺序,因为 HDC 在大端字节序中工作。
*(((char *)&sVar)+ 0)= raW_DATA[1];
*(((char *)&sVar)+ 1)= raW_DATA[0];

DVAR =(双倍) sVar;

如果(DVAR < 0)

DVAR =(1 << 16)+ DVAR;//寄存器应为*正* 16位数字。


返回((DVAR /(1 << 16))* 165 - 40);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Tal、
    请在下面查找一些注释:

    1.温度传感器上没有已知问题。 如数据表中所述、在5C 至60C 度范围内、它应为+/-0.4C。
    不应要求 IC 自行进行校准、因为规范很明确、但根据以下情况、有些系统实现可能需要进行校准:
    (a)由于放置或隔离技术不理想、HDC1080器件附近的热源。
    (b)由于采样率而产生的自发热。

    请在下面找到有关此主题中止的应用手册。
    www.ti.com/.../snaa297a.pdf

    3.你的例行程序似乎正确,但请允许我在接下来的24-48小时内答复你,确认。

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

    您好 Tal、

    我验证了系统上的代码、并发表了一些意见:

    #include 
    #include 
    
    /* raW_DATA 和 sVar 应该是无符号的。 -REN */
    double ConvertHdcTemperatureToCelsius (unsigned char * raW_DATA)
    {
    unsigned short sVar;
    double DVAR;
    
    //恢复字节顺序、因为 HDC 在大端字节序中工作。
    /*我理解此处的目标内容,但我不明白为什么我需要在系统上反转订单。
    在不同的架构中、这种指针操作可能不安全。
    我建议改用
    sVar =(无符号短整型) raW_DATA[1]<< 8 | raW_DATA[0];
    -REN */
    *(((char *)&sVar)+ 0)= raW_DATA[0];
    *((((char *)&sVar)+ 1)= raW_DATA[1];
    
    DVAR =(double) sVar;
    
    /*如果
    (DVAR < 0)
    {
    DVAR =(1 << 16)+ DVAR;//寄存器应为*正* 16位数
    ,则不需要此函数。}
    */
    return ((DVAR /(1 << 16))* 165 - 40);
    }
    
    void main ()
    {
    double dt;
    unsigned char CT[]={0xBF、0x63};
    dt = ConvertHdcTemperatureToCelsius (CT);
    printf ("dt:%f"、dt);
    } 

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

    非常感谢您的快速回复!

    根据您的答案和更多的测试、我们现在认为问题在于外壳塑料导致的热隔离。

    我们将进一步调查并再次询问您是否还有疑问。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    任您好、

    感谢您的详细回答。

    我理解您的意见、并同意您的建议可能会使例行程序"更干净"、更便于携带。

    但是、我的主要目的是确保我们的转换产生正确的结果、如果我正确理解您的观点、就会得到正确的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tal、

    我遇到的唯一问题是字节交换。 在我的系统上、它导致字节未被交换。 如果您的温度结果是合理的、那么您的系统必须以不同的方式处理此问题。