基于ds189b20的温度控制设计报告.docx

上传人:b****1 文档编号:1582923 上传时间:2023-05-01 格式:DOCX 页数:30 大小:221.78KB
下载 相关 举报
基于ds189b20的温度控制设计报告.docx_第1页
第1页 / 共30页
基于ds189b20的温度控制设计报告.docx_第2页
第2页 / 共30页
基于ds189b20的温度控制设计报告.docx_第3页
第3页 / 共30页
基于ds189b20的温度控制设计报告.docx_第4页
第4页 / 共30页
基于ds189b20的温度控制设计报告.docx_第5页
第5页 / 共30页
基于ds189b20的温度控制设计报告.docx_第6页
第6页 / 共30页
基于ds189b20的温度控制设计报告.docx_第7页
第7页 / 共30页
基于ds189b20的温度控制设计报告.docx_第8页
第8页 / 共30页
基于ds189b20的温度控制设计报告.docx_第9页
第9页 / 共30页
基于ds189b20的温度控制设计报告.docx_第10页
第10页 / 共30页
基于ds189b20的温度控制设计报告.docx_第11页
第11页 / 共30页
基于ds189b20的温度控制设计报告.docx_第12页
第12页 / 共30页
基于ds189b20的温度控制设计报告.docx_第13页
第13页 / 共30页
基于ds189b20的温度控制设计报告.docx_第14页
第14页 / 共30页
基于ds189b20的温度控制设计报告.docx_第15页
第15页 / 共30页
基于ds189b20的温度控制设计报告.docx_第16页
第16页 / 共30页
基于ds189b20的温度控制设计报告.docx_第17页
第17页 / 共30页
基于ds189b20的温度控制设计报告.docx_第18页
第18页 / 共30页
基于ds189b20的温度控制设计报告.docx_第19页
第19页 / 共30页
基于ds189b20的温度控制设计报告.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于ds189b20的温度控制设计报告.docx

《基于ds189b20的温度控制设计报告.docx》由会员分享,可在线阅读,更多相关《基于ds189b20的温度控制设计报告.docx(30页珍藏版)》请在冰点文库上搜索。

基于ds189b20的温度控制设计报告.docx

基于ds189b20的温度控制设计报告

 

基于ds189b20的温度控制设计报告

摘要

本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。

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

关键词:

AT89C51、DS18B20、温控、自动

 

 

第一章概述

测控系统综合课程设计,是一项重要的实践训练,它涉及单片机原理与应用、可编程控制器、传感器技术、测控电路和电子电力技术等课程,是多门课程的综合性设计。

1.课程设计任务分解

图1.1课程设计的任务分解

2.主要仪器设备元件

DS18B20,单片机实训板、可编程控制器实验台、场效应管、玻璃温度计、小风扇、多功能面包板、插线、万用表,计算机,其它元器件,调试工具等。

3.课程设计的基本流程

课程设计的流程中控制电路的焊接、软件设计和加温系统组装以及箱体制作部分是课程设计的三大核心模块。

电路设计与焊接部分主要是18B20的接口电路、光电隔离与场效应管驱动电路以及驱动电路的接口。

软件设计主要包括键盘扫描程序、四位数码管动态显示程序、任意浮点数显示程序、输入参数合成、计时器程序、风扇控制程序、制冷片控制程序以及串口通讯程序等。

加温系统组装调试以及箱体制作主要完成加温系统中制冷片、散热片、风扇的组装以及上电试运行,箱体制作主要是用硬纸箱板按照参考尺寸15厘米,做一个15X15X15的箱子就可以,同时考虑加温系统的安装以及温度传感器的布置。

温度测量试验主要是在一系列标准温场下,用传感器测量的数据与标准玻璃温度计的数据对比,分析测量的精度,根据仪器的引用误差定设备的级别。

温度控制试验分加温和降温两部分,通过设定一个比现场温度低或者高的温度,然后系统开始工作,并按照一定的时间间隔将温度和加/降温的时间的数值统计出来。

分析温度系统的工作效率。

当达到设定值后,将其稳定住,并按照一定的时间间隔采集数据,分析系统的稳定性。

 

第二章单片机人机接口系统的软件设计

2.1AT89C52

AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统,可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89C52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8位微控制器8K字节在系统可编程FlashAT89C52。

2.2系统组成

