快捷搜索:  汽车  科技

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)图1是开发板上的SHT20传感器,尺寸很小,它的引脚定义见表3。表2 温度性能参数了解一款传感器,最全面而准确的当然是阅读官方提供的数据手册,这也是学习者应该锻炼的能力。这款传感器已在众多产品上使用,因此在搜索引擎里很方便就能获得中文数据手册。手册里信息很多,这里摘出一些必要的关键信息。每一个SHT20传感器出厂前都经过了校准和测试,能够输出经过标定的数字信号,且采用标准I2C格式。SHT20的工作电压范围在2.1V~3.6V之间,温度和湿度的分辨率默认是14bit和12bit,也可以向其寄存器输入命令改成13/10bit、12/8bit、11/11bit,其主要参数如表1和表2所示。SHT20传感器还可以对输出的温湿度数据进行校验,有助于提高通信的可靠性。表1 相对湿度性能参数

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分享出来,如果您正是一名单片机爱好者或是一名同行,欢迎点赞 关注,各位的支持是本人持续输出的动力,多谢多谢!#30天学会STM32##STM32单片机##单片机#

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(1)

SHT20是一款性价比很高的温湿度传感器模块,内部集成了电容式湿度传感器、带隙温度传感器和专用模拟和数字集成电路,具有良好的精度、长期稳定性和超低功耗。其最受欢迎的地方在于,它是通过I2C总线实现功能配置和送出数据,数据格式简单,编程方便。因此,前面的“I2C通信入门”也是为了该传感器的应用进行铺垫。

【学习目标】

  1. 继续锻炼阅读器件数据手册的能力
  2. 了解SHT20的工作模式和数据规范
  3. 模仿和学习功能时序向驱动代码的转换

本章关注如何调用前面编写的I2C驱动程序来完成对SHT20的读写,为了不让篇幅太长,本章打算分两个部分来讲解,本文是第一部分。

一、SHT20关键特性与引脚定义

了解一款传感器,最全面而准确的当然是阅读官方提供的数据手册,这也是学习者应该锻炼的能力。这款传感器已在众多产品上使用,因此在搜索引擎里很方便就能获得中文数据手册。手册里信息很多,这里摘出一些必要的关键信息。

1.1 关键特性

每一个SHT20传感器出厂前都经过了校准和测试,能够输出经过标定的数字信号,且采用标准I2C格式。SHT20的工作电压范围在2.1V~3.6V之间,温度和湿度的分辨率默认是14bit和12bit,也可以向其寄存器输入命令改成13/10bit、12/8bit、11/11bit,其主要参数如表1和表2所示。SHT20传感器还可以对输出的温湿度数据进行校验,有助于提高通信的可靠性。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(2)

表1 相对湿度性能参数

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(3)

表2 温度性能参数

1.2 产品外观与引脚

图1是开发板上的SHT20传感器,尺寸很小,它的引脚定义见表3。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(4)

图1 开发板上的SHT20外观与尺寸

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(5)

表3 SHT20的引脚定义

二、SHT20的数据通信

对于编程来说,传感器与单片机的数据通信才是我们最关心的。我们已经了解了I2C通信的时序,但还不够。怎么启动测量?测量湿度还是温度?测量精度是多少?二进制的数据与温湿度是如何换算的?如何保证测得的数据是准确的?这些问题就不是I2C通信时序层面的事了,而是SHT20这个器件本身特性了,只有它的数据手册才能解答。

2.1 启动传感器

首先,将传感器上电,电压为VDD电源电压(2.1V~3.6 V)。上电后,传感器最多需要15毫秒时间(此时SCL为高电平)以达到空闲状态,即做好准备接收由主机发送的命令。

2.2 启动/停止时序

每个传输序列都以Start(S)状态作为开始并以Stop(P)状态作为结束,这两种时序的要求我们已经在“I2C通信入门”介绍过,这里不再赘述,就给出时序图2。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(6)

图2 I2C起始和停止时序

2.3 发送命令

