文章目录
下载工程文件:
https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151-c8-t6
MCU:STM32L151C8T6-A
IDE:MDK-Keil5
固件库:STM32Cube FW_L1 V1.10.1
0、前言
关于传感器的介绍比较长,对其有一定了解的同学可以直接从第三部分看起。
1、传感器介绍
1.1、传感器简介
SHT30是盛世瑞出品的低端低价温湿度传感器,使用I2C协议进行数据传输,具有两个可选地址,宽电源电压输入支持从2.4V到5.5V。
▲ SHT3x传感器简介
1.2、传感器板原理图
▲SHT3x 传感器板原理图
1.3、传感器引脚定义
▲ SHT3x传感器官方文档引脚定义
Pin | Name | Comments |
---|---|---|
1 | SDA | 数据引脚,输入/输出 |
2 | ADDR | 地址引脚,输入 |
3 | ALENT | 报警引脚,输出;不使用时悬空 |
4 | SCL | 时钟引脚,输入/输出 |
5 | VDD | 电源引脚,输入 |
6 | nRESET | 复位引脚,低电平有效,输入 |
7 | R | 无用引脚,接地 |
8 | VSS | 接地引脚 |
▲传感器引脚定义翻译
通过改变ADDR
引脚的电平值可以改变器件的地址,通过1.2中的原理图可以发现该板上传感器的地址为0x44
▲ SHT3x传感器官方文档地址设定
1.4、数据采集工作流程
1.4.1、单次数据采集模式
数据传输流程:
(1)STM32
发出START
,并发出I2C
的地址(7位)+读(1)/写(0)
标志位,然后等待SHT30
的ACK
(2)发出命令高8位数据
,等待SHT30的ACK
(3)发出命令低8位数据
,等待SHT30的ACK
(4)STM32
发送STOP
停止通信。
(5)STM32
发出START
,并发出I2C的地址(7位)+读(1)/写(0)标志位
,然后等待SHT30的ACK
(6)传感器将接收读头的接收,并发送两个字节的数据(温度),接着是一个字节的CRC
校验和
(7)传感器发送两个字节的数据(相对湿度),然后是一个字节的CRC
校验和。
值得注意的是如果IIC主机
对任何数据字节不感兴趣,I2C数据字节之后以NACK条件中止
读取传输在随后的数据中。
关于命令发送:
▲ 单次数据采集模式的测量命令
通过配置发送的指令我们可以控制传感器的工作模式和数据精度,单次数据采集模式的可配置选项有重复性和有无时钟延展。例如:0x2C06
: 表示高重复精度和时钟延展的使用。
什么是时钟延展?
如果使用时钟延展模式意味着要主机要做超时等待。
值得注意的是在写方向上,必须传输校验和,因为SHT3x-DIS
只接受数据,如果数据后面跟着正确的校验和。
1.4.2、周期型数据采集模式
(1)设置周期型数据采集模式
(2)发送中断命令中断采集/发送数据采集命令
(3)进入单次数据采集模式/传回数据(无数据传回NACK)
▲ 周期性数据采集模式的测量命令
周期数据采集模式的测量命令(白色块由微控制器控制,灰色块由传感器控制)。 N.B:在最高的MPS设置传感器的可能存在发热现象。
mps
:每秒发送数据的次数,举个栗子:当我需要高精度数据且需要每秒发送两次数据时我需要发送0x2236命令给从机。
1.5、其他指令
其余命令仅作简单介绍,欲知详情可查阅官方数据手册。
1.5.1、ART (accelerated response time)指令
在发出ART命令后,传感器将开始获取频率为4Hz的数据。
▲ ART指令
1.5.2、中断命令/停止周期性数据采集模式
当接收到中断命令时,传感器进入单次数据采集模式,在完成正在进行的测量之后。 这可能需要15ms,这取决于所选择的重复性。
▲ 中断命令/停止周期性数据采集模式
1.5.3、复位
软复位:
迫使系统进入定义良好的状态,而不移除电源。 当系统处于空闲状态时,可以将软复位命令发送到SHT3x-DIS。 这将触发传感器重置其系统控制器并从内存中重新加载校准数据。
▲ 软件重置指令
通过IIC呼叫复位:
▲ 通过IIC呼叫复位指令
通过n重置销复位:
将nRESET
引脚拉低(见表6)会产生类似于硬复位的复位。 该n复位引脚是内部连接到VDD通过一个拉起电阻,因此有源低。 必须将n重置引脚拉低至少350ns以产生传感器的重置。
硬复位:
一个硬复位是通过切换电源电压到VDD引脚关闭,然后再打开。 为了防止传感器在ESD二极管上供电,还需要去除引脚1(SDA)、4(SCL)和2(ADDR)的电压。
1.5.4、加热
加热器可按命令开关,见下表。 状态列在状态寄存器中。 重置后,加热器被禁用(默认条件)。
▲ 加热指令
1.5.5、状态寄存器
▲ 状态寄存器读取指令
▲ 状态寄存器的组成
▲ 清空寄存器读取指令
1.6、使用注意事项
▲ 数据手册原文
该传感器在推荐的正常温度和湿度范围内分别为5°C-60°C
和20%RH-80%RH
时显示出最佳的性能。 长期暴露在正常范围以外的条件下,特别是在高湿度下,可能会暂时抵消RH信号(例如:在保持在>80%RH的环境下60小时后测量数据会+3%RH)
。 在恢复到正常的温度和湿度范围后,传感器将自行缓慢地恢复到校准状态。 长期暴露在极端条件下可能会加速衰老。
2、程序实现注意事项
2.1、关于CRC校验
每个数据字后传输的8位CRC校验和由CRC算法生成。 其属性如表19所示。 CRC包含两个先前传输的数据字节的内容。 为了计算校验和,只使用这两个先前传输的数据字节。
▲ IIC CRC属性
2.1、关于传感器原始数据转化为温湿度
测量数据总是以16位值(无符号整数)的形式传输)。 这些值已经线性化,并补偿了温度和电源电压的影响。 将这些原始值转换为物理标度可以使用以下公式实现。
▲ 数据转化公式
S R H S_{RH} SRH和 S T S_T ST分别表示湿度和温度的原始传感器输出。 只有在十进制表示中使用