基于DS18B20温度传感器的数字温度计设计.doc

上传人:精*** 文档编号:879958 上传时间:2024-03-10 格式:DOC 页数:34 大小:5.56MB
下载 相关 举报
基于DS18B20温度传感器的数字温度计设计.doc_第1页
第1页 / 共34页
基于DS18B20温度传感器的数字温度计设计.doc_第2页
第2页 / 共34页
基于DS18B20温度传感器的数字温度计设计.doc_第3页
第3页 / 共34页
基于DS18B20温度传感器的数字温度计设计.doc_第4页
第4页 / 共34页
基于DS18B20温度传感器的数字温度计设计.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、 目录1. 前言22. 设计任务及要求32.1设计任务32.2设计要求43. 设计总体方案4 3.1方案论证53.2方案的总体设计框图54. 电路原理图及硬件设计6 4.1电路原理图介绍分析7 4.2单片机系统8 4.3温度传感器模块8 4.4显示模块12 4.5电源模块135.系统程序设计136.调试及仿真297.电路的焊接及调试308.遇到的问题和解决办法339.总结和体会34基于DS18B20温度传感器的数字温度计设计 1.前言 目前,单片机已经在测控领域获得了广泛的应用,它除了可以测量电信以外,还可以用于温度,湿度等非电信号的测量。能独立工作的单片机温度检测和温度控制系统已经广泛用于很

2、多领域。 单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,RAM,ROM及输入与输出接口电路,这种芯片成为:单片机。由于单片机的集成度高,功能强,通用性好,特别它具有体积小,重量轻,能耗低,价格便宜,抗干扰能力强和使用仿版等方面的优点,是它迅速的得到了推广和应用,目前已经成为测量控制系统中的优良机种和新电子产品中的关键部件。单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动化产品,机器人,儿童玩具,航天器等领域。 这次我们的模电设计,就是用的单片机实现温度的控制,传统的温度传感器大多以热敏电阻作为温度传感器,但热敏电阻的可靠性差,测量温度准确率

3、低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次我和陆路裕同学采用的正是DS18B20数字温度传感器来实现基于51单片机的温度计的设计。 传统的温度计有发映速度慢,读数麻烦,测量精度不高,误差大等缺点而下面利用集成温度传感器DS18B20设计并制作了一款基于AT89C51的4位数码管现实的数字温度计,其电路简单,软硬件结构模块化,易于实现。 该数字温度计利用温度传感器及接口电路完成温度的测量并转换成模拟电压信号,经由模数转换器转换成单片机能够处理的数字信号,然后送到单片机中进行处理变换,最后将温度值显示在数码管上。系统以 单片机为控制核心,加上DS18B20温度传感器,4

4、位温度数据显示的共阴极数码管,及外围电源和报警电路组成。 2.设计任务及要求2.1 设计任务 现代生活中,多功能的数字温度计能给我们的生活带来很大的方便,支持一线总线接口的温度传感器简化了数字温度计的设计,降低了成本;以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20为核心,以ATMEL公司的AT89S52位控制器设计的AT89S51为控制器设计的DS18B20温度传感器结构简单,测温准确,具有一定控制功能的智能温度控制器。 此次我们的设计,就是用单片机实现温度的控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠习惯差,测量温度准确率低,而且必须经过专门的接

5、口电路转换成数字信号才由单片机处理。本次采用DS18B20温度传感器来实现基于51单片机的数字温度计的设计。 该数字温度计利用DS18B20温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由数模转换器转换成单片机能够处理的数字信号,送到单片机进行处理变换,最后经过三极管的放大显示在共阴极数码管上。系统以51单片机为控制核心,加上测温电路,AD数模转换器,4位温度数据显示数码管以及外围电源时钟电路组成。 2.2 设计要求 $ 5V电源(0.3v)用于温度计的供电; $ 温度采集采用DS18B20温度传感器;数字式温度计要求测温范围为535C,精度误差在0.1C以内。 $ 4位数字共阴

6、极数码管显示; $ 3个按键,分别为复位重置按键,温度上限设置按钮, 温度下限设置按钮; $ 设计温度显示计(含报警功能)电路图,并且用相关软件进行仿真演示; $ 演示成功之后,设计和绘制软件流程图,并用C语言进行程序编写; $ 准备元器件材料,按照电路图焊接电路,并进行调试; $ 分析讨论,总结经验,对成果进行优化,撰写报告; 3设计总体方案及器材选用分析 3.1方案论证 方案一:提到温度的检测,我们首先会考虑到传统的测温元件有热电阻和热电偶,而热点阻和热电偶测出的一般都是电压,进行A/D转换后,讲究可以用单片机进行数据的处理,在显示电路上就可以将温度显示出来,而这需要比较多的外部的硬件的支