在启动传输后,随后传输的首字节包括7位的SHT20设备地址(0b1000000,即0x40)和一个读/写控制位(1为读,0为写)。在第8个SCL时钟下降沿之后,通过拉低SDA(ACK应答),指示传感器数据接收正常。在发出测量命令之后(见表4的前4行),STM32必须等待测量完成。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(7)

表4 SHT20基本命令集

2.4 主机/非主机模式

我们可以从表4中看到,触发温湿度测量时有两种不同的方式:主机模式或非主机模式,但笔者觉得这样的名字容易与I2C的主机和从机混淆。这里明确一下,从I2C总线上看,STM32一直是主机,SHT20一直是从机。但是,单从SHT20来看,所谓的主机模式是指在测量的过程中,SCL被封锁(由传感器进行控制);而非主机模式是指当SHT20在执行测量任务时,SCL仍然保持开放状态,可进行其他I2C总线通信任务。

主机模式的通信时序如图3所示,SHT20将SCL拉低强制STM32进入等待状态。通过释放SCL,表示传感器内部处理工作结束,进而可以继续数据传送。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(8)

图3 SHT20的主机模式通信时序

非主机模式的通信时序如图4所示,STM32需要对传感器状态进行查询。如果内部处理工作完成,STM32查询到传感器发出的确认信号后,相关数据就可以进行读取。如果测量处理工作没有完成,传感器无确认位(ACK)输出,此时必须重新发送启动传输时序。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(9)

图4 SHT20的非主机模式通信时序

无论哪种传输模式,也无论使用何种分辨率,数据中低字节的后两位(bit43和bit44)都固定用来表示状态信息,这两个状态位中的bit1表明测量的类型(0表示温度,1表示湿度),bit0当前没有赋值。另外,所需的最长测量时间取决于温度和湿度的分辨率,见表6。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(10)

表6 不同分辨率的温度和湿度测量时间

2.5 软复位

这个命令(见表4最后1行)用于在无需关闭和再次打开电源的情况下,重新启动传感器,时序如图5所示。在接收到这个命令之后,传感器系统开始重新初始化,并恢复默认设置状态,用户寄存器的加热器位除外。软复位所需时间不超过15毫秒。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(11)

图5 SHT20的软复位时序

2.6 用户寄存器

表4中还有两条命令用来读/写用户寄存器的命令,这个寄存器的功能如表5所示。读这个寄存器可以获取SHT20的分辨率和电源电压状态,而写这个寄存器除了能够改变分辨率,还能开启内部加热器和OTP重加载(这两个用于传感器的功能和安全诊断,很少用)。重要的是,在进行任何写寄存器的操作之前,必须先读预留位的默认值。之后,用户寄存器的内容由对应预留位的默认值和其他位的默认值或写入值组成。读/写用户寄存器的通信时序,如图6所示。

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(12)

表5 用户寄存器功能描述

stm32adc最大采集电压(我在高职教STM32I2C通信之SHT20传感器)(13)

图6 读/写用户寄存器时序

2.7 数据校验

通信时序中的数据校验采用的是CRC8(循环冗余校验码),这是一种常见的校验算法,背后的原理不难,感兴趣的朋友请自行搜索,这里不展开。

2.8 信号转换和计算

传感器内部设置的默认分辨率为相对湿度12位和温度14 位。SDA的输出数据被转换成两个字节的数据包,高字节MSB在前(左对齐),每个字节后面都跟随一个应答位。两个状态位,即低字节LSB的后两位在进行计算前须置0。

1)相对湿度计算

不论基于哪种分辨率,相对湿度RH都可以根据SDA输出的相对湿度数据通过如下公式计算获得(结果以%表示):

例如在图3和图4的示例中,所传输的16位相对湿度数据 = 0110 0011 0101 0000 = 25424,代入上式计算可得RH = 42.5%。

2)温度计算

不论基于哪种分辨率,温度T都可以通过将温度输出信号代入到下面的公式计算得到(结果以温度℃表示):

(第一部分完,第二部分我们来编写程序来读取温湿度)

猜您喜欢: