收藏 分享(赏)

《数字式温度计的设计》毕业设计[1].doc

上传人:dzzj200808 文档编号:2703239 上传时间:2018-09-25 格式:DOC 页数:20 大小:259.50KB
下载 相关 举报
《数字式温度计的设计》毕业设计[1].doc_第1页
第1页 / 共20页
《数字式温度计的设计》毕业设计[1].doc_第2页
第2页 / 共20页
《数字式温度计的设计》毕业设计[1].doc_第3页
第3页 / 共20页
《数字式温度计的设计》毕业设计[1].doc_第4页
第4页 / 共20页
《数字式温度计的设计》毕业设计[1].doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、摘 要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该高精度数字式温度计采用了由 DALLAS 公司生产的单线数字温度传感器 DS18B20,它具有独特的单线总线接口方式。本毕业论文详细的介绍了单线数字温度传感器 DS1

2、8B20 的测量原理、特性以及在温度测量中的硬件和软件设计,该温度计具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。二、总体方案设计1、数字温度计设计方案论证2.1.1 方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路,感温电路比较麻烦。2.1.2 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器 DS18B20,此传感器,可以

3、很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。2.2 方案二的总体设计框图温度计电路设计总体设计方框图如图 1 所示,控制器采用单片机 AT89S51,温度传感器采用 DS18B20,用 3 位 LED 数码管以串口传送数据实现温度显示。2、硬件设计1.1 工作原理及硬件框图基于 DS18B20 的温度测量装置电路图如图 1 所示,包括单片机最小系统、温度传感器、和显示电路。温度传感器 DS18B20 将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节),单片机对接收到的数字信号

4、进行标度变换,转换成实际的温度值并送数码管显示。DS18B20 传感器可置于离装置 150 米以内的任何地方。 STC89C51 是整个电路装置的控制核心,STC89C51 内带 4K 字节的 FlashROM,用户程序存放在此。图 2 系统硬件框图3、 系统分析:本设计主要的任务是单片机软件的设计,而软件中的核心在于单片机与集成温度传感器 DS18B20 接口程序的设计,另外一点便是对数码管扫描显示的理解与运用。由于 DS18B20 集成了温度数据采集、模数转换于一体,因此外围电路非常简单。在进行软件设计前,须对该芯片反复研究,掌握其核心内容,其实程序在厂家提供的应用资料中也可以找到,关键是

5、要对其工作过程的理解。对数码管扫描显示的程序设计,只要理解了其显示的工作原理,也不是可以掌握的。3.1、制作重点:读取 DS18B20 的时序由于对 DS18B20 传感器数据的读取有一定的时序要求,因此在编写软件时要特别注意,先反复读懂该器件的读、写时序,然后根据所选用的晶振计算出机器周期的时间,为了使计算简单,在设计时将晶振选用 12M,因为 51 系列单片机一个机器周期正好是 12 个时钟周期,因此选用 12M 晶振时,一个机器周期正好是 1 微秒,这样计算时间比较方便。对读取数据的处理从 DS18B20 芯片的资料中可以看出,其数据存储器的分配为:存储数据与温度的对应关系见下表:从以上

6、的分析可以看出,温度值存储于两个字节单元中,温度与存储器的对应关系为:整个温度值由 16 位二进制数表示,最高的 5 位为符号为,为零时代表正的温度值,为“1”时,代表的是负温度值,真正表示温度的是后 11 位数据,最低的四位表示小数位,其中 0 单元的高四位和 1 单元的低四位组合正好形成测得的温度整数值,这样我们在对读取的数据在进行处理时,只需将 0 单元的高四位和 1 单元的低四位通过重新组合,形成一个新的 8 位数据,这个数据便是测得的温度数值,但这是个 16 进制的数据,要输出 10 进制数进行显示,要进行相应的转换操作,至于将 16 进制数转换成 10 进制数据的汇编程序。数码扫描

