基于ds18b20的多点测温教材.docx

上传人:b****7 文档编号:15668897 上传时间:2023-07-06 格式:DOCX 页数:23 大小:596.55KB
下载 相关 举报
基于ds18b20的多点测温教材.docx_第1页
第1页 / 共23页
基于ds18b20的多点测温教材.docx_第2页
第2页 / 共23页
基于ds18b20的多点测温教材.docx_第3页
第3页 / 共23页
基于ds18b20的多点测温教材.docx_第4页
第4页 / 共23页
基于ds18b20的多点测温教材.docx_第5页
第5页 / 共23页
基于ds18b20的多点测温教材.docx_第6页
第6页 / 共23页
基于ds18b20的多点测温教材.docx_第7页
第7页 / 共23页
基于ds18b20的多点测温教材.docx_第8页
第8页 / 共23页
基于ds18b20的多点测温教材.docx_第9页
第9页 / 共23页
基于ds18b20的多点测温教材.docx_第10页
第10页 / 共23页
基于ds18b20的多点测温教材.docx_第11页
第11页 / 共23页
基于ds18b20的多点测温教材.docx_第12页
第12页 / 共23页
基于ds18b20的多点测温教材.docx_第13页
第13页 / 共23页
基于ds18b20的多点测温教材.docx_第14页
第14页 / 共23页
基于ds18b20的多点测温教材.docx_第15页
第15页 / 共23页
基于ds18b20的多点测温教材.docx_第16页
第16页 / 共23页
基于ds18b20的多点测温教材.docx_第17页
第17页 / 共23页
基于ds18b20的多点测温教材.docx_第18页
第18页 / 共23页
基于ds18b20的多点测温教材.docx_第19页
第19页 / 共23页
基于ds18b20的多点测温教材.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于ds18b20的多点测温教材.docx

《基于ds18b20的多点测温教材.docx》由会员分享,可在线阅读,更多相关《基于ds18b20的多点测温教材.docx(23页珍藏版)》请在冰点文库上搜索。

基于ds18b20的多点测温教材.docx

基于ds18b20的多点测温教材

 

基于DS18B20的单总线

多点测温系统

 

 

摘要:

本文主要介绍了一个基于DS18B20单片机的测温系统,详细描述了传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感DS18B20的数据采集过程。

对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。

DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。

随着社会的进步和工业技术的发展,人们越来越重视温度因素,许多产品对温度范围要求严格,而目前市场上普遍存在的温度检测仪器大都是单点测量,同时有温度传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时作出决定。

在这样的形式下,开发一种能够同时测量多点,并且实时性高、精度高,能够综合处理多点温度信息的测量系统就很有必要

关键词:

DS18B20,AT89c51,多点测温

一、任务分工:

表1—1任务分工表

二、功能描述:

1.使用前程序读取序列号,一次性写入代码中。

此系统写入了三个传感器的序列号。

2.上电,显示“welcome”开机画面。

3.按键1功能选择键,可以选择显示相应的节点,显示所有节点温度,显示平均温度。

4.按键2确认键,按键1选择相应的界面后,按确认键,,同时对传感器进行数据采集,并显示温度。

三、方案选择:

一)总线方案:

方案一:

单端口单总线的多点测温

典型应用如图所示,所有DS18B20并联后其数据线连接到处理器的一个端口线上,显著特点是只占用单片机的一个端口。

每个DS18B20内部均有一个唯一的64位序列号,在工作之前先将主系统与DS18B20逐个连接,分别读出序列号并存储在单片机中,根据序列号就可以对同一总线上多个DS18B20进行识别控制,分别读取其温度。

图3—1DS18B20单总线连接图

其主要设计思想是:

当单片机需要对众多DS18B20中某一个进行操作,首先发出匹配命令,接着单片机把存储的64位序列号发送到总线,只有此序列号的DS18B20才接收相应的命令,之后的操作就是针对该DS18B20的。

设计优缺点:

这种测温连接方法是电路连接简单,硬件开销小。

缺点是该方案是由多个DS18B20并联连接在一起的,他们之间会有一定的相互影响。

