如何将值转换为传感器的温度?

时间:2014-09-01 11:54:53

标签: c sensor i2c temperature

我正在研究ST温度传感器(hts221),我使用I2C命令与传感器通信。 我是新来的......

我已引用Data sheet for HTS221,并从Sensor获取值。 但我不知道如何将该值转换为实际温度。

从传感器获取的值如下:

Read HTS221 TEMP_OUT_L: 0x2a value is 0x15
Read HTS221 TEMP_OUT_H: 0x2b value is 0xFF
Read HTS221 T0_degC_x8: 0x32 value is 0xBF
Read HTS221 T1_degC_x8: 0x33 value is 0xBF
Read HTS221 T1/T0 msb: 0x35 value is 0x4
Read HTS221 T0_OUT-3C: 0x3C value is 0x0
Read HTS221 T0_OUT-3D: 0x3D value is 0x0
Read HTS221 T1_OUT-3E: 0x3E value is 0x0
Read HTS221 T1_OUT-3F: 0x3F value is 0x0

温度寄存器的描述如下图所示。

enter image description here

它给出了校准系数和温度转换的例子,如下图所示,但我仍然明白其含义。 enter image description here enter image description here

有人可以教我如何将上述值转换​​为传感器的温度吗? 我不知道这个...... 提前谢谢。

1 个答案:

答案 0 :(得分:3)

您需要阅读以下校准寄存器:

T0_degC_x8  (Calibration register 32)
T1_degC_x8  (Calibration register 33)
T1_T0msb    (Calibration register 35)
T0_OUT      (Calibration register 3C and 3D)
T1_OUT      (Calibration register 3E and 3F)

T0_degC_x8和T1_degC_x8是10位值,因此您需要从寄存器35中获取最后2位。

然后只需简单插值即可得到测量温度:

double T_DegC;
double T0_degC = (T0_degC_x8 + (1 << 8) * (T1_T0msb & 0x03)) / 8.0; 
double T1_degC = (T1_degC_x8 + (1 << 6) * (T1_T0msb & 0x0C)) / 8.0; // Value is in 3rd and fourth bit, so we only need to shift this value 6 more bits.
T_DegC = (T0_degC + (T_OUT - T0_OUT) * (T1_degC - T0_degC) / (T1_OUT - T0_OUT)); 

注意:

寄存器编号是十六进制的,因此寄存器32,33和35实际上是寄存器0x32,0x33和0x35。