7、输出的处理为了节省单片机端口,输出显示采用扫描的方式进行。利用人眼对光的停留效应,通过电子开关的控制,节合显示数据的配合,完成三位数码管的扫描显示。4、 温度测量电路目前市面上的数字温度传感器有很多,比如DS18B20、MAX6575 、 DS1722、MAX6635 等。用 DS18B20 可使系统结构更简单,可靠性更高。DS18B20 是 DALLAS 公司生产的一线式数字温度传感器,具有 3 引脚 TO92 小体积封装形式;温度测量范围为55125,可编程为 9 位12 位 A/D 转换精度,测温分辨率可达 0.0625,被测温度用符号扩展的 16 位数字量方式串行输出;其工作电源既可在

8、远端引入,也可采用寄生电源方式产生,多个DS18B20 可以并联到 3 根或 2 根线上,CPU 只需一根端口线就能与诸多 DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20 的外形如图 2 所示,有三个引脚,引脚定义: DQ 为数字信号输入/输出端, GND 为电源地, VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。 DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展的二进制补码读数形式提供,以 0.0625/LSB 形式表达,其中 S 为符号位。 这是 12 位转化后得到的 12 位数据,存储在 1

9、8B20 的两个 8 比特的RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于0.0625 即可得到实际温度。 例如+125 的数字输出为07D0H,+25.0625的数字输出为 0191H,-25.0625的数字输出为 FF6FH, -55的数字输出为 FC90H。 DS18B20 与单片机的接口电路很简单,如下图 3 所示。DS18B20 的 DQ 即 2 号端于单片机 P26 口相接,另外两个管脚一个接 5V 电源,另外一个管脚接地

10、。上拉电阻为 5.1K 的上拉电阻,分别接于单片机的 EA/VP 端与 P2.7 口。上拉电阻作用主要是若温度传感器开路或没接时,能起到上拉作用,使之为高电平,使后读电路保护作用。4.3 单片机最小系统4.3.1 单片机选型在本次设计中,主要用单片机 STC89C51 来控制。STC89C51 是与 8051 兼容的 CHMOS 微控制器。其 FLASH 存储器容量为 2KB。与 CHMOS 工艺的 89C51 一样,支持软件选择的空闲和掉电两种节电运行方式。性能如下:8 位 CPU工作电压范围 2.76V全静态工作方式:0Hz24 Hz ;一个可编程串行口;有片内精密模拟比较器;2KB 的

11、FLASH 存储;128B 的数据存储器;15 根输入/输出线;2 个 16 位定时/ 计数器;5 个中断源,2 个优先级。STC89C51 的 FLASH 存储器编程:STC89C51 单片机提供了 2KB 的片内 FLASH 程序存储器,它允许在系统改写或用非易失性存储器编程器编程。FLASH 存储器加密位:STC89C51 单片机有 2 个加密位。可以编程(P)或不编程(U)以获得不同的加密功能。4.3.2 最小系统图 4 单片机最小系统时钟复位电路如图 4 所示,采用 12MHz 的晶振。复位电路采用了微分型复位电路。复位电路的基本功能是:系统上电时提供复位信号直至系统电源稳定后撤销复

12、位信号为可靠起见电源稳定后还要经一定的延时才撤销复位信号以防电源开关或电源插头分-合过程中引起的抖动而影响复位,有效的防止系统有时会出现一些不可预料的现象,如无规律可循的“死机” 、“程序走飞”等。4.4 显示电路主要采用四位一体共阳极 LED 数码管组成,采用动态法显示,直接显示当前环境温度。P0 口接数码管的段码,P1.0-P1.3 接数码管的位线。按钮开关可选择小数点后显示一位或两位。 4.5 电源电路市电 220V 经过变压器 T1 降压,得到一个交流的 16v 电压,再经过四个整流二极管整流、C5 滤波得到直流电压,最后经过三端集成稳压管稳压,得到一个稳定的 5V 直流电压。2 软件

