课程设计(论文)-基于DS18b20数字测温仪的设计.doc

上传人:yyf 文档编号:3292632 上传时间:2019-08-08 格式:DOC 页数:24 大小:189.51KB
返回 下载 相关 举报
课程设计(论文)-基于DS18b20数字测温仪的设计.doc_第1页
第1页 / 共24页
课程设计(论文)-基于DS18b20数字测温仪的设计.doc_第2页
第2页 / 共24页
课程设计(论文)-基于DS18b20数字测温仪的设计.doc_第3页
第3页 / 共24页
课程设计(论文)-基于DS18b20数字测温仪的设计.doc_第4页
第4页 / 共24页
课程设计(论文)-基于DS18b20数字测温仪的设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《课程设计(论文)-基于DS18b20数字测温仪的设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)-基于DS18b20数字测温仪的设计.doc(24页珍藏版)》请在三一文库上搜索。

1、数字测温仪的设计摘 要在日常生活及农业生产中,经常要用到温度的检测及控制,由此可见单片机在我们的生活中扮演十分重要的角色,让我们认识到单片机已经深入各个领域。我们通过课程设计不仅能够加强自己动手操作能力和培养技术能力,而且加深对打片机的认识增加自己知识面和激发对单片机的学习热情以及对科学知识的探索。本次设计的内容是基于单片机学习板的数字测温仪设计,采用温度传感器DS18B20作为环境温度检测元件,其中主控器为STC89C52RC、显示电路是经D8255AC-2扩展连接数码管,再由蜂鸣器作为温度报警部分。温度传感器检测到环境温度进行转换保存高速缓存RAM中,主控器在发出命令后在读取数据进行处理,

2、再输出数据到显示部分控制其显示的具体温度值。关键词:STC89C52RC;DS18B20;D8255;主控制器;温度传感器;1目 录设计要求错误!未定义书签。1 方案论证与对比错误!未定义书签。1.1 方案一错误!未定义书签。1.2 方案二11.3 设计方案对比与选择22 系统电路的设计22.1 主控制器22.2 显示电路22.3 温度传感器23 系统程序的设计73.1 主程序73.2 温度程序73.3 显示程序84 系统调试及性能分析115 仪器件清单错误!未定义书签。6 总结与体会错误!未定义书签。参考文献14附录一:详细系统源程序14设计要求本课题以单片机为核心,设计并制作出一台数字测温

3、仪,具有以下功能:1、单点温度测试;2、测温范围: 040;3、分辨率:01;4、温度输出显示:2 位;5、设定上下限,超出范围时报警。1 方案论证与对比1.1 方案一采用标准AT89C52单片机作为控制器;显示倒计时显示采用2位LED数码管;东西方向、南北方向通行指示灯采用接P1口的发光二极管;LED显示采用动态扫描,以节约端口数。特种车辆通行采用实时中断完成,识别方法采用人工识别。按以上系统构架设计,单片机端口资源满足要求。该系统具有电路简单,设计方便,耗电较少,可靠性高等特点。1.2 方案二在日常生活及工农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电

4、组测出的一般都是电压,再转换成对应得温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS1820作为检测元件,测温范围为-55125,分辨率最大可达0.0625。DS18B20可以直接读出被测温度值。而且采用3线制与单片机相连,减少了外部硬件电路,具有低成本和易使用的特点。按照系统设计功能的要求,确定系统由3个模块组成:主控制器.测温电路和显示电路。数字温度计总体电路结构框图如图1所示。图1 数字温度计电路结构框图1.3 设计方案对比与选择对比方案一与方案二可知道,二者所实现的

5、功能基本相同。方案二具有综合设计优点,而且我们的芯片也是AT89C52,最终我们选定方案二。 2 系统电路的设计2.1 主控制器单片机AT89C51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携式产品的设计使用,系统可用二节电池供电。2.2 显示电路显示电路采用6位共阳LED数码管,从P1口输出段码,列扫描用P3.0P3.来实现,列驱动用8255。2.3 温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出北侧温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式

6、。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5V;零待机功能;温度以9或12位数字量读出;用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。 图2 DS18B20内部结构图64位ROM的位结构如图3所示。开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有

7、48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。非易失性温度报警器触发器TH和TL,可通过软件写入户报警上下限。图3 64位ROM结构图DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图4所示。头2个字节包含测得的温度信息,第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。 DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义热图5所示。低5位一

8、直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换得精度位数,即用来设置分辨率,定义方法见表1。图4 高速暂存RAM结构图图5 配置寄存器表1 DS18B20分辨率的定义规定由表1可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存RAM的第6,7,8字节保存未用,表现为逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收温度转换命令后,开始启动转换

