《单片机程序设计实践教程温度传感器.ppt》由会员分享,可在线阅读,更多相关《单片机程序设计实践教程温度传感器.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机程序设计实践教单片机程序设计实践教程温度传感器程温度传感器1现在学习的是第1页,共39页18.0 18.0 项目演示效果项目演示效果图图XP_18_01 XP_18_01 步骤步骤1-1-当前环境温度值的显示当前环境温度值的显示现在学习的是第2页,共39页图图XP_18_02 XP_18_02 步骤步骤2-2-升高的温度值显示升高的温度值显示现在学习的是第3页,共39页图图XP_18_03 XP_18_03 步骤步骤3-3-制冷后的温度值显示制冷后的温度值显示 现在学习的是第4页,共39页18.1 18.1 项目目标设计项目目标设计1.了解DS18B20温度传感器的工作原理;2.掌握一线
2、制总线的通信方式及原理;3.掌握单片机对DS18B20温度传感器进行读写控制的方法;4.对照DS18B20温度传感器的数据手册,理解对其进行写和读的软件编制方法;5.在达到以上四点目标的基础上,根据本章“项目扩展任务”中提出的问题,以组或个人为单位,在规定时间里完成扩展项目任务。现在学习的是第5页,共39页18.2 18.2 项目任务项目任务 温度传感器项目的电路原理图如图18-1所示,DS18B20温度传感器与STC89C52RC单 片 机 之 间 的 数 据 读 写 采 用 了 一 线 制 总 线 方 式,STC89C52RC单片机本身不包含一线制总线通信控制器的功能,为了与具有一线制总线
3、通信功能的DS18B20进行数据交换,STC89C52RC单片机必须利用自身的1根I/O线(这里是P17引脚),作为一线制的通信信号线,利用软件模拟产生一线制通信协议规定的传输数据信号,以完成与DS18B20之间的数据交换。本项目应完成以下程序设计:通过C51嵌入式软件对DS18B20进行初始化及当前温度的读取,并将读取的温度值在七段LED数码管和1602液晶显示器上进行实时显示。现在学习的是第6页,共39页图图18-1 18-1 温度传感器项目的电路原理图温度传感器项目的电路原理图现在学习的是第7页,共39页18.3 18.3 系统板上硬件连线系统板上硬件连线 PMY单片机开发板上温度传感器
4、项目的连接插线设置如图18-2所示。图图18-2 18-2 开发板上温度传感器项目的连接插线设置开发板上温度传感器项目的连接插线设置现在学习的是第8页,共39页18.4 18.4 程序程序流程图流程图图图18-3 18-3 温度传温度传感器项目的程感器项目的程序流程图序流程图现在学习的是第9页,共39页18.5 C18.5 C语言源程序(略)语言源程序(略)18.6 18.6 系统构成和程序分析系统构成和程序分析18.6.1 18.6.1 温度传感器温度传感器DS18B20DS18B20的概述的概述 DS18B20 是美国DALLAS 半导体器件公司在其前代产品DS18B20的基础上推出的单线
5、数字化智能集成温度传感器【38】,其特点是:现在学习的是第10页,共39页(1)、独特的单线接口,只需1个接口引脚即可通信。(2)、不需要额外的外部元件搭建外围电路即可正常运行。(3)、可用数据线供电,不需备份电源。(4)、测量范围为-55+125,增量值为0.5;等效的华氏温度范围是-67257,增量值为0.9。(5)、以912位数字值方式读出温度。(6)、在1s典型值内把温度变换为数字。(7)、用户可定义的非易失性的温度告警设置。现在学习的是第11页,共39页 主要的优点是【39】:(1)、DS18B20可将被测温度直接转换成计算机能识别的数字信号输出。传统温度传感的温度值转换需要先经电桥
6、电路获取电压模拟量,再经信号放大和A/D转换成数字信号,其缺点是在更换传感器时,会因放大器出现零点漂移而必须对电路进行重新调试,以克服这种参数的不一致性。而由于DS18B20为数字式器件,不存在这类问题,因此使用起来非常方便。(2)、DS18B20能提供912位温度读数,精度高且其信息传输只需1根信号线,与计算机接口十分简便,读写及温度变换的功率全部来自于数据线,因此不需额外的附加电源。现在学习的是第12页,共39页(3)、每一个DS18B20都含有一个唯一的序列号,这样的设计是为了允许多个DS18B20连接到同一总线上,因此非常适合构建多点温度检测系统。(4)、负压特性。DS18B20的当电
7、源极性接反时,它虽然不能正常工作,但也不会因发热而烧毁。正是由于具有以上特点,DS18B20在解决各种误差、可靠性和实现系统优化等方面与传统各种温度传感器相比,有着无可比拟的优越性,因而广泛应用于过程控制、环境控制、建筑物和机器设备中的温度检测等领域。现在学习的是第13页,共39页18.6.2 18.6.2 温度传感器温度传感器DS18B20DS18B20的引脚分配和内部功能的引脚分配和内部功能图图18-4 DS18B2018-4 DS18B20的实物和引脚图的实物和引脚图现在学习的是第14页,共39页 DS18B20全部传感元件及转换电路集成在形如一只三极管的集成电路内,如图18-4 所示。
8、三端口分别是地线、数据线和电源线,其外围电路非常简单。每一个DS18B20有唯一的系列号,多个DS18B20可以存在于同一条单线总线上。温度传感器DS18B20测温范围为55125,增量值为0.5(9位温度读数),其内部功能结构如图18-5所示。它主要由4个数据部件部分组成,即:64位ROM温度传感器、非易失性的温度告警触发器TH和TL及中间结果暂存器。现在学习的是第15页,共39页图图18-5 DS18B2018-5 DS18B20的内部功能结构图的内部功能结构图现在学习的是第16页,共39页 64位ROM用于存储序列号,其首字节固定为28H,表示产品类型码,接下来的6个字节是每个器件的编码
9、,最后1个字节是CRC校验码。温度告警触发器TH 和TL存储用户通过软件写入的报警上下限值。中间结果暂存器由9 个字节组成,其中有2个字节RAM单元用来存放温度值,前1个字节为温度值的补码低8位,后1个字节为符号位和温度值的补码高3位。现在学习的是第17页,共39页 DS18B20 通过使用在板(on-board)温度测量专利技术来测量温度,温度测量电路的方框图见图18-6所示,它是通过计数时钟周期来实现的。低温度系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数,计数器被预置在与55相对应的一个基权值,如果计数器在高温度系数振荡周期结束前计数到零,表示测量的温度值高于55,被
10、预置于55的温度寄存器的值就增加1,然后重复这个过程,直到高温度系数振荡周期结束为止。这时温度寄存器中的值就是被测温度值,这个值以16位形式存放在中间结果暂存器中,此温度值可由主器件通过发存储器读命令而读出,读取时低位在前,高位在后。斜率累加器用于补偿温度振荡器的抛物线特性。现在学习的是第18页,共39页图图18-6 DS18B2018-6 DS18B20温度测量电路方框图温度测量电路方框图现在学习的是第19页,共39页18.6.3 18.6.3 温度传感器温度传感器DS18B20DS18B20内部存储器分配内部存储器分配图图18-7 DS18B2018-7 DS18B20内部存储器分配示意图
11、内部存储器分配示意图现在学习的是第20页,共39页 DS18B20的内部存储器分配如图18-7所示,是由一个中间结果暂存器RAM和一个非易失性电可擦除EEROM组成,后者存储高、低温度触发器TH和TL及程序设置字节。暂存存储器有助于在单线通信时确保数据的完整性,数据首先写入暂存存储器,在那里它可以被读回,当数据被校验之后,复制暂存存储器的命令把数据传送到非易失性EEROM(掉电后依然保存)。暂存存储器是按8位字节存储器来组织的,头两个字节包含测得温度信息,第3、第4和第5个字节是TH、TL和程序设置字节的易失性拷贝,在每一次上电复位时被刷新;接着的3个字节没有使用,但是在读回时它们呈现为逻辑全
12、1,第8个字节是冗余校验CRC 字节,它是前面所有8个字节的CRC 值。现在学习的是第21页,共39页 如图18-7,头两个字节代表测得的温度读数,MSB中的S=1时表示温度为负,S=0时表示温度为正,其余低位以二进制补码形式表示,最低位为1时表示0.0625。规定TH中的有符号值必须大于TL中的有符号值,DS18B20的输出数据与温度的对应关系由表18-1给出。程序设置寄存器主要用来设置分辨率位数的,各位的意义为.TM 测试模式位。为1表示测试模式,为0表示工作模式,出厂时该位设为0,且不可改变。R1、R0 与温度分辨率有关。00表示9位,01表示10位,10表示11位,11表示12位。分辨
13、率越高,则转换时间越长,12位分辨率的典型转换时间大约为750ms。现在学习的是第22页,共39页表表18-1 DS18B2018-1 DS18B20输出数据与温度的对应关系输出数据与温度的对应关系温度温度温度温度/温度数据输出(二进制)温度数据输出(二进制)温度数据输出(二进制)温度数据输出(二进制)温度数据输出(八进制)温度数据输出(八进制)温度数据输出(八进制)温度数据输出(八进制)12512500000111 1101000000000111 1101000007D0H07D0H8585858500000101 0101000000000101 010100000550H0550H25
14、.062525.062525.062525.062500000001 1010001000000001 101000100191H0191H10.12510.12510.12510.12500000000 1010001000000000 1010001000A2H00A2H0.50.50.50.500000000 0000100000000000 000010000008H0008H0 0 0 000000000 0000000000000000 000000000000H0000H0.50.50.50.511111111 1111100011111111 11111000FFF8HFFF8
15、H10.12510.12510.12510.12511111111 0101111011111111 01011110FF5EHFF5EH25.062525.062525.062525.062511111110 0110111111111110 01101111FF6FHFF6FH5555555511111100 1001000011111100 10010000FC90HFC90H现在学习的是第23页,共39页18.6.4 18.6.4 温度传感器温度传感器DS18B20DS18B20的寄生电源和硬件接法的寄生电源和硬件接法 图18-5所示DS18B20的内部功能结构图给出了寄生电源电路。当
16、I/O(DQ引脚)或VCC引脚为高电平时,这个电路便“取”得电源,只要符合指定的充电时间和电压要求,I/O将提供足够的功率。寄生电源具有两个优点,第一,可以利用I/O引脚远程温度检测而无需本地电源;第二,在缺少正常电源条件下也可以读取ROM的值。因为DS18B20的工作电流高达1mA,为了使DS18B20能准确地完成温度变换,当温度变换发生时,I/O线上必须提供足够的功率。有两种方法确保DS18B20在其有效变换期内得到足够的电源电流。第一种方法是发生温度变换时,在I/O 线上提供一路强的上拉电源【38】,如使用一个MOSFET把I/O线直接拉到电源电压。当使用寄生电源方式时,VCC引脚必须连
17、接到地。现在学习的是第24页,共39页图图18-8 18-8 温度计项目的系统功能图温度计项目的系统功能图现在学习的是第25页,共39页 向DS18B20供电的另外一种方法是通过使用连接到VCC引脚的外部电源。这种方法的优点是在I/O线上不要求附加强的上拉电源,总线上DS18B20便可以在温度变换期间保持自身供电,这就保证了在变换时间内其它数据能够在单线上正常传送。此外,在单线总线上可以放置任何数目的DS18B20,而且如果它们都使用外部电源,那么通过发出跳过Skip ROM 命令和接着发出变换Convert T 命令可以同时完成温度变换。此时要注意,只要外部电源处于工作状态,GND引脚不可悬
18、空。开发板上的J2连接插线设置了VCC的选择模式,参照图18-1,J2的3脚为DS18B20的电源输入脚,用短接片插入不同的位置,即可选择该脚与电源和地相连,从而完成上述两种方式的实验设置。为了更加清晰地说明开发板的系统连线,图18-8给出了温度计项目的系统功能图,请读者对照该图加深对以上内容的解释。现在学习的是第26页,共39页18.6.5 18.6.5 温度传感器温度传感器DS18B20DS18B20的程序编制方法的程序编制方法 单总线上每一个器件的使用都是从初始化开始的,初始化的时序是,单片机首先发出复位脉冲,在经过一定延时后,一个或多个单总线器件发出应答脉冲,如果单片机检测到单总线上有
19、器件存在,就可以发出传送ROM命令。具体的传送ROM命令见表18-2所示。只有当表18-2所示的任意一条ROM指令被成功执行后,才会执行单片机发出的访问被选中器件的存储和控制命令,这些命令被存放在DS18B20的RAM中,主要实现启动单总线温度传感器DS18B20温度转换等功能,具体的RAM命令格式见表18-3所示。现在学习的是第27页,共39页表表18-2 DS18B2018-2 DS18B20的的ROMROM命令格式命令格式指令功能指令功能指令功能指令功能代码代码代码代码说明说明说明说明读读ROMROM33H33H读产品编码、序列号和读产品编码、序列号和CRCCRC校验码校验码匹配匹配RO
20、MROM55H55H后继后继6464位位ROMROM序列对总线上的序列对总线上的DS18B20DS18B20寻寻址址搜索搜索ROMROMF0HF0H对总线上的多个对总线上的多个DS18B20DS18B20进行进行ROMROM编码的编码的搜索搜索跳过跳过ROMROMCCHCCH在单点测温中,跳过对在单点测温中,跳过对ROMROM编码的搜索编码的搜索告警搜索告警搜索ECHECH搜索有报警的搜索有报警的DS18B20DS18B20的测温点的测温点现在学习的是第28页,共39页表表18-3 DS18B2018-3 DS18B20的的RAMRAM命令格式命令格式指令功能指令功能指令功能指令功能代代代代码
21、码码码说说说说明明明明温度温度变换变换44H44H启启动动温度温度转换转换读暂读暂存器存器BEHBEH读读9 9个字个字节节温度温度值值和和CRCCRC值值写写暂暂存器存器4EH4EH写上下限写上下限值值到到暂暂存器存器复制复制暂暂存器存器48H48H将将暂暂存器上下限存器上下限值值复制到复制到EEPROMEEPROM读读EEPROMEEPROMB8HB8H将将EEPROMEEPROM的上下限的上下限值调值调入到入到暂暂存器中存器中读电读电源源B4HB4H检测检测供供电电方式方式现在学习的是第29页,共39页 对于DS18B20的访问分为3个步骤,即初始化、序列号访问和内存访问。由于项目用开发
22、板上只有一个DS18B20,因此在初始化DS18B20后,将用跳过对ROM编码搜索的指令,直接调用温度转换命令,并在主程序中实现七段LED数码管和1602LCD液晶显示器同时显示当前温度值的功能。关于DS18B20实现多点温度测控系统的方法,读者请结合本章内容并参阅参考文献【39】、【40】和【41】中所述方法加以实现。现在学习的是第30页,共39页(1 1)、)、DS18B20DS18B20的初始化方法的初始化方法 图图18-9 DS18B2018-9 DS18B20的初始化复位脉冲时序图的初始化复位脉冲时序图现在学习的是第31页,共39页 DS18B20要求严格的协议来确保数据传送的完整性
23、【39】。协议由几种单线上的信号类别组成,即:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号除了存在脉冲之外,均由总线主器件(开发板上的STC89C52RC)产生。图18-9给出了DS18B20的初始化复位脉冲时序图,当主器件开始与从器件DS18B20进行通信时,主器件必须先给出复位脉冲,经过给定时间,DS18B20发出存在脉冲,表示已经准备好发送或者接收由主器件发送的ROM命令和存储器操作命令。18.5节C语言源程序中的DS18B20_reset函数完成DS18B20的初始化功能。现在学习的是第32页,共39页 首先总线主器件发送最短为480s的低电平TX复位脉冲信号,源代码中的以
24、下语句实现这一过程:DQ=1;_nop_();_nop_();/一线制总线置高2s准备写过程DQ=0;delay(50);/一线制总线置低550s满足复位延长时间条件 接着总线主器件便释放此线并进入接收方式,由于图18-1中上拉电阻R43的作用,一线制总线被拉至高电平状态,在检测到DQ(I/O)引脚上的上升沿之后,DS18B20等待1560s,源代码中的下条语句实现一线制总线置1大约66s。DQ=1;delay(6);/一线制总线置高66s满足复位延长时间条件 现在学习的是第33页,共39页 此时,DS18B20的最大等待时间60s已被超过,可以检测一线总线上是否存在DS18B20给出的存在脉
25、冲,可用检测DQ的引脚状态来实现:Exist=DQ;/检测存在标志Exist=0,条件满足DS18B20存在继续下一步 然后再延时500s,满足主器件Rx接收脉冲的时间最少保证条件:delay(45);/延时500s,Exist消失,此时DQ已被上拉电阻置高 _nop_()为执行一个时钟周期的空指令,本开发板采用了11.0592MHz的外部晶振,一个时钟周期大约要1.1s;delay(1)延时函数则能够延时大致11s。至此,按照DS18B20的初始化复位脉冲时序图编制的程序实现代码分析完毕。现在学习的是第34页,共39页(2 2)、写时间片)、写时间片图图18-10 DS18B2018-10
26、DS18B20的写时间片脉冲时序图的写时间片脉冲时序图现在学习的是第35页,共39页 如图18-10所示,当主器件把数据线从高逻辑电平拉至低逻辑电平时,产生写时间片。有两种类型的写时间片,分别为写1时间片和写0时间片,所有时间片必须有最短为60s的持续期,在各写周期之间必须有最短为1s的恢复时间。在DQ线由高电平变为低电平之后,DS18B20在15s至60s的时间窗口之间对DQ线采样,如果DQ线为高电平,写1就发生;如果DQ线为低电平,便发生写0。源程序中的DS18B20_ReadByte函数完成对DS18B20的写时间片功能。源代码列写如下:现在学习的是第36页,共39页DQ=1;_nop_
27、();_nop_();/一线制总线置高2s准备写过程DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();/一线制总线置低5s给出写过程条件 DQ=val&0 x01;delay(6);/向一线制总线移出最低位并延迟66s满足写数据条件val=val/2;/写字节右移一位 对于主器件产生写1时间片的情况,数据线DQ必须先被拉至逻辑低电平,然后被释放,使数据线在写时间片开始之后的15s之内由主器件拉至高电平;对于主器件产生写0时间片的情况,数据线必须被主器件拉至逻辑低电平,且至少保持低电平60s。读者可以对照图18-10给出的写时间片脉冲时序图,理解上面给出的程序代码。现在学习的是第37页,共39页(3 3)、读时间片)、读时间片图图18-11 DS18B2018-11 DS18B20的读时间片脉冲时序图的读时间片脉冲时序图现在学习的是第38页,共39页 如图18-11所示,当从DS18B20读数据时,主器件产生读时间片,当主器件把数据线DQ从逻辑高电平拉至低电平时,产生读时间片,数据线DQ必须保持在低逻辑电平至少1s,来自DS18B20的输出数据在读时间片下降沿之后15s有效,因此为了读出,从读时间片开始算起15s的状态主器件必须停止把DQ引脚驱动至低电平。以下程序代码模拟了这一过程:现在学习的是第39页,共39页
限制150内