河南理工大学多机温度检测系统设计方案.docx

上传人:b****5 文档编号:29897432 上传时间:2023-08-03 格式:DOCX 页数:32 大小:404.91KB
下载 相关 举报
河南理工大学多机温度检测系统设计方案.docx_第1页
第1页 / 共32页
河南理工大学多机温度检测系统设计方案.docx_第2页
第2页 / 共32页
河南理工大学多机温度检测系统设计方案.docx_第3页
第3页 / 共32页
河南理工大学多机温度检测系统设计方案.docx_第4页
第4页 / 共32页
河南理工大学多机温度检测系统设计方案.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

河南理工大学多机温度检测系统设计方案.docx

《河南理工大学多机温度检测系统设计方案.docx》由会员分享,可在线阅读,更多相关《河南理工大学多机温度检测系统设计方案.docx(32页珍藏版)》请在冰豆网上搜索。

河南理工大学多机温度检测系统设计方案.docx

河南理工大学多机温度检测系统设计方案

河南理工大学

《单片机应用与仿真训练》设计报告

 

题目:

多机温度检测系统设计

 

姓名:

卢超

学号:

3212080103xx

专业班级:

电气本12-03

指导老师:

王莉

所在学院:

电气工程与自动化学院

 

2013年05月20日

摘要

在生产生活中,温度是一个很重要的量,所以温度检测是不可缺少的。

在单片机的应用中,一个很重要的应用就是对温度进行检测。

本设计首先介绍温度测量的相关知识,接着介绍实现温度检测所必须的器件,并且给出硬件的原理图,然后逐步分析程序的各个主要模块以及程序的全貌,最后将总结一下本设计的技巧。

本设计是以AT89S52单片机为控制核心,利用新型一线制温度传感器DS18B20测量温度值,实现环境温度的检测和报警。

系统测温范围为-40℃—+85℃,测量精度为0.5℃。

用户可以自定义报警上、下限,一旦温度超过极限值,单片机便启动声光报警。

该系统精度高、测温范围广、报警及时,可广泛应用于基于单片机的测温报警场合。

系统抗干扰性强、设计灵活方便,适合在恶劣的环境下进行温度测量。

系统硬件电路包括传感器数据采集、温度显示、模式选择、上、下限报警主电路等。

整个装置的控制核心是AT89S52单片机。

温度传感器DS18B20采用外部电源供电,传感器输出引脚直接和单片机相连。

电路支持模式选择功能,可以选择设定报警极限值或显示当前温度值。

当被测温度越限时,报警主电路产生声光报警。

拨动开关可以对设定报警极限值进行写保护。

采用2片单片机,组成多机温度检测系统;下位单片机采集温度,通过串行通信传送至上位单片机;上位单片机用数码管显示温度大小;基本范围0℃~100℃;精度误差小于0.5℃;可以任意设定温度的上下限报警功能

关键字:

AT89S52;DS18B20温度传感器;数码管;测温报警

1.概述

1.1设计应用背景

在现代社会,不管是在工农业生产还是在人们的日常生活中,对温度的测量及控制都扮演着很重要的角色。

首先让我们了解一下多点温度检测系统在各个方面的应用领域:

电力、电讯设备之过热故障预知检测,空调系统的温度检测,保全与监视系统之应用,医疗与健诊的温度测试,化工、机械…等设备温度过热测。

温度检测系统应用十分广阔。

单片机的产生,使计算机正式形成了通用计算机系统和嵌入式计算机系统的分支。

温度检测系统的应用遍布社会生活的各个层面。

1.2系统概述

本设计运用主从分布式思想,由上位机,下位机多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统。

该系统采用RS-232串行通讯标准,通过上位机控制下位机进行现场温度采集。

温度值由下位机单独工作,实时显示当前各点的温度值,对各点进行控制。

上位机采用的是单片机基于数字温度传感器DS18B20的系统。

DS18B20利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。

本系统可以应用在大型工业及民用常温多点监测场合。

如粮食仓储系统、楼宇自动化系统、温控制程生产线之温度影像检测、医疗与健诊的温度测试、空调系统的温度检测、石化、机械等。

温度检测系统有则共同的特点:

