数字温度计实验报告

时间:2024.4.25

 

 

 

   目:DS18B20数字温度计的设计

   名:

   号:

   业:电气工程及其自动化

指导老师:

设计时间:20##年  6 月



目   录

1.      引 言... 3

1.1.       设计意义... 3

1.2.       系统功能要求... 3

1.3.       本组成员所做的工作... 3

2.      方案设计... 3

3.     硬件设计... 4

3.1.       主控制器... 5

3.2.       显示电路... 5

3.3.       数字温度传感器DS18B20. 5

4.      软件设计... 8

4.1.       主程序... 9

4.2.       读出温度子程序... 9

4.3.       温度转换命令子程序... 10

4.4.       计算温度子程序... 10

4.5.       显示数据刷新子程序... 11

5.      系统调试... 12

6.      设计总结... 12

7.      附 录A;源程序... 13

8.      附 录B;作品实物图片... 17

9.      参考文献... 17

DS18B20数字温度计的设计

1.       引 言

1.1.       设计意义

单片机原理及应用是自动化专业的专业实践课程。本课程的任务是使学生通过“简易数字电压表的设计”的设计过程,综合所学课程,掌握目前自动化仪表的一般设计要求,工程设计方法,开发及设计工具的使用方法,通过这一设计实践过程,锻炼自己的动手能力和分析解决问题的能力;积累经验,培养一丝不苟的学习精神和对所学知识的综合应用能力。

1.2.       系统功能要求

 采用数字式温度传感器为检测器件,进行单点温度检测。用数码管直接显示温度值,微机系统作为数字温度计的控制系统。

1.基本要求:

(1)检测的温度范围:0℃~100℃,检测分辨率0.5℃。

(2)用4位数码管来显示温度值。

(3)超过警戒值(自己定义)要报警提示。

2.提高要求

(1)扩展温度范围。

(2)增加检测点的个数,实现多点温度检测。

1.3.       本组成员所做的工作

 XX :焊接实验总体电路板以及修改错误;

 XX  :实验线路布局以及撰写实验报告;

 XX  :调试与排除故障。

2.       方案设计

在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成相对应的温度,需要比较多的外部硬件支持。其缺点如下:

1.  硬件电路复杂;

2.  软件调试复杂;

3.  制作成本高。

本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125℃,最高分辨率可达0.0625℃。

DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本易使用的特点。

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

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

22222

3.  硬件设计

温度及电路设计原理图如图4.2所示,控制器使用单片机AT89C2051,温度传感器使用DS18B20,用四位共阴极LED数码管以动态扫描法实现温度显示。

1111

3.1.       主控制器

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

3.2.       显示电路

显示电路采用四位共阴极LED数码管,从P1口输出断码,列扫描用P3.0~P3.3口来实现,列驱动用9012三极管。

3.3.       数字温度传感器DS18B20

    由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。

1.   DS18B20性能特点

DS18B20的性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。

2.   DS18B20内部结构

DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位ROM结构图如图2所示。不同的器件地址序列号不同。 DS18B20的管脚排列如图1所示。

2006210232538588

图1 DS18B20引脚分布图

                            图2  64位ROM结构图

DS18B20高速暂存器共9个存储单元,如表所示:

  

以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。

3.   DS18B20控制方法

DS18B20有六条控制命令,如表所示:

4.   DS18B20的通信协议

DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节的低位在前,高位在后。

a)     复位和应答脉冲时隙

每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。在每一个时隙,总线只能传输一位数据。时序图见图3。

b)     写时隙

当主机将单总线DQ从逻辑高拉到逻辑低时,即启动一个写时隙,所有的写时隙必须在60~120us完成,且在每个循环之间至少需要1us的恢复时间。写0和写1时隙如图所示。在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。时序图见图4。

c)     读时隙

   DS18B20器件仅在主机发出读时隙时,才向主机传输数据。所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据。所有的读时隙至少需要60us,且在两次独立的读时隙之间,至少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us。在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。DS18B20发出的数据,在起始时隙之后保持有效时间为15us。因而主机在读时隙期间,必须释放总线。并且在时隙起始后的15us之内采样总线的状态。时序图见图4。

                                             复位和应答脉冲时隙

                                  读写时序