7、持,硬件电路复杂(需要用到A/D转换电路,感温电路),软件调试也复杂,制作成本也非常高。 所以这个设计理论不符合这次我们对产品的要求,应继续来考虑另一可行方案。方案二:进而考虑到使用温度传感器,在单片机电路设计中,大多时使用传感器,这是我们应该想到的,所以可以采用一只温度传感器DS18B20,此温度传感器,可以很容易读出北侧温度值,进行转换,就可以满足设计要求,另外我们还别出心裁的在电路中加入了温度报警电路,可以实时监测温度,这在实际生产生活中有很大应用。 将两个方案进行比较可以看出,方案二原理简明易行,测量精度高,故我们采用方案二。3.2方案的总体设计框图 根据系统的设计要求,选择DS18B

8、20作为本系统的温度传感器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示、报警等功能。选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到AT89C51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阴LED数码管以动态扫描法实现。检测范围5摄氏度到38摄氏度。AT89C51单片机主控制器显示电路温度传感器DS18B20扫描驱动数字温度计总体电路结构框图如图1

9、所示。 4.电路原理图及硬件设计4.1 电路原理图介绍分析 这是我们设计的本次温度计的电路图: - 27 -4.2 单片机主控制器系统 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。4.3温度传感器模块 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热

10、敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20 的性能特点如下:独特的单线接口方式仅需要一个端口引脚进行通信;多个DS18B20可以并联在唯一的三线上,实现多点组网功能;无需外部器件;可通过数据线供电,电压范围:3.05.5V;测温范围55125,在-10+85时精度为0.5零待机功耗温度以9或12位数字量读出;用户可定义的非易失性温度报警设置报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作DS18B20采用3脚PR35 封装或脚SOIC封装,

11、其内部结构框图如图3所示: 图3 DS18B20内部结构框图 64 b闪速ROM的结构如下: 开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48 位,最后8位是前面56 位的CRC 检验码,这也是多个DS18B20 可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。主机操作ROM的命令有五种,如表1所列指 令说 明读ROM(33H)读DS1820的序列号匹配ROM(55H)继读完64位序列号的一个命令,用于多个DS1820时定位跳过ROM(CCH)此命令执行后的存储器操作将针对在线的所有DS1820搜ROM(F0H)识别总线上各器件的编码,为操作各器

12、件作好准备报警搜索(ECH)仅温度越限的器件对此命令做出响应 DS18B20 温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM 的结构为8字节的存储器,结构如图4所示。 前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值.温度低位LSB温度高位 MSBTHTL配置保留保留保留8位CRC当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二

13、进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5 /LSB形式表示。温度值格式如下: 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。图中,S表示位。对应的温度计算:当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将补码变换为原码,再

14、计算十进制值。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。 DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625LSB形式表示。表2是部分温度值对应的二进制温度表示数据。 DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若TTH或TTL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警搜索。在64位ROM的最高有效字节中存储有循环冗余

15、校验码(CRC)。主机根据ROM的前 56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数 据是否正确。3)DS18B20测温原理DS18B20的测温原理如图5所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器

16、中,减法计数器1和温度寄存器被预置在-55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严格

17、的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算: Ts=(Tz-0.2

18、5)+(CD-Cs)/CD 4.5显示模块 采用4位共阴极LED数码管显示,采用共阴极数码管需要加入负载驱动,所以我们在焊接时加上了四个三极管以驱动保证能够正常显示,这在后面我们会用图来说明。 此外我们设置了KEY1,KEY2,KEY3三个按钮,KEY1是复位键,KEY2是增加上线温度报警键,KEY3是减少下线温度报警键。4.6电源模块 5V直流电源(0.3v)用于该温度计的供电; 5系统程序的设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,报警子程序和显示数据刷新子程序等. #include #include #define uchar unsigned c

19、har#define uint unsigned int#include DS18B20.cuint mun=0;uchar time_wang=0;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;sbit B0=P10;sbit B1=P11;sbit B2=P12;sbit B3=P13;sbit K1=P31;sbit K2=P32;sbit K3=P33;sbit jingbao=P37;uchar wendu_H=38;uchar wendu_L=5;uchar SHOW=0;/*名

