DS18B20温度传感器论文_第1页
DS18B20温度传感器论文_第2页
DS18B20温度传感器论文_第3页
DS18B20温度传感器论文_第4页
DS18B20温度传感器论文_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业设计 课题名称:温度监测控制系统专 业:.学生姓名:. 学 号:.指导老师:.2012-3-18前言随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于stc89c51 单片机的测温系统,详细描述了利用数字温度传感器ds18b20 开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器ds18b20 的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量

2、程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。ds18b20 与at89c51 结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。对于防潮、防霉、防腐、防爆是仓库日常工作的重要内容,是衡量仓库管理质量的重要指标。它直接影响到储备物资的使用寿命和工作可靠性。为保证日常工作的顺利进行,首要问题是加强仓库内温度与湿度的监测工作。但传统的方法是用与湿度表、毛发湿度表、双金属式测量计和湿度试纸等测试器材,通过人工进行检测,对不符合温度和湿度要求的

3、库房进行通风、去湿和降温等工作。这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。因此我们需要一种造价低廉、使用方便且测量准确的温湿度测量仪。本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警,并自动启动制冷或制热装置。关键字:数字控制,温度计, ds18b20,stc89c51摘要本设计基于at89c51单片机为核心实行模块化,由温度检测电路、温度显示电路、温度设置电路、报警电路、温度界限存储电路等组成。本设计可实现对环境温度实时监控,可以设置上下报警温度,当温度不在设置范围内时,可以报警。在此基础上设计了系统的总体方案,最后通过硬件和软件实

4、现了各个功能模块。关键词:温度计,数字控制, ds18b20,stc89c51目录 前言. .1 摘要. .3第一章 设计方案. . . 51.1 设计的任务和要求. . 51.2 数字温度计设计方案论证. .5第二章 ds1820 单线数字温度传感器.62.1 ds1820传感器介绍.72.1.1 ds1820温度传感器特性. 72.1.2 ds1820 供电的方法. . . 82.1.3 ds1820存储器. . . .92.1.4 ds1820报警搜索操作. . .92.1.5 ds1820 的协议. . . .92.1.6 ds1820说明. . . .102.1.7 ds1820工作

5、时序. . . . 10第三章 系统组成及工作原理. . . 133.1 系统总体设计框图. . . . 133.2温度监测控制系统的电路. . . . . 143.21 温度监控系统的功能. . . .1 43.2.2系统的工作原理. . . . 14第四章 系统软件算法析. . . . . 164.1 主程序流程图. . . . . . 164.1.1 按键扫描处理子程序. . . . . 164.1.2 18b20温度传感器初始化. . . . . 214.1.3温度转换命令子程序子程序. . .214.1.4 读出温度子程序. . . . . 214.1.5 显示数据刷新子程序. .

6、. . . 224.1.6 计算温度子程序. . . . . . 23第五章 总结与体会.27参考文献. . . . . 28摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。温度检测控制系统安装在环境温度需要控制的部位,例如食品仓库、蔬菜保鲜房、 电力机房等,温度检测系统放在需要控制温度的区域内。在通常情况下,温度检测系统检测环境当前的温度,显示在显示器上,用户可以通

7、过键盘改变温度监控的范围。当监控器处于真正的工作状态,只要环境的温度低于或高于用户设置的温度,系统将自动工作。如环境的温度低于或高于用户所设置的温度时,会进行报警并自动启动制冷或制热系统。当环境的温度低于或高于用户设置温度两度时,警铃的报警的铃声频率加快,并且系统进入快速制冷或快速制热模式。直到环境的温度回到用户设定的范围内警铃才停止报警,制冷或制热系统也会停止工作。 第一章 总体设计方案1.1 计设要求 (1)基本范围-50-110(2)精度误差小于0.5(3)led数码直读显示(4)可以任意设定温度的上下限报警功能1.2系统基本设计方案 方案一:采用热电阻温度传感器。热电阻是利用导体的电阻

