【STM32】【STM32CubeMX】STM32CubeMX的使用之四:IIC总线协议驱动SHT30温湿度传感器


  下载工程文件:
  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)标志位,然后等待SHT30ACK
  (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°C20%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分别表示湿度和温度的原始传感器输出。 只有在十进制表示中使用

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值