9、。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可以通过单线接口读出数据,读数据时低位在先,高位在后,数据格式以0.0625/LSB形式表示。温度值格式如图6所示。 图6 温度数据值格式当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码转换为原码,再计算十进制。表2是一部分温度值对应的二进制温度数据。表2 DS18B20温度与测得值对应表DS18B20完成温度转换后,就把测得的温度值与RAM中的TH,TL字节内容作比较。若TTH或TTL,则将该器件内的报警标志置位,并对

10、主机发出报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到ROM数据是否正确。DS18B20的测温原理如图8所示。图中第温度系数晶振的震荡频率受温度的影响很小,用于产生固定频率的脉冲送给减法计数器1;高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入.图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数震荡器产生的时钟脉冲计数,进而完成温度测量。计数门的开启时间由高温度

11、系数震荡器来决定,每次测量前,首先将-55所对应的一个基数分别置入减法计数器1,温度寄存器中,减法计数器1和温度寄存器被预置在-55所对应的一个基数值。减法计数器1所对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将被重新装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。图7中的斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被预测值。

12、另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要,系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20发ROM功能命令发存储器操作命令处理数据。图7 DS18B20测温原理图DS18B20与单片机的接口电路 DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图8所示.单片机端口接单线总线,为为保证有效DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。图8 DS18B20采用寄生电源的电路图当DS18B2

13、0处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD和GND端均接地。由于单线制只有一根线,因此发送接口必须是三态的。3 系统程序的设计3.1 主程序主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的测量温度值,温度测量1s进行一次,其程序流程图见图9。图9 DS18B20温度计主程序流程图3.2 温度程序温度转换命令子程序主要是发温度转换开始命令,当采用12分辨率时转换时间为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图10所示。图10 温度转换命令子程序流程图计算

14、温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判断,其程序流程图如图11所示。图11 计算温度子程序流程图3.3 显示程序显示数据刷新子程序主要是对显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图12所示。 图12 显示数据刷新子程序流程图DS18B20的各个ROM命令Read ROM33H这个命令允许总线控制器读到DS18B20的8位系列编码,惟一的序列号和8位CRC码。只有在总线上存在单只DS18B20的时候才能使用这个命令。如果总线上有不止一个从机,当所有从机试图同时传送信号时,就会发生数据冲突。Match ROM55H这个是匹配ROM

15、命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定DS18B20,只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或三个器件时都可以使用。Skip ROM0CCH这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,在Skip ROM命令之后跟着发一条读命令,由于多个从机同时传送信号。总线上就会发生数据冲突。Search ROM0F0H当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位R

16、OM编码。搜索ROM命令允许总线控制器用排除法识别总线所有从机的64位编码。Alarm Search0ech这条命令的流程和Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20 才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。Write Scratchpad4EH这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。Read Scratchpad0BEH这个命令读取暂存器的内容。读取将从第1个字节开始,一直进行下去,直到第9个字

17、节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。Copy Scratchpad 48H这个命令把暂存器的内容拷贝到DS18B20的EEROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到EE存储器,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并最少保持10ms。Convert T44H这条命令启动一次温度转换而无需其它数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这

18、条命令之后跟着发出时间间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。如果使用寄生电源,总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。Recall 、EE0E8H这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上点时自动执行,这样器件以上电暂存器里马上就存在有效的数据了。若这条命令发出之后发出数据隙,器件会输出温度转换忙的标识:0为忙,1为完成。Read Power Supply0b4h若把这条命令发给DS18B20后发出读时间隙,器件会返回他的电源模式:0为寄生电源,1为外部电源。从DS18B

19、20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为912位可选的,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。通过观察表5.2可以发现一个十进制值和二进制值之间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一个字节,这个字节的二进制值化为十进制之后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化为十进制后,就是温度值得小数部分。小数部分因为是半个字节,所以二进制值范围是0F,转换成十进制小数值就是0.06

20、25的倍数(015倍)。这样需要4位的数码管来显示小数部分,实际应用不必有这么高的精度,采用1位数码管来显示小数部分,实际应用不必有这么高的精度,采用1位数码管来显示小数,可以精确到0.1。表下就是二进制和十进制的近似对应关系表。表3 小数部分二进制和十进制的近似对应关系表4 系统调试及性能分析系统的调试以程序为主,硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示数据刷新等子程序的。编程及调试,由于DS18B20与单片机采用串行数据传送,因此,对

21、DA18B20进行读写编程时必须严格的保证读写时序,否则将无法读取测量结果。本程序采用单片机汇编边写,用Keil C51编译器编程调试。软件调试到能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能改变就基本完成。性能测试可用制作的温度计和已有的成品温度计来同时测量比较,由于DS18B20的精度很高,所以误差指标可以限制在0.1以内,另外-55+125的测量范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意一下问题。DS18B20工作时电流高达1.5mA