20、称: Delay_NS()*功能: 长软件1ms延时*/void delay(uint ms) uchar i;while(ms-) /ms毫秒软件延时 for(i = 63;i 1;i-);/-void Sys_Initial(void)TMOD = 0x22;/ 定时器1工作方式2,定时器0工作方式1TH0 = 0x3C;TL0 = 0xB0;/ 50msET0 = 1; / 开定时器T0中断TR0 = 1; / 开定时器T0EA=1;/ 开总中断/*void timer0() interrupt 1 using 2TH0=0xff;TL0=0xa0;time_wang+;if(SHOW=

21、0)if(time_wang=5) P2=0xff;B0=0;B1=1;B2=1;B3=1;P2=tablemun/1000; if(time_wang=10) P2=0xff;B0=1;B1=0;B2=1;B3=1;P2=table(mun%1000)/100; if(time_wang=15) P2=0xff;B0=1;B1=1;B2=0;B3=1;P2=(table(mun%100)/10)&0x7f; if(time_wang=20)time_wang=0;P2=0xff;B0=1;B1=1;B2=1;B3=0;P2=tablemun%10;if(SHOW=1)if(time_wang

22、=5) P2=0xff;B0=0;B1=1;B2=1;B3=1;P2=0x38; if(time_wang=10) P2=0xff;B0=1;B1=0;B2=1;B3=1;P2=0xff; if(time_wang=15) P2=0xff;B0=1;B1=1;B2=0;B3=1;P2=tablewendu_L/10; if(time_wang=20)time_wang=0;P2=0xff;B0=1;B1=1;B2=1;B3=0;P2=tablewendu_L%10;if(SHOW=2)if(time_wang=5) P2=0xff;B0=0;B1=1;B2=1;B3=1;P2=0x76; if

23、(time_wang=10) P2=0xff;B0=1;B1=0;B2=1;B3=1;P2=0xff; if(time_wang=15) P2=0xff;B0=1;B1=1;B2=0;B3=1;P2=tablewendu_H/10; if(time_wang=20)time_wang=0;P2=0xff;B0=1;B1=1;B2=1;B3=0;P2=tablewendu_H%10;/-/*void key_scan(void)if(!K1)/启动delay(100);SHOW+;if(SHOW=3)SHOW=0;if(!K2) delay(100); if(SHOW=0)return; if(

24、SHOW=1) if(wendu_L=(wendu_H-1)return;elsewendu_L+; if(SHOW=2) if(wendu_H0)wendu_L-; if(SHOW=2) if(wendu_H=(wendu_L+1)return;elsewendu_H-; /*void main(void) /主函数/uchar i;Sys_Initial();/单片机初始化,开定时器0while(1) wendu_read(); mun=wendu*10+xiaoshu; if(wenduwendu_L&wendu0) count-;void reset(void) /send reset

25、 and initialization commandDS=0;delay1(100);DS=1;delay1(4);delay1(20);bit read_bit(void) /read a bit bit temp; DS=0; _nop_(); DS=1; _nop_(); temp=DS;EA=1; delay1(20);EA=0; return temp; uchar read_byte(void) /read a byte date uchar i,byte=0; bit j; for(i=0;i8;i+) byte=_cror_(byte ,1); j=read_bit(); i

26、f(j=0) byte=byte|0x00; else byte=byte|0x80; return byte;void write_byte(uchar command) /write a byte to ds18b20uchar i;for(i=0;i8;i+) if(command & 0x01)=0) DS=0; delay1(8); DS=1; _nop_(); else DS=0; _nop_(); DS=1; delay1(8); command=_cror_(command,1); /-/DS18B20读温度程序uint readtemperature() uint tempe

27、rature; EA=0; reset(); /初始化 EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; write_byte(0xcc); /写SKIP ROM(跳过检查ROM序列,因为我们一般只有一个DS18B20!)EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; write_byte(0x44); /写启动温度转换 EA=1; delay1(12); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; reset(); /初始化 write_byte(0xcc); /写SK

28、IP ROM(跳过检查ROM序列,因为我们一般只有一个DS18B20!) EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; write_byte(0xbe); /读温度寄存器RAM(头两个值分别为温度的低位和高位) EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; tempL=read_byte(); /读出温度的低位LSB EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; tempH=read_byte(); /读出温度的高位MSB EA=1;

29、 /温度转换,把高低位做相应的运算转化为实际温度 temperature=tempL+tempH*256;/将温度整理成16位变量 =(tempH*256)+tempL)*0.0625*10+0.5;/tempH*256的意思是tempH向左移8位 / delay_us(200);/两次间隔转换的间隔要延时一下 temperature=temperature*(0.625); return(temperature); /*函数名称: wendu_read功 能: 完成温度的读取与显示参 数: 无返回值 : 无/*/void wendu_read(void) uint t;t=readtempe