8、随温度变化的特性制成的测温元件。现应用较多的有铂、铜、镍等热电阻。其主要的特点为精度高、测量范围大、便于远距离测量。铂的物理、化学性能极稳定,耐氧化能力强,易提纯,复制性好,工业性好,电阻率较高,因此,铂电阻用于工业检测中高精密测温和温度标准。缺点是价格贵,温度系数小,受到磁场影响大,在还原介质中易被玷污变脆。按iec标准测温范围-200650,百度电阻比w(100)=1.3850时,r0为100和10,其允许的测量误差a级为±(0.15+0.002 |t|),b级为±(0.3+0.005 |t|)。铜电阻的温度系数比铂电阻大,价格低,也易于提纯和加工;但其电阻率小,在腐蚀

9、性介质中使用稳定性差。在工业中用于-50180测温。方案二:采用ds18b20温度传感器,由于温度测量的普遍性,温度传感器的市场份额大大增加,居传感器首位。数字化温度传感器ds18b20是世界上第一片支持“一线总线”接口的温度传感器。现在,新一代的ds18b20温度传感器体积更小、更经济、更灵活。ds18b20温度传感器测量温度范围为-55+125。在-10+85范围内,精度为±0.5。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。 综合比较方案一与方案二,方案二更为适合于本设计系统对于模拟量输入的要求,比较其框图,方案二更具备硬件简单的突出优点,所以选择方案二

10、作为信号的输入通道。第二章ds1820 单线数字温度传感器2.1 ds1820温度传感器介绍本温度报警器采用美国dallas公司生产的单线数字温度传感器ds18b20(如图2.1),可以把温度信号直接转换成串行数字信号工微机处理,是模数转换器件,而且读ds18b20信息或写ds18b20信息仅需要单线接口,使用非常方便;其测温范围55125,在-10+85时精度为±0.5,可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,

11、速度更快;同时ds18b20在使用中不需要任何外围元件(仅需一个4.7k的上拉电阻),全部传感元件及转换电路集成在形如一只三极管的集成电路内,硬件电路十分简单。图2.1:1 : gnd 接地2 : dq 数据输入/输出脚。对于单线操作:漏极开路(见“寄生电源”节)3 : vdd 可选的vdd 引脚。具体接法见“寄生电源”节2.1.1 ds1820温度传感器特性 独特的单线接口仅需一个端口引脚进行通讯 简单的多点分布应用 无需外部器件 可通过数据线供电 零待机功耗 测温范围-55+125,以0.5递增。华氏器件-67+2570f,以0.90f 递增 温度以9 位数字量读出 温度数字量转换时间20

12、0ms(典型值) 用户可定义的非易失性温度报警设置 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件 应用包括温度控制、工业系统、消费品、温度计或任何热感测系统2.1.2 ds1820 供电的方法ds1820 供电的方法是从vdd 引脚接入一个外部电源。这样做的好处是i/o线上不需要加强上拉,而且总线控制器不用在温度转换期间总保持高电平。这样在转换期间可以允许在单线总线上进行其他数据往来。另外,在单线总线上可以挂任意多片ds1820,而且如果它们都使用外部电源的话,就可以先发一个skip rom 命令,再接一个convert t 命令,让它们同时进行温度转换。注意当加上外部电源时,

13、gnd 引脚不能悬空。温度高于100时,不推荐使用寄生电源,因为ds1820 在这种温度下表现出的漏电流比较大,通讯可能无法进行。在类似这种温度的情况下,强烈推荐使用ds1820 的vdd 引脚。对于总线控制器不知道总线上的ds1820 是用寄生电源还是用外部电源的情况,ds1820 预备了一种信号指示电源的使用意图。总线控制器发出一个skip rom 协议,然后发出读电源命令,这条命令发出后,控制器发出读时间隙,如果是寄生电源,ds1820 在单线总线上发回“0”,如果是从vdd 供电,则发回“1”,这样总线控制器就能够决定总线上是否有ds1820 需要强上拉。如果控制器接收到一个“0”,它

14、就知道必须在温度转换期间给i/o 线提供强上拉。 64 位(激)光刻rom每只ds1820 都有一个唯一的长达64 位的编码。最前面8 位是单线系列编码(ds1820 的编码是19h)。下面48 位是一个唯一的序列号。最后8 位是以上56 位的crc 码。(见图5)64位rom 和rom 操作控制区允许ds1820 做为单线制器件并按照详述于“单线总线系统”一节的单线协议工作。只有建立了rom 操作协议,才能对ds1820 进行控制操作。这个协议用rom 操作协议流程图来描述(图6)。单线总线控制器必须得天独厚提供5 个rom 操作命令其中之一:1)read rom,2)match rom,3

