课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc

上传人:仙人指路1688 文档编号:4150706 上传时间:2023-04-07 格式:DOC 页数:25 大小:460KB
返回 下载 相关 举报
课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc_第1页
第1页 / 共25页
课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc_第2页
第2页 / 共25页
课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc_第3页
第3页 / 共25页
课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc_第4页
第4页 / 共25页
课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于C51单片机的DS18B20简易测温系统.doc(25页珍藏版)》请在三一办公上搜索。

1、1设计要求1.1具体要求本次课程设计采用的是基于C51单片机的DS18B20简易测温系统,电路图中主要包含51单片机,DS18B20和数码管显示。1.2技术指标实验要求测温显示精度为:1测量范围为:-55+1252设计方案与论证2.1方案选择方案一:采用热敏电阻可满足测温要求,但热敏电阻精度低,重复性和可靠性较差,对于精度要求较高的测温不适用,而且采用热敏电阻要求复杂的电路和算法,增加了设计复杂度。方案二:采用专用的集成温度传感器(如AD590、LM35/LM45)和数字化温度传感器(DS18B20、DS1620)测温,数字化温度传感器具有接口简单、直接数字量输出、精确度高等优点。DS18B2

2、0是DALLAS公司的最新单线数字温度传感器,它是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,它的测量温度范围为55125,在1085范围内,精度为0.5,现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等,DS18B20支持35.5V的电压范围,使系统设计更灵活、更方便、更便宜、体积更小。DS18B20可以程序设定912位的分辨率,精度为0.0625,分辨率设定及用户设定的报警温度存储在E2PROM中,掉电后依然保存。因此,本方案选用D

3、S18B20作为温度测量传感器。2.2总体设计2.2.1单片机系统目前比较流行51系列单片机和凌阳单片机。 AT89C51单片机需要用仿真器来实现软硬件的调试,较为繁琐; AT89S52八位单片机除具有AT89C51单片机所有的优点外,具有更大的程序存储空间,可在线仿真的功能,方便调试。凌阳十六位单片机虽然可以更好的完成控制功能,但较AT89S52八位单片机价格昂贵,而且编程以及外围功能电路的设计都不及AT89S52成熟。因此,选用AT89S52八位单片机作为温度采集的控部分。2.2.2电源模块采用普通的直流电源实现电路简单,而且采用集成电源芯片设计的直流电源电压比较稳定,完全满足系统各模块的

4、供电要求。 2.2.3显示模块由于系统设计初衷就是以简单方便抗干扰性为主,而且在恶劣的环境下也能很好的完成任务,本实验只需显示出温度,因此液晶显示器还是不够廉价的,而数码管就具备了以上功能,因此选用数码管座位显示工具。2.2.4确定方案为了不失通用性和智能性,本方案采用AT89S52单片机作为控制器,单总线温度传感器DS18B20进行温度采集。电源部分采用普通的直流电源,完全满足AT89S52和DS18B20等各模块的工作电压范围。温度显示采用数码管,实用性高。2.3总体框图程序控制模块数码管显示模块单片机系统温度传感器模块电源模块3设计原理及电路图3.1温度传感器模块3.1.1DS18B20

5、工作原理DS18B20 采用3 脚PR-35 封装或8 脚SOIC 封装,管脚排列如图3所示。图中GND 为地,DQ 为数据输入/输出端(即单线总线),该脚为漏极开路输出,常态下呈高电平,Vcc 是外部+5V 电源端,不用时应接地,NC 为空脚。图3 DS18B20的外部结构DS18B20内部主要包括寄生电源、温度传感器、64 位激光ROM 单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH 和TL 解发器存储与控制逻辑、8 位循环冗余校验码(CRC)发生器等七部分,内部结构如图4。图4 DS18B20内部结构寄生电源由二极管VD1、VD2 和寄生电容

6、C 组成,电源检测电路用于判定供电方式,寄生电源供电时,VDD 端接地,器件从单线总线上获取电源,在DQ 线呈低电平时,改由C上的电压Vc继续向器件供电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常电源时也能读ROM。若采用外部电源VDD,则通过VD2 向器件供电。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,如图5所示。开始8位(28H)是产品类型标号,接着的48位是DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以

