目录
概述
1 认识SHT20
1.1 SHT20介绍
1.2 SHT20属性
1.3 接口介绍
1.4 SHT20的相关命令
1.5 转换时间
2 寄存器操作
2.1 复位操作
2.2 User Register
2.3 CRC Checksum
3 温湿度计算
3.1 相对湿度转换
3.2 温度换算
3.3 转换公式的C语言实现
概述
本文主要介绍SHT20传感器的相关内容,包括SHT20的属性,相关的操作命令,还介绍了其和MCU操作之间的时序特点,还介绍了温湿度转换相关的关系。
1 认识SHT20
1.1 SHT20介绍
盛思锐SHT20温湿度传感器在外形方面已经成为行业标准了吗智能:嵌在可回流焊双管中扁平无引线(DFN)封装3 × 3mm的足迹和1.1毫米高度,它提供校准,线性化的传感器数字信号,I2C格式。SHT2x湿度传感器包含电容式湿度传感器传感器,是带隙温度传感器和专业传感器模拟和数字集成电路-所有在一个单一CMOSens®芯片。这产生了一个无与伦比的传感器性能方面的准确性和稳定性以及最小的功耗。每个传感器都经过单独校准和测试。很多识别被印在传感器和电子设备上识别码存储在芯片上——这是可以的按命令读出。此外,sht2X可以通过命令改变(8/12bit到12/14bit)对于RH/T)和校验和有助于改进通信的可靠性。有了这组功能和经过验证的可靠性和长期稳定。SHT2x传感器提供卓越的性价比。
1.2 SHT20属性
1)湿度特性
2)温度特性
1.3 接口介绍
一个简单的设计电路:
1)电源
SHT2x的供电电压必须在2.1 -范围内3.6V,建议供电电压为3.0V。电源引脚电源电压(VDD)和地(VSS)必须用100nF电容解耦,该电容应放置在尽可能靠近传感器的地方。
2)Serial clock (SCL)
SCL用于同步单片机与传感器之间的通信。由于接口由完全静态逻辑组成,因此没有最小的SCL频率。
3)Serial SDA (SDA)
SDA引脚用于在传感器内外传输数据。为了向传感器发送命令,SDA在SCL的上升沿上有效,并且在SCL高时必须保持稳定。SCL下降沿后,SDA值可能发生变化。为了安全通信,SDA应分别为有效的tSU和tHD,分别在SCL上升沿之前和下降沿之后-见图12。对于从传感器读取数据,SDA在SCL降低后是有效的tVD,直到SCL的下一个下降沿保持有效。
1.4 SHT20的相关命令
通信有两种不同的操作模式带传感器:保持主模式或无保持主模式模式。在第一种情况下,SCL线路被堵塞(受控通过传感器)在测量过程中,而在后者中如果SCL线路仍对其他通信开放而传感器正在处理测量。不要等待主模式允许处理其他I2C传感器工作时总线上的通信任务测量。两种模式的通信序列分别显示在图15和图16中。在保持主模式下,SHT2x下拉SCL在测量过程中,线路会强制主站进入等待状态。通过松开SCL线,传感器指示内部处理终止,传输可能继续的。
模式一:保持主通信序列
模式二:否保持主通信顺序
1.5 转换时间
测量的最大持续时间取决于所选择的测量类型和分辨率-值显示在下表中。对于MCU的通信规划,需要选择最大值。
请注意:I2C通信允许重复启动条件(S),而无需关闭具有停止条件(P)的先验序列。但是,任何具有相邻Start条件的序列都可以选择使用Stop条件关闭。
2 寄存器操作
2.1 复位操作
该命令用于重新启动传感器系统,而不需要再次开关电源。接收到此命令后,传感器系统根据默认设置重新初始化并开始运行-除了用户寄存器中的加热器位。软复位时间小于15ms.
2.2 User Register
User Register的内容如下表所示。请注意,保留位不能更改,相应保留位的默认值可能会随时间而更改,恕不另行通知。因此,对于任何对用户寄存器的写入,必须首先读取保留位的默认值。此后,完整的User Register字符串由各自保留位的默认值和剩余的可访问位(可选地使用默认值或非默认值)组成。
操作时序如下:
2.3 CRC Checksum
SHT2x为错误检测提供CRC-8校验和。使用的多项式是x8 + x5 + x4 +1。有关详情及实施,请参阅申请须知“SHT2x的CRC校验和计算”。
static int sht2xdrv_CheckCrc(unsigned char data[], unsigned char nbrOfBytes, unsigned char checksum)
{
uint16_t res = 0;
uint16_t crc = 0;
uint16_t byteCtr;
//calculates 8-Bit checksum with given polynomial
for (byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr)
{
crc ^= (data[byteCtr]);
for (uint8_t bit = 8; bit > 0; --bit)
{
if (crc & 0x80)
{
crc = (crc << 1) ^ POLY;
}
else
{
crc = (crc << 1);
}
}
}
if (crc != checksum)
{
res = 1;
}
return res;
}
3 温湿度计算
3.1 相对湿度转换
相对湿度信号输出SRH,相对湿度RH由下式得到,结果为%RH,无论选择哪种分辨率:
3.2 温度换算
无论选择哪种分辨率,将温度信号输出ST代入下式(结果为°C)即可计算温度T:
3.3 转换公式的C语言实现
static int sht2xdrv_CalcTemperatureC(int u16sT)
{
int temperatureC; // variable for result
u16sT &= ~0x0003; // clear bits [1..0] (status bits)
/*
* Formula T = -46.85 + 175.72 * ST / 2^16 from data sheet 6.2,
* optimized for integer fixed point (3 digits) arithmetic
*/
temperatureC = ((17572 * u16sT) >> 16) - 4685;
return temperatureC;
}
static int sht2xdrv_CalcRH(int u16sRH)
{
int humidityRH; // variable for result
u16sRH &= ~0x0003; // clear bits [1..0] (status bits)
/*
* Formula RH = -6 + 125 * SRH / 2^16 from data sheet 6.1,
* optimized for integer fixed point (3 digits) arithmetic
*/
humidityRH = ((12500 * u16sRH) >> 16) - 600;
return humidityRH;
}