本系统是通过单片机控制DS18B20来完成温度测量的全过程的,系统主要由AT89C52单片机、电源、时钟、加热、测温、显示、键盘、报警、复位等电路组成,系统组成框图如图3所示系统组成

图2.2系统的组成

2.4显示按键电路设计

显示电路由三片74HC595驱动三块LED数码显示器组成,用于显示三位温度值,两位整数,一位小数。

该显示电路是AT89C52单片机串行口工作于方式0的典型应用。

74HC595是一个8位的串入并出移位寄存器,与74HC164类似,但其性能优于74HC164,因为74HC595内部含有一个锁存器,可用于锁存显示数据,这就使得74HC595在同步移位时,LED数码显示器上不会出现乱码。

电路中,74HC595的SER端与AT89C51的RXD端相连,用以接收来自AT89C51的串行输入信号;74HC595的SRCLK端与AT89C51的TXD端相连,用以接收来自AT89C51的同步移位时钟脉冲信号;而74HC595的锁存信号RCLK则由AT89C51的P2.0控制;74HC595的第9位输出Q8用于多片74HC595的级联。

本系统中由于按键个数较少,为简化系统设计而采用独立式按键。

三个按键分别连接到AT89C52的P0.0,P0.1,P0.2。

AT89C52单片机共有四个并行I/O口:

P0~P3口。

其中P0口有三种用途:

⑴用作8位数据总线DB;

⑵与P2口共同构成16位地址总线AB,P0口为低8位AB;

⑶用作一般I/O口。

由P0口的内部结构可知,其输出驱动级为开漏电路,因而当P0口用作一般I/O口时,需外接上拉电阻。

按键功能如下:

⑴K1:

加热控制键。

按下K1,CPU执行指令“CLRP1.1”,将P1.1口的电平拉低,经74LS04反相后变高,使发光管D1点亮,继电器J动作,J1闭合,加热器开始加热。

⑵K2:

禁止加热键。

按下K2,CPU执行指令“SETBP1.1”,将P1.1口的电平拉高,经74LS04反相后变低,发光管D1熄灭,继电器动作,J1断开,加热器停止加热。

⑶K3:

恒温控制键。

按下K3,CPU将当前温度值读入并储存、比较,当温度高于储存值时,执行K2键功能;当温度低于储存值时,执行K1键功能。

第三章温度测量模块的设计

3.1DS18B20介绍

DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。

DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。

温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。

被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

其最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。

DS18B20的电源供电方式有2种:

外部供电方式和寄生电源方式。

工作于寄生电源方式时,VDD和GND均接地,他在需要远程温度探测和空间受限的场合特别有用,原理是当1Wire总线的信号线DQ为高电平时,窃取信号能量给DS18B20供电,同时一部分能量给内部电容充电,当DQ为低电平时释放能量为DS18B20供电。

但寄生电源方式需要强上拉电路,软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM时),同时芯片的性能也有所降低。

因此,在条件允许的场合,尽量采用外供电方式。

无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电。

在这里采用前者方式供电。

如图3.1所示:

 

图3.1DS18B20与单片机接口原理图

 

3.2DS18B20内部结构

图3.2DS18B20的内部结构

DS18B20内部整体结构DS18B20内部由64位光刻ROM、温度传感器、暂存器、EEPROM等组成,其整体结构如图1所示。

DS18B20暂存器结构DS18B20内部有一个9字节的数据暂存器,用于温度数据的存放、EEPROM中的内容拷贝、循环冗余检验码的存放以及内部计算中间结果的暂存等,DS18B20暂存器结构如图2所示。

3.3温度驱动模块

加热测温电路由加热器、继电器、DS18B20等组成。

系统上电复位时,P1口为高电平,继电器J不动作,J1断开,加热器不工作。

根据DS18B20的工作原理,当总线上只有一个DS18B20时,不需要对DS18B20的ID进行识别,单片机不必提供DS18B20的64位ROM编码,而只要使用一条“跳过ROM”命令,然后就可直接对DS18B20的存储器进行操作。

在这种情况下,单片机启动DS18B20开始进行温度转换、读取温度数据的流程如图3.3

图3.3温度转换、读取数据流程

 

第四章温度控制模块设计

4.1光电隔离控制电路的设计

光电耦合器亦称光电隔离器,简称光耦。

光电耦合器以光为媒介传输电信号。

它对输入、输出电信号有良好的隔离作用。

光耦合器一般由三部分组成:

