《基于.DS18B20的温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《基于.DS18B20的温度测量系统设计.docx(14页珍藏版)》请在优知文库上搜索。
1、课程设计(论文)题目名称基于DS18B20温度测量系统设计课程名称单片机原理及应用学生姓名尹彬涛学号13学301075系、专业电子信息工程指导教师江世民2015年6月12日摘要随着时代的进步和开展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于STC89C52单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进展了详尽分析,特别是数字温度传感器DS18B20的数据采集过程。对各局部的电路也一一进展了介绍,该系统可以方便的实现实现温度采集和显示,并可根
2、据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与STC89C52结合实现最简温度检测系统,该系统构造简单,抗干扰能力强,适合于恶劣环境下进展现场温度测量,有广泛的应用前景。关键词:单片机;DS18B20;温度传感器;数字温度计;STC89C52目录摘要1引言3一、方案介绍31、显刁R局部32、温度采集53、方案流程图5二、总体方案设计61、硬件设计61.1温度采集设计61.2温度显示设计62、软件设计72.1DS18
3、B20程序设计72.2显示局部程序设计8三、实验调试过程101、软件调试101. 1显示局部调试10四、心得体会10五、致谢11六、参考文献12七、附录12附录一程序代码12附录二仿真电路图18引言在日常生活及工农业生产中经常要涉及到温度的检测及控制,传统的测温元件有热点偶,热敏电阻还有一些输出模拟信号得温度传感器,而这些测温元件一般都需要比较多的外部硬件支持。其硬件电路复杂,软件调试繁琐,制作成本高,阻碍了其使用性。因此美国DALLAS半导体公司又推出了一款改进型智能温度传感器一一DS18B20o本设计就是用DS18B20数字温度传感器作为测温元件来设计数字温度计。本设计所介绍的数字温度计与
4、传统温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示。本设计显示精度为1,只能用于日常生活粗测。该设计控制器使用单片机STC89C51,测温传感器使用DS18B20,显示器使用液晶显示。一、方案介绍1显示局部显示局部是本次设计的重要局部,一般有以下两种方案:方案一:采用LED显示,分静态显示和动态显示。对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,可靠性也较低。对于动态显示方式,虽可以防止静态显示的问题,占用单片机IO口少,节约资源,而且接线简单。方案二:采用LCD显示。LCD液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,对于信息量多的系统
5、,是比较适合的。鉴于该系统信息量少,我们采用方案一。2、温度采集由于现在用品追求多样化,多功能化,给系统加上温度测量显示模块,能够方便人们的生活,使该设计具有人性化。本次实验是设计列车车轴实时温度检测系统,所以我们采用温度传感器DS18B20,用DS18B20测温度就无需外接A/D转换电路,其输出的温度值就是已经经过了A/D转换,已经是数字量了。DS18B20可以满足从-55摄氏度到+125摄氏度测量范围,且DS18B20测量精度高,精度为0.0625摄氏度,固有的测温分辨率为0.5,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,
6、使用方便。基于DS18B20的以上优点,我们决定选取DS18B20来测量温度。3、方案流程图温度传感器DS18B20集成了A/D转换的功能,所以在连接单片机时无需进展A/D转换电路的连接,将采集的温度数据经过DS18B20的处理将温度值输出给单片机,通过单片机的控制输出使数码管显示,倘假设实测的温度大于人为设置的温度时,单片机I/O口P3.0输出高电平,使报警系统工作报警。流程图如图1.3所示:图13流程图二、总体方案设计1、硬件设计1.1 温度采集设计温度传感器采用DS18820,其是一种单总线智能型温度传感器,只有三线接口,分别为地线(GND)、数据线(DQ)、电源线(VCC)oDS188
7、20输出信号为数字信号,处理器与DS18820通过数据线(DQ)来完成双向通信,因此采用DS18820使得电路十分简单。温度变换功率可以来源于外电源,也可以来源于数据总线,总线本身也可以向所挂接的DS18820供电。DS18820的电压范围为+3.O+5.5V,测温范围为55+125C,固有的测温分辨率为0.5C,最高精度可达0.0625,最大的转换时间为200ms。一条总线上面可以挂接多个DS18820实现多点测温。本实验温度路数只有一路,所以单独使用一个+5V电源对DS18B20供电。引脚图如图2.1.1(a),元件图如图2.1.1(b):图2.1.1Ca图2.1.1b1.2 温度显示设计
8、在实验中,我们采用四位一体LED共阴极数码管显示,段选端由单片机PO口控制,之间外接上拉电阻。理想情况下单片机PO口输出的高电平为+5V,足以使数码管点亮,但在实际接线中,要接一个上拉电阻,这样才能使数码管正常工作。数码管的位选端与单片机P2口连接,通过程序控制P2口输出上下电平来控制数码管位选。图2.12(a)、图2.L2(b)分别为数码管引脚图和实物图:图2.1.1数码管引脚图2.1.2b实物图2、软件设计2. 1DS18B20程序设计对于DS18B20的程序编写要特别注意时序问题,如果采用C语言编程,其对时序要求很严,倘假设时序错误会导致单片机读不到数据,或是读到的数据都是错误的,更严重
9、就是传感器不工作,无法进展温度采集;汇编语言对时序要求没有那么严格,因为程序运行每一条汇编语句都会有一个机器周期。下面就是DS18B20各个状态下得时序介绍:1、DS18B20复位初始化时序先通过单片机把DQ电平拉低,即DQ=O,然后通过一个480us到960us的延时,再拉高电平等待15us,当对传感器进展复位操作时.,成功了那么DS18B20会自动将DQ拉低,此时单片机对DQ温度值进展读取;倘假设不成功那么DQ一直保持高电平,单片机无法从DS18B20读取温度值。复位时序如图2.2.1(a)所示:图2.2.1aDS18B20复位初始化时序图2、写DS18B2O温度时序写周期一开场做为主机先
10、把总线拉低1微秒表示写周期开场。随后假设主机想写0,那么继续拉低电平最少60微秒直至写周期完毕,然后释放总线为高电平。假设主机想写1,在一开场拉低总线电平1微秒后就释放总线为高电平,一直到写周期完毕。而做为从机的DS18B20那么在检测到总线被拉低等待15微秒然后从15us到45us开场对总线采样,在采样期内总线为高电平那么为1,假设采样期内总线为低电平那么为0。温度写时序如图2.2.1(b):图2.2.1(b)写DS18B20温度时序图3、读DS18B20温度时序先将DQ电平拉低,然后单片机再将DQ电平拉高,如果DQ的数据是“1时,那么单片机在采样时就会采到一个高电平;如果在DQ的数据变成了
11、“0,那么说明DS18b20自动将电平拉低,单片机采样时就会得到一个低电平。温度读时序如图2.2.1(c):图2.2.1(C)读DS18B20温度时序图2. 2显示局部程序设计显示有静态显示和动态显示,两者区别在于静态显示接线多,用到的IO口多,所以对单片机资源浪费大,但是其编程简单;动态显示接线少,占用的IO口少,资源利用充分,但是其编程比较复杂。本实验采用动态显示,采用四位一体共阴极数码管,段选端用PO口控制,位选端用P2控制,显示图如图2.2.2(a)所示图2.2.2a显示图因此,整个的程序流程图如图2.2.2(b),单片机上电,进展单片机初始化,之后进展DS18b20的初始化,将原有的
12、温度擦除。初始化完成后,当总线接收到从高电平到低电平的脉冲时,那么温度传感器进展写操作,将温度值写入。温度数据转换完成后,单片机Pl口将温度值读入单片机中,经过程序处理显示到数码管上。在单片机进展数据处理时,倘假设实际温度大于设定温度时,触发报警电路工作,产生报警,如果温度正常那么报警电路不工作。图2.2.2b程序流程图三、实验调试过程1、软件调试1.1显示局部调试为了减少错误的发生,我们采用了分步调试,首先直接将一位数码管接地选通,然后通过单片机控制显示;如果没有错误,再进展两位显示,在两位显示之前要将数据进展处理,取出十位,个位,如此依次将三位温度值显示出来。但是在显示过程中我们发现显示的
13、数据一直在闪烁,不是静止的,我们试着把延时时间延长,但是任然不起作用,没有任何变化。经过多番努力,江教师一语惊醒梦中人,我们在将P2置了数选通数码管之后,下一个数据在选通数码管时没有重新将P2口初始化即复原(MOVP2,#0FFH)o程序如下:MOVA,32HMOVDPTR,#SGTB1MOVCA,A+DPTRMOVP2,#OFFH;P2口复位MOVPO,A;显示温度个位值MOVP2,#0FDH;位选LCALLDELAY有了P2口的复位这条程序,显示的闪烁问题就解决了,数据显示变得稳定。四、心得体会在第十周星期五上午刚考完,江教师就过来布置课设任务,讲了很多很多,当时听完也很有兴趣,应为在实验
14、室是个能出成就的地方,每当你取得一点点的成功,你都会感觉很充实,就会觉得这一天没有虚度,学到了东西。下午,大家网上选题,什么事都讲究效率,我们还在睡午觉,二班的同学就在选题了,看到那个题目我都晕了,不知道从何处下手,纠结啊,硬着头皮选了个挑战性的题目。搞得星期六上课都在想到底要怎么开场,自己什么都不懂,什么东西都得从开场学起,所以星期天开场从根基开场学。根基就得从一些根基软件开场,起初我对画电路图用什么软件,编程用什么软件,程序,仿真用哪种软件以及如何烧单片机程序一无所知。所以星期天慢慢的熟悉一下这些软件的基本操作,这个过程很痛苦,什么东西都不懂要去问别人是件很痛苦的事情。经过一天的熟悉之后,
15、我们弄了一个最简单的汇编语句,想让数码管显示一个“5,体验一下整个过程到底是怎么样的,经过一番折腾终于出来了,当时很快乐,慢慢的对自己的题目如何开展有了信心了。经过一到两天的资料查询,渐渐的对编程有了一点头绪,一些特定的元器件,它的程度编写都是固定的,只是需要把程序看懂,修改其中参数,然后自己慢慢将数据处理局部和显示局部程序编好。编程过程中经常遇到问题,想问教师吧,教师又很忙,不可能一直都在实验室随叫随到,所以在编程的第一天没什么进展。后面请了一个对编程比较有经历的同学在旁边指导我,遇到问题我们相互商量,然后解决,就这样一条一条,一个模块一个模块,用了将近两天的时间将程序的大体框架汇编了出来。到这个时候,我们就尝试着开场仿真,在仿真过程中也经常发现问题,慢慢的找出问题,将程序一点一点的完善,然后将整个调试完成。值得提得是,起初大家都并不知道如何开展自己的题目,我们可以在QQ群上提出来跟大家一起交流,所有的同学,包括指导教师都会给你提出一个如何开题的建议。每一天,教师要问大家现在的进展如何,虽然看起来是随口一问,但我认为是非常有意义的,这是有催促,鼓励作用的。除此之外,我们还可以将这一天遇到的问题大胆的在群上提出来,教师现场给我们做出解答,也许这不仅仅是你一个人在实验中遇