15、)search rom,4)skip rom,5)alarm search。成功进行一次rom 操作后,就可以对ds1820 进行特定的操作,总线控制器可以发出六个存储器和控制操作命令中的任一个。crc 发生器ds1820 中有8 位crc 存储在64 位rom 的最高有效字节中。总线控制器可以用64 位rom 中的前56 位计算出一个crc 值,再用这个和存储在ds1820 中的值进行比较,以确定rom 数据是否被总线控制器接收无误。crc 计算等式如下:crc=x8+x5+x4+1ds1820 同样用上面的公式产生一个8 位crc 值,把这个值提供给总线控制器用来校验传输的数据。在任何使用

16、crc 进行数据传输校验的情况下,总线控制器必须用上面的公式计算出一个crc 值,和存储在ds1820 的64 位rom 中的值或ds1820 内部计算出的8 位crc 值(当读暂存器时,做为第9 个字节读出来)进行比较。crc 值的比较以及是否进行下一步操作完全由总线控制器决定。当在ds1820 中存储的或由其计算的crc 值和总线控制器计算的值不相符时,ds1820 内部并没有一个能阻止命令序列进行的电路。 2.1.3 ds1820存储器ds1820 的存储器结构示于图8。存储器由一个暂存ram 和一个存储高低温报警触发值th 和tl 的非易失性电可擦除(e2)ram 组成。当在单线总线上

17、通讯时,暂存器帮助确保数据的完整性。数据先被写入暂存器,这里的数据可被读回。数据经过校验后,用一个拷贝暂存器命令会把数据传到非易性(e2)ram 中。这一过程确保更改存储器时数据的完整性。2.1.4 报警搜索操作ds1820 完成一次温度转换后,就拿温度值和存储在th 和tl 中的值进行比较。因为这些寄存器是8 位的,所以0.5位被忽略不计。th 或tl 的最高有效位直接对应16 位温度寄存器的符号位。如果测得的温度高于th 或低于tl,器件内部就会置位一个报警标识。每进行一次测温就对这个标识进行一次更新。当报警标识置位时,ds1820 会对报警搜索命令有反应。这样就允许许多ds1820 并联

18、在一起同时测温,如果某个地方的温度超过了限定值,报警的器件就会被立即识别出来并读取,而不用读未报警的器件。2.1.5 ds1820 的协议单线总线的空闲状态是高电平。无论任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必必须停留在空闲状态。在恢复期间,如果单线总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。如果总线停留在低电平超过480s,总线上的所有器件都将被复位。执行序列通过单线总线端口访问 ds1820 的协议如下: 初始化 rom 操作命令 存储器操作命令 执行/数据2.1.6 ds1820 的说明1)ds1820 数字温度计以9 位数字量的形式反映器件的温度值。

19、2)ds1820 通过一个单线接口发送或接收信息,因此在中央微处理器ds1820 之间仅需一条连接线(加上地线)。用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。3)因为每个ds1820 都有一个独特的片序列号,所以多只ds1820 可以同时连在一根单线总线上2.1.7 ds1820 的工作时序:(1)初始化(如下时序图) 先将数据线置高电平1 延时(该时间要求不是很严格,但要尽可能的短) 数据线拉低到低电平0 延时750us(该时间范围在480-960us) 数据线拉到高电平1. 延时等待。如果初始化成功则在15-60ms内产生一个有ds18b20返回的低电平0,据该电平可以确定

20、它的存在。但不能一直等待,否则程序会进入死循环,所以要进行超时判断。 若cpu读到数据线上的低电平0后,还要进行延时,其延时时间从发出算起(第5步的时间起)最少要480us 将数据线再次拉高到高电平1后结束。(2)ds18b20写数据(如下时序图): 数据线先置低电平0. 延时确定的时间为15us。 按从低位到高位的顺序发送数据(一次只发送一位)。 延时时间为45us 将数据位拉到高电平1 重复-步骤,直到发送完整个字节。 最后将数据线拉高到1.(3)ds18b20读数据(如下时序图): 将数据线拉高到1. 延时2us 将数据线拉低到0 延时6us 将数据线拉高到1 延时4us 读数据线上的状

