职场文秘网

首页 > 演讲致辞 > 精彩演讲 / 正文

基于51单片机的数字温度计毕业设计

2020-12-07 03:00:51

 数字测温计设计

 摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。在工业生产中温度是常用的被控参数,而采用单片机来对这些被控参数进行控制已成为当今的主流。

 本文介绍了基于AT89S51单片机的测温系统,描述了利用DS18B20开发测温系统的过程,对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详实的分析,对各部分的电路也逐一进行了介绍,该系统灵活的实现了温度采集和显示,且可设定上下限报警温度,使用起来十分方便,适合于我们日常生活和生产中的温度测量,该系统结构相对简单,抗干扰能力较强,适合于不同环境下温度测量,有着广阔的应用前景。

  关键词:AT89S51单片机 DS18B20

 温度测量

  Abstract:With the progress and development of era,microcontroller technology has become popular in our life,in the work,the scientific research and various fields,has become a relatively mature technology.The temperature measurement method and device of the highlights is very important.Posed by the single chip temperature sensor and temperature measurement system can be widely applied in many fields.   目录 第1章 绪论 1

 1.2 选题的目的和意义 2 1.2.1选题的目的 2 1.2.2选题的意义 2 第2章 数字温度计的设计方案 4 2.1 设计方案的确立及论证 4 2.1.1 温度传感器DS18B20的选择 4 2.1.2 显示器的选择 5 2.1.3 单片机STC89C52的选择 5 第3章 系统硬件电路的设计 7 3.1 主控制器 7 3.1.1 AT89S51的介绍 7 3.1.2 DS18B20的介绍 9 3.1.3 DS18B20使用的注意事项 16 3.2 单片机最小系统设计 17 3.2.1 时钟电路 17 3.2.2 复位电路 18 3.2.3 最小系统 19 3.3 DS18B20与单片机接口电路的设计 20 3.4 显示电路的设计 20 3.4.1 数码管简介 20 第4章 系统程序的设计 24 4.1 系统设计内容 24 4.1.1 主程序 24 4.1.2 读出温度子程序 24 4.1.3 温度转换命令子程序 25 4.1.4 计算温度子程序 25 4.1.5 温度数据的计算处理方法 26 4.2 源程序 27 4.2.1 DS18B20的各条ROM命令 27 第5章 调试及性能分析 29 5.1 系统的调试 29 5.2 性能分析 30 结论 31 社会经济效益分析 32 致谢 33 参考文献 34 附录1 35 附录2 错误!未定义书签。

 附录3 36 附录4 37

 第1章 绪论 1.1选题的目的和意义 1.1.1选题的目的

 使用单片机AT89S51和DS18B20设计一个温度计,能够测量25 ~99℃之间的温度值,显示在LCD液晶屏上。温度计的测量精度为0.1℃。通过这次设计能够更加了解数字温度计的工作原理和熟悉单片机的发展和应用,巩固所学的知识。

 1.1.2选题的意义 随着单片机技术的不断发展,单片机在日用电子产品中的应用越来越广泛,温度传感器DS18B20具有性能稳定、灵敏度高、抗干扰能力强、使用方便等优点,广泛应用于冰箱、空调器、粮仓等日常生活中温度的测量和控制。

 又随着电子技术的发展,人们的生活日趋数字化,多功能的数字温度计可以给我们的生活带来很大的方便;支持“一线总线”接口的温度传感器简化了数字温度计的设计,降低了成本。

 本课题研究的重要意义在于生产过程中随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数,就需要受制于现代信息基础的发展水平。在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)中,传感器属于信息技术的前沿尖端产品,尤其是数字温度传感器技术,在我国各领域已经应用的非常广泛可以说是渗透到社会的每一个领域,与人民的生活和环境的温度息息相关。

  第2章 数字温度计的设计方案 2.1 设计方案的确立及论证 基本功能要求:

 (1)温度测量范围:20~100度 (2)测量精度:0.5度 (3)显示方式:四位显示

  (4)能够运用Protues仿真 扩展功能要求:

 (1)做出实物并调试成功 (2)多点测试 (3)多点温度同时显示 2.1.1 温度传感器DS18B20的选择 方案一:水银温度计

 在生活中我们经常看到水银温度计,它只能作为就地监督的仪表,用它来测量温度时,由于读数时用眼睛观察,主观因素大,容易造成误差大,而且不同是水银温度计量程不同,在读数前需要看清它的最小分度值,还有它有热惯性,需要等到温度计达到稳定状态后才能读数,比较麻烦,并且水银有毒,不小心打破后接触到水银,对人体伤害大,所以危险性较高。

 方案二:传统测温元件

 传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,其缺点有:硬件电路复杂;软件调试复杂;制作成本高。

 方案三:DS18B20传感器测温

 本设计采用DS18B20作为检测元件

 DS18B20可以直接读出被测温度值,特点是成本低,结构简单,便于使用。

  所以本设计采用方案三,用DS18B20作为温度传感器。

 2.1.2 显示器的选择 数码管足以实现温度的显示,所以在本设计中采用数码管显示。

 2.1.3 单片机AT89S51的选择 对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。单片机AT89S51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电,因此选用AT89S51更适合。

 按照系统设计功能的要求,确定系统由4个模块组成;主控制器、测温电路、显示电路。数字温度计总体设计电路结构框图如图2-1所示:

  AT89S51 复位电路 显示电路 温度传感器 时钟电路

 图2-1

 系统框图

  第3章 系统硬件电路的设计 3.1 主控制器 单片机AT89S51是低功耗,高性能 CMOS8 位单片机,片内含 4kbytes 的可编程的 Flash 只读程序存储器,兼容标准 8051 指令系统及引脚。它集 Flash 程序存储器既可在线编程(ISP),也可用传统方法进行编程。

 3.1.1 AT89S51的介绍

 AT89S51主要特性及引脚如下 ●与MCS-51 兼容 ●4K字节可编程闪烁存储器 ●全静态工作:0Hz-24Hz ●三级程序存储器锁定 ●128*8位内部RAM ●32可编程I/O线 ●两个16位定时器/计数器 ●5个中断源 ●可编程串行通道 ●低功耗的闲置和掉电模式 ●片内振荡器和时钟电路

 图 3-2 AT89S51单片机引脚图 AT89S51 单片机为40 引脚双列直插式封装。其引脚排列和逻辑符号如图3-2 所示。各引脚功能简单介绍如下:

 ●VCC:供电电压

  ●GND:接地

  ●P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P0口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。

 ●P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

 ●P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

 ●P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为AT89S51的一些特殊功能口:

 P3.0 RXD(串行输入口) l P3.1 TXD(串行输出口) l P3.2 INT0(外部中断0) l P3.3 INT1(外部中断1) l P3.4 T0(记时器0外部输入) l P3.5 T1(记时器1外部输入) l P3.6 WR (外部数据存储器写选通) l P3.7 RD (外部数据存储器读选通) 同时P3口同时为闪烁编程和编程校验接收一些控制信号。

 ●RST、ALE / PROG 、PSEN、XTAL1、XTAL2:等等笔者就不一一赘述,详细请参照相关资料。

 3.1.2 DS18B20的介绍 DS18B20数字温度传感器接线方便,耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

 图3-3

 DS18B20的实物管脚分布图 DS18B20引脚及特点

 (1)引脚功能说明 GND是地址信号; DQ是数据输入/输出引脚,开漏单总线接口引脚,当被用在寄生电源下,也可以向器件提供电源; VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

 (2)DS18B20功能特点 1、采用单总线技术,只需一根I/O线,在一根线上能挂接多个DS18B20。

 2、每个DS18B20具有一个特有的64位序列号,依据序列号访问地应的器件。

 3、低压供电,电源范围从3.0~5.5V,可以本地供电,也可以直接从数据线窃取电源(寄生电源方式)。

 4、测温范围为-55℃~+125℃,在-10℃~+85℃范围内误差为±0.5℃。

 用户可自设定报警上下限温度。

 5、报警搜索命令可识别和寻址超过程序限定温度(温度报警条件)的器件。

 6、分辨率由用户设置为9~12位。

 7、D将检测到温度值转化为数字量,与主控制器进行数据通信。

 8、电源极性接反时,温度计不能正常工作。

 DS18B20的内部结构 (1)64位激光ROM

 每一个DS18B20包括一个唯一个64位长的ROM编码。64位ROM的位结构如下图3-5所示。开始的8位是单线产品系列编码(DS18B20编码是10h);接着的48位是每个器件唯一的系列号;最后的8位是开始56位CRC检验码。64位ROM和ROM操作控制部分允许DS18B20作为一个单线器件工作并遵循“单线总线系统”一节中所详述的单线协议。直到ROM操作协议被满足,DS18B20控制部分的功能是不可访问的。

 8位检验CRC

 48位序列号

 8位工厂代码(10H)

  MSB

  LSB

 MSB

  LSB

  MSB

 LSB 图3-5

 64位ROM结构框图 (3)运用—报警信号

  TH或TL的最高比较位对应于16位温度寄存器符号位。若温度测量的结果低于TL或者高于TH,器件内告警标志将置位。每次温度测量更新此标志。只要告警标志置位,DS18B20将对告警搜索命令做出响应。这允许并联接许多DS18B20,同时进行温度测量。

  (4)CRC产生

  DS18B20有一存贮在64位ROM的最高有效字节内的8位CRC。总线上的主机可以根据64位ROM的前56位计算机CRC的值并把它与存贮在DS18B20内的值进行比较以决定ROM的数据是否已被主机正确地接收。CRC的等效多项式函数为:

 CRC=X8+X5+X4+1

  (公式3.1)

  DS18B20也利用与上述相同的多项式函数产生一个8位CRC值并把此值提供给总线的主机以确认数据字节的传送。当存贮在DS18B20内或由DS18B20计算得到的CRC值与总线主机产生的值不相符合时,在DS18B20内没有电路来阻住命令序列的继续执行。

 (5)存贮器

  DS18B20的存贮器由一个高速暂存(便笺式)RAM和一个非易失性、电可擦除EEPROM组成,后者存贮高温度和低温度触发器TH和TL。暂存存贮器有助于在单线通信时确保数据的完整性。数据首先写入暂存存贮器,在那里它可以被读回。当数据被校验之后,复制暂存存贮器的命令把数据传送到非易失性EEPROM。这一过程确保了更改存贮器时数据的完整性。

 DS18B20的测温原理

  如图3-11所示,图中低温度系数振荡器的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。

 预置 斜率累加器 低温度系数振荡器 减法计数器1 预置 减到0 温度寄存器 计数比较器 高温度系数振荡器 减法计数器2 减到0

 图3-11

 DS18B20测温原理图

  图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。高温度系数振荡器决定计数门的开启时间,测量前,将-55℃所对应的基数分别置入减法计数器和温度寄存器中,减法计数器和温度寄存器被预置在-55℃所对应的基数值。

  另外,DS18B20单线通信功能是分时完成的,所以读/写时序很重要。系统对DS18B20的各种操作必须按协议进行。

 3.2 单片机最小系统设计

 单片机最小系统就是指能使单片机工作的最少的器件构成的系统。因为单片机已经包含了数据存储器和程序存储器,所以只要在其外部加上时钟电路和复位电路就可以构成单片机最小系统。

 3.2.1 时钟电路

 图3-12是时钟电路的PROTEUS仿真图。

  图3-12时钟电路

 单片机允许的振荡晶体可在1.2~24MHz之间选择,一般为11.0592MHz。电容C2,C3的取值对振荡频率输出的稳定性、大小及振荡电路起振速度有一定的影响,可在20~100pF之间选择,典型值位30pF。

 3.2.2 复位电路

 计算机每次开始工作,CPU和系统中的其他部件都必须要有一个确定的初值,即复位状态。图3-13是单片机复位电路仿真图。

 图3-13 复位电路

 单片机RST引脚是高电平有效。单片机在上电瞬间C1充电,RST引脚端引出正脉冲,只要RST端保持两个机械周期以上的高电平,单片机就能复位。在单片机工作后,如果还想再次复位,只需按下开关,单片机就能重新变成复位状态。

 当晶体振荡频率为12MHz时,RC的典型值为C=10μF,R=8.2KΩ。

 3.2.3 最小系统

 图3-14是单片机最小系统的完整仿真图。

 图3-14 单片机最小系统 3.3 DS18B20与单片机接口电路的设计

  DS18B20可以采用两种供电方式:一种是电源供电方式,另一种是寄生电源供电。

 当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最长为500ms。采用寄生电源供电方式时,VDD和GND端接地。因为单线制只有一根线,所以发送接口必需是三态的。

 3.4 显示电路的设计 3.4.1 2.6.1 LED数码管主要技术参数

 数码管使用条件:

 a、段及小数点上加限流电阻 b、使用电压:段:根据发光颜色决定;   小数点:根据发光颜色决定 c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA     峰值电流 100mA 上图是七段数码管引脚图,其中共阳极数码管的引脚图和共阴极的是一模一样的,4位数码管的引脚图数码管的使用注意说明:

 (1)数码管表面不要用手触摸,不要用手去弄引角; (2)焊接温度:260度;焊接时间:5S (3)表面有保护膜的产品,可以在使用前撕下来。

 2.6.2 LED数码管的引脚说明 分为共阳极与共阴极两种, 对于单个数码管,从正面看进去,以左下角那个脚为1脚,逆时针方向为110脚,左上角那个脚便是10脚了,上两个图的数字分别与这10个管脚对应。注意,3脚和8脚是连通的,这两个都是公共脚。

 另外常用的是四位数码管,内部的数码管共用a~dp这几根数据线,由于里面有4个数码管,加上a~dp,一共有12个引脚,下图是一个共阴四位数码管内部结构图(。引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,下图中的数字与之一一对应。

  图2-18位共阳数码管内部结构 2.6.3数码管编码说明

 4位数码管编码说明,如4.5表所示:

 表4.5 控制命令表

 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

  e d dp c g b f a

 0 0 0 1 0 1 0 0 0 28H 1 1 1 1 0 1 0 1 1 EBH 2 0 0 1 1 0 0 1 0 32H 3 1 0 1 0 0 0 1 0 A2H 4 1 1 1 0 0 0 0 1 E1H 5 1 0 1 0 0 1 0 0 A4H 6 0 0 1 0 0 1 0 0 24H 7 1 1 1 0 1 0 1 0 EAH 8 0 0 1 0 0 0 0 0 20H 9 1 0 1 0 0 0 0 0 A0H H 0 1 1 0 0 0 0 1 61H L 0 0 1 1 0 0 0 1 3DH - 1 1 1 1 0 1 1 1 F7H C 0 0 1 1 1 1 0 0 3CH 第4章 系统程序的设计 4.1 系统设计内容 系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、测量序列号子程序、显示数据刷新子程序等。

 4.1.1主程序

  主程序主要功能是负责温度的实时显示、读出处理DS18B20的测量温度值。主程序流程图如图4-1所示:

 开始 调用显示子程序 显示当前四路温度 初始化 读取并显示序列号

 图4-1

 主程序流程图 4.1.2读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。

 读出温度子程序流程图如图4-2所示:

  开始 复位DS18B20 发跳过ROM命令 发出温度转换命令 转换完毕 复位DS18B20 发匹配ROM命令 发1个DS18B20序列号 读温度值 存入储存器 指向下一个 延时 N Y

 图4-2

 读出温度子程序流程图 4.1.3 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时,转换时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图4-3所示:

 发DS18B20复位命令 发跳过ROM命令 发温度转换开始命令 结束

 图4-3

 温度转换命令子程序流程图 4.1.4计算温度子程序

 计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。计算温度子程序流程图如图4-4所示:

 开始 温度零下? 温度值取补码置“-”标志位 计算小数位温度BCD值 计算小数位温计算小数位温度BCD值 度BCD值 结束 置“+”标志 N Y

 图4-4

 计算温度子程序流程图 4.1.5 温度数据的计算处理方法

  从DS18B20读取出的二进制值必须转换成十进制值,才能用于字符的显示。DS18B20的转换精度为9~12位,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。

 通过观察表4-1可以发现,一个十进制与二进制间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一字节,这个字节的二进制化为十进制后,就是温度值的百、十、个位字节,所以二进制值范围是0~F,转换成十进制小数就是0.0625的倍数(0~15倍)。这样需要4位的数码管来表示小数部分。实际应用不必这么高的精度,采用1位数码管来显示小数,可以精确到0.1℃。

 表4.5 二进制与十进制的近似对应关系表 小数部分二进制值 0 1 2 3 4 5 6 7 8 9 A B C D E F 十进制值 0 0 1 1 2 3 3 4 5 5 6 6 7 8 8 9 4.2 源程序 4.2.1 DS18B20的各条ROM命令

 (1)Read

 ROM[33H]。这条命令允许总线控制器独到DS18B20的8位系列编码、唯一的序列号和8位CRC码。只要在总线上存在单只DS18B20时,才能使用该命令。如果总线上有不止一个从机,则当所有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起形成相“与”的效果)。

 (2)Match ROM[55H].这是一条匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20.只有与64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作.所有与64位ROM序列不匹配的从机都将等待复位脉冲.这条命令在总线上有单个或多个器件时都可以使用. (3)Skip ROM[0CCH].这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间.如果总线上不止一个从机,则在Skip ROM命令之后跟着发一条读命令.由于多个从机同时传送信号,所以总线上就会发生数据冲突(漏极开路下拉效果相当于相“与”)。

 (4)Search ROM[0F0H]。当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少个器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。

 (5)Alarm Search[0ECH]。这条命令的流程与Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况下,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。

 (6)Write Scratchpad[4EH]。这条命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。

 (7)Read Scratchapad[0BEH]。这条命令读取暂存器的内容。读取将从第一字节开始,一直进行下去,直到第九字节(CRC)读完。如果不想读完所有字节,则控制器可以在任何时间发出复位命令来中止读取。

 (8)Copy Scratchpad[48H]。这条命令把暂存器的内容拷贝到DS18B20的E²PROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E²PROM存储器,则DS18B20就会输出一个0;如果拷贝结束,则DS18B20输出1。如果使用寄生电源,则总线控制器必须在这条命令发出后立即启动强上拉,并最少保持10ms。

 (9)Convert T[44H]。这条命令启动一次温度转换而无需其他数据。温度转换命令被执行后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换,则DS18B20将在总线上输出0;如果温度转换成功,则输出1。如果使用寄生电源,则总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。

 (10)Recall E²[0B8H]。这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读数据隙,器件会输出温度转换忙的标识:0表示忙;1表示完成。

 (11)Read Power Supply[0B4H]。若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式0:0表示寄生电源;1表示外部电源。

 第5章 调试及性能分析 5.1 系统的调试 硬件调试比较简单,首先检查电路的焊接是否正确,然后可以用万用表测试或通电检测。

 软件测试本文利用Proteus与KEIL C51对单片机多点温度测量系统进行了仿真设计.从本文结果可以看出,利用Proteus进行单片机系统的仿真设计可以极大地简化单片机程序在目标硬件上的调试工作,大幅度节省制作电路板的时间,对于提高产品的开发效率、降低开发成本等有重要作用.

  硬件电路的简单是以软件的复杂为代价的,所以在程序编写和调试的过程中稍一粗心就会出现错误,包括时间延时不够,设置参数的类型有误等错误。

 本课题通过分析对比各种不同的温度传感器,选定DS18B20,这种单总线数字温度传感器的通信方式比较独特,软件编写要求的比较新颖,特点突出。用其构建的系统有很多优点:硬件连线简单,省去了使用模拟传感器要进行放大、A/D转换等工作,由于它的级联功能,一条总线可挂接多个传感器测量不同位置的温度,根据DS18B20唯一的序号识别不同传感器在各自位置的温度。

 需要注意的是, 在系统安装及工作之前应将主机逐个与DS18B20 挂接,以读出其序列号。另外,由于DS18B20 单线通信功能是分时完成的,遵循严格的时隙概念,因此, 系统对DS18B20 和各种操作必须按协议进行,即:初始化DS18B20 (发复位脉冲)—发ROM功能命令—发存储器操作命令—处理数据。现场温度直接以“一线总线”的数字方式传输,每一个自带地址,大大减少了系统的电缆数,提高了系统的稳定性和抗干扰性。

 通过调试成型系统发现了DS18B20除了上述优点外,还有一些缺点,如:简单的硬件连接的代价是复杂的软件时序,DS18B20在测量温度的时候,灵敏度不够高,温度快速变化时无法迅速显示出其变化。通过一系列的实验发现:由DS18B20构建的测温小系统适用于环境温度监控,对温度小变化较敏感;不适合应用于要求实时性强、温度跨度大的测温方式。

  5.2 性能分析

  性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。由于DS18B20的精度很高,所以误差指标可以限制在±0.1℃以内。

 另外,0~100℃的测量范围使得该温度计完全适合一般的应用场合,其低压供电特性可以做成电池供电的手持电子温度计。

 DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意一下问题:

 ①DS18B20工作时电流高达1.5mA,总线上挂接点数较多且同时进行转换时要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MOSFET供电。

 ②连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配等问题。

 ③在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号。一旦某个DS18B20接触不好或短线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时要给予一定的重视。

  结论 该基于DS18B20的多点温度测量系统具有硬件结构简单、易于制作、价格低廉、测量值精确和易于操作等许多优点,但由于实验室条件所限,暂时只做四点的温度测量。但在实际应用中可根据具体情况进行更多点的扩展和对多点进行控制。随着现代信息技术的飞速发展和传统工业改造的逐步实现,基于DS18B20的多点温度测量系统已经广泛应用于控制、化工等诸多领域。总之,本次毕业设计顺利完成,基本达到了毕业设计的要求。

 本文在深入分析多点智能测温系统的工作原理基础上,完成了该系统设计和调试任务,并且系统的性能误差达到了任务书的要求,使之能达到现场运行水平。

 总结一个学期的论文工作,得到以下结论:

 1.针对现有测温系统的特点,提出了一套应用数字式温度传感器DS81B20组建温度测控网络新型方案,该方案的突出特点是系统的数字化、快速化及其经济实用性。

  2.以单总线为基本结构,采用ATMEL公司的 AT89S51单片机为总线命令,实现与DSl8B20的总线接口,并提供具体电路设计。

  3.软件编程采用模块化、结构化设计,易于修改和维护。

  由于时间和精力的限制,对后续的研究还应在以下方面逐步完善:

 1.应用软件的完善。温度采集方面,一次命令全部单总线上的DS18B20进行温度转换,减少系统所需时间。

  2.进一步完善系统的可靠性。由于实际经验的欠缺,设计上难免有考虑不周之处。当某一个传感器出现故障时,虽然系统能发现该测温点故障,但是更换传感器时涉及到其序列号的修改和应用程序的修改,这些还需要在今后应用时加以完善。

  3.可以增加控制部分,以后在该部分进行PID算法控制,以提高控制精度。

 总之 ,本论文在新型数字温度测控系统方面做了一定的研究工作。该系统初步完成了温度测控方案的预定目标,为今后实现数字化与网络化的温度测控系统工程提供了一种参考。

 社会经济效益分析 本温度测控系统可以产生的社会经济效益是显而易见的。在工农业许多场合,温度测量和控制对生产起着非常重要的作用,通过温度测控,可以更好的提高工农业生产的产量和效率。

 本设计利用数字化的温度传感器作为载体,以AT89S51单片机为控制核心,通过对所测量的温度值进行控制和数据上传,将数字信息上传给上位机进行进一步的处理,从而可以实现这套系统的商品化和技术服务的稳定性。本设计所用的DS18B20温度传感器价格在每个二十元左右,AT89S51单片机的价格也不过十元,再加上其它的元器件和外围的芯片及端口,总成本完全可以控制在一百元人民币以内。这套系统可以产生的功能强大,扩展温度传感器端口后,可以同时对多个传感器进行测量和控制,并且只需添加DS18B20的初始化程序和与本设计两点测控类似的程序即可以实现,所以程序修改上也比较方便。

 本系统可以实现产品的专业化和工厂化大生产,应用领域广泛,例如,可以对小区内的供暖系统进行多点温度监控,实时处理DS18B20温度传感器上传的数据;可以在对温度要求比较严格的车间内进行多点温度测控,以保持室内的精准温度;可以在化学反应炉内安装本系统,使化学反应可以在精确的温度条件下进行等等。

  参考文献 [1] 沙占友. 集成温度传感器原理与应用. 北京:机械工业出版社,2002, 84~95. [2] 刘君华. 智能传感器系统. 西安:西安电子科技大学出版社,1999,83~105. [3] 沙占友. 智能化传感器原理与应用. 北京:电子工业出版社,2004,99~108. [4] 赵负图. 传感器集成电路手册. 北京:化学工业出版社,2002,692~703. [5] 张毅刚. MCS-51单片机原理及应用. 哈尔滨:哈尔滨工业大学出版社,2004,81~94 [6] 李玉峰,倪虹霞 MCS-51系列单片机原理与接口技术. 北京:人民邮电出版社,2004,187~216.

 [7]胡汉才.单片机原理及其接口技术(第2版)[M].北京:清华大学出版社,2004:49-75. [8]楼然苗,胡佳文,李光飞,刘玉良,俞红杰,李良儿.单片机实验与课程设计[M].杭州:浙江大学出版社,2010:127-148 [9]刘雨刚,洪炳林,郝文慧.基于DS18B20的高精度矿用温度计传感器设计[J].国外电子元器件,2006(12):35-37. [10]黄亚,张益维.温度传感器DS75LX与单片机的接口技术[J].国外电子元器件,2007(10):47-49. [11]胡雪海.单片机原理及应用系统设计[M].北京:电子工业出版社,2004:59-75. [12]谈根林,李慧文,汪庆宝,李礼贤.微型计算机及其在测量中的应用[M].北京:计量出版社,1983:89-105. [13] 楼然苗,李光飞 [14]胡翔骏.电路分.单片机课程设计指导[M].北京:北京航空航天大学出版社,2007:46-55.析(第2版)[M].北京:高等教育出版社,2007:68-80. [15] MAXIM NEW Releases Data Book. volum 1998 [16] omas C.Bartee.Computer Architecture and Logic Design[J].McGraw-Hill Inc. 1991.9 [17] G Jiang M Zhang, X Xie, S Li.Application on temperature control of DS18B2[J].Control Engineering of China, 2003 附录1电路原理图

 数字温度计原理图 测附录2 温度计实物图

  附录3测量序列号实物图

 附录4温度计程序 #include<reg52.h> #define uchar unsigned char #define uint unsigned int

 sbit DQ=P1^0;

  //数据传输线接单片机的相应的引脚

 sbit smg1=P2^3;//第一位数码管 sbit smg2=P2^2;//第二位数码管 sbit smg3=P2^1;//第三位数码管 sbit smg4=P2^0; //符号位第四位数码管,当为负温时候显示负号。

  unsigned char tempL=0;

 //临时变量低位(无符号字符变量) unsigned char tempH=0;

  //临时变量高位 unsigned int tempa;

 //温度值(整型变量)

 uchar TH=60;

  //设置初始高温度 uchar TL=8;

 //设置初始低温度

 uchar num;

 uchar flag=0;//符号位标志,0为正温度,1为负温度 uchar xianshi=0; unsigned int temp,temp1; unsigned char code smg_du[]={0x3f,0x24,0x5d,0x75,0x66,0x73,0x7b,0x25,0x7f,0x77,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

 unsigned int tt=0; void delay_50us(uint t) {

 uchar j;

 for(;t>0;t--)

  for(j=19;j>0;j--); }

 ///DS18B20 void DS18_delay(int useconds)//延时函数

 {

 int s;

 for (s=0; s<useconds;s++);

 } unsigned char Init_DS18B20(void) {

 unsigned char x=0;

 DQ=0;

  //发送复位脉冲

 DS18_delay(29);

  //延时(>480ms)

 DQ=1;

  //拉高数据线

 DS18_delay(3);

  //等待(15~60ms) 等待存在脉冲

  x=DQ;

 //获得存在信号(用于判断是否有器件)

  DS18_delay(25);

 // 等待时间隙结束

  return(x);

 //返回存在信号,0 = 器件存在, 1 = 无器件 } ReadOneChar(void)//读一个字节 {

 unsigned char i=0;

  unsigned char dat=0;

  for (i=8;i>0;i--)

  {

 DQ=1;

  DS18_delay(1);

  DQ=0;

  dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)

  DQ=1;

  if(DQ)

  dat|=0x80;

  DS18_delay(4);

  }

  return(dat); }

 WriteOneChar(unsigned char dat)//有参函数,功能是“写“,而写的内容就是括号内的参数 {

  unsigned char i=0;

  for(i=8;i>0;i--)

  {

  DQ=0;

 DQ=dat&0x01;

  DS18_delay(5);

  DQ=1;

  dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)

 }

 DS18_delay(4); } unsigned int ReadTemperature(void)//返回读取的温度. {

  unsigned int tt;

  Init_DS18B20();

  //初始化,调用初始化函数

 WriteOneChar(0xcc);

 //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)

 WriteOneChar(0x44);

  //启动温度转换,调用写函数,写0x44指令码(启动温度转换)

 DS18_delay(125);

  //转换需要一点时间,延时

 Init_DS18B20();

 //初始化,调用初始化函数

 WriteOneChar(0xcc);

 //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号?

 WriteOneChar(0xbe);

  //调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位)

 tempL=ReadOneChar();

  //读出温度的低位LSB

 tempH=ReadOneChar();

  //读出温度的高位MSB

  if(tempH>=0x0f)

  {

  flag=1;tt=tempH;tt=tt<<8;tt=tt+tempL;tt=~tt;tt=tt+1;tempa=tt*6.25;

 }

  else {tempa=((tempH*256)+tempL)*6.25; flag=0;} //温度转换,扩大100返回

 return(tempa);//运算结果返回到函数

 } ///DS18B20

  void delay(uint z) {

 uint x,y;

 for(x=z;x>0;x--)

  for(y=110;y>0;y--); } void display(void) {

 xianshi=0;

 if(flag==1)//显示负号

 {

 P2=0XFF;//关位选

 P0=0X40;//产生负号位,

 smg4=0;

 //开通第四位数码管

 delay_50us(20);//数码管延时

  }

 if((temp/100)!=0)

  {

  P2=0XFF;

  P0=P0=smg_du[temp/100];

  smg3=0;

  delay_50us(20);

  xianshi=1;

 }

 if((xianshi==1)||((temp%100/10)!=0))

 {

  P2=0XFF;

  P0=smg_du[temp%100/10];

  smg2=0;

  delay_50us(20);

  }

 P2=0XFF;

 P0=smg_du[temp%10];

 smg1=0;

 delay_50us(20);

 P2=0XFF;

  } void main() {

 for(num=0;num<80;num++) //防止上电显示初始值85

 {

  temp=ReadTemperature();

 DS18_delay(65535);

  DS18_delay(65535);

 DS18_delay(65535);

  }

 while(1)//显示温度

  {

 temp1=ReadTemperature()/100;

 DS18_delay(60);

 temp=ReadTemperature()/100;

 DS18_delay(60);

 if(temp1==temp)

 display();

  } }

Tags: 温度计   毕业设计   单片机  

搜索
网站分类
标签列表