课程设计温度检测系统修改版.docx
《课程设计温度检测系统修改版.docx》由会员分享,可在线阅读,更多相关《课程设计温度检测系统修改版.docx(19页珍藏版)》请在冰豆网上搜索。
课程设计温度检测系统修改版
注:
此文为课程设计论文,仅供朋友们参考使用,请勿照搬,请勿用于参考之外的其他用途,谢谢合作。
下载完成后请给好评,多关注下本人的其他文档,共同进步!
绪论
本次设计任务我选择的是基于单片机的温度计测量环境温度。
随着科技的进步,现代测温应用中,温度计逐步向数字化方向发展。
传统的机遇物理方法的温度计功能单一,而数字温度计以其便携,检测精度高,功能多等优点应用的越来越广泛。
随着技术的发展,一些环境比较恶劣的场合中也能觅得数字温度计的踪迹。
目前基于单片机的温度传感器设计的数字温度计已经很成熟,各种精度很高的温度计不断推出。
数字温度计要求检测的精度必须高于控制的精确度,否则无从实现控制的精度要求。
所以精度已经成为数字温度计的一项重要的性能参数。
因此追求高精度是数字温度计的一个目标。
不仅如此,检测还涉及国计民生各个部门,可以说在所以科学技术领域无时不在进行检测。
科学技术的发展和检测技术的发展是密切相关的。
现代化的检测手段能达到的精度、灵敏度及测量范围等,在很大程度上决定了科学技术的发展水平。
同时,科学技术的发展达到的水平越高,又为检测技术、传感器技术提供了新的前提手段。
目前市场上出现了很多传感器,很多精度高的传感器已经出现,而且精度越来越高。
数字温度计未来将会更精确、更人性化,为我们做出更多贡献。
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数字单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
在本次设计中,主要从功能组合,硬件模块,程序算法等几个方面探讨基于单片机的数字温度计的设计。
一、设计要求
本次设计主要介绍了单片机控制下的环境温度检测系统,详细介绍了其硬件和软件设计,并对其各个功能模块做了详细介绍,其主要功能和指标如下:
(1)利用温度传感器测量某一点的环境温度;
(2)测量范围为-55℃~+125℃,测量精度为±0.5℃;
(3)能够电子显示实际测得的温度值;
(4)当温度不在上下限范围内时会报警,并能根据需要设定报警上下限。
二、设计方案确定
温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要意义。
测量温度的关键是温度传感器,本次设计中,我考虑了两种设计方案。
(1)方案一
采用热电偶温差电路测温,温度检测部分使用低温热偶,热电偶由两个焊接在一起不同金属导线组成,热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考节点保持在已知温度并测量该电压,便可推断出检测节点的温度。
数据采集部分使用带有A/D通道的单片机,将随温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,将被测温度显示出来。
热电偶电路的优点是测温范围广,且体积下。
但是存在输出电压小、容易受到来自导线环路的噪声影响以及漂移较高的缺点,并且需要设计A/D转换电路,因此可靠性较差、测量温度准确率低。
(2)方案二
采用数字温度传感器,将温度直接转化成数字信号经单片机输出。
数字温度传感器的内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路,其特点是能直接输出数字化的温度数据及相关的温度控制量,自动适配各种微控制器(MCU)。
采用数字温度传感器以实现温度数字化,既能以数字形式直接输出被测温度值,具有测量误差小,分辨力高,抗干扰能力强,能够远程传输数据,带串行总线接口等优点。
因此,本次设计我选择的是方案二——基于单片机的数字温度传感器。
基于单片机的数字温度计的设计的基本原理是单片机、数字温度传感器与显示器等电子元器件的互联,即对温度进行实时测量,使用数字温度传感器把温度信号直接转换成数字信号输入单片机,经单片机处理后,将实时温度显示在显示器上。
主要有以下几个模块:
传感器模块,单片机模块,显示模块,电源模块,报警电路,复位电路和晶振电路。
这几个模块组成的系统框图如图1所示:
图1数字温度传感器的组成模块
三、具体模块分析
3.1传感器模块
本此设计选用的传感器模块是DS18B20芯片。
DS18B20是美国Dallas公司最新推出的一种单总线系统的数字温度传感器。
与传统的热敏电阻温度传感器不同,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式,可以分别在93.75ms和750ms内将温度值转化9位和12位的数字量。
因而使用DS18B20可使系统结构更简单,可靠性更高。
芯片的耗电量很小,从总线上“偷”一点电存储在片内的电容中就可正常工作,一般不用另加电源。
最可贵的是这些芯片在检测点已把被测信号数字化了,因此在单总线上传送的是数字信号,这使得系统的抗干扰性好、可靠性高、传输距离远。
该芯片有如下特点:
(1)单线接口,只有一根信号线与CPU连接单总线器件,具有线路简单,体积小的特点;
(2)不需要备份电源,可通过信号线供电,电源电压范围从3.3~5V;
(3)传送串行数据,不需要外部元件;
(4)温度测量范围从-55℃~+125℃,-10~+85℃时测量精度为±0.5℃;
(5)通过编程可实现9~12位的数字值读数方式(出厂时被设置为12位);
(6)零功耗等待;
(7)现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如环境控制、设备或过程控制、测温类消费电子产品等。
3.1.1DS18B20的内部结构
DS18B20内部结构主要由四部分组成:
64位激光ROM,温度敏感元件,非易失性温度报警触发器TH和TL,高速暂存器。
64位激光ROM是出厂前被光刻好的,它其中保存着该DS18B20的产品信息和产品系列编码,可以看作是该DS18B20的地址序列号。
单总线上所有DS18B20器件可以通过检索器件的ROM中的内容进行识别。
DS18B20的管脚排列如图2所示。
图2DS18B20管脚排列
引脚功能如下:
VDD:
可选电源脚,电源电压范围3~5.5V。
工作于寄生电源时,此引脚应接地;
DQ:
数据输入/输出脚,漏极开路,常态下高电平。
3.1.2DS18B20测温原理
DS18B20内含两个温度系数不同的温敏振荡器,其中温敏振荡器1相当于测温元件,温敏振荡器2相当于标尺,通过不断比较两个温敏振荡器的振荡周期,得到两个温敏振荡器在测量温度下的振荡频率比值,根据频率比值和温度的对应曲线,得到相应的温度值。
其原理图如图3所示:
图3DS18B20测温原理
具体测温过程如下:
首先由预置器2将温度寄存器预置为对应于温度下限(-55℃)的值。
然后,由预置器1对计数器1也预置一个对应于温度下限(-55℃)的计数值,计数器1接收温度振荡器1的输出信号并进行减法运算。
计数器2接收温敏振荡器2的输出信号得到实际温度值并送给温度寄存器作为比较标尺。
如果计数器1首先递减到0,那么将向温度寄存器输出一个信号,温度寄存器的值将增加一位,对应温度值增加一个分辨率的值(如分辨率为0.5℃时,对应温度值增加0.5℃),说明实测温度高于-55℃。
随后,斜率累加器根据两个温敏振荡器的温度特性曲线计算出下一个温度位置处计数器1的预置计数值,对计数器1再次进行预置。
计数器1和计数器2再次开始计数。
如果计数器2先于计数器1到达0,完成一次测温。
温度寄存器中的值为测量所得的当前温度值。
通过这个过程不仅完成了测温,而且将完成了温度值的数字化,省去了A/D转换器。
DSl8B20中的数字温度传感器的分辨率可配置为9、10、11和12位,出厂默认设置为12位分辨率,对应的温度值分辨率分别为0.5、0.25、0.125和0.0625。
温度信息的低位、高位字节内容中,还包括了符号位S(是正温度还是负温度)和二进制小数部分,具体形式为:
低位字节:
MSB
23
22
21
20
2-1
2-2
LSB
2-3
2-4
高位字节:
MSB
S
S
S
S
S
26
LSB
25
24
这是12位分辨率的情况,如果配置为低的分辨率,则其中无意义位为0。
实测温度和数字输出的对应关系如表1所示。
温度/℃
数字输出(二进制)
数字输出
(十六进制)
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010001
0191H
+10.125
0000000010100010
00A2H
+0.5
0000000000001000
0008H
0
0000000000000000
0000H
-0.5
1111111111111000
FFF8H
-10.125
1111111101011110
FF5EH
-25.0625
1111111001101111
FF6FH
-55
1111110010010000
FC90H
表1 实测温度和数字输出的对应关系
在DSl8B20完成温度变换之后,温度值与储存在TH和TL内的告警触发值进行比较。
由于是8位寄存器,所以9~12位在比较时忽略。
TH或TL的最高位直接对应于16位温度寄存器的符号位。
如果温度测量的结果高于TH或低于TL,那么器件内告警标志将置位,每次温度测量都会更新此标志。
只要告警标志置位,DSl8B20就将响应告警搜索命令,这也就允许单线上多个DSl8B20同时进行温度测量,即使某处温度越限,也可以识别出正在告警的器件。
本次设计中采用的是外部供电方式,其接线方式如图4所示:
图4DS18B20的接线方式
3.2单片机模块
本次设计使用的单片机是AT89S51。
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器、串行口、外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
AT89S51的引脚如图5所示。
图5AT89S51单片机引脚图
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入,此时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流。
P3各端口的功能如表2所示:
P3口引脚
功能
P3.0
RXD(串行输入端口)
P3.1
TXD(串行输出端口)
P3.2
INT0(外中断0)
P3.3
INT1(外中断1)
P3.4
TO(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
表2AT89S51的P3口功能
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在编程时,此引脚用于输入编程脉冲。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当EA保持低电平时,则在此期间外部程序存储器,不管是否有内部程序存储器。
在编程期间,此引脚也用于施加编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.3显示模块
本次设计的显示电路采用两位共阳极LED数码管来显示测量得到的温度值,其型号为BS12.7R—1,表示字符高度为12.7mm的红色共阳极LED数码管,16/1动态扫描时,平均电流为4~5mA,峰值电流为50~60mA。
LED数码管能在低电压下工作,而且体积小、重量轻、使用寿命长,因此本次设计选用此数码管作为显示器件。
一个LED数码管只能显示一位字符,如果字符位数不止一位,可以用几个数码管组成,但是控制多位的显示电路需要有字段控制和字位控制,字段控制是指控制所要显示的字符是什么,控制电路应将字符的七段码通过输出口连接到LED的a~g引脚,是某些段点亮,某些段处于歇灭状态。
字位控制是指控制在多位显示器中,那几位发光或哪几位不发光,字位控制则需要通过字位码作用于LED数码管的公共引脚,是某一位或某几位的数码管可以发光。
数码管显示电路分为动态显示和静态显示。
静态显示方式是指每一个数码管的字段控制是独立的,每一个数码管都需要配置一个8位输出口来输出该字位的七段码。
因此需要显示多位时需要多个输出口,通常片内并口不够用,需要在片外扩展。
动态显示又称为扫描显示方式,也就是在某一时刻只能让一个字位处于选通状态,其他字位一律断开,同时在字段线上发出该位要显示的字段码,这样在某一时刻某一位数码管就会被点亮,并显示出相应的字符。
下一时刻改变所显示的字位和字段码,点亮另一个数码管,显示另一个字符。
然后一次扫描轮流点亮其他数码管,只要扫描速度快,利用人眼的视觉残留效应,会使人感觉几位数码管都在稳定的显示。
本次设计采用数码管动态显示,电路如图6所示:
图6显示电路
图中由单片机P1口串接74HC245驱动两位共阳极数码管,上拉电阻排为10kΩ。
由P2.0和P2.1通过PNP型三极管Q1、Q2驱动其字位。
三极管发射极接高电平,当P2.0或P2.1为低电平时使三极管导通选通数码管的某一位。
3.4电源模块
由于控制系统的主控制部分电源需要5V的直流电源供电,因此需要把频率为50Hz、有效值为220V的交流电压转换为幅值稳定为5V的直流电压。
其主要原理是把220V交流电经过变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。
电路如图7所示:
图7电源电路
由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而变压器起到降压作用。
降压后的电流还是交流电压,所以需要整流电压把交流电压转换为直流电压。
由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作,需要通过低通滤波电路滤波,是输出平滑。
稳压电路的功能是使输出电流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流电压。
本次设计中使用了集成稳压芯片7805解决了电源稳压问题。
7805芯片的封装形式为TO-220,它有一系列固定的限制,以及过热保护和安全工作区的保护,使它基本上不会损坏。
如果能够提供足够的散热片,它就能提供大于1.5A的输出电流。
虽然是按照固定电压值来设计的,但是当接入适当的外部器件后,就能获得各种不同的电压和电流。
它的特点有:
最大输出电流为1.5A;输出电压为5V;拥有热过载保护、短路保护以及输出晶体管安全工作区保护。
3.5报警电路
本设计采用软件处理报警,利用有源蜂鸣器进行报警输出,采用直流供电。
当所测温度超过或低于所预设的温度值时,数据口相应拉高电平,报警输出。
报警电路的连接如图8所示:
图8报警电路
图中有三个独立式按键,分别为确定键、+和—。
确定键为确定并退出,在开机时按确定键进入一级菜单。
+和—为参数菜单的选择,可以分别调整温度计的上下限报警设置,在这段过程的任一时间按确定键确定并退出。
图中蜂鸣器在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。
3.6复位电路
在单片机的RST引脚引入高电平并保持2哥机器周期时,单片机内部就执行复位操作。
实际应用在,复位操作有两种形式:
一种是上电复位,另一种是上电与按键均有效的复位。
上电复位要求接通电源后,单片机自动实现复位。
上电瞬间RST引脚获得高电平,随着电容的充电,RST引脚的高电平逐渐下降。
只要RST引脚保持两个机器周期的高电平,单片机就可以进行复位操作。
本次设计采用的是上电与按键均有效的复位方式,使用起来比较方便,在程序跑飞时,可以手动复位,这样就不用再重启单片机电源,就可以实现复位。
其电路连接如图9所示。
电路参数为电容10μF,电阻8.2KΩ。
图9复位电路
3.7晶振电路
单片机的时钟信号通常有两种方式产生:
一是内部时钟方式,二是外部时钟方式。
本次设计采用内部时钟方式,在单片机内部有一振荡电路,只要在单片机的XTAL1和XTAL2脚外接石英晶体(简称晶振),就构成了自己振荡器并在单片机内部产生时钟脉冲信号。
其电路连接如图10所示:
图10晶振电路
四、程序设计
用汇编语言完成对设计的软件编程时,程序开始首先对数字温度传感器DS18B20进行复位,检测是否正常工作;接着读取温度数据,主机发出CCH指令与在线的DS18B20联系,接着向DS18B20发出温度A/D转换44H指令,再发出温度寄存器的温度值BEH指令,应反复调用复位,写入读取数据子程序,之后再经过数据转换,由数码管显示出来,不断循环。
4.1流程图
从数字温度传感器DS18B20开始工作到温度显示的大致流程图如图11所示:
图11单片机实现温度转换到显示温度的流程
4.2程序分析
对DS18B20进行复位,写入和读取温度数据(在数字温度传感器DS18B20内部完成,并实现对温度信息的采集)
读取温度流程如下:
复位→发出CCH命令(跳过ROM)→发出44H命令→延时1s→复位→发出CCH命令(跳过ROM)→发出BEH命令(读内部RAM中9字节内容)→连接从总线上读出2个字节的数据(温度数据的低8位和高8位)→结束。
部程序代码:
(1)DS18B20的复位子程序部分:
RESET_1820:
SETBDQ
NOP
NOP
CLRDQ;主机发出复位低脉冲
MOVR1,#3
DLY:
MOVR0,#107
DJNZR0,$
DJNZR1,DLY;拉高数据线
SETBDQ
NOP
NOP
NOP;等待DS18B20的回应
MOVR0,#25H
T2:
JNBDQ,T3
DJNZR0,T2
JMPT4;标志位flag=1,表示DS18B20存在
JMPT5;标志位flag=1,表示DS18B20不存在
T5:
MOVR0,#117
T4:
RET
DS18B20每次读取数据之前都要对DS18B20进行复位,复位要求主机发出复位低脉冲(大于48μs);然后释放,DS18B20收到信号后等待16~60μs,然后发出60~240μs的低脉冲,主机收到此信号表示复位成功。
(2)DS18B20的写入子程序部分:
WRITE_1820:
MOVR2,#8;一位共8位数据
CLRC;C=0
WR1:
CLRDQ;总线低位,开始写入
MOVR3,#7
DJNZR3,$;保持16μs以上
RRCA;把字节DATA分成8个位,循环给C
MOVDQ,C;写入一个位
MOVR3,#23
DJNER3,$;等待
SETBDQ;重新释放总线
NOP
DJNZR2,WR1;写入下一个位
SETBDQ
RET
当主机把数据从逻辑高电平拉到逻辑低电平时,写时间隙开始。
有两种写时间隙,写1时间隙和写0时间隙。
所有写时间隙必须最少保持60μs,包括两个写周期至少1μs的恢复时间。
I/O线电平变低后,DS18B20在一个15μs到60μs的窗口内对I/O线采样。
如果线上是高电平,就是写1,如果是低电平,就是写0。
主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15μs内允许数据线拉到高电平。
主机要生成一个写0时间隙,必须把数据线拉到低电平并保存60μs。
每个读时序都由主机发起,至少拉低总线1μs,在主机发起读时序之后,单总线器件才开始在总线上发送0或1.所有读时序至少需要60μs。
(3)DS18B20的读取子程序
READ_1820:
MOVR4,#2;读取两个字节的数字
MOVR1,#29H;低位存入29H,高位存入28H
RE0:
MOVR2,#8;数据一共有8位
RE1:
CLRC
SETBDQ
NOP
NOP
CLRDQ;读前总线保持为低
NOP
NOP
NOP
SETBDQ;开始读总线释放
MOVR3,#9
RE2:
DJNZR3,RE2;延时18μs
MOVC,DQ;从总线读到一个位
MOVR3,#23
RE3:
DJNZR2,RE1;读取下一位
MOV@R1,A
DECR1
DJNZR4,RE0;
RET
当从DS18B20读数据时,主机生成读时间隙。
当主机把数据从高电平拉到低电平时,读时间隙开始,数据线必须保持至少1μs;从DS18B20输出的数据在读时间隙的下降沿出现后15μs内有效。
因此,主机在读时间隙开始后必须把I/O脚驱动拉