13、设计在此系统中,主要包括温度测量、显示、键盘。最主要的程序是温度测量部分。2.1 系统主流程图系统上电后,首先对 DS18B20 进行初始化设置,接着对 DS18B20 发出 SKIP ROM 指令(即跳过 ROM 存储器)延时 5ms 后,对 DS18B20发出启动温度转换命令,然后,从 DS18B20 的暂存储器中读出温度数据,接着对该数据进行转换,转换成当前环境温度。最后将实际温度与设置温度比较,超过限制则发出报警。2.2 温度测量设计通过 STC89C51 芯片的一个通用 I/O 口就可以实现对智能温度测量模块 DS18B20 的控制。读取 DS18B20 测量的温度主要是通过初始化命

14、令、ROM 功能命令、存储器功能命令、温度转换命令、读存储器命令等组成。冷端温度补偿三、系统软件算法分析程序命令时序总线命令序列如下:第一步: 初始化第二步: ROM 命令(跟随需要交换的数据)第三步: 功能命令 (跟随需要交换的数据)每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则一线器件不会响应单片机。 基于一线上的所有传输过程都时以初始化开始的, 初始化过程由单片机发出的复位脉冲和 DS18B20 的响应的应答脉冲组成。应答脉冲使单片机知道,总线上有 1-WIRE 设备,且准备就绪。系统中 CPU 采用12MHz 晶振 ,DQ 端接 P2.6。RESET 子程序RESE

15、T:CLR P2.6 ;拉低总线至少 480us,否则在温度较高时会无法完成复位。MOV R2,#130 ;在调试过程中发现延时 520uS,测温值可到 110,达到D1: DJNZ R2,D1 ;DS18B20 的技术参数。SETB P2.6 ;释放总线MOV R2,#20D4: DJNZ R2,D4JB P2.6,D0 ;总线若为低, 则复位成功;否则复位失败,返回。MOV R2,#110D2: DJNZ R2,D2 ;延时等待复位过程结束RET在单片机检测到应答(presence) 脉冲后,就可以发 ROM 命令,命令长度为 8 位。该命令字要通过 1-WIRE 通信协议规定的严格的写时

16、隙(Write time slots),逐位写到一线上,DS18B20 会自动接收到这些命令, 并准备响应相应的操作。本系统是单点使用, 故只须用到 SKIM ROM COMMAND(0CCH),这样单片机可以同时访问总线上的所有设备 ,而无须发出任何 ROM 代码信息。例如,单片机在发出 SKIP ROM 命令后跟随 CONVENT T (功能 COMMAND) 即启动温度转换命令(44H),值得注意的是:若 SKIP ROM 命令后跟的是 READ SCRATCHPAD(0BEH)命令( 包含其他读操作命令), 则该系统只能用于单点系统,否则将由于多个节点都响应该命令而引起数据冲突。在单片

17、机发出 ROM 命令后,接着就可以发送功能命令,然后 DS18B20就开始执行命令,本单点应用系统中主要用到 CONVENT T 和 READ SCRATCHPAD 在执行 READ SCRATCHPAD 命令时, 单片机可以通过发送 RESET 脉冲在任何时候中断数据传输。读、写时序 在对 DS18B20 进行 ROM 或功能命令字的写入及对其进行读出操作时,都要求按照严格的 1-WIRE 通信协议(时序),以保证数据的完整性。其中有写 0、写 1、读 0 和读 1 时序。在这些时序中,都由单片机发出同步信号,并且所有的命令字和数据在传输的过程中都是字节的 LSb 在前,这一点于基于其他总线

18、协议的串行通信格式(比如 SPI、 等)不同,它们通常是字节的 MSb 在前。读时序 DS18B20 仅在单片机发送读时隙( READ SLOT)时才发送数据,所以单片机在发送 READ SCRATCHPAD 命令后必须立即产生读时隙。所有的读时隙都要至少保持 60us,并且在两个读时隙间至少要有1us 的恢复时间。单片机通过把总线拉低至少 1us 来做为一个读时隙的开始,DS18B20 的输出数据在读时序下降沿过后 15us 内有效,所以在此期间单片机应释放总线,进入读数据状态以便读取数据,15us 后一线总线被上拉电阻拉为高电平,程序延时等待读时隙结束。读一字节子程序 出口条件:读出字节数

