基于单片机的温度传感器的设计.docx
《基于单片机的温度传感器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度传感器的设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机的温度传感器的设计
基于单片机的温度传感器的设计
目录
第一章绪论---2
1.1课题简介2
1.2设计目的3
1.3设计任务3
第二章设计内容与所用器件4
第三章硬件系统设计4
3.1单片机的选择4
3.2温度传感器介绍5
3.3温度传感器与单片机的连接8
3.4单片机与报警电路9
3.5电源电路10
3.6显示电路10
3.7复位电路11
第四章软件设计12
4.1读取数据流程图12
4.2温度数据处理程序的流程图13
4.3程序源代码14
总结21
附录------------------------------------------------------------------------------------16
第一章绪论
1.1课题简介
单片机,更确切的应称作微控制器,是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强大、体积小、可靠性高、价格低廉。
它一面世便在工业控制、数据采集、智能化仪表、机电一体化、家用电器等领域得到广泛应用,极大地提高了这些领域的技术水平和自动化程度。
因此,单片机的开发、应用已成为高科技和工程领域的一项重大课题。
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它给人带来的方便也是无可置疑的,其中数字温度计就是一个典型的例子。
随着人们对它的要求越来越高,要为现代人工作和生活提供更好、更方便的设施就需要从数字单片机技术入手,一切向着数字化控制、智能化控制方向发展。
温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学实验(如:
物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。
目前温度计的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等。
现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计,这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。
本文所介绍的数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温准确等优点,其输出温度采用数字显示,主要供测温要求准确的场所和科研实验室使用。
该设计控制器使用单片机AT89C51,温度传感器DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。
1.2设计目的
熟悉单片机AT89C51和传感器DS18B20的应用,及单片机与外围电路的接法,加深对单片机以及传感器的认识,了解单片机在日常生活中的应用及其重要性。
同时,通过查找资料,设计电路,使本次设计的数字温度计具有结构简单、成本低廉、精确度高、反应速度快、数字化显示和不易损坏等特点。
在这次设计中,熟悉了制作一个产品的基本流程。
通过选认元件,连线,等过程,锻炼自己的学习能力。
1.3设计任务
1、以AT89C51单片机为核心器件,组成一个数字式温度计。
2、采用数字式温度计传感器为检测器件,进行单点温度检测,检测精度为±0.5°C。
3、温度显示采用4位LED数码管显示,两位整数,一位小数。
4、具有键盘输入上、下限功能,超过上、下限温度时,进行声音报警。
第二章设计内容与所用器件
基本功能:
利用89C51作为主控器组成一个数字温度计。
可选器件:
AT89C51单片机、DB18B20、7段LED数码管等
系统原理图
第三章硬件系统设计
硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。
本设计选用以AT89C51单片机为主控单元,DB18B20为数据采集模块,显示部分采用7段LED动态显示,警报部分采用蜂鸣器。
3.1单片机的选择
AT89C51
AT89C51单片机的主要特性:
1、与MCS-51兼容,4K字节可编程闪烁存储器;
2、灵活的在线系统编程,掉电标识和快速编程特性;
3、寿命为1000次写/擦周期,数据保留时间可10年以上;
4、全静态工作模式:
0Hz-33Hz;
5、三级程序存储器锁定;
6、128*8位内部RAM,32可编程I/O线;
7、两个16位定时器/计数器,6个中断源;
8、全双工串行UART通道,低功耗的闲置和掉电模式;
9、片内振荡器和时钟电路;
芯片共有40个引脚,其中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。
3.2温度传感器介绍
DS18B20可以程序设定9-12的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。
温度传感器DS18B20引脚如图所示
引脚功能说明:
NC:
空引脚,悬空不使用;
VDD:
可选电源脚,电源电压范围3~5.5V。
当工作于寄生电源时,此引脚必须接地。
DQ:
数据输入/输出脚。
漏极开路,常态下高电平。
GND:
为电源地
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。
若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。
因此,可用多只DS18B20同时测量温度并进行报警搜索。
DS18B20的测温原理是这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作按协议进行。
操作协议为:
初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
源供电方式
在外部电源供电方式下,DS18B20工作电源由VCC引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。
注意:
在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85℃。
部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单。
本次数字温度计的设计采用的就是外部电源供电方式。
3.3温度传感器与单片机的连接
温度传感器的单总线(1-Wire)与单片机的P2.0连接,P2.0是单片机的高位地址线A8。
P2端口是一个带内部上拉电阻的8位双向I/O,其输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对该端口写“1”,可通过内部上拉电阻将其端口拉至高电平,此时可作为输入口使用,这是因为内部存在上拉电阻,某一引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器时。
如执行MOVXDPTR指令,则表示P2端口送出高8位的地址数据。
在访问8位地址的外部数据存储器时,可执行MOVXRI指令,P2端口内容即为特殊功能寄存器(SFR)区中R2寄存器内容,整个访问期间不改变。
在Flash编程和程序校验时,P2端口也接收高位地址和其他控制信号。
下图为DSl8B20内部结构。
下图为DSl8B20与单片机的接口电路。
3.4单片机与报警电路
系统中的报警电路是由发光二极管和限流电阻组成,并与单片机的P1.2端口连接。
P1端口的作用和接法与P2端口相同,不同的是在Flash编程和程序校验期间,P1接收低8位地址数据。
3.5电源电路
由于该系统需要稳定的5V电源,因此设计时必须采用能满足电压、电流和稳定性要求的电源。
该电源采用三端集成稳压器LM7805。
它仅有输入端、输出端及公共端3个引脚,其内部设有过流保护、过热保护及调整管安全保护电路.由于所需外接元件少,使用方便、可靠,因此可作为稳压电源。
下图为电源电路连接图。
3.6显示电路
采用技术成熟的74HCl64实现串并转换。
LED显示分为静态显示和动态显示。
这里采用静态显示,系统通过单片机的串行口来实现静态显示。
串行口为方式零状态,即工作在移位寄存器方式,波特率为振荡频率的1/12。
当器件执行任何一条将SBUF作为目的寄存器的命令时,数据便开始从RXD端发送。
在写信号有效时,相隔一个机器周期后发送控制端SEND有效,即允许RXD发送数据,同时允许从TXD端输出移位脉冲。
下图为显示电路的连接图。
3.7复位电路
单片机的P1.6端口是MAX813复位电路中复位信号的输入端,即单片机每执行一次程序就设置一次复位信号,清零复位器件。
若程序出现异常,单片机引脚RST将出现两个机器周期以上的高电平,使其复位。
该复位信号高电平有效,其有效时间应持续24个振荡脉冲周期即两个机器周期以上。
若使用频率为12MHz的晶体振荡器,则复位信号持续时间应超过2μs才完成复位操作。
连接图如下图所示。
第四章软件设计
DSl8820的主要数据元件有:
64位激光LaseredROM,温度灵敏元件和非易失性温度告警触发器TH和TL。
DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。
此外,还可外接5V电源,给DSl8820供电。
DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。
读取数据流程图如下:
读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625℃,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。
所以先将数据提取出来,分为三个部分:
小数部分、整数部分和符号部分。
小数部分进行四舍五入处理:
大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。
当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。
还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。
图为温度数据处理程序的流程图如下所示:
程序源代码
DATA_BUSBITP3.3
FLAGBIT00H;标志位
TEMP_LEQU30H;温度值低字节
TEMP_HEQU31H;温度值高字节
TEMP_DPEQU32H;温度小数
TEMP_INTEQU33H;温度值整数
TEMP_BAIEQU34H;温度百位数
TEMP_SHIEQU35H;温度十位数
TEMP_GEEQU36H;温度个位数
DIS_BAIEQU37H;显示百位数
DIS_SHIEQU38H;显示十位数
DIS_GEEQU39H;显示个位数
DIS_DPEQU3AH;显示小数位
DIS_ADDEQU3BH;显示地址
ORG0000H
AJMPSTART
ORG0050H;初始化
START:
MOVSP,#40H
MAIN:
LCALLREAD_TEMP;调读温度程序
LCALLPROCESS;调数据处理程序
AJMPMAIN
;读温度程序
READ_TEMP:
LCALLRESET_PULSE;调用复位脉冲程序
MOVA,#0CCH;跳过ROM命令
LCALLWRITE
MOVA,#44H;读温度
LCALLWRITE
LCALLDISPLAY;显示温度
LCALLRESET_PULSE;调用复位脉冲程序
MOVA,#0CCH;跳过ROM命令
LCALLWRITE
MOVA,#0BEH;读缓存命令
LCALLWRITE
LCALLREAD
RET
;复位脉冲程序
RESET_PULSE:
RESET:
SETBDATA_BUS
NOP
NOP
CLRDATA_BUS
MOVR7,#255
DJNZR7,$
SETBDATA_BUS
MOVR7,#30
DJNZR7,$
JNBDATA_BUS,SETB_FLAG
CLRFLAG
AJMPNEXT
SETB_FLAG:
SETBFLAG
NEXT:
MOVR7,#120
DJNZR7,$
SETBDATA_BUS
JNBFLAG,RESET
RET
;写命令
WRITE:
SETBDATA_BUS
MOVR6,#8
CLRC
WRITING:
CLRDATA_BUS
MOVR7,#5
DJNZR7,$
RRCA
MOVDATA_BUS,C
MOVR7,#30H
DJNZR7,$
SETBDATA_BUS
NOP
DJNZR6,WRITING
RET
;循环显示段位
DISPLAY:
MOVR4,#200
DIS_LOOP:
MOVA,DIS_DP
MOVP2,#0FFH
MOVP0,A
CLRP2.7
LCALLDELAY2MS
MOVA,DIS_GE
MOVP2,#0FFH
MOVP0,A
SETBP0.7
CLRP2.6
LCALLDELAY2MS
MOVA,DIS_SHI
MOVP2,#0FFH
MOVP0,A
CLRP2.5
LCALLDELAY2MS
MOVA,DIS_BAI
MOVP2,#0FFH
MOVP0,A
MOVA,TEMP_BAI
CJNEA,#0,SKIP
AJMPNEXTT
SKIP:
CLRP2.4
LCALLDELAY2MS
NEXTT:
NOP
DJNZR4,DIS_LOOP
RET
;读命令
READ:
SETBDATA_BUS
MOVR0,#TEMP_L
MOVR6,#8
MOVR5,#2
CLRC
READING:
CLRDATA_BUS
NOP
NOP
SETBDATA_BUS
NOP
NOP
NOP
NOP
MOVC,DATA_BUS
RRCA
MOVR7,#30H
DJNZR7,$
SETBDATA_BUS
DJNZR6,READING
MOV@R0,A
INCR0
MOVR6,#8
SETBDATA_BUS
DJNZR5,READING
RET
;数据处理
PROCESS:
MOVR7,TEMP_L
MOVA,#0FH
ANLA,R7
MOVTEMP_DP,A
MOVR7,TEMP_L
MOVA,#0F0H
ANLA,R7
SWAPA
MOVTEMP_L,A
MOVR7,TEMP_H
MOVA,#0FH
ANLA,R7
SWAPA
ORLA,TEMP_L
MOVB,#64H
DIVAB
MOVTEMP_BAI,A
MOVA,#0AH
XCHA,B
DIVAB
MOVTEMP_SHI,A
MOVTEMP_GE,B
MOVA,TEMP_DP
MOVDPTR,#TABLE_DP
MOVCA,@A+DPTR
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_DP,A
MOVA,TEMP_GE
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_GE,A
MOVA,TEMP_SHI
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_SHI,A
MOVA,TEMP_BAI
MOVDPTR,#TABLE_INTER
MOVCA,@A+DPTR
MOVDIS_BAI,A
RET
DELAY2MS:
MOVR6,#3
LOOP3:
MOVR5,#250
DJNZR5,$
DJNZR6,LOOP3
RET
TABLE_DP:
DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB06H,07H,08H,08H,09H,09H
TABLE_INTER:
DB03FH,006H,05BH,04FH,066H
DB06DH,07DH,07H,07FH,06FH
END
总结与体会
作为一名电子信息工程的大三学生,我觉得做单片机课程设计是很有意义的,而且也是必要的。
在做这次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。
要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。
在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。