基于单片机的数字温度计的设计Word文档格式.docx
《基于单片机的数字温度计的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计的设计Word文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。
DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
被测温度用符号扩展的16位数字量方式串行输出;
其工作电源既可以在远端引入,也可以采用寄生电源方式产生;
多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20的性能特点如下:
●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
●DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
●DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
●适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
●测温范围-55℃~+128℃,精度为±
1℃
●零待机功耗
●测量结果直接输出数字信号,以“一线总线”穿行传送给CPU,同时可传送CRC校验位,具有极强的抗干扰纠错能力
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作
以上特点使DS18B20非常适用与多点、远距离温度检测系统。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式如图4.2所示,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;
GND为地信号;
VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
[
传感器电路图
3系统硬件电路的设计
本设计由DS18B20温度传感器芯片测量当前的温度并将转换后的结果送入单片机。
然后通过A89C51单片机驱动两位共阳极8段LED数码管显示测量温度值。
如附录中本设计硬件电路图所示,本电路主要有DS18B20温度传感器芯片,两位共阳极数码管,AT89C51单片机及相应外围电路组成。
其中DS18B20采用“一线制”与单片机相连。
3.1温度检测电路
DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。
DS18B20的电源供电方式有2种:
外部供电方式和寄生电源方式。
工作于寄生电源方式时,VDD和GND均接地,他在需要远程温度探测和空间受限的场合特别有用,原理是当1Wire总线的信号线DQ为高电平时,窃取信号能量给DS18B20供电,同时一部分能量给内部电容充电,当DQ为低电平时释放能量为DS18B20供电。
但寄生电源方式需要强上拉电路,软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM时),同时芯片的性能也有所降低。
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。
因此本设计采用外部供电方式。
如下图所示:
温度传感器DS18B20的测量范围为-55℃~+125℃,在-10℃~+85℃时精度为±
0.5℃。
因为本设计只用于测量环境温度,所以只显示0℃~+85℃。
本设计采用液晶动态显示,电路如下图所示:
显示部分电路
4系统软件的设计
4.1概述
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
从软件的功能不同可分为两大类:
一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。
每一个执行软件也就是一个小的功能执行模块。
这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。
各执行模块规划好后,就可以规划监控程序了。
首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
4.1.1温度数据的计算处理方法
从DS18B20读取出的二进制值必须转换成十进制值,才能用于字符的显示。
DS18B20的转换精度为9~12位,为了提高精度采用12位。
在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。
通过观察表4-1可以发现,一个十进制与二进制间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一字节,这个字节的二进制化为十进制后,就是温度值的百、十、个位字节,所以二进制值范围是0~F,转换成十进制小数就是0.0625的倍数(0~15倍)。
这样需要4位的数码管来表示小数部分。
实际应用不必这么高的精度,采用1位数码管来显示小数,可以精确到0.1℃。
表4.1二进制与十进制的近似对应关系表
4.2主程序模块
主程序需要调用2个子程序,分别为:
温度设定、驱动数码管把实时温度值送出在LED数码管显示
主程序流程图:
图1主程序流程图
4.3读温度值模块
读温度值模块需要调用4个子程序,分别为:
DS18B20初始化子程序:
让单片机知道DS18B20在总线上且已准备好操
作
DS18B20写字节子程序:
对DS18B20发出命令
DS18B20读字节子程序:
读取DS18B20存储器的数据
延时子程序:
对DS18B20操作时的时序控制
(1).读温度值模块流程图:
图2读温度值子程序流程图
(2).DS18B20初始化子程序流程图:
图3DS18B20初始化子程序流程图
(3).DS18B20写字节和读字节子程序流程图:
图4DS18B20写字节子程序流程图图5DS18B20读字节子程序流程图
4.4中断模块
中断采用T0方式1,初始值定时为50ms。
中断模块需调用两个子程序:
读温度值子程序:
定时读取温度值,实时更新温度值
记录温度值子程序:
定时记录温度值,供查询使用
把这两个子程序放在中断的原因是,不会因为调整报警温度或查询历史温度值而停止更新温度值和记录温度值。
中断模块流程图:
图6中断模块流程图
图7数码管驱动模块流程图
5实验仪器及元件清单
器件名称
规格型号
数量
单片机
ATS89C51
1
温度传感器
Ds18b20
6心得体会
该基于DS18B20的多点温度测量系统具有硬件结构简单、易于制作、价格低廉、测量值精确和易于操作等许多优点。
实际应用中可根据具体情况进行更多点的扩展和对多点进行控制。
随着现代信息技术的飞速发展和传统工业改造的逐步实现,基于DS18B20的多点温度测量系统已经广泛应用于控制、化工等诸多领域。
总之,本次课程设计顺利完成,基本达到了课程设计的要求。
本文在深入分析多点智能测温系统的工作原理基础上,完成了该系统设计和调试任务,并且系统的性能误差达到了任务书的要求,使之能达到现场运行水平。
总结这一星期以来的工作,得到以下结论:
1.针对现有测温系统的特点,提出了一套应用数字式温度传感器DS81B20组建温度测控网络新型方案,该方案的突出特点是系统的数字化、快速化及其经济实用性。
2.以单总线为基本结构,采用ATMEL公司的AT89S51单片机为总线命令,实现与DSl8B20的总线接口,并提供具体电路设计。
3.软件编程采用模块化、结构化设计,易于修改和维护。
由于时间和精力的限制,对后续的研究还应在以下方面逐步完善:
1.应用软件的完善。
温度采集方面,一次命令全部单总线上的DS18B20进行温度转换,减少系统所需时间。
2.进一步完善系统的可靠性。
由于实际经验的欠缺,设计上难免有考虑不周之处。
当某一个传感器出现故障时,虽然系统能发现该测温点故障,但是更换传感器时涉及到其序列号的修改和应用程序的修改,这些还需要在今后应用时加以完善。
3.可以增加控制部分,以后在该部分进行PID算法控制,以提高控制精度。
总之,本论文在新型数字温度测控系统方面做了一定的研究工作。
该系统初步完成了温度测控方案的预定目标,为今后实现数字化与网络化的温度测控系统工程提供了一种参考。
社会经济效益分析
本温度测控系统可以产生的社会经济效益是显而易见的。
在工农业许多场合,温度测量和控制对生产起着非常重要的作用,通过温度测控,可以更好的提高工农业生产的产量和效率。
本设计利用数字化的温度传感器作为载体,以AT89S51单片机为控制核心,通过对所测量的温度值进行控制和数据上传,将数字信息上传给上位机进行进一步的处理,从而可以实现这套系统的商品化和技术服务的稳定性。
这套系统可以产生的功能强大,扩展温度传感器端口后,可以同时对多个传感器进行测量和控制,并且只需添加DS18B20的初始化程序和与本设计两点测控类似的程序即可以实现,所以程序修改上也比较方便。
本系统可以实现产品的专业化和工厂化大生产,应用领域广泛,例如,可以对小区内的供暖系统进行多点温度监控,实时处理DS18B20温度传感器上传的数据;
可以在对温度要求比较严格的车间内进行多点温度测控,以保持室内的精准温度;
可以在化学反应炉内安装本系统,使化学反应可以在精确的温度条件下进行等等。
在课程设计的整个过程中,我遇到了许多意想不到的困难,如自己设计电路,进行软件编译等等。
不仅如此,很多从未遇见过的问题和现象困扰着我,比如在调试的过程中,时常出现问题,但每次经过仔细反复查找,终于可以将这些问题针对性的找到并进行合理的改正,确保其正常实现对应的功能,在自己处理难题的过程中,真正学到了很多新的知识。
致谢
在本次课程设计即将完成之际,我要感谢同班同学,没有他们的帮助和提供资料,没有他们的鼓励和加油,这次毕业设计就不会如此的顺利进行。
当然,不积跬步何以至千里,这一切也归功于各位任课老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。
诚挚的感谢我的指导老师陈琦老师。
她在忙碌的教学工作中挤出时间来审查、修改我的论文,告诉我应该注意的细节问题,细心的给我指出错误并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励,她严谨细致、一丝不苟的作风一直是我生活、学习中的榜样。
在接下来的一年里,我会加倍努力,不辜负老师们的悉心教导,弥补自己在学习生活中的不足,完善知识体系,争取能够更加熟练地运用在课堂上学到的知识,提高自己的成绩,给自己一份满意的答卷。
最后,向所有关心我的亲人、师长和朋友们表示深深的谢意。
参考文献
(1)徐玮.C51单片机高效入门(第2版).北京:
机械工业出版社,2010.
(2)龙脉工作室,刘鲲,孙春亮(修订版).北京:
人们邮电出版社,2010.
附录:
源程序
数字温度仪DS18B20的汇编语言程序
TEMP_ZHDATA24H;
实时温度值存放单元
TEMPLDATA25H;
TEMPHDATA26H;
TEMP_THDATA27H;
高温报警值存放单元
TEMP_TLDATA28H;
低温报警值存放单元
TEMPHCDATA29H;
TEMPLCDATA2AH
K1EQUP1.4
K2EQUP1.5
K3EQUP1.6
K4EQUP1.7
BEEPEQUP3.6
RELAYEQUP3.7
LCD_XEQU2FH;
LCD地址变量
LCD_RSEQUP2.0
LCD_RWEQUP2.1
LCD_ENEQUP2.2
flag1EQU20H.0;
DS18B20是否存在标记
KEY_UDEQU20H.1;
设定KEY的UP与DOWN标记
date_lineEQUP3.3
;
=====================================================
ORG0000H
JMPMAIN
MAIN:
MOVSP,#60H
MOVA,#00H
MOVR0,#20H//;
将20H-2FH单元清零
MOVR1,#10H
CLEAR:
MOV@R0,A
INCR0
DJNZR1,CLEAR
CALLSET_LCD
CALLRE_18B20
start:
CALLRESET;
18B20复位子程序
JNBFLAG1,START1;
DS1820不存在
CALLMENU_OK
CALLREAD_E2
CALLTEMP_BJ;
显示温度标记
JMPSTART2
START1:
CALLMENU_ERROR
JMP$
START2:
CALLRESET
MOVA,#0CCH;
跳过ROM匹配
CALLWRITE
MOVA,#44H;
发出温度转换命令
MOVA,#0BEH;
发出读温度命令
CALLREAD
callCONVTEMP
CallDISPBCD
CALLCONV
CALLTEMP_COMP
CALLPROC_KEY;
键扫描
SJMPSTART2
-----------------------------------------------------
PROC_KEY:
JBK1,PROC_K1;
按键K1处理
CALLBEEP_BL
JNBK1,$
MOVDPTR,#M_ALAX1
MOVA,#1
CALLLCD_PRINT
CALLLOOK_ALARM
JBK3,$
JMPPROC_K2
PROC_K1:
;
按键K2处理
JBK2,PROC_END
JNBK2,$
MOVDPTR,#RESET_A1
CALLSET_ALARM
CALLRE_18B20;
将设定的TH,TL值写入DS18B20内
CALLWRITE_E2
PROC_K2:
CALLTEMP_BJ
PROC_END:
RET
============================================
设定报警值TH、TL
SET_ALARM:
;
CALLRESET_ALARM
AS0:
JBK1,AS00
CPL20H.1;
UP/DOWN标记
AS00:
JB20H.1,ASZ01;
20H.1=1,UP
JMPASJ01;
20H.1=0,DOWN
ASZ01:
JBK2,ASZ02;
TH值调整(增加)
INCTEMP_TH
MOVA,TEMP_TH
CJNEA,#120,ASZ011
MOVTEMP_TH,#0
ASZ011:
MOVR5,#10
CALLDELAY
JMPASZ01
ASZ02:
JBK3,ASZ03;
TL值调整(增加)
INCTEMP_TL
MOVA,TEMP_TL
CJNEA,#99,ASZ021
MOVTEMP_TL,#00H
ASZ021:
CALLLOOK_ALARM;
JMPASZ02
ASZ03:
JBK4,AS0;
确定调整OK
JNBK4,$
ASJ01:
JBK2,ASJ02;
TH值调整(减少)
DECTEMP_TH
CJNEA,#0FFH,ASJ011
JMPASJ022
ASJ011:
JMPAS0
ASJ02:
JBK3,ASJ03;
TL值调整(减少)
DECTEMP_TL
CJNEA,#0FFH,ASJ021
ASJ021:
ASJ022:
CPL20H.1
ASJ03:
JMPASZ03
RESET_ALARM:
MOVDPTR,#RESET_A1;
指针指到显示信息区
MOVA,#1;
显示在第一行
RESET_A1:
DB"
RESETALERTCODE"
====================================================
实际温度值与标记温度值比较子程序
TEMP_COMP:
MOVA,TEMP_TH
SUBBA,TEMP_ZH;
减数>
被减数,则
JCCHULI1;
借位标志位C=1,转
MOVA,TEMP_ZH
SUBBA,TEMP_TL;
JCCHULI2;
MOVDPTR,#BJ5
CALLTEMP_BJ3
CLRRELAY;
继电器吸合
CHULI1:
MOVDPTR,#BJ3
SETBRELAY;
继电器关闭
CHULI2:
MOVDPTR,#BJ4
-----------------------------------------
TEMP_BJ3:
MOVA,#0CEH
CALLWCOM
MOVR1,#0
MOVR0,#2
BBJJ3:
MOVA,R1
MOVCA,@A+DPTR
CALLWDATA
INCR1
DJNZR0,BBJJ3
BJ3:
>
H"
BJ4:
<
L"
BJ5:
!
"
==================================================
显示温度标记子程序
=====