7、实现一根总线上挂接多个DS18B20的目的。主机操作ROM 的命令有五种,如表1 所示。图5 64 位ROM 的结构表1 DS18B20的ROM命令指令说明读ROM(33H)读DS1820的序列号匹配ROM(55H)继读完64位序列号的一个命令,用于多个DS1820时定位跳过ROM(CCH)此命令执行后的存储器操作将针对在线的所有DS1820搜ROM(F0H)识别总线上各器件的编码,为操作各器件作好准备报警搜索(ECH)仅温度越限的器件对此命令作出响应DS18B20 测量温度时使用特有的温度测量技术。其内部的低温度系数振荡器能产生稳定的频率信号f0,高温度系数振荡器则将被测温度转换成频率信号f

8、。当计数门打开时,DS18B20 对f0 计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以被偿。测量结果存入温度寄存器中。一般情况下的温度值应为9 位(符号点1位),但因符号位扩展成高8 位,故以16 位被码形式读出,表2 给出了温度和数字量的关系。表2 DS1820 温度数字对应关系表DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低8位,第二个字节是温度的高8位,第三个和

9、第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新,第六、七、八个字节用于内部计算,第九个字节是冗余检验字节,如表3所示。表3 DS18B20暂存器分布寄存器内容字节地址温度最低数字位0温度最高数字位1高温限制2低温限制3保留4保留5计数剩余值6每度计数值7CRC校验8该字节各位的意义为TM R1 R0 1 1 1 1 1 ,低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0,用户不用改动,R1和R0用来设置分辨率,DS18B20出厂时被设置为12位,分辨率设置

10、如表4所示。 表4 分辨率设置表R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。ROM命令令和暂存器的命令如表1和表5。表5 DS18B20暂存器的命令指

11、令说明温度转换(44H)启动在线DS1820做温度A/D转换读数据(BEH)从高速暂存器读9bits温度值和CRC值写数据(4EH)将数据写入高速暂存器的第2和第3字节中复制(48H)将高速暂存器中第2和第3字节复制到EERAM读EERAM(B8H)将EERAM内容写入高速暂存器中第2和第3字节读电源供电方式(B4H)了解DS1820的供电方式3.1.2 DS18B20电路连接 由于DS18B20 工作在单总线方式,其硬件接口非常简单,仅需利用系统的一条I/ O线与DS18B20的数据总线相连即可,如图6所示。图6 DS18B20电路3.2数码管显示模块3.2.1数码管显示原理动态显示驱动:数

12、码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发

13、光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。3.2.2数码管实物及接口电路3.3电路原理图DS18B20初始化结束温度转换跳过ROM匹配延时DS18B20是否存在?跳过ROM匹配读暂存器转换为显示码是否3.4程序流程图4元器件清单元件序号型号主要参数数量备注1AT89S524组I/O口,3个定时器,8个中断,256字节程序运行空间,8K字节闪存。1个单片机27SEG-MPX4-BLUE共阳二极管显示器,8段1个数码管374LS373高性能硅

14、门CMOS器件2个锁存器4DS18B20测温范围:-55+125测温精度:0.06251个温度传感器5电阻1K、10K4个电阻6RESPACK-810K1个阻排77SEG-COM-CAT-BLUE共阳二极管器件,7段1个数码管8LED-BLUE发光二极管1个二极管9晶振12MHZ1个晶振10电容30P、10u3个电容5元器件识别与检测5.1电阻的识别与检测熟记第一、二环每种颜色所代表的数。可这样记忆:棕1,红2,橙3,黄4,绿5,蓝6,紫7,灰8,白9,黑0。记准记牢第三环颜色所代表的 阻值范围,这一点是快识的关键。具体是:金色:几点几 黑色:几十几 棕色:几百几十 红色:几点几 k橙色:几十