最重要的是,在这种方案中,多个器件串接在总线上,对所有器件的查询操作,需要一个一个分别识别,完成一次查询需要花费大量时间,降低了系统效率,对一些实时性要求较高的设计不大适用。

方案二:

多端口并行法

各个DS18B20数据线分别连接到不同的端口,工作时,单片机同时对各个DS18B20进行统一的并行操作,对所有DS18B20而言,其命令的接收与数据的传送是同步进行的,所花费时间等同于操作单个DS18B20所用时间。

图3—2DS18B20多端口连接图

这种方案最大好处是节省时间,能满足对实时性要求较高的温度测量系统设计需求,同时由于这种方法不涉及序列号问题节省了读取与匹配的操作过程。

而其缺点也显而易见,占用的端口数较多,每个测试点需要一个连接线,硬件资源开销大

方案二:

I²C总线

两线式串行总线,用于连接微控制器及其外围设备。

是微电子通信控制领域广泛采用的一种总线标准。

它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。

通过串行数据(SDA)线和串行时钟(SCL)线在连接到总线的器件间传递信息。

每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。

而DS18B20只有一根数据线,I²C总线需要一根数据线与一根地址线,无法实现。

综上所述:

为了更好的节省硬件资源,达到多点测控,我们选择方案二。

二)液晶显示方案:

方案一:

LCD1602

图3—3LCD引脚图

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。

方案二:

LCD12864

带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。

两者各自优点:

1602是字符型液晶,显示字母和数字比较方便,控制简单,成本较低。

1602采用并口传输,速度比12864串口快。

12864顾名思义像素是128*64,能显示8*4个汉字,因型号不同,有的带汉字库,有的不带,能显示图像效果,功能比1602强大。

综上所述:

1602是字符型液晶,显示字母和数字比较方便,控制简单,成本较低。

1602采用并口传输,速度比12864串口快。

四、硬件设计:

一)系统框图:

图4—1多点测温系统框图

温度传感器DS18B20检测到环境温度进行转换保存高速缓存RAM中,主控器STC89C51在发出命令后在读取数据进行处理,按键扫描再输出数据到LCD1602控制其显示的具体温度值。

图4—2系统仿真图:

二)各部分硬件介绍:

1.STC89C51单片机

图4—3STCSTC89C51单片机引脚图

①电源引脚

Vcc(40脚):

典型值+5V。

Vss(20脚):

接低电平。

②外部晶振

X1、X2分别与晶体两端相连接。

当采用外部时钟信号时,X2接振荡信号,X1接地。

③输入输出口引脚:

P0口:

I/O双向口。

作输入口时,应先软件置“1”。

P1口:

I/O双向口。

作输入口时,应先软件置“1”。

P2口:

I/O双向口。

作输入口时,应先软件置“1”。

P3口:

I/O双向口。

作输入口时,应先软件置“1”。

④控制引脚:

RST/Vpd、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。

RST/Vpd(9脚):

复位信号输入端(高电平有效)。

第二功能:

加+5V备用电源,可以实现掉电保护RAM信息不丢失。

ALE/-PROG(30脚):

地址锁存信号输出端。

第二功能:

编程脉冲输入。

-PSEN(29脚):

外部程序存储器读选通信号。

-EA/Vpp(31脚):

外部程序存储器使能端。

第二功能:

编程电压输入端(+21V)。

2.温度传感器DS18B20

图4—3DS18B20引脚图

温度传感器电路直接采用DS18B20设计,相比于模拟温度传感器,这种设计方法可以节省电路连接。

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

DS18B20的性能特点如下:

1)独特的单线接口仅需一个端口引脚进行通讯

2)每个器件有唯一的64位的序列号存储在内部存储器中

3)简单的多点分布式测温应用

4)无需外部器件

5)可通过数据线供电。

供电范围为3.0V到5.5V

6)测温范围为-55~+125℃(-67~+257℉)

7)在-10~+85℃范围内精确度为±0.5℃

8)温度计分辨率可以被使用者选择为9~12位

9)最多在750ms内将温度转换为12位数字

10)用户可定义的非易失性温度报警设置

11)应用包括温度控制、工业系统、消费品、温度计或任何热感测系统

