单片机课程设计之基于DS18B20的多点温度测量系统的设计.docx
- 文档编号:2990797
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:11
- 大小:257.35KB
单片机课程设计之基于DS18B20的多点温度测量系统的设计.docx
《单片机课程设计之基于DS18B20的多点温度测量系统的设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计之基于DS18B20的多点温度测量系统的设计.docx(11页珍藏版)》请在冰豆网上搜索。
单片机课程设计之基于DS18B20的多点温度测量系统的设计
单片机使用系统设计
课题:
基于DS18B20的多点温度测量系统的设计
姓名:
班级:
学号:
指导老师:
日期:
引言
在粮库测温系统、冷库测温系统、智能化建筑控制系统、中央空调系统等多种系统中都需要多点温度测量系统。
因此,多点温度测量技术实现尤为重要。
美国Dallas公司推出的数字温度传感器DSl8B20,电源供电范围在3.0~5.5V;温度测量范围为-55~+125℃;具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成和微处理器的通信;在-10~+85℃温度范围内具有±0.5℃精度;用户可编程设定9~12位的分辨率。
以上特性使得DSl8B20非常适用于构建高精度、多点温度测量系统。
DS18B20简介
DSl8B20是美国Dallas半导体公司推出的一种智能数字温度传感器。
和传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过编程实现9~12位的数字值读数方式;可以分别在93.75ms和750ms内完成9位和12位的数字量;从DS18B20读出信息或写入DS18B20信息仅需要1根口线(单线接口);温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。
使用DS18B20可使系统结构更趋简单,可靠性更高。
1系统硬件设计
由DS18B20和Atmel公司推出的单片机AT89C51以及相关外围电路组成的高精度、多点温度测量系统的结构框图如图1所示。
系统采用8片DS18B20构成小型温度传感器网络[3],通过并行连接方式连接至单片机的通用I/O端口。
单片机获得温度信息后,通过特定的算法,将处理后的温度信息通过LED显示出来,同时通过串行口送上位机处理。
DS18B20内部均有一个独立的64位序列号,单片机通过序列号可以对一条总线上的多支DS18B20进行控制,读取它们的温度。
但是,要完成这个操作,软件设计比较复杂,同时存在一个缺点——速度太慢。
无法适用于一些实时性要求高的测温场合。
所以本次设计采取一种利用单片机的并口,同步快速读取8支DS18B20的方法。
2系统软件设计
2.1并行同步快速读取8支DS18B20的方法
对于一支DS18B20,我们要输出或输入各类数据时,可以采用位寻址,比如:
sbitDQ=P3^3;DQ=0;DQ=1;
而对于8支DS18B20,如果还采用位寻址的方法,采用单总线,通过查询序列号依次读取,程序就非常复杂,而且速度会大大减慢,所以将位寻址扩展为字节寻址,比如:
#defineDQP3;DQ=0x00;DQ=0xff;
即可一次输出或输入8个位数据,从而达到同步读取的目的。
2.2系统的温度合成处理
采用上述方法一次读取8支DS18B20的时间不超过1秒,但读取的数据在RAM中并不顺序排列的。
必须用软件合成处理,才能得到所需要的温度值。
如表-1所示,纵向排列的是存放每次读取数据的Buf,而横向才是我们需要的温度值,此时设计一个将纵向数据转为横向温度的程序,连续执行两次,就可以将DS18B20的高和低字节全部合成标准的温度数据。
2.3系统软件流程图
主程序执行流程如图2所示,主程序先对各DS18B20进行初始化,然后重复调用写命令和读数据模块,最后将数据处理后送入LED显示。
2.4系统电路图
3系统仿真
Proteus软件是Labcenter公司的一款电路设计和仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制和仿真。
Proteus的软件仿真基于VSM技术,它和其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。
通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验环境。
本设计的核心部分为八点温度数据的快速准确读取,完成电路设计和软件编程后,将程序在KEIL下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现。
仿真中的一个画面如下面图3中的效果所示,此时采集的是第5通路的测量温度。
4系统运行和数据分析
根据系统软件和硬件设计方案搭建实际系统电路,依次采集八路温度测量数据,并且在LED数码管上显示所测温度,同时和现场温度计测量值进行比较,系统运行结果如下,见表-2:
表-2传感器和温度计数据对照
测量结果数据和温度计直接测量吻合,符合仿真结果,本系统的测量范围为0-99℃,DS18B20数字值读取位数为8位,精确到1℃,满足日常测量使用。
另外可以通过改变DS18B20数字值读取位数提高精度,也可以根据实际使用要求扩大量程。
在系统基础上可以加入开关控制测量通路选择,并实现超过测量范围蜂鸣器报警。
5结论
该温度测量系统结构简单、程序设计方便,基于仿真系统构建的实际电路运行良好,8支DS18B20的读取时间和1支DS18B20的读取时间基本相等,测温迅速准确。
本设计采用Proteus仿真的好处在于可以迅速观察到设计效果,同时可以通过改变元器件参数使整个电路性能达到最优化。
6参考文献
1、唐俊翟.单片机原理和使用[M].北京:
冶金工业出版社,252-267
2、胡伟.单片机C程序设计及使用实例[M].北京:
人民邮电出版社,1-487
3、赵娜,赵刚.基于51单片机的温度测量系统[J].微计算机信息,2007.
4、于永学,葛建.1-Wire总线数字温度传感器DS1-8B20及使用[J].电子产品世界,2003
(2):
80-82.
5、江世明,刘先任.基于DS18B20的智能温度测量装置[J].邵阳学院学报,2004.
6、聂毅.单片机定时器中断时间误差的分析及补偿[J] 微计算机信息 2002
7、谭浩强.C语言程序设计(第二版) 北京:
清华大学出版社 1999
附录:
程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;//ds18b20和单片机连接口
sbitRS=P3^0;
sbitRW=P3^1;
sbitEN=P3^2;
unsignedcharcodestr1[]={"temperature:
"};
unsignedcharcodestr2[]={""};
uchardatadisdata[5];
uinttvalue;//温度值
uchartflag;//温度正负标志
/*************************lcd1602程序**************************/
voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)
{unsignedinti,j;
for(i=0;i for(j=0;j<100;j++); } voidwr_com(unsignedcharcom)//写指令// {delay1ms (1); RS=0; RW=0; EN=0; P2=com; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidwr_dat(unsignedchardat)//写数据// {delay1ms (1);; RS=1; RW=0; EN=0; P2=dat; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidlcd_init()//初始化设置// {delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } voiddisplay(unsignedchar*p)//显示// { while(*p! ='\0') { wr_dat(*p); p++; delay1ms (1); } } init_play()//初始化显示 {lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } /******************************ds1820程序***************************************/ voiddelay_18B20(unsignedinti)//延时1微秒 { while(i--); } voidds1820rst()/*ds1820复位*/ {unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(4);//延时 DQ=0;//DQ拉低 delay_18B20(100);//精确延时大于480us DQ=1;//拉高 delay_18B20(40); } uchards1820rd()/*读数据*/ {unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) {DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } voidds1820wr(ucharwdata)/*写数据*/ {unsignedchari=0; for(i=8;i>0;i--) {DQ=0; DQ=wdata&0x01; delay_18B20(10); DQ=1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ {uchara,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); } /************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 基于 DS18B20 多点 温度 测量 系统 设计