基于ds18b20的数字温度计设计.docx
- 文档编号:13105727
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:28
- 大小:259.75KB
基于ds18b20的数字温度计设计.docx
《基于ds18b20的数字温度计设计.docx》由会员分享,可在线阅读,更多相关《基于ds18b20的数字温度计设计.docx(28页珍藏版)》请在冰点文库上搜索。
基于ds18b20的数字温度计设计
基于DS18B20的数字温度计设计
摘要:
在本设计中选用AT89C51型单片机作为主控制器件,采用DS18B20数字温度传感器作为测温元件,通过两位共阴极LED数码显示管并行传送数据,实现温度显示。
本设计的内容主要分为两部分,一是对系统硬件部分的设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用汇编语言实现温度的采集与显示。
通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。
其系统构成简单,信号采集效果好,数据处理速度快,便于实际检测使用。
关键词:
单片机AT89C51;温度传感器DS18B20;LED数码管;数字温度计
(一)设计内容及要求
本设计主要介绍了用单片机和数字温度传感器DS18B20相结合的方法来实现温度的采集,以单片机AT89C51芯片为核心,辅以温度传感器DS18B20和LED数码管及必要的外围电路,构成了一个多功能单片机数字温度计。
本次设计的主要思路是利用51系列单片机,数字温度传感器DS18B20和LED数码显示器,构成实现温度检测与显示的单片机控制系统,即数字温度计。
通过对单片机编写相应的程序,达到能够实时检测周围温度的目的。
通过对本课题的设计能够熟悉数字温度计的工作原理及过程,了解各功能器件(单片机、DS18B20、LED)的基本原理与应用,掌握各部分电路的硬件连线与程序编写,最终完成对数字温度计的总体设计。
其具体的要求如下:
1、根据设计要求,选用AT89C51单片机为核心器件;
2、温度检测器件采用DS18B20数字式温度传感器,利用单总线式连接方式与单片机的P2.2引脚相连;
3、显示电路采用两位LED数码管以串口并行输出方式动态显示。
(二)系统的硬件选择及设计
2.1核心处理器的设计
1、AT89C51引脚图
芯片AT89C51的引脚排列和逻辑符号如图2.1所示。
图2.1AT89C51单片机引脚图
2、AT89C51引脚功能介绍
单片机芯片AT89C51为40引脚双列直插式封装。
本设计使用的其各个引脚功能介绍如下:
(1)VCC:
供电电压;
(2)GND:
接地;
(3)P0口:
一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。
本设计中使用P0作为两个共阴极LED数码管的位选和段选输出控制口,其中用到74HC573作为输出锁存,将段选和位选分开控制,由P2.7,P2.8开启。
电路图如下:
(4)P1口:
一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口被拉为低电平时将输出电流。
本设计中只用到P1.0管脚,当所测量温度超过预设报警温度时点亮LED灯,其中用到74HC573作为输出锁存,由P2.5开启该锁存器。
电路图如下:
(5)P2口:
一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流。
本设计中使用P2.2管脚和DS18B20的DQ管脚相连作为通信总线,AT89C51和DS18B20都能对该线电平拉高和拉低操作来进行通信,当电平为高时总线传输“1”,当电平为低时总线传输“0”;P2.7,P2.8开启数码管的位选和段选的P0口的锁存;P2.5开启报警LED灯的P1口的锁存。
(6)RST:
复位输入端。
当振荡器复位时,要保持RST脚两个机器周期的高电平时间。
2.2温度采集电路的设计
1、单线技术
该技术采用单根信号线,即可传输时钟,又能传输数据,而且数据传输时是双向的,因而这种单线技术具有线路简单,硬件开销少,成本低廉。
便于扩展的优点。
单线技术适用以单主机系统,单主机能够控制一个或多个从机设备。
主机可以是微控制器,从机可以是单线器件,它们之间的数据交换,控制都由这根线完成。
主机或从机通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放线,而让其它设备使用。
单线通常要求外接一个约5kΩ的上拉电阻,这样,当该线闲置时,器件状态为高电平。
主机和从机之间的通信主要分为3个步骤:
初始化单线器件,识别单线器件和单线数据传输。
由于只有一根线通信,所以它们必须是严格的主从结构,只有主机呼叫从机时,从机才能应答,主机访问每个单线器件都必须严格遵循单线命令序列,从机遵守上述三个步骤的顺序。
如果命令序列混乱,单线器件将不会响应主机。
所有的单线器件都有遵循严格的协议,以保证数据的完整性。
单线协议有复位脉冲,其他均由主机发起,并且所有命令和数据都是字节的低位在前。
2、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℃~+125℃,在-10~+85℃时精度为±0.5℃;
▲零待机功耗;
▲可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;
▲在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;
▲用户可定义报警设置;
▲报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
▲测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;
▲负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作
以上特点使DS18B20非常适用与多点、远距离温度检测系统。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式如图2.4所示。
其中,DQ为数据输入/输出引脚,也可用作开漏单总线接口引脚,当被用在寄生电源工作方式下,可以向器件提供电源;GND为地信号;VDD为可选择的电源引脚,当工作于寄生电源时,此引脚必须接地。
其电路图2.5所示。
图2.4外部封装形式图2.5传感器电路图
3、DS18B20内部结构
图2.6为DS1820的内部结构框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。
图2.6DS18B20内部结构框图
DS18B20采用3脚PR-35封装或8脚SOIC封装。
(1)64bit闪速ROM的结构如下:
8bit校验CRC
48bit序列号
8bit工厂代码(10H)
MSBLSB
MSBLSB
MSBLSB
开始的8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
主机操作ROM的命令有五种,在软件设计时会提到。
(2)高速暂存RAM的结构为8字节的存储器结构如图2.7所示。
图2.7高速暂存RAM结构图
其中,前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
暂存存储器的第5个字节是配置寄存器,可以通过相应的写命令进行配置,其内容如下:
0
R1
R0
1
1
1
1
1
1
MSBLSB
其中R0和R1是温度值分辨率位,可按表2.3进行配置。
表2.3温度值分辨率配置表
R1
R0
分辨率
最大转换时间(ms)
0
0
9位
93.75ms(tconv/8)
0
1
10位
183.50ms(tconv/4)
1
0
11位
375ms(tconv/2)
1
1
12位
750ms(tconv)
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可通过单线接口读到该数据,读取时低位在前、高位在后,数据格式以0.0625℃/LSB形式表示。
温度值格式如下:
低
23
22
21
20
2-1
2-2
2-3
2-4
高
S
S
S
S
S
26
25
24
MSBLSB
这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
格式中,S表示位。
对应的温度计算:
当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625℃/LSB形式表示。
表2.4是部分温度值对应的二进制温度表示数据。
表2.4部分温度的二进制数表示
温度
数字输出(二进制)
数字输出(16进制)
+125℃
0000011111010000
07D0H
+85℃
0000010101010000
0550H
+25.0625℃
0000000110010001
0191H
+10.125℃
0000000010100010
00A2H
+0.5℃
0000000000001000
0008H
0℃
0000000000000000
0000H
-0.5℃
1111111111111000
FFF8H
-10.125℃
1111111101011110
FFE5H
-25.0625℃
1111111001101111
FF6FH
-55℃
1111110010010000
FC90H
4、DS18B20测温原理
DS18B20的测温原理如图2.8所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
图2.8DS18B20测温原理图
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3.8中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时间概念,因此读写时序很重要。
系统对DS18B20的各种操作必须按协议进行。
操作协议为:
初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
5、温度采集电路
设计的温度采集电路如图2.9所示。
图2.9温度采集电路图
2.3温度显示电路的设计
1、LED数码管的操作
LED数码管的基本组成是半导体发光二极管,它是将若干个发光二极管,按照一定的笔段组合起来构成的一个整体。
LED数码管能显示0~9十个数字及部份英文字母。
常见的八段LED数码管结构如图2.10所示。
图2.10数码管的内部结构
它由8个发光二极管组成,其中7个长条形的发光二极管排列成”日”字形,另一个发光二极管在整个数码管的右下角,用来显示小数点。
本设计采用共阴极LED数码管,8个发光二极管的阴极都连在一起的。
。
加到各笔段对应发光二极管阳极上的代码不同,则就能控制LED数码管显示不同的字符和数字,这个代码称为段码。
通常将这个段码用单片机系统中的一个字节进行存储,正好这个字节中的8个二进制位(D7、D6、D5、D4、D3、D2、D1、D0),依次对应LED数码管的8个笔段dp、g、f、e、d、c、b、a。
此外,选用多个数码管还要注意位选问题,即先将某个数码管点亮,再赋予相应段码;再点亮另一个数码管,赋予新的段码。
2、温度显示电路
显示电路采用两个共阴极LED数码管显示所测温度的十位和各位,从P0口并行输出温度段码和位选码,通过两个74HC57锁存分开控制位选和段选,P2.7和P2.8控制锁存器的开启。
其具体电路图如图2.11所示。
图2.11显示电路
由于数码管余辉效应和人眼的视觉延迟,当数码管每秒点亮50次时,就会出现静止显示的温度值。
(三)系统的软件设计
3.1概述
软件设计关键在于DS18B20的使用。
DS18B20属于单线式器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议,来对读写数据提出严格的时序要求,而AT89C51单片机并不支持单线传输,因此必须采用软件的方法来模拟单线的协议时序。
3.2DS18B20的单线协议和命令
DS18B20有严格的通信协议来保证各为数据传输的正确性和完整性。
主机操作单线器件DS18B20必须遵循下面的顺序。
(1)初始化
单线总线上的所有操作都是从初始化开始的。
过程如下:
1、请求
主机通过拉低单线480us以上,产生复位脉冲,然后释放该线,进入Rx接收模式。
主机释放总线时,会产生一个上升沿脉冲。
DQ:
1->0(480us+)->1
2、响应
DS18B20检测到该上升沿后,延时15~60us,通过拉低总线60~240us来产生应答脉冲。
DQ:
1(15~60us)->0(60~240us)
3、接收响应
主机接收到从机的应答脉冲后,说明有单线器件在线。
至此,初始化完成。
DQ:
0
(2)ROM操作命令
当主机检测到应答脉冲,便可发起ROM操作命令。
共有5类ROM操作命令,如表3.1所示。
表3.1ROM操作命令
指令类型
命令字节
功能说明
ReadRom
读ROM
33H
读取激光ROM中的64位,只能用于总线上单个DS18B20器件情况,多挂时会发生数据冲突;
MatchRom
匹配ROM
55H
此命令后跟64位ROM序列号,寻址多挂总线上的对应DS18B20,只有序列号完全匹配的DS18B20才能响应后面的内存操作命令,其他不匹配的将等待复位脉冲,可用于单挂或多挂两种情况;
SkipRom
跳过ROM
CCH
可无须提供64位ROM序列号即可运行内存操作命令,只能用于单挂;
SearchRom
搜索ROM
F0H
通过一个排除法过程,识别出总线上所有器件的ROM序列号;
AlarmSearch
报警搜索
ECH
命令流程与SearchRom相同,但DS18B20只有最近的一次温度测量时满足了报警触发条件的,才会响应此命令。
(3)内存操作命令
在成功执行ROM操作命令后,才可使用内存操作命令。
共有6种内存操作命令,如表3.2所示。
表3.2内存操作命令
指令类型
命令字节
功能说明
WriteScratchpad
写暂存器
4EH
写暂存器中地址2~地址4的3个字节(TH,TL和配置寄存器)在发起复位脉冲之前,3个字节都必须要写;
ReadScratchpad
读暂存器
BEH
读取暂存器内容,从字节0一直到字节8,共9个字节,主机可随时发起复位脉冲,停止此操作,通常我们只需读前5个字节;
CopyScratchpad
复制暂存器
48H
将暂存器中的内容复制进EERAM,以便将温度告警触发字节存入非易失内存,如果此命令后主机产生读时隙,那么只要器件还在进行复制都会输出0,复制完成后输出1;
ConvertT
温度转换
44H
开始温度转换操作,若在此命令后主机产生时隙,那么只要器件还在进行温度转换就会输出0,转换完成后输出1;
RecallE2
重调E2暂存器
B8H
将存储在EERAM中的温度告警触发值和配置寄存器值重新拷贝到暂存器中,此操作在DS18B20加电时自动产生;
ReadPowerSupply
读供电方式
B4H
主机发起此命令后每个读数时隙内,DS18B20会发信号通知它的供电方式:
0寄生电源,1外部供电。
3.3温度采集程序流程图的设计
图3.4温度采集流程
3.4温度显示程序流程图的设计
图3.5LED显示流程图
(四)结论
本设计介绍了基于DS18B20的数字温度计的工作原理及实现过程,我在这几天的时间内阅读了有关数字温度计原理及设计的相关资料,根据系统所需的电路原理图设计了实现采集与显示功能的软件程序,完成了基于DS18B20的数字温度计的设计。
设计中采用最常用的单片机AT89C51作为主控模块,单总线数字温度传感器DS18B20用来测量温度,温度数据采用数码管LED显示。
本设计的特点是构成系统的硬件器件少,操作简单,数据处理功能强。
通过这次课程设计使我学习到了很多的东西,不仅加深了对专业知识的理解,而且更好地把理论知识与实践相结合,提高了自身的动手能力和实践水平,增强了学习单片机系统开发与设计的兴趣。
由于本人的知识有限,在本设计中不可避免存在一些不足之处,我会在以后的学习生活中不断加以完善。
相信本次设计的经历一定会在我今后的学习生活中产生巨大的推动作用。
(五)汇编代码
ORG0000H
TEMPER_HEQU21H;用于保存读出温度的高8位
TEMPER_LEQU20H;用于保存读出温度的低8位
TEMPEREQU30H;用于保存读出温度的字节
TEMPER_SETEQU31H;设定温度比较值,测量温度小于该值,开LED灯
FLAG1EQU38H;是否检测到DS18B20标志位
FLAG2EQU39H;是否完成温度测量标志位
MAIN:
START0:
LCALLGET_TEMPER
WAIT:
JBFLAG2,START1
AJMPWAIT
START1:
MOV28H,A
MOV29H,B
CLRFLAG2
START2:
MOVR2,28H
MOVR3,29H
LCALLDISPLAY;调用数码管显示子程序
AJMPSTART0
;********DS18B20应用入口子程序*************************
GET_TEMPER:
LCALLINIT_1820;
JBFLAG1,TSS2;检测到设备,标志位置1,跳至TSS2
RET;判断DS1820是否存在,不存在则返回
;**********DS18B20初始化子程序******************
INIT_1820:
SETBP2.2;先拉高总线
NOP
CLRP2.2;拉低总线等待设备回应
MOVR1,#3;主机发出延时537微秒的复位低脉冲
TSR1:
MOVR0,#107
DJNZR0,$
DJNZR1,TSR1;延时107*3个时钟
SETBP2.2;然后再拉高数据线,等待设备回应
NOP
NOP
NOP
MOVR0,#25H;等待设备回应延时
TSR2:
JNBP2.2,TSR3;若总线为低,有回应,跳至TSR3,否则等待
DJNZR0,TSR2
LJMPTSR4;延时后还是没收到回应,跳至TSR4
TSR3:
SETBFLAG1;置标志位,表示DS1820存在
LJMPTSR5
TSR4:
CLRFLAG1;清标志位,表示DS1820不存在
LJMPTSR7
TSR5:
MOVR0,#117;检测到设备
TSR6:
DJNZR0,TSR6;时序要求延时一段时间
TSR7:
SETBP3.5;未检测到设备,拉高总线
RET
*******初始化完毕检测到设备,温度测控主程序******
TSS2:
MOVA,#0CCH;跳过ROM匹配,通过总线0011_0011写值
LCALLWRITE_1820
MOVA,#44H;发出温度转换命令,通过总线0010_0010写值
LCALLWRITE_1820
LCALLINIT_1820;准备读温度前先复位
MOVA,#0CCH;跳过ROM匹配,通过总线0011_0011写值
LCALLWRITE_1820
MOVA,#0BEH;发出读温度命令,通过总线0111_1101写值
LCALLWRITE_1820
LCALLREAD_18200;将读出的温度数据保存到35H/36H,此时A的值为0111_1100,7CH
LCALLCHECK
SETBFLAG2
RET
;************写DS18B20的子程序(有具体的时序要求)***********
WRITE_1820:
MOVR2,#8;一共8位数据,循环右移,C的值赋给总线
CLRC
WR1:
CLRP2.2;拉低总线
MOVR3,#6
DJNZR3,$
RRCA;带上进位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ds18b20 数字 温度计 设计