光的发射、光的接收及信号放大。

输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。

这就完成了电—光—电的转换,从而起到输入、输出、隔离的作用。

由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。

对于开关电路,往往要求控制电路和开关电路之间要有很好的电隔离,这对于一般的电子开关来说是很难做到的,但采用光电耦合器就很容易实现了。

图4.1中所示电路就是用光电耦合器组成的开关电路。

在图4.1中,在光电耦合器输入端加电信号使发光源发光,光的强度取决于激励电流的大小,此光照射到封装在一起的受光器上后,因光电效应而产生了光电流,由受光器输出端引出,这样就实现了电一光一电的转换。

图4.1光电隔离控制电路的设计

4.2风扇PWM驱动

如图4.2所示是风扇PWM的电路。

由单片机控制光电耦合器开关来控制场效应管的导通。

导通后给风扇很大的电流以驱动风扇转动

图4.2风扇电路

4.3制冷片的控制以及程序设计

制冷(制热)工作原理

半导体温差致冷是建立在法国物理学家Peltien帕尔帖效应(即温差效应)基础上的具体应用。

当电流流经两种不同性质的导体形成接点时,其接点会产生放热和吸热现象,即其两端形成温差而实现制冷和制热。

如图

图4.3制冷片的工作原理

依据上述原理,利用半导体材料制成的致冷器称为半导体致冷器,其工作原理图如图1所示。

为了便于叙述起见,以一对N/P型半导体材料构成的电偶对介绍工作原理,所谓电偶对就是掼NP结的数量。

图1中的N/P型半导体元件通过铜导流片连接起来,当由N通过铜导流片到P通以正向直流电时,在电场作用下,N型半导体中的电子和P型半导体中的空穴背向导流(朝接头)运动,即在导流片接头处N型和P型分别产生电子、空穴。

电子、空穴产生的能量来自晶格振动的热能,于是在导流片上产生吸热现象,而在N/P型的另一端产生放热现象,从而产生温差。

当放热的高温侧的热量能有效地放热时,吸热的低温侧不断地吸热,使其起到致冷的作用。

第五章温度测量试验与分析

5.1基本任务

1温度测量精度:

±1℃;

2温度控制精度:

±3℃;

3制冷片输出功率可调;

4测量温度值LED显示;

5控制温度值可通过键盘设定;

1.温度测量实验

DS18B20测量值

28.1

28.7

29.4

29.9

30.3

30.8

31.5

32.1

33

玻璃温度计值

28.3

28.5

29.6

30.1

30.4

31.6

31.7

32.3

33.4

2.数据处理与误差分析(最大的引用误差)

DS18B20的测量范围为-55℃~+125℃;在-10~+85℃范围内,精度为±0.5°C,测量的精度是很高的。

通过数字转换用数码管显示出来的温度和实际温度相差不大。

而玻璃温度计本身测量的误差就大,人在读温度的时候由于光线的折射,读取的温度就更不准确,所以DS18B20和玻璃温度计的测量值有很大的差别。

相比较而言DS18B20的温度测量值更准确。

 

第六章温度控制试验与分析

*基本任务

1.升温

温度测量数值表

序号

1

2

3

4

5

6

7

8

9

系统测量值

28.1

27.3

27.5

27.8

28

28.2

28.4

28.6

28.9

时间

50s

54s

49s

59s

58s

56s

56s

55s

56s

2.降温

温度测量数值表

序号

1

2

3

4

5

6

7

8

9

系统测量值

32

31.9

31.8

31.7

31.6

31.5

31.4

31.3

31.2

时间

106s

110s

113s

114s

116s

118s

120s

121s

122s

3.恒温

表3温度控制性能数据表

控制温度值:

32℃时间:

分钟

时间

10

20

30

40

50

60

70

80

90

系统测量值

31.8

31.9

32.1

32.1

32.3

32.1

31.9

32

32.2

总结

通过这几天的的单片机课程设计,我终于完成了数字温度计的设计。

在本次设计的过程中,我发现很多的问题,虽然学过单片机的设计,但是真的并不太懂实际的设计。

通过这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。

从这次的课程设计中,我真真正正地意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

参考文献

[1]李朝青.单片机原理及接口技术.北京航空航天大学出版社,2005

[2]马忠梅等.单片机的C语言应用程序设计(第4版),2007

[3]江世明.基于Proteus的单片机应用技术.电子工业出版社,2009