15、几 k黄色:几百几十 k绿色:几点几 M蓝色:几十几 M从数量级来看,在体上可把它们划分为三个大的等级,即:金、黑、棕色是欧姆级的;红橙、黄色是千欧级的;绿、蓝色则是兆欧级的。检测方法为用多功能电表测量。5.2电容的识别与检测由于电容体积要比电阻大,所以一般都使用直接标称法。如果数字是0.001,那它代表的是0.001uF1nF,如果是10n,那么就是10nF,同样100p就是100pF。 不标单位的直接表示法:用14位数字表示,容量单位为pF,如350为350pF,3为3pF,0.5为0.5pF 色码表示法:沿电容引线方向,用不同的颜色表示不同的数字,第一,二种环表示电容量,第三种颜色表示有

16、效数字后零的个数(单位为pF) 颜色意义:黑=0、棕=1、红=2、橙=3、黄=4、绿=5、蓝=6、紫=7、灰=8、白=9。 电容的识别:看它上面的标称,一般有标出容量和正负极,也有用引脚长短来区别正负极长脚为正,短脚为负。5.3二极管的识别与检测二极管的识别很简单,小功率二极管的N极(负极),在二极管外表大多采用一种色圈标出来,有些二极管也用二极管专用符号来表示P极(正极)或N极(负极),也有采用符号标志为“P”、“N”来确定二极管极性的。发光二极管的正负极可从引脚长短来识别,长脚为正,短脚为负。5.4三极管的识别与检测以NPN型管为例,将万用表置于R1k挡,黑表笔接管子的发射结e,红表笔接管

17、子的基极b。此时电阻值一般均在几百千欧以上。接着将万用表拔至R10k高阻挡,红、黑表笔接法不变,重新测量一次e、b间的电阻值。若所测量阻值与第一次测得的阻值变化不大,可基本判定被测管为低频管;若阻值变化很大,超过万用表满度1/3,可基本判定被测管为高频管。 5.5单片机的识别与检测VCC(40引脚):电源电压VSS(20引脚):接地5.674ls373的识别与检测引脚上图以标出,LE为锁存端,OE读取端,应接地。5.7DS18B20的识别与检测从正方体表面看过去,从左向右依次为GND,DQ,VCC.6硬件制作与调试程序代码#include#include#define uchar unsign

18、ed char#define uint unsigned intsbit DQ=P23;sbit dula=P26;sbit wela=P27;sbit FM=P25;sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;uint temp,tmp,temp1,temp2,temp3;uchar flag1=0;uchar qian,bai,shi,ge;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86

19、,0xc7,0xc0,;/数码管显示代码uchar code table1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc0,; /数码管显示代码void delay(uchar i)while(-i);/延时函数void delays(uchar i)while(i-);/延时函数void delayms(uint timer)uchar x,y;for(x=timer;x0;x-)for(y=110;y0;y-);ms级别的延时函数void

20、Ds18b20_Init(void)/*uint i;DQ=0;i=103;while(i0)i-;DQ=1;i=4;while(i0)i-; */uchar flag=0;/设置标志位DQ=1;/拉高数据总线delay(1);/延时一段时间,尽量短一点DQ=0;/拉低总线delays(100);/延时时间在480us到960us之间DQ=1;/拉高总线delay(15);/如果在15-60ms的时间内产生一个低电平,则初始化完成。flag=DQ;delay(100);/ds18b20初始化bit tempreadbit()/位读取子程序uint i;bit dat;DQ=0;i+;/ i+起

