DS18B20温度传感器设计要点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能化仪器及原理应用课程设计

设计题目: DS18B20数字温度计的设计专业班级: 10自动化1 班

姓名:

组员:

指导老师:

日期:2012-11-26

目录

一、摘要 (2)

二、方案论证 (2)

三、电路设计 (2)

1、设备整机结构及硬件电路框图 (2)

2、单片机的选择 (3)

3、温度显示电路 (3)

4、温度传感器 (4)

5、软件设计 (6)

6、系统所运用的功能介绍: (8)

四、系统的调试及性能分析: (8)

附件:DS18B20温度计C程序 (9)

一、摘要

本设计的主要内容是应用单片机和温度传感器设计一个数字温度表,DS18B20是一种可组网的高精度数字温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。本设计基于数字温度传感器DS18B20,以AT89C51片机为核心设计此测试系统,具有结构简单、测温精度高、稳定可靠的优点。可实现温度的实时检测和显示,本文给出了系统的硬件电路详细设计和软件设计方法,经过调试和实验验证,实现了预期的全部功能。

二、方案论证

方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。

方案设计框图如下:

方案二:考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

三、电路设计

1、设备整机结构及硬件电路框图

根据设计要求与设计思路,设计硬件电路框图如下图所示,4位数码管显示器系统中AT89C51成对DS18B20初始化、温度采集、温度转换、温度数码显示。本装置详细组成部分如下:

a.主控模块:AT89C51片机;

b.传感器电路:DS18B20温度传感器;

按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。

数字温度计总体电路结构框图所示:

2、单片机的选择

单片机AT89C51有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

AT89C51的管脚结构图:

四位共阳极数码管,能够显示小数和负温度。零下时,第一个数码管显示负号。当温度超过99.9时,四个数码管全部亮。列扫描用P2.0—P2.3来实现,列

驱用NOT。电路仿真图如下:

4、温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。电路图如

下:

系统总电路图如下:

5、软件设计

主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等。

主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1S进行一次。主流程图如下:

读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。在读

出时须进行CRC校验,校验有错时不进行温度数据的改写。流程图如下:

温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。流程图如下:

计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。

显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。

6、系统所运用的功能介绍:

DS18B20与单片机之间采用串行通信的方式进行数据读写

四、系统的调试及性能分析:

硬件调试比较简单,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。

软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试

由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。本程序采用单片机汇编或C语言编写用Keil C51编译器编程调试。

软件调试到能显示温度值,并且在有温度变化时显示温度能改变,就基本完成。性能测试可用制作的温度机和已有的成品温度计同时进行测量比较。由于DS18B20的精度很高,所以误差指标可以限制在0.5℃以内。另外,-55~+125℃的测温范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。

附件:DS18B20温度计C程序

//使用AT89C2051单片机,用共阳四位数码管

//P0口输出段码,P2口扫描

#include

#include //_nop_();延时函数用

#define Disdata P0 //段码输出口

#define discan P2 //扫描口

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P1^4; //温度输入口

sbit DIN=P0^7; //LED小数点控制

uint h;

//*******温度小数部分用查表法**********//

uchar code

ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0

8,0x09,0x09};//共阳四位数码管

uchar code

dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf}; uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; // 列扫描控制字

uchar data temp_data[2]={0x00,0x00}; // 读出温度暂放

uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个

运算暂存用

/***********11微秒延时函数**********/

void delay(uint t)

{

for(;t>0;t--);

}

/***********显示扫描函数**********/

scan()

{

char k;

for(k=0;k<4;k++) //四位数码管扫描控制

{

Disdata=dis_7[display[k]];

if(k==1){DIN=0;}

discan=scan_con[k];delay(5);discan=0xff;

}

}

/***********18B20复位函数**********/

ow_reset(void)

{

相关文档
最新文档