数字温度计设计资料Word文档格式.docx
《数字温度计设计资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字温度计设计资料Word文档格式.docx(23页珍藏版)》请在冰点文库上搜索。
近年来,温度检测领域发展迅速,并且随着数字技术的发展,温度的测控芯片也相应的登上历史的舞台,能够在工业、农业等各个领域中广泛使用。
1.1本课题的研究意义
温度的测量的关键之处是温度传感器,其往往决定着一个温度检测系统的性能。
传统的温度检测以热敏电阻和AD590为温度敏感元件。
热敏电阻虽成本低,但需信号处理电路,电路复杂,可靠性较低,测温准确度及抗干扰能力也有一定的不足。
近年来,传感器正处于传统型向新型传感器转型的发展阶段。
新型的温度传感器的特点是微型化、数字化、智能化、多功能化、系统化、网络化,它提高了抗干扰能力和可靠性,而且使系统结构更简洁,维护方便,缩小了空间。
单片机具有集成度高、功能强、体积小、价格低、抗干扰能力等优于一般CPU的优点,因此往往采用单片机作为数字控制器取代模拟控制器。
1.2本课题的基本内容,提出解决问题的方法和措施
数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,将电信号转换成数字信号。
如单片机或者PC机等,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值。
该系统利用AT89C52芯片控制温度传感器DS18B20进行时温度检测并显示,能够实现快速检测环境温度。
可能遇到的问题及注意事项:
(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
(2)在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。
(3)连接DS18B20的总线电缆是有长度限制的。
(4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某一个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。
1.3本课题拟采用的研究手段(途径)和可行性分析
DS18B20采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
经济性好,抗干扰能力强,适用于恶劣的环境现场温度测量,使用方便。
同事测量温度范围宽,在使用中不需要任何外围元件体积更小,可以选用更小的封装方式完成。
2方案设计
2.1总体初步方案
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处理和控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性质稳定,它温用作工业测温元件,此元件线性较好。
在0-100摄氏度时,最大线性偏差小于1摄氏度。
DS18B20的最大特点之一是采用了单总数的数据传输,由数字温度计DS18B20和微控制器AT89C51构成温度测量装置,它直接输出温度的数字信号,可直接和计算机连接。
这样温度系统的结构就比较简单,体积也不大。
采用51单片机控制软件编程的自由度大,而且体积小,硬件实现简单,安装方便。
该系统利用AT89C51芯片控制温度传感器DS18B20进行温度的实时检测并显示,能够实现快速测量环境温度。
硬件以微控制器为核心,外接时钟电路、复位电路、温度测量电路、LED显示电路组成。
硬件设计方案如图1所示。
时钟电路
图2.1系统硬件框图
2.2方案设计与分析
2.2.1微处理器
单片机AT89C2051具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
AT89C51是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
图2.2AT89C51单片机的管脚图
AT89C51单片机的管脚功能
兼容MCS-51指令系统
4k可反复擦写(>
1000次)FlashROM
32个双向I/O口
可编程UARL通道
两个16位可编程定时/计数器
全静态操作0-24MHz
1个串行中断
128x8bit内部RAM
两个外部中断源
共6个中断源
可直接驱动LED
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒功能
表2-1AT89C51单片机的管脚功能
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2.2复位电路
为确保两点间温度控制系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。
一般电路正常工作需要供电电源为5V±
5%,即4.75~5.25V。
单片机的初始操作是复位,为了使各专用寄存器和CPU保持一个确定的初始状态。
比如:
PC的内容初始化为0000H,那么单片机开始从000H开始进行工作。
还有当单片机系统在运行操作出错导致使系统成为死锁状态,,那么也需要复位还原其恢复正常工作状态。
RST端两种外部复位电路方法:
1.按键手动复位和上电自动复位。
2.按键手动复位有脉冲方式和电平方式,本系统设计采用上电复位,如图2.0所示。
上电复位是可以把RST端通过电阻接高电平进行复位。
图2.0复位电路
2.2.3时钟电路
单片机的时钟信号用来提供单片机内各种微操作的时间基准,时钟电路用于产生单片机工作所需要的时钟信号。
单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:
内部振荡和外部振荡。
本系统设计采用内部振荡方式,如图2.2.3所示。
MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式。
2.2.4温度传感器
温度传感器DS18B20将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节)在通过单片机发出命令送给显示器。
它的输出脚I/O直接与单片机相连,并接一个上拉电阻,传感器采用外部电源供电。
传感器控制程序是按照DS18B20的通信协议编制。
系统的工作是在程序控制下,完成对传感器的读写和对温度的显示。
DS18B20特点采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位);
(2)测温范围为-55℃~+125℃,测量分辨率为0.0625℃;
(3)内含64位经过激光修正的只读存储器ROM;
(4)适配各种单片机或系统机;
(5)用户可分别设定各路温度的上、下限;
(6)内含寄生电源。
DS18B20程序流程图如图.2.2.6
表2.6DS18B20程序流程图
2.2.5LED显示电路
通过排阻与LED显示器相连组成,电路图如图2.2.7
图2.7LED显示电路图
3整机电路
当接通电源以后,温度传感器正常工作,温度传感器将根据被测温度的不同来采集不同的数据,然后将所采集到的数据传送到比较器到中,然后由比较器将采集到的数据转变成高低电平,在送入单片机,单片机通过控制各个引脚电平的高低来来控制温度的显示输出。
整机电路图如图3.1
图3.1整机电路图
4仿真与调试
4.1 仿真与调试
此设计的电路在Proteus软件中进行仿真,运行Proteus的ISIS程序后,进入该仿真软件的主界面。
主界面由菜单栏、工具栏、预览窗口、元件选择按钮、元件列表窗口、原理图绘制窗口和仿真进程控制按钮组成(如图7-2所示)。
通过元件选择按钮P(从库中选择元件命令)命令,在弹出的PickDevices窗口中选择电路所需的元件,放置元件并调整其相对位置,对元件参数设置及元器件间连线,完成单片机系统的硬件原理图绘制。
主程序流程图如图4.1所示
4.2 调试与运行
(1)首先启动KEILC51软件的集成开发环境,从桌面上双击uVision图标以启动软件。
(2)建立工程文件。
通常单片机应用系统软件包含多个源程序文件,KEILC51使用工程这一概念,将这些参数设置和所需的所有文件都加在一个工程中。
因此,需要建立一个工程文件,并为这个工程选择CPU,确定编译,汇编,连接的参数,指定调试的方式。
(3)建立并添加源文件。
使用菜单或者单击工具栏的新建文件按钮,出现文本便捷窗口,在该窗口中输入新编制的源程序并保存该文件。
然后,我打开已经画好的仿真图,再将生成的HEX文件导入单片机里,点击开始按钮,电路正常工作,并且能够实现预先设想的所有功能,而且效果很好,从而验证了我的程序的正确性。
仿真成果图见附录1。
5成品制作
5.1电路板设计
由于在布线过程中需用单层布线,在我的原理图中元件多,所以我将原理图划分为了两块,一块以第一个板块主要以单片机AT89C51和温度传感器为主,用三极管替之,另一块主要以锁存器和LED显示器为主。
两块原理图及封装见附录2。
5.2电路板制作
5.2.1PCB制作流程
PCB板制作流程如表5.2.1所示:
钻孔
印PCB板图
腐蚀20-30分钟
洗涤
烘干
焊接
图2.1PCB板制作流程图
5.2.2制作工艺注意事项
钻孔时,不宜将眼睛距离钻机太近,以防碎屑溅入眼内。
腐蚀用筷子夹起板子时动作要缓慢,以防硫酸溅到身上。
在烤箱烘烤2分钟左右即可,取出时应用夹子等工具夹出,以防烫伤手。
焊接时,要正确使用焊笔和焊锡,以防烫伤。
在焊接时,还应注意不能让锡将两铜导线短路。
5.3器件检测
5.3.1PCB板检测
每一条线路逐个检测,如有些隐形导线腐蚀过度,造成断路的情况,要用锡将其连通。
在检查时,我的板子上的线都是完好的。
6实验对比分析
图6.1温度传感器正常情况下显示的温度27.8°
图6.2用手握着温度传感器的情况下显示的温度:
30.6°
由此可知实验设计受外界温度影响,将温度信号的变化转化为电信号的变化显示出来
7结论
设计中主要是以AT89C51单片机为核心的,对温度的检测与显示进行了简单的设计与阐述。
设计可以说是软硬结合,又以硬件为主。
当今科技发展迅速,单片机嵌入式开发有着光明的前景。
由于单片机经济实用、开发简便等特点依然在工业控制、家电等领域占据了广泛的市场。
在实际的编程以及调试程序过程中,我发现自己应该学的太多太多。
光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。
由于我以前C语言没有认真钻研过,所以感觉设计的任务十分紧迫。
通过对本系统的设计,我学习到了硬件开发和软件开发的基本流程并有了一定的驾御此开发过程的能力。
编程的过程中,虽然不乏辛苦,但更多的是程序调试成功后的喜悦。
总之,这次综合实验对我来说是一次比较全面的、富有创造性和探索性的锻炼,完成了我选题时的心愿。
令我深有感触,对于我今后的学习、工作和生活都将是受益非浅的!
加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。
技术在不断进步,机械式时钟已经被淘汰,电子时代已经到来。
做为新时代的我们,更应该提高自身能力,适应新时代的发展。
知识来自实践,多从生活中探寻所需要的。
从这次的论文设计中,我真正的体会到,知识的重要性,特别是要理论联系实际,把我们所学的理论知识运用到实际生活当中,要用知识改变一切。
8致谢
本设计是在指导老师邹玉炜的悉心指导下完成的。
从设计的选题,相关资料的查寻,到论文的撰写这一整个过程中,邹老师以其广博的知识、丰富的经验、清晰的思路,自始至终给我以指导,让我对我的论文设计思路逐渐清晰明朗,每当在我论文设计中遇到困难时充满希望,总能迎刃而解,总之非常感谢他这段时间对我们的鼓励和指导。
使我能够顺利完成设计,他严谨的治学态度,精益求精的工作作风和孜孜不倦的求学精神令我受益匪浅。
在此设计完成之际,向邹老师表示衷心的感谢!
参考文献
[1]刘国钧,王连成.图书馆史研究[M].高等教育出版社,1979.
[2]孙品一.高校学报编辑工作现代化特征[C].北京师范大学出版社,1998.
[3]张和生.地质力学系统理论[D].太原理工大学出版社,1998.
[4]江力.单片机原理与应用技术[M].清华大学出版社,2006.
[5]靳达.单片机典型模块设计实例导航[M].北京:
人民邮电出版社,2003.
[6]刘迎春,叶湘滨.传感器原理设计与应用(第三版)[M].长沙:
国防科技大学出版社,1997
[7]潘新民,王燕芳.微型计算机实用系统设计[M].北京:
人民邮电出版社,1992.
MicrocontrollerBasedDigitalThermometer
KangZhenxing
(CollegeofPhysics&
ElectricalEngineering,AnyangNormalUniversity,Anyang,Henan455000)
Abstract:
Thehardware
structureof
thetemperaturemeasurementandcontrolsystemofAT89C51microcontroller
and
Cprogramminglanguage
basedon
here,
which
adoptsasinglechipasthecorecomponents
oflogiccontroland
signal.
With
the
advantageof
SCM
costsavings,makethecircuitsimple.
Thesystemdesignandlayoutissimple,
compactstructure,smallvolume,
lightweight,
stronganti-interferenceability,
highcost,
easytoexpand,
in
largewarehouses,
factories,
haswideapplicationprospectin
intelligentmulti-pointtemperaturemeasurement
inthefieldof
constructionetc..
Keywords:
DS18B20;
AT89C51;
Proteussoftware;
temperaturemeasurement
附录
附录1:
数字温度计PCB图
附录2:
数字温度计原理图
附录3:
元件列表
元器件名称
型号
数量
电阻
2.2K
4个
单片机最小系统板
AT89C51
1个
温度传感器
DS18B20
按键
2个
晶振
12MHz
瓷片电容
30pF
三极管
9012
四位一体共阳数码管
ZS5641BS
10K
附录4:
数字温度计源程序
#include<
reg52.h>
#defineuiunsignedint
#defineucunsignedchar//宏定义
sbitDQ=P3^7;
//定义DS18B20总线I/O
bitbdatafuhao;
ucqian,bai,shi,ge;
uccodeled[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7};
uccodeled_dian[]={0x7f,0x64,0xbd,0xf5,0xe6,0xf3,0xfb,0x67,0xff,0xf7};
//====================================DS18B20============================
/*****延时子程序*****/
voidDelay(intnum)
{
while(num--);
}
/*****初始化DS18B20*****/
voidInit_DS18B20()
DQ=1;
//DQ复位
Delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
Delay(80);
//精确延时,大于480us
//拉高总线
Delay(40);
/*****读一个字节*****/
ucReadOneChar()
uci=0;
ucdat=0;
for(i=8;
i>
0;
i--)
{
DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
/*****写一个字节*****/
voidWriteOneChar(ucdat)
i>
i--)
DQ=dat&
0x01;
Delay(5);
/*****读取温度*****/
uiReadTemperature()
uia=0,b=0,t=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
WriteOneChar(0xBE);
//读取温度寄存器
a=ReadOneChar();
//读低8位
b=ReadOneChar();
//读高8位
t=b;
t<
<
=8;
t=t|a;
if(t&
0xf800)
t=~t+1;
fuhao=1;
else
fuhao=0;
tt=t*0.0625;
t=tt*10+0.5;
//放大10倍输出并四舍五入
return(t);
voidcheck_wendu()
uif;
f=ReadTemperature();
//获取温度值并减去DS18B20的温漂误差
qian=f/1000;
bai=(f%1000)/100;
//计算得到十位数字
shi=((f%1000)%100)/10;
//计算得到个位数字
ge=((f%1000)%100)%10;
//计算得到小数位
/*****显示温度子程序*****/
voidDisp_Temperature()//显示温度
if(qian==0)
if(fuhao==1)
P0=0x7f;
//10111111
else
P0=0xff;
P2=0xfd;
Delay(10);
P2=0xff;
elseif(qian!
=0)
P0=~led[qian];
P2=0xfd;
if((bai==0)&
&
(qian==0))
//
P2=0xf7;
P2=0xff;
elseif((bai==0)&
(qian!
=0))
P0=~led[bai];
elseif(bai!
P0=~led_dian[shi];
P2=0xdf;
Delay(10);
P2=0xff;
P0=~led[ge];
//显示符号
P2=0x7f;
//关闭显示
/*****主函数*****/
voidmain()
ucz;
fo