沈阳理工DS18B20温度传感器.docx
- 文档编号:28907564
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:18
- 大小:152.15KB
沈阳理工DS18B20温度传感器.docx
《沈阳理工DS18B20温度传感器.docx》由会员分享,可在线阅读,更多相关《沈阳理工DS18B20温度传感器.docx(18页珍藏版)》请在冰豆网上搜索。
沈阳理工DS18B20温度传感器
摘要
随着现代信息技术的飞速发展,温度采集系统在工业、农业以及人们的日常生活扮演着一个越来越重要的角色,它对人们的生活具有很大影响,所以温度采集系统的设计与研究有着十分重要的意义。
通过系统的分析和总结,得出温室大气温度信号的采集传感器件所需的测量程小,精确度不高,抗干扰性较强,经济性较好的结论。
并以此为依据,选用DS18B20数字温度传感器为温度采集器件,和单片机AT89C52进行了温度采集系统的硬件和软件设计,实现采集温度信号的功能。
并且,通过串行总线完成了采集系统与上位计算机的连接,实现了采集系统的网络化监控功能。
关键词:
温度采集;DS18B20温度传感器;单片机AT89C52
目录
1设计目的与设计内容1
1.1设计目的1
1.2设计内容1
2DS18B20温度传感器和单片机AT89C52简介1
2.1DS18B20温度传感器1
2.1.1DS18B20的工作原理1
2.1.2DS18B20的使用方法2
2.2单片机AT89C522
2.2.1AT89C52简介2
2.2.2AT89C52结构2
3系统硬件电路设计4
3.1上电复位电路4
3.2时钟电路4
3.3数码管显示电路4
3.4译码器5
3.5AT89C52与DS18B20连接的Proteus电路原理6
3.6电路总图6
4程序设计7
6结论与体会14
7参考文献15
1设计目的与设计内容
1.1设计目的
温度采集在工业、农业以及人们的日常生活中非常重要,通过串行总线完成了采集系统与上位计算机的连接,实现了采集系统的网络化监控功能,最终将会给我们带来巨大的经济效益。
1.2设计内容
本设计以单片机AT89C52为核心的温度采集系统,温度信号有温度芯片DS18B20采集,并以数字信号的方式传送给单片机。
单片机通过对信号进行相应的处理,从而实现温度采集的目的。
2DS18B20温度传感器和单片机AT89C52简介
2.1DS18B20温度传感器
2.1.1DS18B20的工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图1-1所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图1-1中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
图2-1 DS18B20数字温度传感器内部结构
2.1.2DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
2.2单片机AT89C52
2.2.1AT89C52简介
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
2.2.2AT89C52结构
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
XTAL1振荡器反相放大器及内部时钟发生器的输入端。
XTAL2振荡器反相放大器的输出端。
3系统硬件电路设计
3.1上电按键复位电路
按下复位按键时,RST端产生高电平,使单片机复位,如图3-1。
图3-1上电复位电路
复位后,其片内各寄存器状态改变,片内RAM内容不变。
3.2时钟电路
此处选用内部时钟方式。
即利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时组件,内部振荡电路产生自激振荡。
最常用的是在XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,如图3-2。
图3-2时钟电路
图中晶振12M,有两个30pf的电容,构成自激振荡器
3.3数码管显示电路
本设计采用LED数码管显示电路,该显示电路由8段共阳数码管,限流电阻,三极管,基极电阻,P0口,P2口等组成。
P0口通过与电阻排与数码管的8个数据位相连,送显示数码,如图3-3:
图3-3数码管显示电路图
电阻即可起到限流作用,又可起到上拉电阻的作用。
3.4译码器
译码器主要起到位选的作用,连接单片机的P2.2~P2.4三个端口,如图3-4:
图3-4译码器电路
图中采用的74HC138译码器进行位选。
3.5AT89C52与DS18B20连接的Proteus电路原理
AT89C52成Proteus电路需要与DS18B20连接,如图3-5。
图3-5AT89C52与DS18B20连接的Proteus电路原理
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
3.6电路总图
电路最终呈现电路情况,如图3-6。
图3-6电路总图
电路每条线对应的连接方式最终显示。
4程序设计
本设计的程序编写主要是对DS18B20温度传感器的程序设计,下面主要对DS18B20的程序编写进行说明。
AT89C52单片机是此硬件电路设计的核心,和DS18B20的电路连接组成了温度采集系统,所需程序代码如下:
#include
#include"temp.h"//数码管IO
#defineDIGP0
sbitLSA=P2^2;
sbitLSB=P2^3;
sbitLSC=P2^4;
UnsignedcharcodeDIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
unsignedcharNum=0;
unsignedintdisp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
voidLcdDisplay(int);
voidTimer0Configuration();
voidmain()
{
Timer0Configuration();
while
(1)
{
LcdDisplay(Ds18b20ReadTemp());
}
}
voidLcdDisplay(inttemp)//lcd显示
{
unsignedchardatas[]={0,0,0,0,0};//定义数组
floattp;
if(temp<0)//当温度值为负数
{
disp[2]=0x40;//读取的温度是实际温度的补码,所以减1,取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就算有0.5,还是在小数点后面。
}
else
{disp[2]=0;
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
}
disp[0]=0;
disp[1]=0;
disp[3]=DIG_CODE[temp/10000];
disp[4]=DIG_CODE[temp%10000/1000];
disp[5]=DIG_CODE[temp%1000/100]|0x80;
disp[6]=DIG_CODE[temp%100/10];
disp[7]=DIG_CODE[temp%10];
}
voidTimer0Configuration()
{
TMOD=0X02;//选择为定时器模式,工作方式2,仅用TRX打开启动。
TH0=0X9C;//给定时器赋初值,定时100us
TL0=0X9C;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
voidDigDisplay()interrupt1
{
TH0=0X9c;//给定时器赋初值,定时1ms
TL0=0X00;
DIG=0;//消隐
switch(Num)//位选,选择点亮的数码管,
{
case(7):
LSA=0;LSB=0;LSC=0;break;
case(6):
LSA=1;LSB=0;LSC=0;break;
case(5):
LSA=0;LSB=1;LSC=0;break;
case(4):
LSA=1;LSB=1;LSC=0;break;
case(3):
LSA=0;LSB=0;LSC=1;break;
case
(2):
LSA=1;LSB=0;LSC=1;break;
case
(1):
LSA=0;LSB=1;LSC=1;break;
case(0):
LSA=1;LSB=1;LSC=1;break;
}
DIG=disp[Num];//段选,选择显示的数字。
Num++;
if(Num>7)
Num=0;
}
以上是主程序,用到的函数有main,LcdDisplay(),Timer0Configuration(),DigDisplay()interrupt1,作用分别是LCD显示读取到的温度,设置计时器,中断数码管显示等。
下面用Delay1ms作延时函数,用Ds18b20Init作初始化,用Ds18b20WriteByte向18B20写入一个字节,用Ds18b20ReadByte来读取一个字节,用Ds18b20ChangTemp来让18b20开始转换温度,用Ds18b20ReadTempCom来发送读取温度命令,用Ds18b20ReadTemp来读取温度。
#include"temp.h"
voidDelay1ms(unsignedinty)
{
unsignedintx;
for(y;y>0;y--)
for(x=110;x>0;x--);
}
unsignedcharDs18b20Init()
{
unsignedinti;
EA=0;
DSPORT=0;//将总线拉低480us~960us
i=70;
while(i--);//延时642us
DSPORT=1;//然后拉高总线,如果DS18B20做出反应会将在15us后总线拉低
i=0;
EA=1;
while(DSPORT)//等待DS18B20拉低总线
{
i++;
if(i>5000)//等待>5MS
return0;//初始化失败
}
return1;//初始化成功
}
voidDs18b20WriteByte(unsignedchardat)
{
unsignedinti,j;
EA=0;
for(j=0;j<8;j++)
{
DSPORT=0;//每写入一位数据之前先把总线拉低1us
i++;
DSPORT=dat&0x01;//然后写入一个数据,从最低位开始
i=6;
while(i--);//延时68us,持续时间最少60us
DSPORT=1;//然后释放总线,至少1us给总线恢复时间才能写入第二个数值
dat>>=1;
}
EA=1;
}
unsignedcharDs18b20ReadByte()
{
unsignedcharbyte,bi;
unsignedinti,j;
EA=0;
for(j=8;j>0;j--)
{
DSPORT=0;//先将总线拉低1us
i++;
DSPORT=1;//然后释放总线
i++;
i++;//延时6us等待数据稳定
bi=DSPORT;//读取数据,从最低位开始读取
byte=(byte>>1)|(bi<<7);
i=4;//读取完之后等待48us再接着读取下一个数
while(i--);
}
EA=1;
returnbyte;
}
voidDs18b20ChangTemp()
{
Ds18b20Init();
Delay1ms
(1);
Ds18b20WriteByte(0xcc);//跳过ROM操作命令
Ds18b20WriteByte(0x44);//温度转换命令
//Delay1ms(100);//等待转换成功,而如果你是一直刷着的话,就不用这个延时
}
voidDs18b20ReadTempCom()
{
Ds18b20Init();
Delay1ms
(1);
Ds18b20WriteByte(0xcc);//跳过ROM操作命令
Ds18b20WriteByte(0xbe);//发送读取温度命令
}
intDs18b20ReadTemp()
{
inttemp=0;
unsignedchartmh,tml;
Ds18b20ChangTemp();//先写入转换命令
Ds18b20ReadTempCom();//然后等待转换完后发送读取温度命令
tml=Ds18b20ReadByte();//读取温度值共16位,先读低字节
tmh=Ds18b20ReadByte();//再读高字节
temp=tmh;
temp<<=8;
temp|=tml;
returntemp;
}
5调试与仿真
本设计的程序编辑完成以后,通过keil编程软件来调试,经过多次的修改调试。
软件的仿真是用的ProteusISIS,是英国Labcenter公司开发的电路分析与实物仿真软件。
将设计的电路图连接好,将程序加入到AT89C52中,进行仿真,和多次的修改,最终得到预测的结果。
正温度仿真(100摄氏度)和负温度仿真(零下200摄氏度)仿真电路完整图如下:
图5-1Proteus仿真测试100摄氏度
图5-2Proteus仿真测试-200摄氏度
6结论与体会
以往的检测大气温度的手段大多采用模拟温度传感器采集数据,并且需要经过一系的A/D转换、信号放大和滤波等过程。
本论文中系统地分析并归纳了温室大气的温度数据特征,并采用DS18B20温度传感器设计了温室温度采集系统。
经过实践论证,该系统可在10℃~85℃实现0.5℃的采集精度。
同时,基于52单片机和DS18B20数字传感器的采集系统具有硬件接线简单、测量精度高、稳定性好和抗干扰性强等诸多优点。
温室温度采集系统通过串行总线实现与上位监控机的连接,使系统具备了远程监控能力,从而实现了实时监控温室内大气温度数据的功能。
一开始接触这个课题时我还不知道该从何下手,很多东西不知该如何实现,经过一个月的努力,在图书馆和网上查资料,小组讨论,终于完成了任务。
通过这次设计加深了我对这门课程的了解,以前总是觉得理论与实际有一定差异,但通过这次设计使我认识到了理论结合实际的重要性,由于知识的限制,设计还有很多不足之处,希望老师指出并教导。
7参考文献
[1]彭桂兰,张学军,张新东.温室环境计算机测控技术的研究现状和发展趋势[J].现代化农业,2001.
[2]彭里.温室大棚检测控制系统的研究[J].计算机工程,2000.
[3]何鹏,袁其,丁春欣.传感器在温室大棚环境控制中的应用[J].计算机与农业,2002.
[4]崔志富,赵亭荃,李建国.温度传感器在农业生产中的应用[J].现代化农业,2002.
[5]周月霞,孙传友.DS1820传感器及其测温方法的改进[J].石油仪器,2002.
[6]苏麟祥.DS1820数字温度传感器的功能特性及其设计[J].世界采矿快报,2000.
[7]JANAXELSON.串行端口大全[M].精英科技,译.北京:
中国电力出版社,2001.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 沈阳 理工 DS18B20 温度传感器