19、据在 A 中RE1W:MOV R6,#8 ;从 1-Wire 总线读出 1 字节数据的子程序RE1:CLR P2.6 ;拉低总线,发出读时序NOPSETB P2.6 ;释放总线,等待输入MOV R4,#02HRE2:DJNZ R4,RE2MOV C,P2.6 ;通过 RRC A 指令,从低位开始依次读入数据RRC AMOV R5,#20RE3:DJNZ R5,RE3 ;延时,等待读时隙结束SETB P2.6 ;恢复时间 DJNZ R6,RE1SETB P2.6 RET写时隙 写时隙也有两种,写 0 和写 1。主要用于单片机通过 1-WIRE 总线向DS18B20写入命令字。所有的写时隙也至少要

20、保持 60us,且在两个写周期之间至少要有 1us 的恢复时间。单片机通过拉低一线总线至少 1us 来产生写时隙。当写 1 时,单片机拉低总线,然后必须在 15us 内释放总线,总线被上拉电阻拉高。当写 0 时,单片机拉低总线后,然后必须继续保持总线为低(至少 60us)。DS18B20 在单片机发出写时隙后的 1560us 之间开始采样,在这期间内,若总线为高,则 1 被写入进 DS18B20;若总线为低,则 0 被写入 DS18B20。写一字节子程序入口条件:写入的字节在 AWR1W:MOV R3,#08H;向 1-Wire 总线写入 1 字节数据的位数W1: SETB P2.6;恢复时间

21、MOV R4,#02RRC A;通过 RRC A 指令依次向总线写入 1 字节的数据CLR P2.6;拉低总线,发出写时隙W2:DJNZ R4,W2MOV P2.6,C MOV R4,#20W3:DJNZ R4,W3DJNZ R3,W1SETB P2.6RET结 论 通过这次高精高精度数字式温度的设计和制作,让我感觉到在大学三年里,掌握了一定的专业知识和动手能力,在制作计的过程中学到了很多东西。比如了解了温度传感器 DS18B20 的功能,如何编写单片机 STC89C51 的程序来实现数码管直接显示环境温度。还有巩固了以前学过的知识,比如用制图Protel 99 SE 等等。最主要的还是使我能

22、利用硬件和软件的结合,来完成一个产品的设计和制作!总之,在这个毕业论文的完成过程中,让我感觉一种对知识的一种重温,让我知道如何有步骤和计划的完成一项任务,不过在这个其中也让我感觉到自己所学的知识还是有限的和解决问题的不够完善,希望自己今后做好每一件事情。数字温度传感器 DS18B20 介绍1、DS18B20 的主要特性1.1、适应电压范围更宽,电压范围:3.0 5.5V,在寄生电源方式下可由数据线供电1.2、独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯1.3、DS18B20 支持多点组网功能,多个 DS18B20 可以并联在

23、唯一的三线上,实现组网多点测温1.4、DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内1.5、温范围55125,在-10 +85时精度为0.51.6、可编程的分辨率为 912 位,对应的可分辨温度分别为 0.5、0.25、0.125和 0.0625,可实现高精度测温1.7、在 9 位分辨率时最多在 93.75ms 内把温度转换为数字, 12 位分辨率时最多在 750ms 内把温度值转换为数字,速度更快1.8、测量结果直接输出数字温度信号,以“一线总线 “串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力1.9、负压特性:电

24、源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 2、DS18B20 的外形和内部结构DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。DS18B20 的外形及管脚排列如下图 1:DS18B20 引脚定义: (1)DQ 为数字信号输入/输出端;(2)GND 为电源地;(3)VDD 为外接供电电源输入端(在寄生电源接线方式时接地) 。图 2: DS18B20 内部结构图3、DS18B20 工作原理DS18B20 的读写时序和测温原理与 DS1820 相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时

25、时间由 2s 减为 750ms。 DS18B20 测温原理如图 3 所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器 1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器 2 的脉冲输入。计数器 1 和温度寄存器被预置在55所对应的一个基数值。计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当计数器 1 的预置值减到 0 时,温度寄存器的值将加 1,计数器 1 的预置将重新被装入,计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测

