您的当前位置:首页DS18B20数字温度计设计实验报告(1)

DS18B20数字温度计设计实验报告(1)

2020-03-12 来源:飒榕旅游知识分享网


单片机原理及应用

课程设计报告书

题 目: DS18B20数字温度计 姓 名: 李成 学 号: 133010220 指导老师: 周灵彬 设计时间: 2015年1月

目 录

1. 引 言 ............................................... 3 1.1。设

3

1。2.系

3

2。 方案设计 ............................................ 4 3。 硬件设计 ............................................. 4 4. 软件设计 ............................................. 8 5。系 10

6. 设计总结 ............................................. 11 7. 附 录 ................................................ 12 8。参 15

统调试

考文献

DS18B20数字温度计设计

1. 引 言

1.1. 设计意义

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

● 硬件电路复杂; ● 软件调试复杂; ● 制作成本高。

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

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

设计出的DS18B20数字温度计测温范围在0~125℃,误差在±1℃以内,采用LED数码管直接读显示。

2. 方案设计

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

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

DS18B20 AT89C51 主 控 制 器 显示电路 扫描驱动

图4.1

3. 硬件设计

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

主控制器 单片机AT89C51

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

如右图所示:

VCC:供电电压。 GND:接地.

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位.在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1\"时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故.P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1\"时,它利用内部上拉优势,当

对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1\"后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故.

P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3。1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3。3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3。5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3。7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号.

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间.

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节.在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效.

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H—FFFFH),不管是否有内部程序存储器.注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器.在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入. XTAL2:来自反向振荡器的输出。 振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

DS18B20的性能特点:

1、适应电压范围更宽,电压范围:3。0~5。5V,在寄生电源方式下可由数据线供电.

2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯.

3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。

4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内.

5、温范围-55℃~+125℃,在-10~+85℃时精度为±0。5℃。

6、可编程 的分辨率为9~12位,对应的可分辨温度分别为0。5℃、0。25℃、0。125℃和0.0625℃,可实现高精度测温。 7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

8、测量结果直接输出数字温度信号,以”一线总线\"串行传送给CPU,同时可传送CRC校验码,具有极强

的抗干扰纠错能力.

9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作.DS18B20与单片机的接口电路(引脚图见右图)

DS18B20可以采用电源供电方式,此时DS18B20的第1 脚接地,第2脚作为信号线,第3脚接电源。

4. 软件设计

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

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

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

初始化 调用显示子程序 1s到? 初次上电 读出温度值 温度计酸处理 显示数据刷新

发温度转换开始命令

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

发DS18B20复位指令 CRC校验正确? 发跳过ROM指令 移入温度暂存器 发读取温度指令 结束 读取操作,CRC校验 9字节完? 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令.当采用12位分辨率时,转换时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成.温度转换命令子程序流程图如下图所示.

发DS18B20复位命令

发跳过ROM命令 发温度转换开始命令 结束

计算温度子程序 计算温度子程序将RAM中读取值进行BCD码的转换运算,

并进行温度值正负的判定。计算温度子程序流程图如下左图所示。

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

温度数据移入显示寄存器 开始 计算小数位温 度BCD值 十位数0? 温度零下? 计算整数位温 度BCD值 百位数0? 置+温 度值取补码置 标志 十位数显示符百位数显示数‘一’标志 结束 号百位数不显据(不显示符 号) 结束

5. 系统调试

系统的调试以程序调试为主.

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

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

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

软件调试到能显示温度值,并且在有温度变化时显示温度能改变,救基本完成。

性能测试可用制作的温度机和已有的成品温度计同时进行测量比较。由于

DS18B20的精度很高,所以误差指标可以限制在0.5℃以内。

另外,—55~+125℃的测温范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。

DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意以下问题;

1、DS18B20工作时电流高大1。5mA,总线上挂接点数较多且同时进行转换时要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MOSFET供电。

2、连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配等问题。

3、在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号。一旦某个DS18B20接触不好或断线,当程序读DS18B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时要给予一定的重视。

6. 设计总结