21、态得到一个状态位,并进行数据处理 延时30us 重复-步骤,直至读取完一个字节第三章 系统组成及工作原理3.1 系统总体设计框图温度计电路设计总体设计方框图如图3.1所示,控制器采用单片机stc89s52,温度传感器采用ds18b20,用4位led数码管以串口传送数据实现温度显示。mcu51单片机温度检测电路温度显示 报警系统键盘设置温度界限存储器制冷,制热系统 图温度监测控制系统的电路如图3.1.2图3.1.2:温度监测控制系统的电路3.2 温度监控系统的功能和工作原理如下3.2.1该温度监控系统包含以下功能:1) 显示周围环境的当前温度当操作人员将该装置放在要测量的环境中,

22、通过该系统自带的ds18b20温度传感器,可以实时检测到当前环境温度的变化,并且在数码管上现实当前的温度(范围-20°c-120°c)。2) 报警和启动制冷制热系统该装置设置了温度的上、下限值。当环境的温度高于设置的上限值时,报警的警铃响起,同时自动启动制冷系统;如果当环境的温度低于设置的下限的温度值时,报警的警铃响起,同时自动启动制热系统。(用二极管显示代替制冷、制热系统工作)3) 设置温度的上、下限值 根据用途不同,该系统可以做控制温度装置。但环境的不同,人们对环境的温度也有不同的要求。该装置温度的上、下限值可以通过按钮来自由设置。(该装置温度的限值在0°c1

23、20°c)3.2.2系统的工作原理当系统通电工作时,ds18b20温度传感器通过自身的检测,直接将温度转化成串行数字信号。51单片机通过引脚p3.5将数据接收,然会通过引脚p2.0p2.7将数据并行输出,经过74ls573锁存器驱动数码管显示检测到的温度。当检测到的温度高于设置温度的上限值时,单片机的p3.6引脚输出电平蜂鸣器beef响起报警,警铃的声音频率稍慢,同时p3.2引脚输出电平二极管d1闪烁(这里代表启动了制冷装置)。如果此时温度继续上升,并高出了设置温度上限的2度蜂鸣器响起报警的警铃音频率加快,且p3.3引脚也输出电平二极管d2和d1一起闪烁(这里代表启动了强制冷装置)。

24、当温度恢复设置的温度值内,蜂鸣器不响,报警解除;同时二极管不闪烁(制冷装置停止工作)。如果当检测到的温度低于设置温度的下限值时,单片机的p3.6引脚输出电平beef蜂鸣器响起报警,警铃的声音频率稍慢,同时p3.0引脚输出电平二极管d3闪烁(这里代表启动了制热装置)。如果此时温度继续下降,并低于了设置温度下限的2度蜂鸣器响起报警的警铃音频率加快,且p3.2引脚也输出电平二极管d4和d3一起闪烁(这里代表启动了强制热装置)。当温度恢复设置的温度值内,蜂鸣器不响,报警解除;同时二极管不闪烁(制热装置停止工作)。当按下s1时,p2.0输出高电平,二极管d5亮,51单片机通过p2.0,p2.0读出原先存

25、储在24c02存储器里的下限值,并通过数码管显示。此时可以通过s3加大温度下限的值,通过s4减小温度下限的值;当按下s2时,51单片机通过p2.0,p2.0读出原先存储在24c02存储器里的上限值,并通过数码管显示。此时可以通过s3加大温度上限的值,通过s4减小温度上限的值。在设置的过程中,如果设置的下限温度大于了上限的温度,或者设置的上限温度小于了下限温度,设置出错。此时p3.6引脚输出电平蜂鸣器beef响起报警,且p2.2输出高电平二极管d7亮。直至设置正确报警解除,二极管d7灭。按下s5完成温度的限值设置,且把设置的温度存储在24c02存储器里。第四章 系统软件算法析4.1 主程序流程图

26、开始 初始化有键盘按下ynds18b20初始化温度转换温度显示温度计算s1按下s2按下s5按下温度下限设置温度上限设置存入24c024.1.1 按键扫描处理子程序void keyzi() uint d,g;uchar ww1,www1;if(d>g)/判断高低温是否设置矛盾led33=0;beep=0;elseled33=1;beep=1;if(key1=0)delay(10);if(key1=0);while(!key1);ww1=read_add(1);d=ww1;shezhi=d;dis_temp(d);led11=0;/设置灯闪等待,系统diwen=1;led22=1;gaowe

