《单片机原理及应用》课程设计八路温度巡回检测系统.docx
《《单片机原理及应用》课程设计八路温度巡回检测系统.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》课程设计八路温度巡回检测系统.docx(31页珍藏版)》请在冰豆网上搜索。
《单片机原理及应用》课程设计八路温度巡回检测系统
《单片机原理及应用》课程设计
八路温度巡回检测系统
摘要:
本文介绍一种采用STC公司的STC89C52RC单片机控制DS18B20数字温度传感器采集温度,最后在共阴极的LED灯上实时显示温度值的温度检测系统(由于实验及成本原因本文只做一路传输系统)。
该系统从实际应用工程出发,主要对硬件电路设计、电子元件选择、系统应用软件设计等方面进行具体探讨和研究。
系统具有性能稳定可靠、功耗低、成本低、测量准确、传输距离远、维护简单等优点,系统设计在实际工作中具有一定的借鉴意义。
关键词:
温度检测;STC89C52RC;DS18B20
第三节软件设计介绍14
3.2调试18
附1:
电路图
附2:
元件清单
附3:
程序
第1节引言
随着计算机技术和传感器技术的飞速发展,在科研、生产和日常活动中,人们对温度、压力、流量等模拟物理量的测量要求越来越高。
而这些物量中温度的应用是最为广泛的。
如何将温度通过传感器变成电信号,再经过处理转换成计算机能够识别的数字量,输入到计算机中,由计算机将采集到的数字量进行不同的处理,然后在显示器显示出来,并进行实时监控。
这已经为当前计算机测量与控制领域的一个重要研究方向。
鉴于此,本文提出一种基于89C52和DS18B20的低成本、远距离传输的温度检测系统设计方案。
1.1系统原理及基本框图
如图1.1所示,为系统的基本框图。
图1.1系统基本方框图
该系统由六部分组成:
STC89C52RC核心单片机,温度采集电路,LED显示电路,报警警电路,复位电路,晶振等,其中温度采集主要由DS18B20组成,在短时间内把热力学温度信号数字,送入单片机,由单片机控制显示电路显示,并且判断是否达到设定温度,若达到设定温度,由单片机启动报警电路,报警。
1.2设计任务
利用单片机与AD转换器设计一个八路温度巡回检测系统,对某粮库或冷冻厂八点(八个冷冻室或八个粮仓)进行温度巡回检测。
能够测量-30~+50oC的温度范围,检测精度要求不大于±1oC。
采用数码管显示测量值;
单片机和AD转换器型号自选(如单片机可选AT89S51或AT89C51等;AD转换器可选ADC0809或ADC0804等)。
(本文均基于一路温度检测系统设计)。
第二节硬件设计介绍
2.1STC89C52RC
2.1.2STC89C52RC介绍
单片机自问世以来,以其极高的性价比受到人们的重视和关注,应用很广,发展很快。
单片机的体积小,重量轻,抗干扰能力强,环境要求不高,价格低,可靠性强,灵活性好,开发较为容易。
基于以上的优点,单片机已经广泛的应用在工业自动化控制,自动检测,智能仪器仪表,机电一体化等各个方面,所以本系统采用单片机做为控制器。
单片机中51/52系列最具有代表性。
本设计核心采用了STC89C52RC单片机。
STC89C51/52单片机系列是在MCS—51/52系列的基础上发展起来的,STC89C52RC完全兼容MCS-51系列单片机的所有功能,并且本身带有2K的内存储器,可以在编程器上实现闪烁式的电擦写达几万次以上,比以往惯用的8031CPU外加EPROM为核心的单片机系统在硬件上具有更加简单方便等优点,其外形如图2.1所示。
图2.1STC89C52RC芯片
2.1.3STC89C52引脚介绍
STC89C52RC的引脚图如图2.2所示.
图2.2STC89C52引脚图
单片机的引脚功能说明:
①电源引脚
VCC(40脚):
电源端,工作电压为5V。
GND(20脚):
接地端。
②时钟电路引脚XTAL1(19脚)和XTAL2(18脚)
③复位RST(9脚)
④.输入输出(I/O)引脚
P0.0-P0.7(39脚-32脚):
输入输出脚,称为P0口,是一个8位漏极开路型双向I/O口,内部不带上拉电阻。
P1.0-P1.7(1脚-8脚):
输入输出脚,称为P1口,是一个带内部上拉电阻
的8位双向I/0口。
P2.0-P2.7(21脚—28脚):
输入输出脚,称为P2口,是一个带内部上拉电
阻的8位双向I/O口,
P3.0-P3.7(10脚—17脚):
输入输出脚,称为P3口,是一个带内部上拉电
阻的8位双向I/O口。
P3端口具有复用功能。
表2.1P3口端口引脚与复用功能表
P3引脚
兼用功能
P3.0
串行通讯输入(RXD)
P3.1
串行通讯输出(TXD)
P3.2
外部中断0(INT0)
P3.3
外部中断1(INT1)
P3.4
定时器0输入(T0)
P3.5
定时器1输入(T1)
P3.6
外部数据存储器写选通(WR)
P3.7
外部数据存储器读选通(RD)
2.2DS18B20
2.2.1DS18B20性能
DS18B20是Dallas公司推出的单线集成数字温度采集系统,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
其实物如图2.3所示。
图2.3DS18B20
DS18b20内部主要有三个数字部件:
64位激光ROM、温度传感器、非易失性温度报警触发器TH和TL。
DS18B20的性能特点如下:
●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;
●多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
●无需外部器件;
●可通过数据线供电,电压范围:
3.0~5.5V;
●测温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
●零待机功耗
●温度以9或12位数字量读出;
●用户可定义的非易失性温度报警设置;
●具有非易失性上、下限报警设定的功能,用户可方便地通过编程修改上、下限的数值;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
●适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温。
8PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
●数字量的转换精度及转换时间可通过简单的编程来控制:
9位精度的转换时间为93.75ms:
10位精度的转换时间187.5ms:
12位精度的转换时间750ms。
2.2.2DS18B20引脚图
本文用的DS18B20的常用封装为3脚,如图2.4所示。
:
图2.4DS18B20引脚图
各脚功能描述如下:
DQ:
数字信号输入/输出端。
GND:
电源地端。
VDD:
外接供电电源输入端(在寄生电源接线时此脚应接地)。
2.3三极管9012
三极管的工作原理
三极管是一种控制元件,主要用来控制电流的大小,以共发射极接法为例(信号从基极输入,从集电极输出,发射极接地),当基极电压UB有一个微小的变化时,基极电流IB也会随之有一小的变化,受基极电流IB的控制,集电极电流IC会有一个很大的变化,基极电流IB越大,集电极电流IC也越大,反之,基极电流越小,集电极电流也越小,即基极电流控制集电极电流的变化。
但是集电极电流的变化比基极电流的变化大得多,这就是三极管的放大作用。
IC的变化量与IB变化量之比叫做三极管的放大倍数β(β=ΔIC/ΔIB,Δ表示变化量。
),三极管的放大倍数β一般在几十到几百倍。
三极管在放大信号时,首先要进入导通状态,即要先建立合适的静态工作点,也叫建立偏置,否则会放大失真。
9012是一种最常用的普通三极管。
它是一种低电压,大电流,小信号的PNP型硅三极管:
∙集电极电流Ic:
Max-500mA
∙集电极-基极电压Vcbo:
-40V
∙工作温度:
-55℃to+150℃
∙和9013(NPN)相对
∙主要用途:
o开关应用
o射频放大
2.4共阴极数码管
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字09、字符AF、H、L、P、R、U、Y、符号“”及小数点“”。
数码管的外形结构如下图2.5所示。
数码管又分为共阴极和共阳极两种结构。
图2.5共阴极四位一体数码管
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。
通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
使用时,既可以用半导体三极管驱动,也可以直接用TTL与非门驱动。
需要加限流电阻。
数码管的工作电压一般为1.5至3伏,工作电流只需几到十几毫安。
且寿命长,响应速度快。
2.5硬件部分电路图
2.5.1复位电路
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,52芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的0000H处开始运行程序。
该芯片的复位脚为9脚,所以复位电路接STC89C52RC的9脚,具体电路如下图2.6所示。
当采用的晶体频率是6MHZ时,可取C=22UF,R=1K;当采用的晶体频率为12MHZ时,可取C=10UF,R=8.2K。
不过这都是最佳的组合,也可以有其它大小的电容电阻,只要符合电路要求就可以,如本文就采用22UF的电容和10K的电阻,经试验也满足要求。
图2.6复位电路
2.5.2晶振
为了产生时钟信号,在8052内部设置了一个反相放大器,XTAL1是片内振荡器反相放大器的输入端,XTAL2是片内振荡器反相放大器的输出端,也是内部时钟发生器的输入端。
当使用自激振荡方式时,XTAL1和XTAL2外接石英晶振,使内部振荡器按照石英晶振的频率振荡,就产生时钟信号。
晶振一般使用石英晶体,其频率由系统需要和器件决定,在频率稳定度要求不高时也可以使用陶瓷滤波器。
使用石英晶体时C1、C2为C1=C2=30(±10)pF,使用陶瓷滤波器时,C1=C2=40(±10)pF。
本系统用12MHZ的石英晶振,接STC89C52RC的18和19脚,具体电路如图2.7所示。
图2.7时钟信号电路(晶振)
2.5.3一路传输电路
在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。
因此,在温度测量系统中,本文采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
DS18B20有三个引脚。
VDD管脚接5V电压给传感器供电。
DQ管脚为数据线,与STC89C51RC的P1.0连接的同时,还要接一个4.7K的上拉电阻,并接到5V的电源上,使数据线在空闲状态下能自动上拉为高电平。
GND管脚接地。
具体电路如图2.8所示。
之所以接P1口,是因为P1口的驱动力最强,完全可以驱DS18B20的正常运行。
图2.8一路传输电路
2.5.4LED显示电路
显示电路采用静态显示,4位LED数码管。
所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于比划段字形代码。
这样单片机只要把显示的字形代码发送到接口电路,就不用管它了,直到要显示显示新的数据时,再发送心的字形码,因此,使用这种方法,单片机中的CPU的开销小。
本文的显示电路如图2.9所示。
其中P0口作为7断码和小数点的选择,P2口作为位码的选择,在断码和P0口之间还需加上1K的上拉电阻,以保证LED灯的正常显示。
.
图2.9LED显示电路
2.5.5报警电路
本文中当某一通道的温度测量值超出预先设定的上、下限报警值或系统运行出现故障时,系统发出声光报警以提醒用户注意。
报警电路中光报警采用发光二极管,声报警采用蜂鸣器来设计,蜂鸣器电路中,9012晶体管起开关作用,P2.6输出低电平时,管脚输出电压经过lK限流电阻分压后,到达9012基极的电压为使得晶体管发射结正偏,集电结反偏,晶体管导通,蜂鸣器上电而产生声响。
发光二极管电路中,主要是限流电阻的设计,由于发光二极管工作电流是3mA-30mA,导通压降为1.8V;而单片机工作在5V电压时,I/O口输出低电平的最大灌入电流是16mA,输出的低电平是Vss+0.6V这样在限流电阻上的压降就是5-1.8-0.6=2.6V,而电流要限定在8mA左右,所以电阻阻值为2.6V/8mA=325欧姆,在实际电路中选用330欧姆的电阻即能满足要求。
具体电路如图2.10所示。
图2.10报警电路
2.5.6下载程序电路
本文中将PC机上的程序拷贝到单片机中是通过如图2.11所示的,连接单片机的10和11脚串行接口到插件上,再和PC机之间进行通讯。
.
图2.11下载程序电路
2.5.7完整电路
图2.12完整电路
第三节软件设计介绍
3.1程序流程图和实物图
系统程序主要包括主程序,读出温度子程序,温度转换命了子程序,计算温度子程序,显示刷新温度子程序等。
3.1.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值。
温度测量每1S进行一次,这样可以在1S之内测量一次被测温度,其程序流程见图3.1所示。
图3.1系统主程序流程
3.1.2显示电路框图
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高位显示为0时将符号显示位移入下一位。
程序流程图如图3.2所示。
图3.2显示电路框图
3.1.3读出温度子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1S显示程序延时法等待转换的完成。
温度转换命令子程序流程图如图3.3所示。
图3.3温度转换流程图
3.1.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.4所示。
图3.4计算温度流程图
3.2调试
3.2.1硬件调试
硬件调试是利用开发系统、基本测试仪器(万用表、显示器)等,检查系统硬件中存在的故障。
静态调试静态调试是在系统未工作时的一种调试。
步骤如下:
第一步:
目测。
检查外部的各种原器件或者是电路是否有断点。
第二步:
用万用表检测。
先用万用表复核目测中有疑问的连接点,在检测各种电源线与接地线之间是否有短路现象。
第三步:
加电检测。
给电路板加电,检测所有的插座或者是硬件的电源是否符合要求的值。
第四步:
联机检查。
因为只有单片机开发系统才能完成对用户系统的调试。
动态调试动态调试是在用户系统工作的情况下发现和排除系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查,动态调试的一般方法是由近及远、由分到合。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仞采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
由分到合是指首先按照逻辑功能将系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,再对各块电路功能及各电路之间可能存在的相互联系进行调试,
3.2.2软件调试
软件调试是通过对程序的汇编(或者C语言)、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程,查看程序是否有逻辑的错误。
在对硬件调试后再对软件进行,因为先对硬件检查没问题的情况下再对软件进行调试,编译软件可以通过编译去检查程序上的语法错误,然后可以在它的基础上在对它进行一些修改达到没有错误为止,然后将软件拿到硬件上去运行。
通过仿真后,如无误,方可将程序灌输如单片机中。
3.2.3实物
图3.5调试前电路板
图3.6调试时电路板
图3.7调试后温度显示
第五节个人心得体会
做本课程设计,让我清楚的了解了电子设计大体分三个阶段:
设计与计算阶段(预设计阶段)、安装与调试阶段、撰写总结报告阶段。
在拿到一个课题时首先要做的事就是对课题的任务,要求和条件进行仔细的分析和研究,找出关键问题,根据关键问题提出实现的原理和方法,并画出原理框图。
提出原理方案是一个关系到设计全局的问题,应广泛收集与查阅有关资料,广开思路,利用已有的各种理论知识,提出尽可能多的方案,以便作出更合理的选择。
所提出的方案中,对关键部分的可行性,一般应通过试验加以确认。
根据整个课题的技术要求,明确该功能框对单元电路的技术要求,必要时应详细拟定单元电路的性能指标,然后进行单元电路结构形式的选择或设计,但满足功能框图要求的单元电路可能不止一个,因此必须进行分析比较,择优选择。
就如我们这个课题当初我就提出了三种方案,最后基于简单,可实行选择了如今这种方案。
然后是元器件的选择,元器件的品种规格繁多,性能、价格和体积各异,选择器件需进行分析比较。
首先考虑满足单元电路对元器件性能指标的要求,其次考虑价格、货源和元器件体积等,最好是使用实验室已有的元器件。
元器件选好了就是参数的计算了,值得指出的是,满足性能指标要求的参数值通常不是唯一的,这就要求对各组参数进行综合性的分析,仔细考虑元器件之间的参数配合、元器件价格、体积和货源等因素,恰当地选取一组适合的参数。
在各单元电路确定后,还要认真考虑它们之间的级联问题,如:
电气特性的相互匹配、信号耦合方式、时序配合,以及相互干扰等问题,保证整个电路能正常工作。
这些都做好后,总体实验电路就出来了,接下来的事情就是焊接工作,实施焊接的主要工具是电烙铁,其次还有松香、焊锡、吸水棉、连接线等,焊接的主要步骤为准备施焊——加热被焊件——加焊锡丝——移开焊锡丝——移开电烙铁。
在焊接电路时一定做到认真仔细、一丝不苟。
注意连线正确,焊接规范,尽量做到整齐美观并保证接触良好;集成块插牢并注意方向;电源和地线不要短路,以避免人为故障。
最后就是对电路进行调试。
一个组装好的电子电路不可能不经调试即可满足设计要求。
调试中出现的各种现象和问题,需要我们提出解决的办法。
只有这样,才能顺利做好调试工作,才能通过此次设计得到实际训练。
在调试当中一般常见故障源为:
接触不良(特别是当电源线接触不良时可能工作不稳定)、焊接错误(错焊、漏焊或虚焊)、接线错误(错接、漏接或短路)、器件本身损坏(需单独测试其功能方能确定确实损坏)、集成块插错位置或方向插反、多余控制输入端未正确处理(一般若悬空会有较大干扰,应接固定电平)、设计上有缺陷(出现预先估计不到的现象,这就需要改变某些元件的参数或更换元器件,甚至需要修改方案)。
在此次设计当中,由于电路设计和焊接工作都非常仔细认真的完成,所以在调试当中几乎很少出现电路的问题,因此本设计才顺利的完成了。
我通过实践课的综合练习,课程设计的实际操作,将课堂理论学习贯穿其中,全面系统的把单片机课程的知识联系在一起,做到融会贯通,使我真正感受到理论应用于实践的乐趣。
这次设计是一次锻炼的好机会,使我在学习和巩固新、老知识的同时,训练了自己综合运用知识的能力、分析解决新问题的能力,同时也提高了自己工程实践能力;在设计的过程中,我与同学一同学习、一同讨论,大家集思广益,发扬了团队协作精神。
在课程设计过程中,我发现了自己的不足,今后应加强学习,并且加强理论与实践的相结合,把所学的知识应用于实际当中。
参考文献
[1]李朝青.《单片机原理及接口技术(第3版)》[M].北京:
航空航天大学出版社,2005
[2]陈世和.《电工电子实习教程》[M].北京:
航空航天大学出版社,2007
[3]孙进生等.《电子产品设计实例教程》[M].北京:
冶金工业出版社,2004
[4]张伟等.《Protel99SE实用教程》[M].北京:
人民电邮出版社,2008
[5]白瑞青,金功伟.《单片机温度巡回监测系统》[J].测试技术学报,98年第12卷第3期
[6]李红刚,方佳,王强,钱双艳.《基于At89C51的八路温度巡回检测系统设计》[J].热带农业工程,2010年第34卷第1期
附录
附1
表1元件清单
序号
型号
个数
1
STC89C51(52)RC
1
2
DS18B20
1
3
排阻(1K)
1
4
排针(4)
1
5
.排针
(2)
1
6
按键
1
7
LED显示灯(8×4)
1
8
蜂鸣器
1
9
12MHZ晶振
1
10
1K电阻
1
11
4.7K电阻
1
12
10K电阻
1
13
0.47K电阻
1
14
30PF电容
2
15
22UF电容
1
16
S9012三极管
1
17
发光二极管
1
注:
封装都为标准封装
附2
图1一路传输温度测量系统完整电路图
附3
源程序
#include"reg52.h"
#include"intrins.h"//_nop_();延时函数用
#defineDisdataP0//段码输出口
#definediscanP2//扫描口
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^0;//温度输入口
sbitDIN=P0^7;//LED小数点控制
uinth;
uinttemp;
//**************温度小数部分用查表法***********//
ucharcodeditab[16]=
{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
//
ucharcodedis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
ucharcodescan_con[4]={0xFE,0xFD,0xFB,0xF7};//列扫描控制字
uchardatatemp_data[2]={0x00,0x00};//读出温度暂放
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用
/*****************11us延时函数*************************/
voiddelay(uintt)
{
for(;t>0;t--);
}
/****************显示扫描函数***************************/
scan()
{
chark;
for(k=0;k<4;k++)//4位LED扫描控制
{