基于DS18B20温度测试设计Word下载.docx
《基于DS18B20温度测试设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于DS18B20温度测试设计Word下载.docx(27页珍藏版)》请在冰点文库上搜索。
单片机AT89S52温度DS18B20
1总体设计方案
1.1设计背景
随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测与显示系统应用于诸多领域。
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,需要外加信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
与传统的温度计相比,这次设计的是基于DS18B20的数字温度计,它具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
1.2设计目标
在本设计中选用AT89S52型单片机作为主控制器件,采用DS18B20数字温度传感器作为测温元件,通过8位共阴极LED数码显示管并行传送数据,实现温度显示。
本设计的内容主要分为两个部分,一是系统硬件设计,包括温度采集电路和显示电路;
二是对系统软件部分的设计,应用C语言实现温度的采集与显示;
通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。
其系统构成简单,信号采集效果好,数据处理速度快,便于实际检测使用
2硬件特征
2.1AT89S52单片机的特征
2.1.1AT89S52单片机介绍
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
2.1.2AT89S52单片机的主要性能
(1)与MCS-51单片机产品兼容。
(2)8K字节在线系统可编程Flash存储器。
(3)1000次擦写周期。
(4)4.0V-5.5V工作电压。
(5)全静态操作:
0Hz~33Hz。
(6)三级加密程序存储器。
(7)256*8字节的内部数据存储器。
(8)32个可编程I/O口线。
(9)三个16位定时器/计数器。
(10)八个中断源。
(11)全双工UART串行通道。
(12)低功耗空闲和掉电模式。
(13)掉电后中断可唤醒。
(14)看门狗定时器。
(15)双数据指针。
(16)掉电标识符。
(17)快速编程周期。
(18)灵活ISP编程(字节和模式)。
(19)绿色(-免费)工作包操作。
2.1.3AT89S52单片机的引脚功能介绍
AT89S52单片机引脚如图2.1所示。
图2.1AT89S52单片机引脚图
VCC:
AT89S52电源正端输入,接+5V。
VSS:
电源地端。
XTAL1:
单芯片系统时钟的反相放大器输入端。
XTAL2:
系统时钟的反相放大器输出端。
RESET:
AT89S52的重置引脚,高电平动作。
EA/Vpp:
此引脚接低电平后,系统会取用外部的程序代码来执行程序。
ALE/PROG:
表示地址锁存器启用信号。
PORT0(P0.0~P0.7):
端口0是一个8位宽的开路汲极双向输出入端口,共有8个位,配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。
PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口。
PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口。
P3.0:
RXD,串行通信输入。
P3.1:
TXD,串行通信输出。
P3.2:
INT0,外部中断0输入。
P3.3:
INT1,外部中断1输入。
P3.4:
T0,计时计数器0输入。
P3.5:
T1,计时计数器1输入。
P3.6:
WR:
外部数据存储器的写入信号。
P3.7:
RD,外部数据存储器的读取信号。
RST:
复位输入。
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
PSEN:
外部程序存储器的选通信号。
EA/VPP:
当/EA保持低电平时,在此期间外部程序存储器,不管是否有内部程序存储器。
反向振荡放大器的输入及内部时钟工作电路的输入。
来自反向振荡器的输出。
2.2DS18B20温度传感器的特征
2.2.1DS18B20温度传感器介绍
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持"
一线总线"
接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
目前DS18B20批量采购价格仅10元左右。
2.2.2DS18B20传感器的主要特征
(1)适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电。
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃。
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。
(8)测量结果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.2.3DS18B20芯片封装结构。
(1)DS18B20的外形和内部结构。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的外形及管脚排列如图2.2所示。
图2.2DS18B20的外形及管脚排列
(2)DS18B20引脚功能。
GND:
电压地。
DQ:
单数据总线。
VDD:
电源电压。
(3)DS18B20工作原理图如图2.3所示。
图2.3DS18B20测温原理框图
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图2.3所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图2.3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
3硬件设计
3.1电源电路
AT89S52单片机电源电路如图3.1所示。
图3.1单片机电源电路
图中IN5408为稳压二极管,最大反向电流为40mA,电路中C7为整流电容,C6、C8为滤波电容,放光二极管是电源工作指示灯。
对于发光二极管串联电阻的选取,我们可以这样计算:
R=(VCC-Vd)/Id。
其中Vd为发光二极管的压降,Id为发光二极管正常发光时的额定电流。
一般红色发光二极管的压降为2.0--2.2V,黄色发光二极管的压降为1.8—2.0V,绿色发光二极管的压降为3.0—3.2V,正常发光时的额定电流约为20mA。
3.2晶振电路
AT89S52单片机晶振电路如图3.2所示。
图3.2单片机晶振电路
单片机晶振两个电容的作用:
这两个电容叫晶振的负载电容,分别接在晶振的两个脚上和对地的电容,一般在几十皮发。
它会影响到晶振的谐振频率和输出幅度,一般订购晶振时候供货方会问你负载电容是多少。
晶振的负载电容=[(Cd*Cg)/(Cd+Cg)]+Cic+△C式中Cd,Cg为分别接在晶振的两个脚上和对地的电容,Cic(集成电路内部电容)+△C(PCB上电容)经验值为3至5pf。
3.3复位电路
AT89S52单片机复位电路如图3.3所示。
图3.3单片机复位电路
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
单片机复位电路参数的选定须在振荡稳定后保证复位高电平持续时间大于2个机器周期。
3.4数码显示电路
系统数码显示电路如图3.4所示。
图3.4数码管显示电路
数码管显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。
数码显示电路主要作用是用来显示实际的环境温度值。
通过单片机控制实现数码管动态显示,即温度值实时刷新。
实际的电路中我们采用静态驱动,这样程序电路都比较简单,显示亮度也高,但占用的I/O口比较多。
动态驱动需要增加译码驱动,增加了硬件的复杂性。
P2.0,P2.1,P2.2,P2.3口驱动连接数码管的位码,即选通4个数码管;
P0口驱动连接数码管的段码,即输出要显示的温度值。
选通数码管是通过P0口接上拉电阻再接三极管9012。
由于9012是PNP型三极管,所以单片机选通某个片选时就给对应的三极管一个低电平,此时三极管处于饱和区,饱和导通就相当于开关开路;
反之高电平处于截止区,截止可以当作开关断开。
在数码管动态显示中,只要扫描的时间足够快,虽然在一个时刻只有一位数码管发光,但却可以看到8位数码管“同时”显示的效果。
3.5系统设计所需元器件
设计所需元器件如表3.1所示
表3.1设计元器件列表
4软件设计
本系统主程序的设计流程如图4.1所示。
图4.1程序流程图
软件设计关键在于DS18B20的使用。
DS18B20属于单线式器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议,来对读写数据提出严格的时序要求,而STC89C52单片机并不支持单线传输,因此必须采用软件的方法来模拟单线的协议时序。
DS18B20有严格的通信协议来保证各为数据传输的正确性和完整性。
主机操作单线器件DS18B20必须遵循一定的顺序。
系统的主程序主要通过初始化,获取温度,显示温度等子程序实现。
通过一个循环设置,使系统不断地进行对温度的检测。
。
4.1数据采集
温度采集流程如图4.2所示。
图4.2温度采集流程图
温度采集包括初始化DS18B20子程序;
读DS18B20子程序;
写DS18B20子程序;
获得温度子程序。
DS18B20初始化需要这几个过程先将数据线置高电平“1”,稍做延时;
再将数据线拉到低电平“0”延时480us;
然后再数据线拉到高电平“1”,稍做延时,判断DS18B20是否发出低电平信号,跟据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制;
若CPU读到了数据线上的低电平“0”后,根据时序要求还要做延时,其延时的时间从发出的高电平算起最少要480us时间;
最后将数据线再次拉高到高电平“1”后结束。
需要注意的是每次采集温度的时候都需要初始化。
如果X=0则表示DS18B20初始化成功,X=1表示DS18B20初始化失败。
读DS18B20也需要几个流程:
先将数据线拉高“1”延时2us时间;
再将数据线拉低“0”延时10us;
然后将数据线拉高“1”延时8us读取1位数据,读取1位数据后延时50us时间;
最后通过读取1位右移1位循环进行分别读出4位即半个字节的数据。
程序中我们把读取的温度值高位存a中,读取的温度值低位存b中。
如果需要读出设定的a和b值用于报警,这时也需将数据读出。
我们得到温度值高位即a的值和读取的温度值低位即b的值。
由于读出的数据时二进制数显示的时候是十进制。
所以必须将读出的数据进行处理。
先判断符号位将a的第三位与0xf8相与就可以知道正负。
若为负值f=1,将a和b取反。
转换的时候我们将小数部分和整数部分分别转换,小数部分b与0x0f相与后的值乘以625就是小数部分的值,需要注意的是小数部分的值是用整数形式表示的;
整数部分a左移和b右合并为四位即半个就是读取的值。
获得温度就是在前面操作的基础上调用。
先初始化DS18B20,发出跳过ROM匹配命令;
再向DS18B20发温度转换命令显示温度,等待AD转换,发跳过ROM匹配命令;
最后发出读温度命令将读出的温度数据保存为显示做准备。
4.2温度显示
温度显示模块主要包括显示温度子程序和延迟子程序。
显示温度即把读出的温度传递过来分别显示。
我们是将数码分为各个位动态扫描显示。
读温度程序中将小数部分和整数部分的值分别存放在b和a中,符号位存放在a的第三位中。
由于是分各个位显示,所以必须对数进行取模运算,C语言提供了整除和求余数运算,两者相结合就可以取出各个位的模。
由于我们是用数码管显示,第一位显示符号位,f=0表示正温度用“0”表示,f=1表示负温度用“-”表示,“-”值可以用0xbf送到数码管显示。
第四个数码管需要显示小数位,我们采用查表的方法将要显示的带小数的数模放在TAB1中,需要显示的时候再调用;
一般整数模放在TAB中。
显示的时候采用循环的方式进行,先判断符号位显示在第一个数码管,之后分别为十位、个位、小数位。
先送位码再送段码,每一位显示完后延迟2us时间。
在数码管动态显示中,由于扫描的时间足够快,虽然在一个时刻只有一位数码管发光,却可以看到4位数码管“同时”显示的效果。
温度显示流程如图4.3所示
图4.3温度显示流程框图
4.3系统程序
#include<
reg51.H>
absacc.H>
#include<
intrins.h>
stdio.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeTAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
ucharcodeTAB1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbitDQ=P3^3;
//定义通信端口
voiddelay(uinti)
{
while(i--);
}
voidDelayMS(uintms)
uchari;
while(ms--)for(i=0;
i<
120;
i++);
/*************DS18B20测温度的显示子程序**************/
voiddisplay(intk)//数码管显示
{ucharf;
P2=0x08;
P0=TAB[k/10];
DelayMS(5);
//百位数码管
P2=0x04;
P0=TAB1[k%10];
//十位数码管
P2=0x02;
P0=TAB[(k*10)%10];
//个位数码管
if(f==0)
{
P2=0x01;
//小数位数码管
P0=TAB[0];
}
else
P0=TAB[10];
//小数位数码管
}
/*************DS18B20初始化函数**************/
init_DS(void)//初始化DS18B20
ucharx=0;
DQ=1;
//DQ复位
delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
delay(80);
//精确延时大于480us
//拉高总线
delay(14);
x=DQ;
//稍做延时后如果X=0则初始化成功X=1则初始化失败
delay(20);
/*******************DS18B20读一个字节子程序***************/
Read(void)
uchari=0;
ucharvalue=0;
for(i=8;
i>
0;
i--)
{
DQ=0;
//高电平拉低成低电平时读周期开始
value>
>
=1;
DQ=1;
//给脉冲信号
if(DQ)
value|=0x80;
//读出数据放入高位,最后右移到低位
delay(4);
}
return(value);
}
/****************DS18B20写一个字节**************/
write(uchardat)
//从高电平拉至低电平时,写周期开始
DQ=dat&
0x01;
//数据的最低位先写入
delay(5);
//做60到120us的延时
DQ=1;
dat>
//从最低位到最高位传入
delay(4);
/*****************读取DS18B20当前温度子程序***************/
Readtem(void)
{uchara=0;
ucharb=0;
uchart=0,t1,f;
init_DS18B20();
write(0xcc);
//跳过读序号列号的操作
write(0x44);
//启动温度转换
delay(125);
//延时
write(0xbe);
//读温度寄存器
delay(100);
a=Read();
//读取温度值低位
b=Read();
//读取温度值高位
t1=(a&
0x0f)*0.0625*10;
//取小数部分
t=((b<
<
4)|(a>
4));
if(t>
128)
t=~t+1;
t=t+t1;
if((b&
0xf8)!
=0x00)//取整数部分
f=1;
f=0;
return(t);
/************主函数***********/
voidmain()
floatfg;
while
(1)
fg=Readtem();
//DS18B20读取当前温度值
display(fg);
//显示当前DS18B20读取后的温度值
5系统整体调试
调试方法:
写好一段程序后不能急于上机调试,而是先进行逻辑分析、可行性分析。
用KeilμVision2软件进行调试,不能出现错误,警告可以有,只要不影响生成HEX文件即可。
理解其实现的功能,预想程序应该出现的结果。
先进行软件仿真,出现错误马上修改,不断进行。
先一个模块一个模块的仿真,准确后再连线总体仿真。
仿真完后出现预期的效果后再下载程序到硬件进行验证,往往还有问题,还得反复修改,编译,调试,下载,验证。
可以一个模块一个模块的下载调试这样就可以知道问题的所在。
采用Keil结合仿真的可以大大简化软、硬件电路的设计过程
5.1硬件调试
设计采用了ZY12805B智能实验仪器综合实验平台的显示与键盘模块和ZYMCU02主机模块,保证AT89S52单片机和DS18B20传感器未受损坏,保证模块间的连线紧密,接触良好,硬件连线无误,测量环境无温度突变,电源电压稳定下载线未受损坏。
5.2软件调试
KeilμVision2是Keil公司关于8051系列MCU的开发工具,可以用来编译C源码、汇编源程序、连接和重定位目标文件和库文件、创建HEX文件、调试目标程序等,是一种集成化的文件管理编译环境。
它集成了文件编辑处理、编译连接、项目管理、窗口、工具引用和软件仿真调试等多种功能,是相当强大的开发工具。
实验中我们采用KeilμVision2来对我们编写的程序进行编译、链接和生成HEX文件。
在下载程序出错时进行必要的调试,再下载验证。
同时采用Proteus和Keil结合仿真的方法对设计的单片机测温系统进行了虚拟仿真和性能检测,得到了比较好的仿真结果和分析结果。
结果证明采用Proteus和Keil结合仿真的可以大大简化硬件电路的设计过程,可以降低单片机系统的开发成本、提高效率和开发速度,具有很好的实际应用和指导意义。
软件仿真的优势在于