[4]彭伟.单片机C语言程序设计实训100例.电子工业出版社,2009

[5]唐颖.单片机原理与应用及C51程序设计..北京大学出版社,2008

附录一

温控系统的程序

//安装目录下的EXE文件打开后可在电脑上显示当前温度值

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDS=P2^2;//defineinterface

sbitdula=P2^6;

sbitwela=P2^7;

sbitli=P3^1;

sbitwai=P3^0;

sbithot=P3^2;

sbitup=P3^5;

sbitdown=P3^6;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsignedcharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef};

uinttemp;//variableoftemperature

uintaa=25,bb=0,cc=0,dd=0;

voiddelay(uintcount)//delay

{

uinti;

while(count)

{

i=200;

while(i>0)

i--;

count--;

}

}

voiddsreset(void)//sendresetandinitializationcommand

{

uinti;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

bittmpreadbit(void)//readabit

{

uinti;

bitdat;

DS=0;i++;//i++fordelay

DS=1;i++;i++;

dat=DS;

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

return(dat);

}

uchartmpread(void)//readabytedate

{

uchari,j,dat;

dat=0;

for(i=1;i<=8;i++)

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}

voidtmpwritebyte(uchardat)//writeabytetods18b20

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//write1

{

DS=0;

i++;i++;

DS=1;

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

}

else

{

DS=0;//write0

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

DS=1;

i++;i++;

}

}

}

voidtmpchange(void)//DS18B20beginchange

{

dsreset();

delay

(1);

tmpwritebyte(0xcc);//addressalldriversonbus

tmpwritebyte(0x44);//initiatesasingletemperatureconversion

}

uinttmp()//getthetemperature

{

floattt;

uchara,b;

dsreset();

delay

(1);

tmpwritebyte(0xcc);

tmpwritebyte(0xbe);

a=tmpread();

b=tmpread();

temp=b;

temp<<=8;//twobytecomposeaintvariable

temp=temp|a;

tt=temp*0.0625;

temp=tt*10+0.5;

returntemp;

}

voidreadrom()//readtheserial

{

ucharsn1,sn2;

dsreset();

delay

(1);

tmpwritebyte(0x33);

sn1=tmpread();

sn2=tmpread();

}

voiddelay10ms()//delay

{

uchara,b;

for(a=10;a>0;a--)

for(b=60;b>0;b--);

}

voiddisplay(uinttemp)//显示程序

{

ucharA1,A2,A2t,A3,ser;

ser=temp/10;

SBUF=ser;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

dula=0;

P0=table[A1];//显示百位

dula=1;

dula=0;

wela=0;

P0=0x7e;

wela=1;

wela=0;

delay

(1);

dula=0;

P0=table1[A2];//显示十位

dula=1;

dula=0;

wela=0;

P0=0x7d;

wela=1;

wela=0;

delay

(1);

P0=table[A3];//显示个位

dula=1;

dula=0;

P0=0x7b;

wela=1;

wela=0;

delay

(1);

}

voidxianshi(uinttemp1)

{

uintA5,A6;

A5=temp1/10;

A6=temp1%10;

P0=table[A5];

dula=1;

dula=0;

P0=0xef;

wela=1;

wela=0;

delay

(1);

P0=table[A6];

dula=1;

dula=0;

P0=0xdf;

wela=1;

wela=0;

delay

(1);

}

voidkeyscan()

{

if(up==0)

{

delay(10);

if(up==0)

{

aa++;

if(aa==50)

{

aa=0;

}

}

}

if(down==0)

{

delay(10);

if(down==0)

{

if(aa==0)

{

aa=50;

}

aa--;

}

}

}

voidmain()

{

uchara;

while

(1)

{

keyscan();

tmpchange();

bb=tmp();

bb=bb/10;

cc=aa-1;

dd=aa+1;

if(bb>dd)

{

for(a=10;a>0;a--)

{

xianshi(aa);

display(tmp());

P1=0x0f;

li=0;

wai=1;

hot=1;

}

}

if(bb

{

for(a=10;a>0;a--)

{

xianshi(aa);

display(tmp());

P1=0xf0;

li=0;

wai=0;

hot=0;

}

}

if(bb>=cc&&bb<=dd)

{

for(a=10;a>0;a--)

{

xianshi(aa);

display(tmp())

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

当前位置:首页 > 农林牧渔 > 林学

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

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