测量点多、环境复杂、布线分散、现场离监控室远等。

若采用一般温度传感器采集温度信号,则需要设计信号调理电路、A/D转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。

这样,由于各种因素会造成检测系统较大的偏差;又因为检测环境复杂、测量点多、信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降。

所以多点温度检测系统的设计的关键在于两部分:

温度传感器的选择和主控单元的设计。

温度传感器应用范围广泛、使用数量庞大,也高居各类传感器之首。

2系统方案设计

2.1主控制部分设计

此设计采用AT89S52八位单片机实现。

单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。

而且体积小,硬件实现简单,安装方便。

既可以单独对多DS18B20控制工作,还可以与PC机通信.运用主从分布式思想,由一台上位机,下位机多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统,实现远程控制。

另外AT89S52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟

2.1.1对STC功能的认识

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

89C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

图1AT89S52

2.2传感器部分设计

该设计采用温度芯片DS18B20作为传感器测量温度。

在多点测温系统中,传统的测温方法是将模拟信号远距离采样进行AD转换,而为了获得较高的测温精度,就必须采用措施解决由长线传输,多点测量切换及放大电路零点漂移等造成的误差补偿问题。

采用数字温度芯片DS18B20测量温度,输出信号全数字化。

便于单片机处理及控制,省去传统的测温方法的很多外围电路。

且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。

在0—100摄氏度时,最大线形偏差小于1摄氏度。

DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。

这样,测温系统的结构就比较简单,体积也不大,且由于AT89S52可以带多个DSB18B20,因此可以非常容易实现多点测量.轻松的组建传感器网络。

采用温度芯片DS18B20测量温度,可以体现系统芯片化这个趋势。

部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。

而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。

所以集成芯片的使用将成为电路发展的一种趋势。

本方案应用这一温度芯片,也是顺应这一趋势。

综上所述,温度传感器以及主控部分都采用第二方案。

系统采用针对传统温度测温系统测温点少,系统兼容性及扩展性较差的特点,运用分布式通讯的思想。

设计一种可以用于大规模多点温度测量的巡回检测系统。

该系统采用的是RS-232串行通讯的标准,通过上位机进行现场的温度采集,温度数据既可以由下位机模块实时显示,也可以送回上位机进行数据处理,具有巡检速度快,扩展性好,成本低的特点。

2.2.1温度传感器DS18B20介绍

在本设计中使用的温度传感器是DS18B20,下面对DS18B20做简单的介绍。

如图1所示,DS18B20一线式数字温度传感器,由DS18B20的外观图可见,它有3个管脚TO-92小体积封装形式,脚GND接地,脚DQ是一线总线,是数字信号输入∕输出端,和单片机相连接,由单片机控制,管脚VDD是电源,外接供电电源。

测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。

其工作电源既可在远端引入,也可采用寄生电源方式产生。

CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口少,可节省大量的引线和逻辑电路。

⑴DS18B20的主要特性

①适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电。

②独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

③DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。

④DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。

⑤温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。

⑥可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

⑦在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

⑵DS18B20的外观图

图1DS18B20的外观图

DS18B20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的外形及管脚排列如上图。

DS18B20引脚定义:

    

①DQ为数字信号输入/输出端;

②GND为电源地;

③VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

图2:

DS18B20内部结构图

DS18B20有4个主要的数据部件:

①光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。

64位光刻ROM的排列是:

开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

②DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:

用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

表1:

DS18B20温度值格式表

 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

表2:

DS18B20温度数据表

例如+125℃的数字输出为07D0H(0x7D),+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FE6FH,-55℃的数字输出为FC90H。

③DS18B20温度传感器的存储器

  DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

④配置寄存器该字节各位的意义如下:

表3:

配置寄存器结构

TM

R1

R0

1

1

1

1

1

低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设置为0,用户不要去改动。

R1和R0用来设置分辨率,如下表所示:

(DS18B20出厂时被设置为12位)

表4:

温度分辨率设置表

R1

R0

分辨率

温度最大转换时间

0

0

9位

93.75ms

0

1

10位

187.5ms

1

0

11位

375ms

1

1

12位

750ms

⑶高速暂存存储器

高速暂存存储器由9个字节组成,其分配如表5所示。

