HTS221是ST公司的一款数字温湿度传感器,具有±3.5%RH(在20%~80%范围内)和±0.5℃(在15℃~40℃范围内)精度,湿度和温度的分辨率都是16位,和同类数字温湿度传感器相比精度不算高,特点是体积小分辨率高(像sensirion、silabs的传感器湿度一搬为12位分辨率,温度为14位分辨率,只有TI的HDC1080湿度可以达到14位分辨率)。
HTS221不仅封装和其它传感器不同,操作方法也非常特别,传感器除了包含10个用于配置和读取温湿度数据的寄存器外还包含9个校准寄存器CALIB_0…F,用来存放芯片出厂时的校准数据。
在计算温湿度时并不能像同类传感器那样直接读取H_OUT和T_OUT然后通过相应公式转换,HTS221在计算温湿度时还必需要读取校准寄存器的数据,通过校准寄存器中预先保存的2组温度和对应的ADC输出码结合当前采集的ADC输出通过线性插值法计算出当前ADC输出对应的温度,计算湿度的方法和温度相同。
从上图中可以看出HTS221在出厂时采集了2个温度下对应的ADC输出,T0_OUT对应的温度是T0_DegC,T1_OUT对应的温度是T1_DegC,Tx_DegC的摄氏温度通过T0_degC_x8除8获得,具体为什么要乘8储存还不太清楚,已经发贴提问。
和ST的其它传感器一样,HTS221支持SPI和I2C两种通信方式,使用I2C时的器件地址是0x5F,加上读写位对应的读地址是0xBF,写地址是0xBE,寄存器地址为8位长度,总线速度最高可支持3.4 Mbit/s,I2C支持单字节读写和连续读写,需要注意的是连续读写时寄存器地址的第7位必需为1,否则所有读取到的数据都是第一个寄存器地址的数据。
HTS221的有效寄存器地址从0x0F开始,第一个寄存器是WHO_AM_I,对应的数据为0xBC,第二个寄存器是AV_CONF,用来设置温湿度传感器采集数据时的用于求平均值的样本数,温度默认是16个,湿度是32个,不同的平均样本数对应不同的输出噪声和功耗,样本数越多噪声越低,同时功耗越高。
CTRL_REG1~CTRL_REG3用于配置HTS221的工作模式,CTRL_REG1的第7位PD用来控制传感器开关模式,默认为掉电模式,使用时需要将此位置1;第2位BDU用来控制输出寄存器数据更新的方式,为0时为连续更新,为1时只有通过总线将输出寄存器的数据读取完以后才会将新的数据更新到输出寄存器;
CTRL_REG1第0位和第1位为输出速率选择,默认为One-shot,即单次转换模式,需要将CTRL_REG2的第0位写1使能转换,转换完成后CTRL_REG2的第0位会由硬件清零; CTRL_REG2的第7位为BOOT,当此位为1时校准数据从FLASH复制到对应的寄存器,第1位为加热器使能,此位为1时启动内部加热器,不同的电源电压对应不同的加热电流:
CTRL_REG3用来控制DRDY引脚,第7位用来设置DRDY引脚在数据装载到输出寄存器后DRDY的引脚切换到高电平还是低电平,第7位用来使能DRDY引脚的上下接电阻,第2位用来控制DRDY引脚的使能;
STATUS_REG为状态寄存器,当湿度数据保存到输出寄存器后第1位置1,温度数据保存到输出寄存器后第0位置1,在数据被读取后对应的位置0,直到下一个数据再被保存到输出寄存器后此位在被置1。
HUMIDITY_OUT和HUMIDITY_OUT寄存器对应温湿度的ADC输出,一共16位使用二进制补码格式,计算温湿度时需要配合校准寄存器的数据一起使用。
校准寄存器的H0_Rh_x2 和H1_Rh_x2为2个8位寄存器,表示2个湿度值,T0_degC_x8和T9_degC_x8和T1/T0 msb组成2个10位寄存器,表示2个温度值,单位是摄氏度;
H0_T0_OUT是在T0_degC的温度下,湿度为H0_Rh时ADC输出的湿度值,H1_T0_OUT是在T1_degC的温度下,湿度为H1_Rh时ADC输出的湿度值,T0_OUT是温度在T0_degC时的ADC输出的温度值,T1_OUT是温度在T1_degC时的ADC输出的温度值。