4.       软件设计

       系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示数据刷新子程序等等。

4.1.          主程序

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

      

6 主程序流程图

4.2.       读出温度子程序

       读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图7所示。

图7 读出温度子程序流程图

4.3.       温度转换命令子程序

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

4.4.       计算温度子程序

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

图8 温度转换命令子程序流程图

图9 计算温度子程序流程图

4.5.       显示数据刷新子程序

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

图10 显示数据刷新子程序流程图

5.       系统调试

系统的调试主要以程序调试为主。

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

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

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

6.       设计总结

本设计利用89S51芯片控制温度传感器DS18B52,再辅之以部分外围电路实现对环境温度的控制,性能稳定,精度较高,而且扩展性很强。由于DS18B20支持单总线协议,我们可以将多个DS18B52并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B52通信,占用较少的微处理器的端口就可以实现多点测温监控系统。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们学习的理论知识用到实际中,学习单片机更是如此。

7.       附 录A;源程序

/*********************************************************************/

//           

//                     DS18B20温度计C程序

//                     2005.2.28通过调试

/*********************************************************************/

//使用AT89C2051单片机,12MHZ晶振,用共阳LED数码管

//P1口输出段码,P3口扫描

//#pragma src(d:\aa.asm)

#include "reg51.h"

#include "intrins.h"     //_nop_();延时函数用

#define  Disdata    P1   //段码输出口

#define  discan     P3   //扫描口

#define uchar unsigned char

#define uint unsigned int

sbit  DQ=P3^7;        //温度输入口

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

uint   h;

//

//

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

uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//

uchar code dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};

/* 共阳LED段码表     "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9" "不亮" "-" */               

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++)         //四位LED扫描控制

     {

      Disdata=dis_7[display[k]];

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

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

     }

 }

//

//

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

ow_reset(void)

{

char presence=1;

while(presence)

{

while(presence)

  {

       DQ=1;_nop_();_nop_();

       DQ=0;    //

       delay(50); // 550us

       DQ=1;    //

       delay(6);  // 66us

       presence=DQ; // presence=0继续下一步

   }

delay(45);    //延时500us

presence = ~DQ;

}

DQ=1;

}

//

//

/**********18B20写命令函数*********/

//向 1-WIRE 总线上写一个字节

void write_byte(uchar val)

{

uchar i;

for (i=8; i>0; i--) //

{

DQ=1;_nop_();_nop_();

DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us

DQ = val&0x01;      //最低位移出

delay(6);           //66us

val=val/2;          //右移一位

}

DQ = 1;

delay(1); 

}

//

/*********18B20读1个字节函数********/

//从总线上读取一个字节

uchar read_byte(void)

{

uchar i;

uchar value = 0;

for (i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ = 0;             //

_nop_();_nop_();_nop_();_nop_();   //4us

DQ = 1;_nop_();_nop_();_nop_();_nop_();   //4us

if(DQ)value|=0x80;

delay(6);           //66us

}

DQ=1;

return(value);

}

//

/***********读出温度函数**********/

//

read_temp()

{

ow_reset();       //总线复位

write_byte(0xCC); // 发Skip ROM命令

write_byte(0xBE); //  发读命令

temp_data[0]=read_byte();  //温度低8位

temp_data[1]=read_byte();  //温度高8位

ow_reset();

write_byte(0xCC); // Skip ROM

write_byte(0x44); // 发转换命令

}

//

/***********温度数据处理函数**********/

work_temp()

{

uchar n=0;       //

if(temp_data[1]>127)

 {temp_data[1]=(256-temp_data[1]);temp_data[0]=(256-temp_data[0]);n=1;}//负温度求补码

display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];

display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//

display[3]=display[4]/100;

display[1]=display[4]%100;

display[2]=display[1]/10;

display[1]=display[1]%10;

if(!display[3]){display[3]=0x0A;if(!display[2]){display[2]=0x0A;}}//最高位为0时都不显示

if(n){display[3]=0x0B;}//负温度时最高位显示"-"

}