26、温度。图 3 中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器 1 的预置值。图 3: DS18B20 测温原理框图MAIN:LCALLGET_TEMPER;调用读温度子程序MOVA,29HMOVC,40H;将 28H 中的最低位移入 CRRCAMOVC,41HRRCAMOVC,42HRRCAMOVC,43HRRCAMOV29H,ALCALLDISPLAY;调用数码管显示子程序AJMP MAIN;循环显示INIT_18B20:;这是 DS18B20 复位初始化子程序SETBP3.2NOPCLR P3.2MOVR1,#3;主机发出延时 537 微秒的复位低脉冲TSR1:MOV

27、R0,#107DJNZR0,$DJNZR1,TSR1SETBP3.2;然后拉高数据线NOPNOPNOPMOVR0,#25HTSR2:JNBP3.2,TSR3;等待 DS18B20 回应DJNZR0,TSR2LJMP TSR4;延时TSR3:SETBFLAG1;置标志位,表示 DS18B20 存在LJMP TSR5TSR4:CLR FLAG1;清标志位,表示 DS18B20 不存在LJMP TSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;时序要求延时一段时间TSR7:SETBP3.2RETGET_TEMPER:;读出转换后的温度值SETBP3.2LCALLINIT_18B

28、20;先复位 DS18B20JBFLAG1,TSS2RET;判断 DS18B20 是否存在?若 DS18B20 不存在则返回TSS2:;DS18B20 已经被检测到!MOVA,#0CCH;跳过 ROM 匹配LCALLWRITE_18B20MOVA,#44H;发出温度转换命令LCALLWRITE_18B20这里通过调用显示子程序实现延时一段时间,等待 AD 转换结束,12 位的话 750 微秒LCALLDISPLAYLCALLINIT_18B20;准备读温度前先复位MOVA,#0CCH;跳过 ROM 匹配LCALLWRITE_18B20MOVA,#0BEH;发出读温度命令LCALLWRITE_1

29、8B20LCALL READ_18B20;将读出的温度数据保存到35H/36HRETWRITE_18B20:;写 DS18B20 的子程序(有具体的时序要求)MOVR2,#8;一共 8 位数据CLR CWR1:CLR P3.2MOVR3,#6DJNZR3,$RRCAMOVP3.2,CMOVR3,#23DJNZR3,$SETBP3.2NOPDJNZR2,WR1SETBP3.2RETREAD_18B20:;读 DS18B20 的程序,从 DS18B20 中读出两个字节的温度数据MOVR4,#2;将温度高位和低位从 DS18B20 中读出MOV R1,#29H;低位存入 29H(TEMPER_L),

30、高位存入28H(TEMPER_H)RE00:MOVR2,#8;数据一共有 8 位RE01:CLR CSETBP3.2NOPNOPCLR P3.2NOPNOPNOPSETBP3.2MOVR3,#9RE10:DJNZR3,RE10MOVC,P3.2MOVR3,#23RE20:DJNZR3,RE20RRCADJNZR2,RE01MOVR1,ADECR1DJNZR4,RE00RET显示子程序display:mov a,29H;将 29H 中的十六进制数转换成 10 进制movb,#10;10 进制/10=10 进制divabmovb_bit,a;十位在 amova_bit,b;个位在 bmovdptr

31、,#numtab;指定查表启始地址movr0,#4dpl1:movr1,#250;显示 1000 次dplop:mova,a_bit;取个位数MOVCA,A+DPTR;查个位数的 7 段代码movp1,a;送出个位的 7 段代码clr p3.4;开个位显示acall d1ms;显示 1mssetb p3.4mova,b_bit;取十位数MOVCA,A+DPTR;查十位数的 7 段代码movp1,a;送出十位的 7 段代码clr p3.3;开十位显示acall d1ms;显示 1mssetb p3.3djnzr1,dplop;100 次没完循环djnzr0,dpl1;4 个 100 次没完循环ret1MS 延时(按 12MHZ 算)D1MS:MOVR7,#80DJNZR7,$RET7 段数码管 09 数字的共阳显示代码numtab:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H;0,1,2,3,4,5,6,7,8,9END

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报