当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。

对应的温度计算:

当符号位S=0时,直接将二进制位转换为

十进制;当S=1时,先将补码变为原码,再计算十进制值。

表2是对应的一部分温度值。

第九个字节是冗余检验字节。

表5:

DS18B20暂存寄存器分布

寄存器内容

字节地址

温度值低位(LSByte)

0

温度值高位(MSByte)

1

高温限值(TH)

2

低温限值(TL)

3

配置寄存器

4

保留

5

保留

6

保留

7

CRC校验值

8

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:

每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

表6:

ROM指令表

指令

约定代码

功能

读ROM

33H

读DS1820温度传感器ROM中的编码(即64位地址)

符合ROM

55H

发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。

搜索ROM

0FOH

用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。

为操作各器件作好准备。

跳过ROM

0CCH

忽略64位ROM地址,直接向DS1820发温度变换命令。

适用于单片工作。

告警搜索命令

0ECH

执行后只有温度超过设定值上限或下限的片子才做出响应。

表7:

RAM指令表

指令

约定代码

功能

温度变换

44H

启动DS1820进行温度转换,12位转换时最长为750ms

(9位为93.75ms)。

结果存入内部9字节RAM中

读暂存器

0BEH

读内部RAM中9字节的内容

写暂存器

4EH

发出向内部RAM的3、4字节写上、下限温度数据命令,

紧跟该命令之后,是传送两字节的数据。

复制暂存器

48H

将RAM中第3、4字节的内容复制到EEPROM中。

重调EEPROM

0B8H

将EEPROM中内容恢复到RAM中的第3、4字节。

读供电方式

0B4H

读DS1820的供电模式。

寄生供电时DS1820发

送“0”,外接电源供电DS1820发送“1”

⑶⑷DS18B20工作原理

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。

DS18B20测温原理如图3所示。

图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。

高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

2.2.2DS18B20温度检测

DS18B20连接从机的P1.6对温度进行检测。

DS18B20采用寄生电源供电方式,如下图所示。

单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转化操作时,总线上必须有强的上拉,上拉开启时间最长为500ms。

采用寄生电源供电方式时,VDD和GND端均接地。

由于单线制只有一根线,因此发送接口必须是三态的。

对DS18B20的设计,需要注意以下问题

(1)对硬件结构简单的单线数字温度传感器DS18B20进行操作,需要用较为复杂的程序完成。

编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。

尤其在使用DS18B20的高测温分辨力时,对时序及电气特性参数要求更高。

(2)有多个测温点时,应考虑系统能实现传感器出错自动指示,进行自动DS18B20序列号和自动排序,以减少调试和维护工作量。

(3)测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。

DS18B20在三线制应用时,应将其三线焊接牢固;在两线应用时,应将VCC与GND接在一起,焊接牢固。

若VCC脱开未接,传感器只送85.0℃的温度值。

(4)实际应用时,要注意单线的驱动能力,不能挂接过多的DS18B20,同时还应注意最远接线距离。

另外还应根据实际情况选择其接线拓扑结构。

3系统总体方案及硬件设计

3.1AT89S51单片机的最小相系统

图4AT89S52最小相系统

3.2DS18B20的I/O接线图

图5DS18B20接线图

3.3数据显示部分

图6数据显示部分

3.4整体电路

见附件二:

系统原理图

4软件设计

4.1概述

整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。

从软件的功能不同可分为两大类:

一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。

二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。

每一个执行软件也就是一个小的功能执行模块。

这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。

各执行模块规划好后,就可以规划监控程序了。

首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。

4.2主程序方案

主程序调用了数码管显示程序、温度测试程序、中断控制程序、单片机与PC机串口通讯等程序。

温度测试程序:

对温度芯片送过来的数据进行处理,进行判断和显示。

数码管显示程序:

向数码的显示送数,控制系统的显示部分。

中断控制程序:

实现循环显示功能。

串口通讯程序:

实现PC机与单片机通讯,将温度数据传送给PC机

将各个功能程序以子程序的形式写好,当写主程序的时候,只需要调用子程序,然后在寄存器的分配上作一下调整,消除寄存器冲突和I/O冲突即可。