// 

//

/**************主函数****************/

main()

{

Disdata=0xff;    //初始化端口

discan=0xff;

for(h=0;h<4;h++){display[h]=8;}//开机显示8888

ow_reset();       // 开机先转换一次

write_byte(0xCC); // Skip ROM

write_byte(0x44); // 发转换命令

for(h=0;h<500;h++)

   {scan();}          //开机显示"8888"2秒

while(1)

 {

  read_temp();         //读出18B20温度数据

  work_temp();         //处理温度数据

  for(h=0;h<500;h++)

   {scan();}          //显示温度值2秒

  }

}

//

//*********************结束**************************//

8.       附 录B;作品实物图片

IMG_0617

9.       参考文献

[1].周向红/编著  51系列弹片机应用与实践教程,北京航空航天大学出版

社,2008.

[2].胡辉/编著  单片机原理与应用,中国水利水电出版社,2007.

[3].徐瑞华/编著  单片机原理与接口技术,人民邮电出版社,2008.

[4].潘永雄/编著  新编单片机原理与应用,西安电子科技大学出版社,2008

更多相关推荐:
数字温度计实验报告

数字温度计一设计任务书设计一个可测量一定温度范围的数字温度计并显示出当前温度二设计要求1基本要求1可测量温度范围000010202温度分辨率053测量相对误差24用数码管实时显示被测温度2提高要求1实现多个温度...

数字温度计实验报告-20xx年1月

DS18B20数字温度计的设计1引言11设计意义通过对DS18B20数字温度计的设计使学生通过简易数字电压表的设计的设计过程综合所学课程掌握目前自动化仪表的一般设计要求工程设计方法开发及设计工具的使用方法通过这...

实验十二 数字温度计设计

电子科技大学中山学院学生实验报告

数字温度计设计实验报告

数字电子综合性实验报告题目数字温度计学院电气工程与自动化班级姓名学号指导教师一实验任务温度计是工农业生产及科学研究中最常用的测量仪表本课题要求用中小规模集成芯片设计并制作一数字式温度计即用数字显示被测温度具体要...

数字温度计设计报告

数字温度计设计报告课程名称院别专业班级姓名指导教师时间20xx电子课程设计武警工程学院指挥自动化二队一区队王凯03田腾浩邹涛年1月12日23主要内容设计一个数字温度计测量范围0100C温度的实时LED数字显示测...

DS18B20数字温度计设计实验报告

单片机原理及应用课程设计报告书题目:DS18B20数字温度计姓名:学号:指导老师:##老师设计时间:20##年4月9日4月22日电子与信息工程学院目录1.引言....11.1.设计意义...11.2.系统功能要…

数字温度计的设计与制作实验报告

重庆邮电大学通信与信息工程学院班级小组成员指导老师数字温度计的设计与制作实验报告设计要求1,数字温度计设计与制作:利用之前绘制的C51学习板掌握的SCH和PCB图知识,绘制一个基于STC89C51的单片机系统,…

温度计实验报告1

河南理工大学单片机课程设计报告姓名:学号:专业:电气工程及其自动化指导老师:时间:20XX年6月24日摘要:在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活,工作,科研,…

电子温度计的设计与实现实验报告

实验六电子温度计的设计与实现摘要设计一个用铂电阻作为传感器的电子温度计用非平衡电桥测量铂电阻的温度系数并对温度计进行标定关键词电桥铂电阻电子温度计一引言传感器在现实生活中的应用越来越广泛常用的有力敏传感器气敏传...

数字温度计开题报告

延安大学本科毕业论文设计选题表1延安大学本科毕业论文设计开题报告2345

基于单片机的数字温度计设计开题报告

大学综合性设计实验开题报告学生专业同组人指导老师20xx年4月1国内外现状及研究意义随着科技的不断发展现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长而如何准确而又迅速的获得这些参数就需要受制于现...

DS18B20数字温度计设计实验报告.待修改1

单片机原理及应用课程设计报告书题目:DS18B20数字温度计姓名:学号:指导老师:设计时间:山西工程技术学院目录1.引言.............................................…

数字温度计实验报告(30篇)