22、,总线上挂节点数较多且同时进行转换时,要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MODFET供电。连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离测温系统设计时,要充分考虑总线分布电容和阻抗匹配等问题。在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或短线,当程序读该DS18B20时,将没有返回信号,程序进行死循环,这一点在进行DS18B20硬件连接和软件设计时要给予一定的重视。5 仪器件清单 本次设计所涉及元器件都是基于我们的单片机开发板,其中最重要的主控制器89C

23、52和温度传感器DS18B20;显示电路由8255扩展四个数码显示管构成。虽然运用到的元器件不多,但是做的过程中还是非常的艰难每个器件的结构和功能都很难以理解弄懂,具体运用到的元器件如表4所示。表4 仪器清单STC89C52芯片1块DS18B20温度传感器1个电源线1根电源充电器1个电阻18个8255扩展芯片1块数码管4个9015电容6个6 总结与体会课程设计已经结束了,虽然我们的课题比较难,但是我们还是通过大家的努力还是圆满的完成了,通过这次课程设计期间使我对单片机课上所学到的知识有了更深的认识,并且把我们平时在电子这一方面所学到的知识有了一个综合的运用,使我们真正的从实践掌握了80c51的

24、各方面的知识。首先,当老师给我们每个小组分配下各自的课程设计的课题是,我的是“DS18B20数字温度计的设计”,拿到课题当时,我是一脸茫然,根本就不知道应该从何开始下手,对此经过我们组大家的商量,分配好各自的任务,我们开始收集关于这方面的资料,而且幸运的是我们找到了和我们课题相关的设计方案,下午我们把各自所收集到资料在一起经过研究,讨论,终于对课题有了初步的了解和想法。接下来的几天我们仍然是学习关于我们这次试验中所用到的各个芯片,和对于整个课题的设计方法和思路,经过我们的讨论和商议终于确定了我们的实际方案。然后我们就开始编写所用到程序,画粗略的电路图,编写程序的流程图。当然初次的程序存在很多的

25、错误,通过我们的仔细的检查,终于完成了。最后我们就是写试验报告,对我们这次课程设计做一个归纳,总结。圆满的完成了这次课程设计。参考文献1 张鑫.单片机原理及应用。 北京:电子工业出版社,20072 楼然苗,李光飞.单片机课程设计指导。 北京:北京航空航天大学出版社,20073 谢四莲.单片机原理及应用实验指导书。 娄底:湖南人文科技学研,20104 周润景,袁伟亭.proteus应用。 北京: 电子工业出版社,20065 彭介华.电子技术课程设计指导。 北京:高等教育出版社,1997附录一:详细系统源程序#include#include#include#define uchar unsigne

26、d char#define uint unsigned intsbit BEER=P33;bit flag;uchar temprt_h,temprt_l;uchar decimal;/定义18B20数据端口 sbit DQ=P17;/共阳级管显码 uchar display_code20=0xA0,0xBB,0x62,0x2A,/0,1,2,30x39,0x2C,0x24,0xBA,/4,5,6,70x20,0x28,0x30,0x25,/8,9,A,B0xE4,0x23,0x64,0x74,/C,D,E,F0x7f,0xe5,0x31,0xff;/-,L,H,灭/DS18B20温度传感器

27、void delay(uint i)while(i-);/初始化DS18B20void Init_DS18B20(void)uchar x=0;do DQ=1; delay(1); DQ=0; delay(80); DQ=1; delay(5); x=DQ; while(x);delay(15);/读一个字节uchar Read_18B20_Byte(void)uchar i=0;uchar RData=0;for(i=8;i0;i-)DQ=0;RData=1;DQ=1;_nop_();_nop_();_nop_();if(DQ)RData|=0x80;delay(2);return(RDat

28、a);/写一个字节void Write_18B20_Byte(uchar WData)uchar i=0;for(i=8;i0;i-)DQ=0;DQ=WData&0x01;delay(2);DQ=1;WData=1;delay(2);/读取温度 uchar Rdtemprt(void)uchar h_temp,l_temp;uchar hex;float decimal1;Init_DS18B20(); Write_18B20_Byte(0xCC);Write_18B20_Byte(0x44);Init_DS18B20(); Write_18B20_Byte(0xCC);Write_18B20

29、_Byte(0xBE);temprt_l=Read_18B20_Byte(); temprt_h=Read_18B20_Byte(); /读出温度整数位的的HEX码至hex h_temp=temprt_h&0x0f;l_temp=temprt_l&0xf0;l_temp=l_temp4; h_temp=h_temp4;decimal1=temprt_l&0x0f;decimal=(uchar)(decimal1/16*10.0);hex=h_temp|l_temp;return(hex); /数码管显示 void display(uchar t)uchar hundr,ten,one,i;a8255_CON=0x81;hundr=t/100;if(hundr)a8255_PA=0xfd;a8255_PB=display_codehundr;delay(20);/HEX码转换为BCD码 ten=(t-hundr*100)/10; one=t%10;for(i=0;i=15|temp=0) BEER=BEER; else BEER=1; 21

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1