微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 初步认识51单片机-2.3单片机控制DS18B20温度传感器模块

初步认识51单片机-2.3单片机控制DS18B20温度传感器模块

时间:11-21 来源:互联网 点击:
通过前面LCD1602的例子我相信对IO口的控制和延时基本有所了解,下面再来一个例子温度传感器,同样只需要IO口操作和延时。先来个DS18B20温度传感器的简介。既然是温度传感器,那么一定有个感知温度的感应器。这个感应器能把它周围的温度直接转成数字并存储在scratchpad存储器中。这个感知温度和转换成数字信号的过程我们可以不用理解。我们要做的事情就是读存储器的内容及其他一些配置。其原理图如下:

图1 DS18B20温度传感器概述?

在DS18B20中有一个温度传感器(如上图所示),它能感知周围环境温度,并能将温度的结果直接转成数字信号存储起来。温度信号转成数字信号的过程我们可以不用关心。那么数字信号存在哪里了?DS18B20中有一个叫做ScratchPad的存储器,一共9个字节(Byte0-Byte8),数字信号就存储在Byte0_LSM和Byte1_MSB中。其中Byte0为低位,Byte1为高位。事实上,我们的目的就是读出Byte0和Byte1中存储的数字信号而已。由此可见,虽然名字是温度传感器模块,但是在我们的思考过程中丝毫不用关心传感的过程,这一点与前面讲到的LCD1602其实是一样,我们要做的事情只是去读或者写。这就是模块的作用,我们可以把它当作黑盒子,按照它的规则,只要掌握往里面输入,它会产出什么就行了,不需要关注中间的过程。我们把Byte0_LSM和Byte1_MSB组合成一个16bit的数字信号,Byte0_LSB为低位,Byte1_MSB为高位,并给它取个名字叫”T-16bit”,如上图所示。那么如何把这个”T-16bit”的数字信号转换成温度呢?从图中看出,bit11-bit15为S,表示温度的正负,如果S=0,那么温度为正,如果S=1那么温度为负。后面的bit10-bit0,数值每增加一就表示温度增加0.0625°C,举个例子: 假如LSB中读出来的是1100 0011,MSB读出来的是0000 0110,那么LSB和MSB结合起来”T-16bit”就是0000 0110 1100 0011,高5位为0,表示温度为正,余下11位bit10-bit0(110 1100 0011=1731),把1731×0.0625=108.1875,那么测量的温度为+108.1875°C. 如果LSB和MSB结合起来”T-16bit”为1111 1110 1100 0011,那么测量的温度为-108.1875°C. 在”T-16bit”中,我们也可以这样理解,bit0位每加1,表示20×0.0625°C,bit1位每变化1表示21×0.0625°C, 依此类推, bit4位每变化1为24×0.0625°C=1°C.

接着就是Byte2_TH和Byte3_TL报警的功能了,图中Byte2_TH表示设置的最高温度,Byte3_TL表示设置的最低温度。同样S表示温度的正负,如果S=0,那么表示正,如果S=1,那么温度为负。Byte2_TH和Byte3_TL就表示设定温度的范围了。注意这里的Byte2_TH与Byte3_TL与”T-16bit”中的bit11到bit4是对应的,如图中蓝色部分所示。前面讲了,在”T-16bit”中,bit4每变化1为1°C,因此在Byte2_TH与Byte3_TL中的最低位每变化1,表示温度变化1°C. 比如Byte2_TH设定为,01111001(十进制为121),首位为0,表示+121°C, Byte3_TL为01001001(十进制为73),首位为0,表示+73°C .因此温度的设定范围为:73-121°C. 当”T-16bit”中的温度高于/等于+121°C,或者低于/等于73°C时,将触发报警。

接下来就是温度采集的精度设置了,如图中的Byte4_Config所示。bit5和bit6分别为R0和R1,其他几位是固定的。R0和R1分别可以取0或者1,因此可以组合成4种情况,00/01/10/11,分别对应不同的精度,如下表所示:

Byte5-Byte7未给出,Byte8为CRC用与通信错误检测,我们暂且不用管它,我们先考虑简单的部分

通过上面的讲解,相信对DS18B20有了初步的认识,现在再来谈谈它与单片机如何沟通的。DS18B20一共三个引脚,两个电源引脚(电源正负极),一个数据引脚DQ.其结构图如下所示。黑色壳体朝上,引脚朝下,平面对着自己,左手边第一个引脚为GND. DS18B20的正负极如果接反,可能会烧掉。

可见单片机与DS18B20的沟通只能靠这一根线了,另外这一根线上可以同时接很多个DS18B20. 那么单片机是如何通过这一根线准确的与多个DS18B20沟通的呢?单片机是不知道DQ线上有没有DS18B20的,或者有多个,或者有但是坏了。与人的沟通方式一样,当你不知道屋里情况的时候,会先打个招呼,问下有人没。同样,单片机也一样,先来个初始化,打个招呼,看看DQ线上有没有18B20。怎么样打招呼呢,与前面讲LCD1602一样,当然按照DS18B20的规则。单片机先要把DQ拉低至少480μS, 然后释放DQ,大约在15-60μS后,如果线上有DS1

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top