21、延时作用,1us后进入读时序DQ=1;i+;i+;/ i+起延时作用,在1us到15us内进行采样,这里延时大概8usdat=DQ;i=8;while(i0)i-;/至少需要60us才能完成读周期return(dat);/返回位数据 uchar Read_One_Byte()uchar i,j,dat;dat=0;for(i=1;i=8;i+)j=tempreadbit();dat=(j1);/循环8次读一个字节return(dat);void Write_One_Byte(uchar wdat)uint i;uchar j;bit testb;for(j=1;j1;/右移位if(testb)

22、/写1周期DQ=0;i+;i+;/延时一段时间,写周期开始DQ=1;i=8;while(i0)i-;/完成一次写周期至少要需要60us,这里大概是100usDQ=1;i+;i+;Else/写0周期DQ=0;i=8;while(i0)i-;DQ=1;i+;i+;/*uchar i=0;uchar time=0;for(i=8;i0;i-)DQ=1;_nop_();DQ=0;_nop_();DQ=wdat&0x01;delay(40);DQ=1;for(time=0;time=1;delay(10); */uint Get_temp()float tt;uchar low,high;Ds18b20

23、_Init();/调用初始化函数delayms(1);Write_One_Byte(0xcc);/跳过读ROM指令Write_One_Byte(0x44); /温度转换指令/delayms(2);Ds18b20_Init();/调用初始化函数delayms(1);Write_One_Byte(0xcc); /跳过读ROM指令Write_One_Byte(0xbe); /读温度指令/delayms(2);low=Read_One_Byte();/低字节存放在LOWhigh=Read_One_Byte();/高字节存放在hightemp=high;temp=8;temp=temp|low;/将温度

24、合并if(temp63488)temp=temp+1;tt=temp*(0.0625);if(tt=100)flag1=1; */temp=tt*10+0.5;tt=temp*(0.0625);temp=tt*10+0.5;/temp=temp+0.05;return(temp);void Display(uint value)/*uchar qian,bai,shi,ge;bai=value/100;shi=value%100/10;ge=value%10; */qian=temp/1000;/百位数 bai=temp%1000/100;/十位数 shi=temp%100/10;/个位数 g

25、e=temp%10;/小数位if(qian=0)/百位若为零,则不显示dula=1;P0=0xff;dula=0;P0=0xff;wela=1;P0=2;wela=0;delayms(5);P0=0xff;elsedula=1;P0=tableqian;dula=0;P0=0xff;wela=1;P0=2;wela=0;delayms(5);P0=0xff; if(flag1=0)/若温度我正数,则最高位不显示dula=1;P0=0xff;dula=0;P0=0xff;wela=1;P0=1;wela=0;delayms(5);P0=0xff;Else/若温度为负数,则最高位为负号dula=1

26、;P0=0xbf;dula=0;P0=0xff;wela=1;P0=1;wela=0;delayms(5);P0=0xff;/*dula=1;P0=tableqian;dula=0;P0=0xff;wela=1;P0=2;wela=0;delayms(5);P0=0xff; */dula=1;/显示百位P0=tablebai;dula=0;P0=0xff;wela=1;P0=4;wela=0;delayms(5);P0=0xff;dula=1; /显示十位P0=tableshi;dula=0;P0=0xff;wela=1;P0=8;wela=0;delayms(5);P0=0xff;dula=

27、1; /显示个位P0=tablege;dula=0;P0=0xff;wela=1;P0=0x10;wela=0;delayms(5);P0=0xff; void main()LED1=1;while(1)P1=0x39;tmp=Get_temp();Display(tmp);delayms(25);硬件:焊接电路时,由于没有仔细看锁存器的引脚标号,导致第一个锁存器损失。当都连接完以后进行实验的时候,单片机没有接地,通过老师的指导,一步一步的应排查法进行检测,最终发现了这个问题。进行硬件检测时,通常用到示波器,电压表等工具一步一步进行检测。软件:由于DS18B20对时序要求甚是很高,如果时序稍有

28、偏差就会导致DS18B20不能采取数据,从而不能实现有效的检测,应该优化时序,优化时序是应该与硬件的误差相结合,从而写出满足采取数据的时序。7设计心得通过本次试验,我深刻的理解到,凡事都不是一想就成的,还没有做实验之前,我认为很简单,当我做完试验以后,我发现自己有很多不足之处,尤其是在耐心方面,并且我还学会了很多引脚的链接方法,丰富了自己的知识,也加强了自己的动手能力。最最主要的还是,在老师一步一步的指导下,我知道了怎么去调试自己的硬件电路,怎么去检测自己的电路哪里出了问题,并且示波器和电压表真的是很有用的东西,检测电路的时候需要的就是耐心,我自己认为一步一步的排查方法虽然是很笨的但是是最有效的,检测自己能想到的每一个错误,成就感很强。总而言之,本次试验收获是很大的,虽然只有短短的一天,但是学到的东西是不能用时间来衡量的。以后我会继续努力。8参考文献【1】 江力主编 单片机原理与应用技术 清华大学出版社,2006【2】 黄仁欣主编 单片机原理与应用技术 清华大学出版社,2010【3】 赵茂泰著 电子测量仪器设计 华中科技大学出版社,2010

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号