30、rature();wendu=(t/10)%1000;xiaoshu=t%10; 6.调试及仿真 我利用电脑中的 Proteus软件将设计好的电路图进行仿真,如下图所示: 其中温度上限设为38,下限设为5,并且可以由KEY1,KEY2按钮自由设置,非常方便。6. 电路的焊接及调试 我和曹群峰同学在电路调试和仿真成功的基础上,列出了这次电路焊接所需要的所有元件以及工具,出去进行购买,经过近两天的辛苦的搜罗寻找,我们终于集齐所有元件,清单如下元件名称型号数量单片机芯片89C511温度传感器DS18B201晶振12MHz1电源5V1三极管8550(PNP)4电容30pF210uF1排阻10K2(并联

31、)LED数码管03641B(共阳)1电阻1K46.8K17.5K1万能板1IC插座若干导线若干 集齐了所有我们这次所需要的元器件之后,我们对电路图再进行了研究,争取以小的的面积用最少的线并且能够整齐有序的将各个元器件之间用导线连接起来的焊接就可以正式动工了。 整个焊接的过程持续了大约两个星期的时间,在这其中有成功也有失败,在我们最后的成品出来之前我们有两个报废的试验品,后来我们请教了相关专业的老师以及学长,吸取焊接过程中的不足,比如对虚焊,短路以及连线太过复杂等问题加以改进,终于在第三次得到了比较两人满意的结果,以下是我们这次整个焊接过程中的图片,以及我们最后成功时的成果展示的合影,每张图下面

32、都附有说明: 左图是我们相关的原件准备,以及第一次的作品。(于工程中心拍摄) 右图是我(陆路裕)在进行电路板的焊接 经过了第一次和第二次的并不非常成功的焊接后,我们冷静下来,仔细针对诸如原件摆放,虚焊等问题分析了了失败的原因,开始了第三次焊接,结果成功了!请看下图: 这是曹群峰同学在进行第三次电路板的焊接.这是我们调试测量温度成功时的照片,温度计上准确地显示了当时环境温度为19.5.7. 遇到的问题和解决办法 针对这次的温度计的设计,我们深知光有原理图有理论知识是远远不够的,还要善于处理解决产品设计中遇到的各种意想不到的问题,不过可喜的是,这些问题都被我们一一解决了。下面我就按照从原理分析道实

33、物调试的顺序对遇到的问题以及解决的办法做详尽的阐述: 问题:当发现买来的4位显示共阴极数码管无法正常显示温度 解决办法:在单片机和数码管之间加上4个三极管驱动,利用模电课程中三极管能够对电流的放大作用 ,使得温度能够在数码管上显示出来 问题:焊接过程中导致错焊,虚焊的问题,有时甚至会导线交叉短路 解决办法:重新在万能板上布局各个元件位置,并且用拖锡节约导线,简化电路的连接,利于后期检查。8. 总结和体会 -陆路裕 数控102虽然这次接近一个月的温度计设计制作已经结束,但是留给我和曹群峰同学的影响是非常大的,下面我就具体说出我的一些想法。这次的设计制作我主要负责程序的编写和电路的仿真,而电路的焊

34、接是由我和曹群峰同学一起完成的。我想说和曹群峰同学的合作是一次愉快的经历,这次温度计的设计让我们的距离和友谊又再次加深。整个设计的过程其实就是一个学习的过程,尤其是对我们的模拟电路这门课程很多知识的理解和运用,我们在制作开始之前对书本再次进行了复习巩固。接下来是对DS18B20电路原理图的设计,刚开始曹群峰觉得有一定的难度,主要是对Proteus软件不是太理解,但是在我的帮助下也顺利完成。仿真的成功就预示着我们离成功又进了一步。但我们还是不能掉以轻心,因为更大的挑战还在后头,果然在焊接过程中途中遇到了很多问题。电子元件不全所以要修改方案,焊接中检查是否焊错虚焊,修改程序使之符合自己的电路并调试成功,烧录芯片并调试成功。我们所做的就是迎接问题,改正错误,是自己的作品能够成功。过程中我对这学期所学的模电课程知识有了更深一步的体会,并且复习了这个学期开学初的时候就参加过的金工实习,而且对接下来的单片机以及数电的学习打下了良好的基础,对以后的科技创新活动到了很大作用。在今后的学习生活中,要牢记在实验过程中的经验教训,争取获得更大的进步!

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922