本帖最后由 isgoodmm 于 2024-5-4 17:09 编辑
#申请原创# 终于到了五一了,有时间来折腾这个开发板了,我手里有一个温湿度传感器,先驱动起来吧。传感器实物见图,是直插封装的,正好可以用杜邦线连接开发板。
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个 8 位单片机控制一个电阻式感湿元件和一个 NTC 测温元件。DHT11 虽然也是采用单总线协议,但是该协议与 DS18B20 的单总线协议稍微有些不同之处。相比于 DS18B20 只能测量温度,DHT11 既能检测温度又能检测湿度,不过 DHT11 的精度和测量范围都要低于 DS18B20,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90%RH,误差在±5%RH。
DHT11 采用单总线协议与单片机通信,单片机发送一次复位信号后,DHT11 从低功耗模式转换到高速模式,等待主机复位结束后,DHT11 发送响应信号,并拉高总线准备传输数据。一次完整的数据为 40bit,按照高位在前,低位在后的顺序传输,数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和,一共 5 字节(40bit)数据。由于 DHT11 分辨率只能精确到个位,所以小数部分是数据全为 0。校验和为前 4 个字节数据相加,校验的目的是为了保证数据传输的准确性。
DHT11 只有在接收到开始信号后才触发一次温湿度采集,如果没有接收到主机发送复位信号,DHT11 不主动进行温湿度采集。当数据采集完毕且无开始信号后,DHT11 自动切换到低速模式。
DHT11的时序图如下:
主机复位信号和DHT11响应信号:
传感器连接开发板只需要连接三根线,根据板子的原理图,找到电源、地引脚,然后信号线连接PC8脚,整个接线图如下:
软件部分首先需要对PC8脚初始化,配置引脚属性。然后对DHT11复位,等待传感器的应答,来检测传感器是否连接和工作正常,这一部分程序如下:
如果正常,就可以读取传感器的数据了,DHT11 在拉高总线 80us 后开始传输数据。每 1bit 数据都以 50us 低电平时隙开始,告诉主机开始传输一位数据了。DHT11 以高电平的长短定义数据位是 0 还是 1,当 50us 低电平时隙过后拉高总线,高电平持续 26~28us 表示数据“0”;持续 70us 表示数据“1”。读取一位的程序如下:
读取一个字节的程序如下:
读取温湿度的函数如下:
在主函数的循环里读取结果如下:
跟真实的环境温湿度相当,证明整个过程是正确的。
经过这次实验,我对这款芯片的熟悉程度又加深了,既锻炼了自己的动手和编程能力,又熟悉了这款芯片,真心感谢平台和ST给的试用机会。
|