64位ROM的位结构如图3所示。

开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

非易失性温度报警器触发器TH和TL,可通过软件写入户报警上下限。

图4—464位ROM结构图

DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。

该字节各位的定义热图5所示。

低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换得精度位数,即用来设置分辨率,定义方法见表1。

图4—6配置寄存器

高速暂存RAM的第6,7,8字节保存未用,表现为逻辑1。

第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。

单片机可以通过单线接口读出数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。

主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到ROM数据是否正确。

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

另一种是寄生电源供电方式,如图8所示.单片机端口接单线总线,为为保证有效DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

图4—7DS18B20采用寄生电源的电路图

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD和GND端均接地。

由于单线制只有一根线,因此发送接口必须是三态的。

3.显示器LCD1602

图4—8LCD尺寸图

LCD1602采用标准的16脚接口,其中:

第1脚:

VSS为地电源

第2脚:

VDD接5V正电源

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15~16脚:

空脚

三)仿真电路:

1)开机仿真图:

图4—9开机仿真图

2)选择界面仿真图:

图4—10.1选择界面仿真图

2)温度显示界面仿真图:

图4—10.1温度显示界面仿真图

五、数据处理:

一)程序变量说明:

1.序列号存储数组:

SN[3][8]

将实现读取的序列号保存在此变量中,方便后续程序的读取调用。

定义方式为:

ucharSN[3][8]=

{

0x28,0x1a,0x10,0xaa,0x05,0x00,0x00,0x71,

0x28,0x9a,0x51,0xaa,0x05,0x00,0x00,0xbf,

0x28,0xb1,0x4d,0xaa,0x05,0x00,0x00,0xac,

};

2.字符串存取数组:

dis[]、table1[]、table2[]、table3[]、table4[]、choose1[]、choose2[]、choose3[]、chooseAl[]、chooseAv[]、enter[]

将需要显示的字符窜分别保存在响应的数组里,进行模块化封装,方便在主程序与子程序之间调用显示,例如:

ucharcodedis[]="Welcome!

";

ucharcodechooseAv[]="DISPLAYAVERAGE";

3.键盘返回值num

每个按键对应一个返回值,本系统为了体现简介节约的理念,只设置了两个按键,按键1返回值1,按键2返回值2。

返回值储存在num变量中,有利于按键符合功能的实现。

4.功能变量k

每一个k值对应一个功能,通过按键来判断k值的不同

num值

k值

功能

0

欢迎界面

1

1—6

对应节点选择界面

5

平均温度选择界面

2

>10

读取并转换温度

11—16

对应节点节点温度显示界面

15

平均温度显示界面

二)程序数据处理:

1.温度数据处理

DS18B20初始默认值11位,最后一位位符号位,正温度为正,负温度为负,精度为0.0625,实际温度:

tvalue[j]=d*0.625(为实际温度的10倍)

tvalue[j]—储存j节点的的实际温度

d—采集的前10位温度

符号位判断:

tvalue[j]<0x07fftflag[j]=0

tvalue[j]>=0x07fftflag[j]=1

tflag[j]—储存j节点的温度符号

2.显示数据处理:

disdata[0]=flagdat—显示符号位

disdata[1]=tvalue[0]%1000/100+0x30—显示十位

disdata[2]=tvalue[0]%100/10+0x30—显示个位

disdata[3]=0x2e—显示小数点

disdata[4]=tvalue[0]%10+0x30—显示小数一位

三)人机界面设计:

初始界面,无任何操作,如图5—1:

图5—1欢迎界面

功能选择界面(按键1选择),如图5—2、图5—3:

图5—2功能界面,显示所有温度

图5—2功能界面,显示平均温度

温度显示界面(按键2选择),如图5—4、图5—5:

图5—4温度显示界面,显示第二节点温度

图5—5温度显示界面,显示所有节点温度

六、软件设计:

1.语言选择:

程序选择C语言编写,语言的结构性更强,移植性更强。

2.资源配置:

端口

资源

P1

LCD数据端

P2.0~P2.2

LCD控制端

P2.5

DS18B20数据端

P3.0

功能按键

P3.1

显示按键

3.程序流程图:

A.主程序:

 

 

将各部分功能函数封装,写在子程序中,主程序只负责调用,大大减少了主程序的冗杂度,增加代码的可读性。

开始上电,主程序运行,初始化LCD,并且显示开机画面。

进入while循环,不断扫描按键,如果按键按下,会返回相应的num值。

判断num值,对功能变量k操作,使k的值在1~5,11~15循环显示。

再判断相应的k值,显示相应的功能。

并且循环扫面。

B.LCD初始化流程图:

 

 

LCD设置函数,两行显示,输入后光标右移,屏幕不移动,光标不显示。

C.DS18B20数据处理流程图:

 

 

  DS18B20数据处理,通过for循环,依次发送一次序列号,匹配对应节点温度传感器,采集数据温度,转换成实际温度值,保存在数组中。

不断循环,直至所有序列号发送完毕。

4.主要代码:

a)主程序代码:

voidmain()

{

LCD_init();

LED1=0;

Show();

while

(1)

{

keyscan();

if(num==1)

{

LCD_write_command(0x01);

if(k>10)k=k-10;

k++;

if(k>5)k=1;

num=0;

}

if(num==2)

{

LCD_write_command(0x01);

if(k<10)k=k+10;

if(k>15)k=10;

num=0;

}

if(k>0&&k<10)

{

Ent();

}

if(k==1)

{

ShowC1();

}

if(k==2)

{

ShowC2();

}

if(k==3)

{

ShowC3();

}

if(k==4)

{

ShowAl();

}

if(k==5)

{

ShowAv();

}

if(k>10)

{

change_temp();

read_temp();

}

if(k==11)

{

ShowChar1();

display_DS1();

}

if(k==12)

{

ShowChar2();

display_DS2();

}

if(k==13)

{

ShowChar3();

display_DS3();

}

if(k==14)

{

ShowCharAl();

display_DS1();

delay(40);

display_DS2();

delay(40);

display_DS3();

}

if(k==15)

{

ShowCharA();

display_DSA();

}

}

}

b)LCD初始化代码:

voidLCD_init(void)

{

LCD_write_command(0x08);

LCD_write_command(0x38);

LCD_write_command(0x0c);

LCD_write_command(0x06);

LCD_write_command(0x01);

delay_n40us(100);

}

c)按键扫描代码:

voidkeyscan()

{

if(key1==0)

{

delay(10);

if(key1==0)

{

num=1;

while(!

key1);

}

}

if(key2==0)

{

delay(10);

if(key2==0)

{

num=2;

while(!

key2);

}

}

}

5.程序占有资源:

片内rom:

56B片外rom:

0Bram:

2970B

七、测试结果与数据分析:

T1

T2

T3

平均温度

温度计

误差

实验室

26.8

26.7

26.8

26.8

26.4

0.4

电子楼前

30.5

30.5

30.5

30.5

30.6

-0.1

致远楼

29.3

29.3

29.5

29.4

29.4

0

本部篮球场

29.5

29.5

29.5

2.95

29.2

0.3

怡远楼

30.0

30.0

30.1

30.0

29.2

0.8

电子楼一楼大厅

29.1

29.0

29.0

29.0

27.2

1.8

表7—1数据测试表

结论:

1.在一定误差范围内,各节点传感器的温度精度正常。

2.怡远楼和电子楼一楼大厅的数据误差超过实际传感器的精度

0.5℃。

3.各节点温度显示稳定,不会出现个别节点的跳变情况。

误差分析:

1.市场长标准的数字温度计一般误差在1℃,DS18B20的误差在0.5

℃,因此实际测量的允许最大误差应该在1.5℃。

2.选取的温度计为食物温度计,与被测物接触面积较大,而DS18B20

接触面积较小,测量本身存在读取误差。

八、参考文献:

[1]LCD1602数据手册

[2]DS18B20数据手册

[3]郭天祥.51片机C语言教程.电子工业出版社.2009.1

[4]陈蕾.单片机原理与接口技术.机械工业出版社.2012.8

[5]潘勇.孟庆斌.基于DS18B20的多点温度测量系统设计.

 电子测量技术.2008.09

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2