教程43温度传感器ds18b_第1页
教程43温度传感器ds18b_第2页
教程43温度传感器ds18b_第3页
教程43温度传感器ds18b_第4页
教程43温度传感器ds18b_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCU起航

温度传感器DS18B20主要内容1、DS18B20的初步了解2、控制DS18B20的指令3、DS18B20的工作时序4、操作DS18B20的实例DS18B20的初步了解

DS18B20是Dallas半导体公司生成的一款数字式温度传感器,也有的地方说它的厂家是美国美信(MAXIM)半导体公司,其实也没错,因为美信在2001年收购了Dallas,它成为了美信的全资子公司。所以,说它是美信生产的没问题。DS18B20的初步了解 DS18B20有两大特点:1、数字式传感器,读取便捷;2、一线式总线(1-wirebus)通信,只占用一个IO脚。除此之外,它也有大量的优点: 1、每个器件都有一个唯一的64位序列号,可实现多点组网 2、应用电路设计简单,只需要很少的器件; 3、供电电压3.0~5.5V,也可以从数据引脚获取电源; 4、测量温度从-55°C到+125°C,在-10°C~+85°C时精度为±0.5°C;

5、温度计的分辨率从9位至12位可选,其中包含温度正负位; 6、用户可定义的非易失性报警设置;

7、多种封装方式:SO-8、μSOP-8以及TO-92,最后一种较为常见。DS18B20的初步了解 TO-92封装的18B20样式非常小巧,有三只脚,分别为:1脚GND,2脚数据,3脚电压,外形和直插式的三极管一模一样,接口电路如图所示。DS18B20的初步了解

18B20通过编程可以实现最高12位的温度转换,同时可识别温度正负。温度数据寄存器格式如表所示:

温度值被存在一个16位寄存器中,前面五位“S”为符号位:S=0,温度为正,S=1,温度为负。如果DS18B20被配置为12位分辨率,那么该16位寄存器中的所有bit都有效;如果是11位分辨率,那么bit0无效;如果是10位分辨率,那么bit0和bit1无效;如果是9位分辨率,那么bit0、bit1和bit2无效。LSBytebit7bit6bit5bit4bit3bit2bit1bit0232221202-12-22-32-4MSBytebit15bit14bit13bit12bit11bit10bit9bit8SSSSS262524DS18B20的初步了解温度数据表温度数字输出(二进制)数字输出(十六进制)+125°C000001111101000007D0h+85°C*00000101010100000550h+25.0625°C00000001100100010191h+10.125°C000000001010001000A2h+0.5°C00000000000010000008h0°C00000000000000000000h-0.5°C1111111111111000FFF8h-10.125°C1111111101011110FF5Eh-25.0625°C1111111001101111FE6Fh-55°C1111110010010000FC90hDS18B20的初步了解 以12位分辨率为例,二进制数最低位增加1,表示温度增加0.0625°C。0.5°C的二进制数换算成10进制后为8,0.0625×8结果刚好为0.5。 如果计算零下的温度值,需要先求得上述编码的补码。补码的计算过程是符号位不变,其余各位取反,然后加1。如表12.6所示,以-55°C为例,它的补码为1111101101110000,不考虑符号位,换算成十进制数为880,然后880×0.0625得到55,刚好符合表中的结果。控制DS18B20的指令

虽然长得和三极管很像,但是它真的是一款数字型、总线通信的温度传感器。想要控制它的话,需要先知道常用的控制指令有哪些。 访问一片DS18B20的顺序如下: 1、设备上电后,通过发送一定时序的高低电平,实现设备的初始化。 2、发送ROM命令,单片机的一个IO上可以挂载一个或多个DS18B20,所以此处可发送相关的ROM命令进行设备识别。 3、发送功能命令,例如启动温度转换、设置温度报警上下限等等。控制DS18B20的指令 首先看ROM相关的指令: 1、F0H-搜索ROM。用来确定挂在同一总线上的DS18B20有多少个,获得相应的ROM码。 2、33F-读ROM。一条总线上只接一个DS18B20时,发送该指令即可获取ROM码。 3、55H-匹配ROM。发出该命令后,接着发出一个64bit的ROM码,即可选定该码对应的设备。 4、CCH-跳过ROM。不检测64bit的ROM码,直接发送功能命令,常用于单个设备的情况。 5、ECH-搜索报警命令。该指令的功能和搜索ROM的功能类似,区别在于只有出现了报警标志的从设备才会返回自身的ROM码。执行该指令的前提是DS18B20设置了温度报警的功能。控制DS18B20的指令

6、44H-转换温度。DS18B20收到该指令后,根据当前温度,转换成相应的数据存入16bit的寄存器中。

7、4EH-写暂存器。DS18B20内部有9个字节的暂存器,暂存器地址从0至8。执行该指令后,需向DS18B20写入三个字节的数据:第一个字节写入温度上限寄存器TH(第三个暂存器),设置报警温度的上限;第二个字节写入温度下限寄存器TL(第四个暂存器),设置报警温度的下限;第三个字节写入配置寄存器(第五个暂存器),设置转换精度。写指令时,由于是串行传输,写入顺序为先写低位,后写高位。

8、BEH-读暂存器。从地址0开始,到地址8,可以依次读出暂存器的所有内容。如果只需要前面几个字节的内容,读出后对DS18B20进行复位设置,即可结束此次读过程。控制DS18B20的指令

9、48H-复制暂存器。执行该指令,可以把TH、TL、配置寄存器中的内容复制到EEPROM中,即使以后设备断电,上述内容也不会丢失。

10、B8H-读取EEPROM。执行该指令,会把EEPROM中的TH、TL、配置寄存器的值,分别存入暂存器中相应的位置。

