=============================
2022-9-2
=============================
一.I²C接口设备之SHT30
1.SHT30传感器的简介
在我们使用的STM32F103开发板上有两个用来采集温湿度的传感器
DHT11和SHT30
DHT11传感器属于入门级别的传感器(做实验时会经常使用的传感器)
SHT30传感器属于工业级传感器(做产品时会经常使用的传感器)
2.从官网中查找资料
1)测量范围 湿度:0%-100% 温度:-40℃ - 125℃
2)误差范围 湿度:±2% 温度:±0.2℃
3)通过温度的误差发现
SHT30传感器,既可以采集到整数数据,也可以采集到小数数据
4)SHT30传感器是I²C的接口
3.通过手册了解SHT30
打开<STM32RBT6\DataSheet\传感器>目录下<sht30_datasheet.pdf>
1)8管脚的封装形式
2)SHT30传感器本身是模拟型的传感器,
内部自带AD转换,可以自行转换
3)两种设备地址
---------------------------------------------
手册中的描述
如果ADDR管脚接VSS(接地) 使用的是设备地址A 0x44
如果ADDR管脚接VDD(接电) 使用的是设备地址B 0x45
---------------------------------------------
分析内容
设备地址A 0x44 转换成二进制 01000100
设备地址B 0x45 转换成二进制 01000101
因为I²C总线规定设备地址是7bit的,最低位是读写标志位
但是手册中说的设备地址A和设备地址B最低位被占用了
所以0x44和0x45并不是最终的设备地址
因为0x44和0x45最低位被占用了,
用来区分设备地址A和设备地址B的,但是最高位没有被占用
需要把设备地址A和设备地址B都左移一位
设备地址A 01000100 << 1 10001000 0x88
设备地址B 01000101 << 1 10001010 0x8A
所以最终的设备地址是
设备地址A 0x88
设备地址B 0x8A
---------------------------------------------
上述的内容将来在很多的嵌入式设备中都会碰到,要多留一个心眼!
---------------------------------------------
4)经过开发板原理图的分析
ADDR管脚连接了GND,所以我们开发板上的SHT30的设备地址是
0x88
5)设置采样频率
需要发送采样的指令 0x2737
1>产生开始信号
2>发送设备地址 + 写的标志(0x88)
3>等待ACK
4>发送采样指令的高字节(0x27)
5>等待ACK
6>发送采样指令的低字节(0x37)
7>等待ACK
8>产生结束信号
6)发送读取数据的指令
读取数据的指令 0xE000
1>产生开始信号
2>发送设备地址 + 写的标志(0x88)
3>等待ACK
4>发送读取数据指令的高字节(0xE0)
5>等待ACK
6>发送读取数据指令的低字节(0x00)
7>等待ACK
7)读取数据
1>产生开始信号
2>发送设备地址 + 读的标志(0x89)
3>等待ACK
4>读取温度的高字节数据
5>产生ACK
6>读取温度的低字节数据
7>产生ACK
8>读取校验字节
9>产生ACK
A>读取湿度的高字节数据
B>产生ACK
C>读取湿度的低字节数据
D>产生ACK
E>读取检验字节
F>不产生ACK
G>产生结束信号
8)读取出的数据不能直接使用,需要转换
需要把温度的高字节和低字节的数据拼成一个2byte的数据
需要把湿度的高字节和低字节的数据拼成一个2byte的数据
代入公式转换
湿度 = 100 * (double)(2byte湿度数据) / 65535;
温度 = -45 + 175 * (double)(2byte温度数据) / 65535;
9)最终结果的显示
可以通过USART1或者OLED显示出来
==============================
任务
1.和同组的同学串一遍手册分析出的内容
2.搞一个新的项目工程,写SHT30的驱动程序
==============================