27、n=0;flag=1; if(key2=0)delay(10);if(key2=0);while(!key2);www1=read_add(3);g=www1;dis_temp(g);led22=0;/设置灯闪等待,系统gaowen=1;led11=1; diwen=0;flag=1;if(key5=0)delay(10);if(key5=0);while(!key5);gaowen=0;diwen=0;led11=1;led22=1;beep=1;led33=1;flag=0;if(diwen=1)ww1=read_add(1);d=ww1;shezhi=d;dis_temp(shezhi)

28、;if(key3=0)delay(10);if(key3=0);while(!key3);shezhi=shezhi+1;if(shezhi>=120)shezhi=120;write_add(1,shezhi); dis_temp(shezhi);if(key4=0)delay(10);if(key4=0);while(!key4);if(shezhi=0)shezhi=0;elseshezhi=shezhi-1;/if(shezhi<=0)shezhi=0;write_add(1,shezhi); dis_temp(shezhi);if(gaowen=1)www1=read_a

29、dd(3);g=www1;shezhi=g;dis_temp(g);if(key3=0)delay(10);if(key3=0);while(!key3);shezhi=shezhi+1;if(shezhi>=120)shezhi=120;write_add(3,shezhi); dis_temp(shezhi);if(key4=0)delay(10);if(key4=0);while(!key4);if(shezhi=0)shezhi=0;elseshezhi=shezhi-1;/shezhi=shezhi-1;write_add(3,shezhi); dis_temp(shezhi)

30、;4.1.2 18b20温度传感器初始化void dsreset(void) /18b20复位,初始化函数 uint i; ds=0; i=103; while(i>0)i-; ds=1; i=4; while(i>0)i-;4.1.3温度转换命令子程序子程序void tempchange(void) /ds18b20 开始获取温度并转换 dsreset(); delay(1); tempwritebyte(0xcc); / 写跳过读rom指令 tempwritebyte(0x44); / 写温度转换指令*读1位函数bit tempreadbit(void) /读1位函数 uint

31、 i; bit dat; ds=0;i+; /i+ 起延时作用 ds=1;i+;i+; dat=ds; i=8;while(i>0)i-; return (dat);*读1位函数uchar tempread(void) /读1个字节 uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tempreadbit(); dat=(j<<7)|(dat>>1); /读出的数据最低位在最前面,这样刚好一个字节在dat里 return(dat);4.1.4 读出温度子程序int get_temp() /读取寄存器中存储的温度数据 uchar

32、 a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 temp=b;b=b&0x0f8;/高五位符号位【重要】 temp<<=8; /两个字节组合为1个字 temp=temp|a;if(b=0x0f8)/第11为开始为1是读的值为负值temp=temp+1;/实际的负温度ledout0=0x40;/显示负号 f_temp=temp*0.0625; /温度在寄存器中为12位 分辨率位0.0625° tem

33、p=f_temp*10+0.5; /乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; /temp是整型4.1.5 显示数据刷新子程序void dis_temp(int t) int i,lednumval; lednumval=t; /把实际温度送到lednumval变量中 if(ledout0=0x40)/第11为开始为1是读的值为负值ledout0=0x40;/显示负号elseledout0=tablelednumval/1000;/百位 ledout1=tablelednumval%1000/100;/十位if(flag

34、=1) ledout2=tablelednumval%100/10;/个位else ledout2=tablelednumval%100/10+10;/个位+10为了显示小数点 ledout3=tablelednumval%10; /为小数位 for(i=0; i<4; i+) p0 = ledouti ; switch(i) /138译码case 0:ls138a=0; ls138b=0; ls138c=0; break; case 1:ls138a=1; ls138b=0; ls138c=0; break; case 2:ls138a=0; ls138b=1; ls138c=0; break; case 3:ls138a=1; ls138b=1; ls138c=0; break; delay(3); 4.1.6 计算温度子程序void deal(int w) int d,t,ww, www;t=w;t=(t+1)/10;/加1是为了小数部分的遗漏,这样实际就提前0.1度开始工作ww=read_add(1);www=read_add(3); if(t>ww-2)&&(t<=ww) /大于25度小于27度led1=led1;/变闪beep=0; for(d=20;d>0;d-)dis_temp(get_temp();beep=1;for(d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论