控制/MCU
今天咱们来讲一下另一个温度传感器——DS18B20。
DS18B20:是一个数字温度传感器,提供 9-Bit 到12-Bit 的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能。采用单总线的通信方式,实现起来比较简单,三根线就能完成通信。下面是对应的管脚定义图以及引脚连接图,DQ引脚需要外接上拉电阻,因单片机P3^7引脚自带上拉电阻,所以直接连接就行了。
1、供电范围为 3.0V 至5.5V
2、温度检测范围为-55℃至+125℃
一、实验原理
因为通信方式是采用单总线的方式,所以我们要先了解什么是单总线,下面是一个截图,简单介绍一下,具体的还是要看芯片手册,在文章最后我也会把手册分享给大家。
访问 DS18B20 的事件序列如下所示:(步骤)
第一步:初始化
第二步:ROM 命令(紧跟任何数据交换请求)
第三步:DS18B20 功能命令(紧跟任何数据交换请求)
每次对 DS18B20 的访问都必须遵循这样的步骤来进行, 如果这些步骤中的任何一个丢失或者没有执行,则 DS18B20 将不会响应。除了 ROM 搜索命令[F0h]和报警搜索命令[ECh]之外。当执行完这些 ROM 命令之后,主设备必须回到上述步骤中的第一步。
初始化:
至于什么是初始化,在此就不再赘述,手册中很详细,我们就先看一下初始化的时序,
主机(单片机)将总线拉低至少480us,延后释放总线,等待1560us后,从机(DS18B20)会将总线拉低,60240us已响应主机,告诉主机自己已经准备好了,完成初始化。
ROM 命令:
通过给DS18B20写不同的ROM命令,来执行不同的功能。
DS18B20 功能命令:
通过给DS18B20写不同的功能命令,来执行不同的功能。
下面是写“0”和“1”的时序图
主机先将总线拉低60120us,然后释放总线,就表示写“0”,主机先将总线拉低115us,然后释放总线,就表示写“1”,从机将会在总线拉低30us后,读取电平状态。
下面是读“0”和“1”的时序图
主机先将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平状态。(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1。
配置完成之后,我们要读出返回出来的数据,就需要知道返回的数据是由哪些部分构成的,因为数据事先已经缓存在暂存器中了,我们只要调出暂存器中的数据就可以了。下图就是暂存器的数据构成:
我们只需要读出温度数据即可,所以只用接收字节1和字节2就行,分别对应着温度数据的低八位和高八位。接收到的数据,需要一定的处理,把高八位和低八位结合起来,再进行数据的转换,转化成为浮点数,就可以把温度表示出来了;最后通过显示屏显示出来,或者通过串口助手显示在电脑上。
全部0条评论
快来发表一下你的评论吧 !