历时2个星期的单片机课程设计已经结束了,在这两个星期的时间里,我们在老师的指导下完成了基于DS18B20的数字温度计的设计和制作。在进行实验的过程中,我们了解并熟悉DS18B20、AT89C51的工作原理和性能。并且通过温度计的制作,我们将电子技能实训课堂上学到的知识进行运用,并在实际操作中发现问题,解决问题,更加增加对知识的认识和理解。

在课程设计的过程中,也遇到了一些问题。比如最开始根据课本上的电路图进行合理的设计布局和布线。有些同学的布局不合理,导致焊接的过程中任务相当繁重,并且不美观。在之后的烧程序调试的时候,出现问题之后,没有合理布线的同学在查找问题的过程中相当棘手。

在焊接过程中,出现最多的就是虚焊问题。对于这个问题,在焊接的过程中,我尽量依照书中的指导,尽量将焊点焊成水滴状,最后接电后再根据数码管的显示情况进行逐个排查.

总之,通过自己在实验室动手制作数字温度计,不仅将课本的知识与实践相

结合,而且在实践中更加深入了解书中原本抽象的知识。这也是整个课程设计中最有收获的地方.

7. 附 录

源程序代码

//#include<1820.h〉 #include

#define uchar unsigned char #define uint unsigned int //bit flag;

//#define wei 0xa0; //#define duan 0x90; uchar data diadata[5]; //uint tvalue uchar tflag; sbit DQ=P3^7; bit f=0;

uchar tempint,tempdp;

uchar TempTab[4];//week_value[2];

uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf}; void delay() { uchar i,j;

for(i=0;i<5;i++) for(j=0;j〈250;j++) { _nop_(); _nop_(); } }

void delay_18B20(uint i) {

while(i--); }

void ds1820rst() { unsigned char x=0; DQ=1;

delay_18B20(4); DQ=0;

delay_18B20(100); DQ=1;

delay_18B20(40); }

uchar ds1820rd() { unsigned char i=0; unsigned char dat=0; for(i=8;i>0;i——) { DQ=0; dat〉>=1; DQ=1; if(DQ)

dat|=0x80;

delay_18B20(10); }

return(dat); }

void ds1820wr(uchar wdata) {unsigned char i=0; for(i=8;i〉0;i-—) { DQ=0;

DQ=wdata&0x01; delay_18B20(10); DQ=1;

wdata>〉=1; } }

void read_temp()

{uchar temph,templ,k; f=0;

ds1820rst(); ds1820wr(0xcc); ds1820wr(0x44); ds1820rst(); ds1820wr(0xcc); ds1820wr(0xbe); templ=ds1820rd();

temph=ds1820rd();

if((temph&0xf8)!=0x00) {

f=1;

temph=~temph; templ=~templ; k=templ+1; templ=k; if(k>255) {

temph++; } }

tempdp=(templ&0x0f)*10/16;+ templ>>=4; temph<〈=4;

tempint=temph|templ; }

void distemp() { uchar i,j; if(f==0)

{TempTab[0]=tempint/100; TempTab[1]=(tempint/10)%10; TempTab[2]=tempint%10; TempTab[3]=tempdp; }

for(i=0;i〈4;i++) { P2=_cror_(0xf7,i); j=TempTab[i];

if(i==2)P1=discode[j]&0x7f; else P1=discode[j]; delay(); P2=0xff; } }

void main() {

while(1) {

_nop_(); _nop_();

read_temp(); _nop_(); _nop_();

distemp(); } }

8. 参考文献

[1] 楼然苗 ,李光飞.单片机课程设计指导。北京航天航空大学出版社,2007。7。 [2] 陈杰 ,黄鸿.传感器与检测技术.高等教育出版社,2002。8. [3] 康华光.电子技术基础(模拟部分).高等教育出版社,2006。1。 [4] 李忠明。微机原理与接口技术。华中科技大学出版社,2011。6. [5] 张毅刚.单片机原理及应用。高等教育出版社,2010。5。1

因篇幅问题不能全部显示,请点此查看更多更全内容