DS18B20数字温度传感器应用.docx
《DS18B20数字温度传感器应用.docx》由会员分享,可在线阅读,更多相关《DS18B20数字温度传感器应用.docx(20页珍藏版)》请在冰点文库上搜索。
DS18B20数字温度传感器应用
传感器课程设计报告
温度传感器
专业班级
应用电子2班
姓名
方畅、曹文荣、梁锐权
时间
15
周至
18
周
指导老师
冯伟
2007年6月23日
1.设计要求
大体范围-55℃~120℃
精度误差小于1℃
LED数码直读显示
2.扩展功能
能够任意设定温度的上限报警功能
有鸣蜂器报警
温度状态设置指示灯,温度报警指示灯,传感器检测指示灯
有温度自保功能(在一分钟内降不了温,自动关闭系统)
传感器检测功能(若是系统检测没有传感器存在,四次提示内没有插入传感器那么关闭系统)
温度操纵器
摘要:
随着时期的进步和进展,单片机技术已经普及到咱们生活,工作,科研,各个领域,一种数字式温度计以数字温度传感器作感温元件,它以单总线的连接方式,使电路大大的简化;传统的温度检测大多以热敏电阻为传感器,这种传感器靠得住性差,测量温度准确率低且电路复杂。
因此,本温度计摆脱了传统的温度测量方式,利用单片机对传感器进行操纵。
如此易于智能化操纵。
2.1.整体设计方案.0数字温度计设计方案论证方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
方案二的整体设计框图温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S52,温度传感器采纳DS18B20,用4位LED数码管以P0和P2操纵LED实现温度显示。
2.1.3主操纵器单片机AT89S52具有低电压供电和体积小等特点,四个端口就足够能知足电路系统的设计需要,很适合便携手持式产品的设计利用系统可用二节电池供电。
显示电路显示电路采用4位共阳LED数码管,从P0口输出显示数据,用P2口来操纵位选。
温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;●无须外部器件;●可通过数据线供电,电压范围为~V;●零待机功耗;●温度以9或12位数字;●用户可定义报警设置;●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。
64位ROM的结构开始8位是产品类型的编号,接着是每一个器件的惟一的序号,共有48位,最后8位是前面56位的CRC查验码,这也是多个DS18B20能够采纳一线进行通信的缘故。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图3所示。
头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
该字节各位的定义如图3所示。
低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分率。
由表1可见,DS18B20温度转换的时刻比较长,而且分辨率越高,所需要的温度数据转换时刻越长。
因此,在实际应用中要将分辨率和转换时刻衡量考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。
表2是一部分温度值对应的二进制温度数据。
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。
假设T>TH或T<TL,那么将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。
因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。
主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数别离置入减法计数器1、温度寄放器中,计数器1和温度寄放器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄放器的值将加1,减法计数器1的预置将从头被装入,减法计数器1从头开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄放器的累加,现在温度寄放器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍关闭就重复上述进程,直到温度寄放器值大致被测温度值。
DS18B20温度传感器与单片机的接口电路
能够采纳两种方式供电,一种是采纳电源供电方式,现在DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。
采用寄生电源供电方式时VDD端接地。
由于单线制只有一根线,因此发送接口必需是三态的。
系统整体硬件电路主板电路系统整体硬件电路包括,电源电路,传感器电路,温度显示电路,上限报警调整按键电路,单片机主板电路等,如图5所示。
图5中有三个独立式按键能够别离调整温度计的上限报警设置,图中蜂鸣器能够在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将被测温度值显示,这时能够调整报警上下限,从而测出被测的温度值,有三个LED二极管它们别离是:
黄色的是传感器存在指示灯;红色的是设置状态指示灯;绿色的是报警指示灯。
图5中的按健复位电路是上电复位加手动复位,利用比较方便,在程序跑飞时,能够手动复位,如此就不用在重起单片机电源,就能够够实现复位。
电源电路图
.3上限报警调整按键电路
2.4.4显示电路显示电路是利用的P0口和P2做LED数据显示,这种动态显示最大的优势确实是显示内容丰硕,但占用口资源比较多,
单片机主板电路
3系统软件算法分析系统程序要紧包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
主程序主程序的要紧功能是负责温度的实时显示、读出并处置DS18B20的测量的当前温度值,温度测量每1s进行一次。
如此能够在一秒之内测量一次被测温度,其程序流程见图7所示。
读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进温度数据的改写。
其程序流程图如图8示
温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图9所示
计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图10所示。
显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
程序流程图如图11。
温度传感器的利用
本传感器有三个按键(RST,SET,UP,DOWN),三个LED二极管(黄色,红色,绿色),一个鸣蜂器。
RST(单片机复位)但单片机里面的程序显现死循环时,按那个按键使单片机从头工作。
SET(温度传感器开关机和温度状态设置)但第一次短下键时温度传感器开始开机工作,第二短按下键
时进行温度状态设置,但进入状态设置时,红色LED二极管和数码关会闪烁,表示已经进入温度
上限值设置。
但长按键维持3秒是系统就会关闭。
UP(温度上限值加)在进入温度设置状态时,对温度上限值加一。
若是长按时,会快速加。
DOWN(温度上限值减)在进入温度设置状态时,对温度上限值减一。
若是长按时,会快速减。
黄色LED(传感器检测指示灯)若是这灯亮,表示但前系统检测到没有传感器。
在开机时也会提示
NO-SENSOR(没有传感器),在开机后系统还检测不到传感器就会每15秒提示一次NO-SENSOR(没
有传感器),提示四次时系统将自动关闭。
如此就避免传感器损坏或松动乃至没有接上使系统误测而
致使的一些不行后果。
绿色LED(温度报警指示灯)但实际温度超过设置温度值时这灯和鸣蜂器就会发出报警信号,若是这
信号维持超过1分钟,那么以为外部降温设备有故障,系统将自动关闭。
如此的益处确实是但降温外设
备显现故障或发烧设备功耗过大发烧严峻时对这些故障进行有效的操纵。
红色LED(温度设置状态指示灯)但温度传感器在温度设置状态时该灯会闪烁。
8段数码管
电源接口(9~12V)
电源指示灯
RST键
UP键温度报警指示灯
传感器检测指示灯设置状态指示灯
DOWN键
温度传感器
SET键鸣蜂器
传感器实物图
4总结与体会 通过快要三周的传感器课程设计,终于完成了我的数字温度计的设计,尽管没有完全达到设计要求,但从心底里说,仍是快乐的,毕竟这是第一次弄如此的设计还把实物都做了出来,快乐之余不能不总结体会这次呀!
在本次设计的进程中,我发觉了自己的很多的问题,以前还没有做过如此的设计。
在这次设计真的让我们长进了很多,明白了传感器课程设计重点就在于对传感器元件的应用和对传感器用途的明白得,能够说这次设计是为咱们的毕业设计提早的一次练习。
以前咱们做的很多,都不象这次做的那样系统化的设计,都是一些硬件的搭建就行。
而这次并非单单是搭建硬件,还要有软件的支持才能使设计的东西工作。
这就表现本次课程设计的难度和对各门知识的应用程度。
真的有好多的东西,只有咱们去试着做了,才能真正的把握,只学习理论有些东西是很难明白得的,更谈不上把握。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把咱们所学的理论知识用到实际当中,学习传感器这门课更是如此,因此理论的稳固在实际进程中才能提高,这确实是我在这次课程设计中的最大收成。
本课程设计资料由以下提供:
书籍:
《8051系列单片机C语言设计完全手册》
《单片机原理及应用第2版》
网页:
程序代码
本程序采纳C语言用KeilC51软件进行编译。
用一个接口函数LED将主函数Trime+
与LED显示函数和ASCII转成LED显示的数据函数同延时程序
所组成。
如此使的程序模块化使每段都表现自己的功能,直观易懂再加上注释更便于阅读和明白得程序。
本程序利用按时中断对按键进行查询,然后再跳到相应的处置程序去执行。
在按键功能顶用了寻址的状
态寄放器做为按键功能的分派,如此就使的按键功能多样化,利用灵活。
/*=====================================================================
温度操纵器
广州工程职业技术学院
传感器课程设计
指导教师:
冯伟
作者:
GIT-3408-YOUJJYY(方畅,曹文荣,梁锐权)
时刻:
2007-4-25
温度传感器使用单总线DS18B20接口模式
CPU为AT89S52,三个按键(RST,UP,DOWN,SET),晶振为
直流9~12V供电,四个LED数码管显示
温度调剂上限为125度,下限为-55度(本程序只能用于单只18B20)
====================================================================*/
#include<>
#include<>
#include<>
/*--------用于按键可位寻址的状态寄放器-----------*/
staticunsignedcharbdataStateREG;
sbitDS1820ON=StateREG^0;0f0f7f
===============================*/
#include<>
#defineucharunsignedchar
#defineuintunsignedint
/*------------------------------
延时1mS*n
-------------------------------*/
voidDelay_1ms(uchartimer)
{
ucharj;
uinti;
for(j=timer;j>0;j--)
{
for(i=0;i<329;i++);
}
}
/*-----------------------------
延时(100ms*n=T)秒
--------------------------*/
voidDelay_100ms(unsignedcharnS)
{
unsignedchari,x,y;
for(i=0;i{
for(x=0;x<228;x++)
{
y=200;
while(y)y--;
}
}
}
/*-----------------------------------------
延时刻*n+8=T)微秒
------------------------------------------*/
voidDelay_6n5_8us(ucharnUs)//4微秒级延时<255us
{
uchari=nUs;
while(i)i--;
}
/*==============================
ASCII转换成LED显示
文件名:
===============================*/
#include<>
#defineucharunsignedchar
//**********ASCII转换成十进制显示LED************//
constucharcodeBCD_ASCII[]={0xff,0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,
0xf6,0xb7,0x3c,0xb7,0xaa,0xc0,0x02,
0x60,0x25,0x3c,0x23,0x34,0x74,0x24,0x61,0xeb,0xab,0x35,
0x3d,0x48,0x68,0x28,0x70,0x08,0x50,0xa4,0x7c,0x29,0x09,
0xb1,0x41,0xa1,0x32,0x3c,0xe5,0xaa,0xf8,0xbf,0xdf,0x02,
0x25,0x37,0x23,0x30,0x74,0xa0,0x65,0xeb,0xab,0x35,0x3d,
0xf8,0x67,0x28,0x70,0xe0,0x57,0xa4,0xdc,0x2f,0x0f,0xf1,
0x41,0xa1,0x32,0xdf};
/*=================================
接口函数文件
文件名:
=================================*/
#include<>
#defineucharunsignedchar
#defineuintunsignedint
/*********声明外部变量*******/
/*------显示程序------*/
externvoidLED_Display(bitN_S,uchardata_size,ucharS_D,uchar*LED_data);
/*------延时程序------*/
externvoidDelay_1ms(uchartimer);
externvoidDelay_100ms(unsignedcharnS);
externvoidDelay_6n5_8us(ucharnUs);
constucharcodeBCD_ASCII[];
/*-------接口概念-------*/
#defineKey_UPP3_2//上调温度
#defineKey_DOWNP3_3//下调温度
#defineKey_SETP3_4//设定键(温度设定,长按开电源)
#defineRelayOutPortP2_1//操纵对象输出
#defineLEDPortP0//LED操纵口
#defineLEDOneCP2_7//LEDDS1操纵(百位)
#defineLEDTwoCP2_6//LEDDS2操纵(十位)
#defineLEDThreeCP2_5//LEDDS3操纵(个位)
#defineLED_CP2_4
#defineTMPortP3_0//DS18B20的数据输出引脚
#defineBeepP2_0
#defineON_DS1820P2_3
#defineOPenP2_2