数字温度计设计.docx
《数字温度计设计.docx》由会员分享,可在线阅读,更多相关《数字温度计设计.docx(24页珍藏版)》请在冰点文库上搜索。
数字温度计设计
毕业设计题目:
数字温度计设计
第二章、系统方案论证与比较5
2.2、方案二6
3.1.1、单片机选择8
3.3、温度报警电路11
第五章、软硬件综合调试16
第七章、致谢19
第一章引言
随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。
在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:
①传统的分立式温度传感器
②模拟集成温度传感器
③智能集成温度传感器。
在当今信息化时代展过程中,各种信息的感知、采集、转换、传输和处理的功能器件已经成为各个应用领域中不可缺少的重要技术工具。
传感器是信息采集系统的首要部件,是实现现代化测量和自动控制的主要环节,是现代信息产业的源头,又是信息社会赖以存在和发展的物质与技术基础。
可见理解和撑握传感器的知识与技术有着其极重要的意义。
传感器知识面广,如果在实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节的局面。
任随书本上把单片机技术介绍得多么重要、多么实用多么好用,同学们仍然会感到那只是空中楼阁,离自己十分遥远,或者会感到对它失去兴趣,或者会感到它高深莫测无从下手,这些情况都会令课堂教学的效果大打折扣。
本次设计的目的就是让我们在理论学习的基础上,通过完成一个传感品器件的设计,使我们学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
第二章系统方案论证与比较
该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。
2.1方案一
采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(热电偶的构成如图3.1),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。
数据采集部分则使用带有A/D通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。
热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D转换电路,感温电路比较麻烦。
图2.1热电偶电路图
系统主要包括对A/D0809的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。
还有复位电路,晶振电路,启动电路等。
故现场输入硬件有手动复位键、A/D转换芯片,处理芯片为51芯片,执行机构有4位数码管、报警器等。
系统框图如3.2所示:
图2.2热电偶温差电路测温系统框图
2.2、方案二
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
采用52单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
该系统利用AT89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。
该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。
系统框图如图3.3所示
图3.3DS18B20温度测温系统框图
从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。
方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。
2.3整机电路分析
图3.4设计方框
本系统采用单片机作为微控制器,分为四个模块(如上图2.3):
测温电路,数码管显示,报警电路,复位电路。
单片机I/O口资源的利用:
P1口作为数码管控制端输入,P2口作为测温电路测量温度值的输入,P0口(已外接了上拉电阻)作为数码管显示输出,P2.7接蜂鸣器,P2.4接温度传感器DS18B20。
采用12MHZ晶振。
电源采用5V为单片机,LED,蜂鸣器供电。
主要技术指标:
准确度达微秒级,以市电220V50HZ为输入电源,工作温度-10℃~60℃。
该电路经过设计分析,绘图,制板、焊接、仿真调试等工作后温度计成形。
第三章硬件设计电路
3.1元器件选择
3.1.1单片机选择
对于单片机的选择,可以考虑使用8031与8052系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。
AT89S52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP),也可用传统方法进行编程,所以低价位AT89S52单片机可为提供许多高性价比的应用场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。
单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
3.1.2温度传感器选择
DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。
DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
、
3.2温度检测电路
DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。
DS18B20的电源供电方式有2种:
外部供电方式和寄生电源方式。
工作于寄生电源方式时,VDD和GND均接地,他在需要远程温度探测和空间受限的场合特别有用,原理是当1Wire总线的信号线DQ为高电平时,窃取信号能量给DS18B20供电,同时一部分能量给内部电容充电,当DQ为低电平时释放能量为DS18B20供电。
但寄生电源方式需要强上拉电路,软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM时),同时芯片的性能也有所降低。
因此,在条件允许的场合,尽量采用外供电方式。
无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电。
在这里采用前者方式供电。
DS18B20与芯片连接电路如图3.2所示:
图3.2DS18B20与单片机的连接
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。
在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。
在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。
由于DS18B20只有一根数据线,因此它和主机(单片机)通信是需要串行通信,而AT89S51有两个串行端口,所以可以不用软件来模拟实现。
经过单线接口访问DC18B20必须遵循如下协议:
初始化、ROM操作命令、存储器操作命令和控制操作。
要使传感器工作,一切处理均严格按照时序。
3.3温度报警电路
本设计的发挥部分,是加入了报警,如果我们所设计的系统是监控某一设备,一当设备的温度超过我们所设定的温度值时,系统会产生报警。
报警时由单片机产生一定频率的脉冲,由P2.7引脚输出,P2.7外接一只PNP的三极管来驱动杨声器发出声音,以便操作员来维护,从而达到报警的目的。
如下图(g):
图3.3温度报警电路
第四章软件设计
4.1概述
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
从软件的功能不同可分为两大类:
一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。
每一个执行软件是一个小的功能执行模块。
这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。
各执行模块规划好后,就可以规划监控程序了。
首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
4.2主程序模块
主程序需要调用4个子程序,各模块程序功能如下:
●数码管显示程序:
向数码的显示送数,控制系统的显示部分。
●温度测试及处理程序:
对温度芯片送过来的数据进行处理,进行判断和显示。
●报警子程序:
进行温度上下限判断及报警输出。
●中断设定程序:
实现设定上下限报警功能。
主程序流程见图4.2:
图4.2-1DS18B20初始化流程图图4.2-2主程序流程图
4.3、各模块流程设计
下面对主要子程序的流程图做介绍
4.3.1、温度检测流程
DS18B20在单片机控制下分三个阶段:
●18B20初始化:
初始化流程图见
●读18B20时序:
读DS18B20流程见图4.3-1:
●写18B20时序:
写18B20流程见图4.3-2
图4.3-1读DS18B20流程图图4.3-2写DS18B20流程图
4.3.2、报警模块流程
流程见图4.3-3
图4.3-3报警模块子程序流程图
第五章软硬件综合调试
本次设计电路原理图时还有一个错误,这一错误导致电路不能正常工作,在看报警器的PDF文档后,发现报警器供电电压为12V,所以我不假思索就把电源供电设为5V。
电路板制作完成后调试发现报警温度不准确。
后来才发现报警器是与39R的电阻并连,当温度上升到30摄氏度时电阻两端的电压为3V而供电电压为5V。
故去掉电阻才工作正常。
用PROTUES仿真时我发现温度报警电路不起作用,当温度超过30度或小于10度都不能报警。
刚开始以为是程序的问题,经过检查简化了报警程序,才发现是电路及喇叭的电压不正确。
软硬件联合调试时数码管显示有效,但有两数码管g段显示不了。
开始将200R的电阻短接,数码管显示更亮。
但仍不行,后用万用表检测发现AT89S52管脚P06接数码管g段处虚焊,不能导通。
焊好后正常显示。
应该吸取教训,下次焊接要更小心,要是电路再复杂一点就不易找出问题了。
总结和体会
本设计利用89S52芯片控制温度传感器DS18B20,再辅之以部分外围电路实现对环境温度的测控,性能稳定,精度教高,而且扩展性能很强大。
由于DS18B20的测量精度只有±0.5度,往往很多场合需要更加精确的温度,在所测温度精度不变的基础上必须对数据进行校正。
由于DS18B20是基于带隙结构的数字式温度传感器,PN结增量电压正比于IC绝对温度(PTAT),它的测温精度较高,但存在着一定的误差.不过,其误差在时间和外部环境变化的条件下,保持相当高的稳定性。
它充分利用监控计算机的处理能力,在监控计算机上用线性插补的数学方法对其进行误差校正补偿,能轻易地将其提高其精度。
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机C语言课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是
谢辞
附1:
源程序代码
功能:
实现对DS18B20的读取
原理:
单总线协议
注意:
单总线协议对延时要求比较严格,此程序中采用的是11.0592M的晶振。
======================================================================
#include"reg51.h"//包含头文件
#include
#defineucharunsignedchar
#defineuintunsignedint
floattt;//tt为采集的温度值
codeucharTAB[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//数码管段码
ucharstr_TME[4]={0,0,0,0};
unsignedcharMAX=30;
unsignedcharMIN=10;
sbitDQ=P2^4;//定义通信端口
sbitfm=P2^7;
//短延时函数
voiddelay(unsignedinti)
{
while(i--);
}
//1ms延时函数
voiddelay1(ucharms)
{
uchari;
while(ms--)
for(i=0;i<125;i++);
}
//DS18B20初始化函数
Init_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
}
//读一个字节
ReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
//写一个字节
WriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
//读取温度
ReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(tt);
}
uchartmel=0;
ucharad_dat;
bitsim=1;
/********************定时器中断函数********************/
voidtme_tr0(void)interrupt1
{
TL0=0xb0;
TH0=0x3c;
if(++tmel==20)
{
tmel=0;
sim=1;
}
}
/*****************定义数码管显示***************************/
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
sbitk4=P1^3;
voidVAL_xs()
{
P0=TAB[str_TME[0]];//?
?
?
?
?
k1=0;
delay1(5);
k1=1;
P0=(TAB[str_TME[1]])&0x7f;
k2=0;
delay1(5);
k2=1;
P0=TAB[str_TME[2]];
k3=0;
delay1(5);
k3=1;
P0=0xc6;
k4=0;
delay1(5);
k4=1;
}
voidchangs()//数据转换
{
uchartint,tfloat;
ReadTemperature();//读温度
tint=(int)(tt);
tfloat=(tt-tint)*100;
str_TME[0]=tint/10;
str_TME[1]=tint%10;
str_TME[2]=tfloat/10;
}
write_tempere_alarm()
{
if(((int)tt>MAX)||((int)tt{fm=0;}
else
{fm=1;}
}
main()
{
P1=0xc0;
IE=0x82;
TMOD=0x01;
IP=0x01;
TL0=0xb0;
TH0=0x3c;
TR0=1;
while
(1)
{
VAL_xs();
write_tempere_alarm();
if(sim==1)
{changs();
sim=0;
}
}
}
附2:
主电路原理图及PCB