程序应该尽可能多的使用调用指令代替跳转指令。

因为跳转指令使得程序难以看懂各程序段之间的结构关系。

而调用指令则不同,调用指令使得程序结构清晰,无论是修改还是维护都比较方便。

将功能程序段写成子程序的形式,除了方便调用之外,还有一个好处那就是以后写程序的时候如果要用到,就可以直接调用这个单元功能模块。

4.3DS18B20的相处理子程序

4.3.1DS18B20初始化子程序

DS18B20的使用必须遵循初始化到ROM操作命令到存储器操作命令的规定协议。

每完成一次测温,要重新进行初始化。

单片机先发一个复位脉冲,保持低电平时间最少480μs,最多不能超过960μs。

然后,单片机释放总线,等待DS18B20的应答。

DS18B20在接收到复位脉冲后等待15~60μs发出应答脉冲,应答脉冲持续60~240μs。

4.3.2DS18B20写控制字子程序

当主机把数据线从逻辑高电平拉到逻辑低电平的时候,写时间开始。

写一位数据最少需要60μs,两个数据位之间最少有1μs的间隔。

I/O总线拉低后,DS18B20在15μs后开始采样,如果线上是高电平,就写1,如果线上是低电平,就写0,写时间需要15~75μs,且在2次独立的写时间之间至少需要1μs的恢复时间。

4.3.3DS18B20读出温度子程序

当主机把数据线从高电平拉到低电平时,读时间开始。

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

读时间需15~60μs,且在2次独立的读时间之间至少需要1μs的恢复时间。

DSl8B20在读时间开始15μs后开始采样总线电平。

4.3.4DS18B20温度转换子程序

温度转换命令子程序主要是发温度转换开始命令,DS18B20用12位存贮温度值,最高位为符号位,低四位为小数,最高精度可达0.0625度。

温度数据转换完成的任务是把用二进制表示的温度转换成1个字节的两位压缩BCD码。

转换的方法有两种,一种是通过计算,另一种是通过查表,该装置设计方案采用前者。

计算温度子程序温度读取值进行BCD码的转换运算,并进行温度值正负的判断。

4.4各模块工作流程图

4.4.1上位机工作过程

图7上位机工作流程图

4.4.2DS18B20工作过程

图8DS18B20工作流程图

本次通讯中,测控系统分位上位机和下位机之间的通信,系统中单片机负责数据采集、处理和控制,上位机进行现场可视化检测,通信协议采用半双工异步串行通信方式,通过RS232的RTS信号进行收发转换,传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。

4.4.3下位机接收过程

图9下位机工作流程图

下位机采用的是单片机基于数字温度传感器DS18B20的系统。

DS18B20利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。

本系统可以应用在大型工业及民用常温多点监测场合。

如粮食仓储系统、楼宇自动化系统、温控制程生产线之温度影像检测、医疗与健诊的温度测试、空调系统的温度检测、石化、机械等。

源程序代码:

上位机源程序

#include

unsignedchart[]={0,0},tt1[]={0,0,0,0,0},tt2[4],flag=1。

unsignedchar*pt。

//用来存放温度值,测温程序就是通过这个数组与主函数通信的

unsignedcharcodedotcode[]={0,25,50,75}。

sbitDQ=P1^6。

sbitUP=P1^0。

sbitDW=P1^1。

sbitG=P1^2。

voiddelay(unsignedchari)

{

while(i--)。

}

voiddelay_18B20(unsignedinti)

{

while(i--)。

}

/**********ds18b20初始化函数**********************/

voidInit_DS18B20(void)

{

unsignedcharx=0。

DQ=1。

//DQ复位

delay_18B20(8)。

//稍做延时

DQ=0。

//单片机将DQ拉低

delay_18B20(80)。

//精确延时大于480us

DQ=1。

//拉高总线

delay_18B20(14)。

x=DQ。

//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay_18B20(20)。

}

/***********ds18b20读一个字节**************/

unsignedcharReadOneChar(void)

{

unsignedchari=0。

unsignedchardat=0。

for(i=8。

i>0。

i--)

{

DQ=0。

//给脉冲信号

dat>>=1。

DQ=1。

//给脉冲信号

if(DQ)

dat|

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

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1