11、B4H-读取供电模式。DS18B20有两种供电模式:外部电源供电与寄生电源供电。执行该指令后,寄生电源供电的DS18B20会把总线拉低,外部电源供电的DS18B20会把总线拉高。控制DS18B20的指令上面提到了一个9字节的暂存器和EEPROM,暂存器内部包括9个寄存器,具体内容如表所示:寄存器名称寄存器地址温度值低位(LSB)

(50H)0温度值高位(MSB)

(05H)1温度上限(TH)*2温度下限(TL)*3配置寄存器*4保留

(FFH)5保留

(0CH)6保留

(10H)7CRC校验值*8控制DS18B20的指令 先看温度值低位与温度值高位,每次上电复位后,这两个寄存器默认值都是固定的(50H与05H),如果直接读取的话,对应的温度值是85°C。

再看上表中带有*的寄存器,寄存器地址为2、3、4的值,可以通过复制暂存器的指令将三个值分别写入EEPROM中。而且,每次上电后这三位默认的值,也是自动从EEPROM中读取出来的。

接下来看“配置寄存器”,之所以说它是配置寄存器,是因为它能控制温度转换的精度:到底是9位、10位、11位还是12位。它是一个8bit的寄存器,格式如表所示:

R1与R0值由用户设置,其余6bit为固定值。R1与R0的值与转换精度对应的关系如表12.9所示:bit7bit6bit5bit4bit3bit2bit1bit00R1R011111R1R0分辨率最大转换时间009-bit93.75ms(tCONV/8)0110-bit187.5ms(tCONV/4)1011-bit375ms(tCONV/2)1112-bit750ms(tCONV)DS18B20的工作时序 DS18B20使用了比较严格的1-wire通信协议来确保数据的完整性,毕竟只有一条线,既要进行读操作,又要进行写操作,这样一个半双工通信要有规范的说明。

在该通信协议中定义了几个信号类型:复位脉冲、存在脉冲、写数据0、写数据1、读数据0和读数据1。除去存在脉冲,其它的信号都是由主机进行操作的。DS18B20的工作时序

首先是复位脉冲和存在脉冲,它们两个结合在一起,组成了DS18B20的初始化信号。首先,主机发送一个复位脉冲,然后DS18B20返回一个存在脉冲。当存在脉冲返回之后,说明DS18B20已经准备好了,随时开始工作。DS18B20的工作时序 DS18B20闲置状态下,保持数据脚为高电平: 1、把数据脚拉低,持续时间480us~960us,进行复位操作。 2、把数据脚拉高,将其释放。相当于把这条线的控制主动权交给DS18B20,勾引它做出应答。持续时间15~60us。 3、DS18B20变得主动以后,只要器件本身没有质量问题,会向主机发出一个存在脉冲,也有的地方叫“应答脉冲”,毕竟有来有往的才叫通信,有来无往的只能叫做广播。存在脉冲为低电平脉冲,持续时间60~240us。所以主机只要在存在脉冲的时间内检测数据脚的电压,持续为低的话,说明DS18B20初始化正常。DS18B20的工作时序

初始化完成后,进入写指令和读数据的阶段。在写操作中,有两种信号类型:0和1,时序图如图所示DS18B20的工作时序 先看写0时隙(TIMESLOT),按照此时隙操作总线,可以向DS18B20写入1bit数据0。过程如下:先把总线拉低,维持低电平至少60us即可。 再看写1时隙(TIMESLOT),按照次时隙操作总线,可以向DS18B20写入1bit数据1。过程如下:先把总线拉低,至少维持1us低电平,然后在14us内释放总线,让上拉电阻将总线拉高。 向DS18B20写入数据的原理:无论写入0还是1,都要先把总线拉低,拉低的目的在于提醒DS18B20:我要给你写数据了,准备接收。DS18B20收到提醒后的15us开始,就要采样总线上的数据,此时总线上的数据是0,那就采集到0,如果是1,那就采集到1。DS18B20的工作时序再来看读操作,依然要读取0和1两种信号。先看时隙图DS18B20的工作时序 首先,DS18B20无法主动向主机发送数据,只有当主机告诉它我要读数据的时候才可以。因此,主机需要先向DS18B20发出一个读数据之类的指令(例如读暂存器),然后紧跟读时隙的操作。所有读时隙的操作不能超过60us,每两个读时隙的操作之间,至少间隔1us的恢复时间。

主机拉低总线至少1us后,然后释放总线,将总线的控制权交给DS18B20。此时DS18B20会通过拉高或拉低总线的方式,传输数据1或0。从总线拉低开始算起,数据1或0的有效时间为15us,因此主机必须在有效时间内对总线进行采样。15us之后,无论数据是1是0,总线都维持高电平。操作DS18B20的实例这里使用外部电源供电,总线上挂载一个DS18B20,控制流程如下:1、初始化DS18B20;2、发送命令0xCC,跳过读ROM;3、发送命令0x44,DS18B20将当前温度转换为数据,存入暂存器;4、等待一段时间,复位DS18B20,重新初始化;5、发送命令0xBE,告诉DS18B20,我要读取暂存器里面的数据;6、进行读操作,将温度值读出、保存。7、因为只需要读暂存器的前两位,温度读出后,发出480us~960us的低电平,复位DS18B20。操作DS18B20的实例为什么第3步执行完,要重新初始化,直接跳到第5步行么?答案是:不行。首先,前面提到了DS18B20的控制顺序:1、初始化;2、ROM指令;3、功能指令。所以每个ROM指令后面只能跟一个功能指令,如果再想发送ROM指令的话,那就重新初始化DS18B20。其次,为什么第4步里面先进行了一个延时,然后才是重新初始化?就像PCF8591进行AD转换一样,DS18B20转换温度也是需要一定时间的,不可能指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论