水温加热控制系统学年论文大学论文.docx

上传人:b****6 文档编号:5955521 上传时间:2023-01-02 格式:DOCX 页数:21 大小:146.76KB
下载 相关 举报
水温加热控制系统学年论文大学论文.docx_第1页
第1页 / 共21页
水温加热控制系统学年论文大学论文.docx_第2页
第2页 / 共21页
水温加热控制系统学年论文大学论文.docx_第3页
第3页 / 共21页
水温加热控制系统学年论文大学论文.docx_第4页
第4页 / 共21页
水温加热控制系统学年论文大学论文.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

水温加热控制系统学年论文大学论文.docx

《水温加热控制系统学年论文大学论文.docx》由会员分享,可在线阅读,更多相关《水温加热控制系统学年论文大学论文.docx(21页珍藏版)》请在冰豆网上搜索。

水温加热控制系统学年论文大学论文.docx

水温加热控制系统学年论文大学论文

学年论文

 

题  目:

水温加热控制系统  

作  者:

  

所在学院:

  

专业年级:

  

指导教师:

 

职  称:

          

 

2016年12月23日

课程论文(设计)、学年论文评分表

题目

作者

专业年级

指导教师

指导教师评语及

评分建议

 

指导教师:

年月日

(部)

学院或教研室主任:

年月日

目录

 

1.前言....................................................................................5

2.要求....................................................................................6

2.1功能....................................................................................6

2.2要求....................................................................................6

3.实现思路...................................................................................7

3.1方案分析....................................................................................7

3.2元件简介....................................................................................7

3.2.1STC89C51....................................................................7

3.2.2最小系统....................................................................8

3.2..3八段LED数码管.........................................................9

3.3硬件连接..................................................................................10

3.4.加热控制模块框图.................................................................11

4.结论..................................................................................13

4.1问题总结.................................................................................13

4.2体会................................................................................13

附录..................................................................................14

 

 

摘要

本次设计的主要目的是实现对温度的控制,其主要思路是通过温度传感器感应物体温度,送到单片机处理,再由单片机一方面控制LED显示出来,另一方面控制加热的通断。

本次设计分2个功能模式进行,功能1为键盘设定温度,然后水温通过加热棒升温,达到设定温度,并通终维持在设定温度左右。

功能2为键盘设定加热时间,然后启动定时器,水温通过加热棒升温,直到定时器完成计时。

 

 

1.前言

随着社会的发展和科技的进步以及测温仪器在各个领域的应用,智能化是现代温控系统发展的主流方向,特别是今年来,温度控制系统已应用到生活的各个方面。

针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景和实际意义。

温度是科学技术中最基本的物理量之一。

物理、化学、生物等学科都离不开温度,在工业生产等许多领域,温度常常是表征对象和过渡状态的重要物理量。

各行各业对温度的要求越来越高,可见温度的测量和控制是非常重要的。

单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。

随着温度控制器应用越来越广泛,各种试用于不同场和的温度控制器应运而生。

 

2.要求

一、功能

设计并制作一个水温自动控制系统,控制水温的范围在0—100摄氏度内,能实现在控制范围内对温度的自动控制,并保持设定的温度基本保持不变;也可以设定定时加热。

二、要求

(1)可键盘设定控制温度值,设定最小分辨率为1℃;

(2)实时测量并显示实际温度。

温度测量误差在±0.5℃内;

(3)水温控制系统具有全量程(0℃~100℃)内的升温功能;

(4)任意设定一个温度值,控制系统可以实现该给定温度的恒值自动控制。

(5)可键入加热时长,实现定时加热,完成加热自动控制。

 

 

 

3.实现思路

3.1硬件分析

本次设计主要版块分为温度感应模块,温度显示模块,键盘设定模块,定时模块和加热控制模块。

1.温度感应模块

使用温度传感器18B20感应温度,由于该温度传感器内含AD转换器,因此连接简单,应用方便

2.温度显示模块

使用动态显示,通过数码管显示被测温度和设定温度。

硬件上连接简单,所需元件少。

3.键盘设定模块

使用键盘扫描法,通过矩阵键盘,求出设定的数值,由于该方案具有扫描功能,因此在不使用中断的情况下,使用键盘扫描程序是十分恰当的,本次设计采用的是键盘扫描程序。

3.2原件简介

3.2.1STC89C51

STC89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash 

Programmable and Erasable Read Only Memory)的低电压,高性能CMOS处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,STC89C2051是它的一种精简版本。

STC89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要特性:

 

·与MCS-51 兼容 

·4K字节可编程闪烁存储器 

 ·全静态工作:

0Hz-24Hz 

·三级程序存储器锁定 

·128*8位内部RAM32可编程I/O线

 ·两个16位定时器/计数器 

·5个中断源

 ·可编程串行通道 

·低功耗的闲置和掉电模式

 

3.2.2最小系统

最小系统构成的基本条件是

1.电源

STC89C51单片机的电压为4.0V-5.5V。

我们采用电脑的USB进行供电,电脑以及手机充电器一般输出电压为5V,可以为单片机正常供电。

2.晶振

晶振结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。

本系统主要采用的是11.05926M晶振,配合2个30pF的电容构成晶体振荡电路。

3复位

为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。

另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。

最小系统连接图

 

3.2.2八段LED数码管

显示电路主要采用4位共阳8段数码管,采用动态扫描方式显示。

其原理图如下所示。

数码管主要有共阳、和共阴两种类型。

在这里我们先用的是共阳数码管,主要是由于单片机I/0的驱动能力有限,无法直接驱动4位8段数码管,所以必须采用共阳的数码管,并接上四个三极极管8550。

八段数码管连接图

 

3.3.硬件连接

硬件总体框图为:

本次设计硬件用到了单片机STC89C52、温度传感器DS18B20、加热棒、四位LED数码管、独立键盘、SSR固态继电器等。

单片机STC89C52是常用的单片机之一,单片机上有32个P口,其中P0、P1、P2、P3各8个。

温度传感器DS18B20接到单片机的一个P口上,本次设计是P2.1,因为温度传感器DS18B20可以直接将数据传输给单片机,因此可直接连接。

四位LED能显示两位整数,两位小数,用来显示温度够用。

五个独立键盘,分别表示加,减,开始,暂停,定时。

通过将5个出线端接到P3.3-P3.7口上,然后通过P3口控制键盘,键盘的按下将P3口对应位电压拉低,从而被单片机检测到。

固态继电器SSR是一种动作时间比较快的继电器,有4个接口,2端接5V电压,2端接加热棒。

 

3.3.加热控制模块框图

 

4.结论

4.1问题总结

本次设计的功能板块分为四块,分别是温度传感器感应模块、键盘输入模块、LED显示模块、控制温度模块。

调试过程中,出现过不少问题,诸如:

1.发现温度传感器的温度并不能有效地显示在LED上

原因:

温度传感器的程序有问题,延时没有用好。

解决方法:

修改DS18B20中的延时程序。

2.发现键盘的数字按下后,数码管没有显示。

原因:

程序中键盘的扫描程序没有显示函数,按下键时,程序在键盘函数中停留。

解决方法:

在键盘读取函数的延时中加显示函数。

4.2体会

本次设计的题目是水温加热控制系统,其主要思想是将水温控制在某一个设定的温度左右,误差不超过1度。

本次设计历时4周左右,花费了大量的精力和时间,可以说其中包含了诸多的汗水和付出。

通过网上查找资料和不停地写程序调试,既增长了知识,又增加了经验。

其过程中有苦有甜。

最后感谢学院提供的实验条件和老师的辛苦指导。

 

参考文献

[1]汪烈军,贾振红,冯龛等.单片机原理与应用西安:

西安交通大学出版社.2012

[2]徐惠民,安德宁.单片微型计算机原理接口与应用.第1版[M]北京:

北京邮电大学出版社,1996

[3]夏继强.单片机实验与实践教程.北京:

北京航空航天大学出版社,2001

 

附录程序

#include

#defineucharunsignedchar

unsignedchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

charvalue=1,count=1,time_0=0;

charsecond=59;

voiddelay2(unsignedchart);//带显示延时

voiddisplay_time();

voiddisplay();

sbitDQ=P2^0;//数据传输线接单片机的相应的引脚

sbitP21=P2^1;//继电器

sbitcnt1=P3^7;//按键定时加1

sbitcnt0=P3^6;//按键定时减1

sbitstart=P3^5;//按键开始

sbitstop=P3^4;//按键暂停

sbittime=P3^3;//定时设置

voiddelay(unsignedchart)//延时函数

{

while(t-->0);

}

voiddelay2(unsignedchart)//按键时带显示温度延时

{

while(t-->0)

display();

}

voiddelay3(unsignedchart)//按键时带显示定时延时

{

while(t-->0)

display_time();

}

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

********************各类函数模块****************/

voidkeyboard()//状态按键---start,stop,time

{

if(start==0)

{

delay2(200);

if(start==0)

value=0;

}

if(stop==0)

{

delay2(200);

if(stop==0)

value=1;

}

if(time==0)

{

delay2(200);

if(time==0)

value=2;

}

}

voidkeyboard_cnt()//温度设置按键

{

if(cnt1==0)

{

delay2(200);

if(cnt1==0)

if(count<99)

++count;

elsecount=0;

}

if(cnt0==0)

{

delay2(200);

if(cnt0==0)

if(count>1)

--count;

elsecount=99;

}

}

voidkeyboard_time()//定时设置按键

{

if(cnt1==0)

{

delay3(200);

if(cnt1==0)

if(time_0<59)

++time_0;

elsetime_0=0;

}

if(cnt0==0)

{

delay3(200);

if(cnt0==0)

if(time_0>1)

--time_0;

elsetime_0=59;

}

}

voiddisplay()//键盘输入的温度显示--温度为正整数

{

P1=0xfd;

P0=table[count%10];

delay(50);

P1=0xfe;

P0=table[count/10];

delay(50);

}

voiddisplay_time()//键盘输入的时间显示--时间为整分钟

{

P1=0xfd;

P0=table[time_0%10];

delay(50);

P1=0xfe;

P0=table[time_0/10];

delay(50);

}

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

******************DS18B20模块程序*****************/

#defineucharunsignedchar

unsignedcharseg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不带小数点的共阳数码管段码

unsignedcharseg7codeB[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的共阳数码管段码

unsignedchartempL=0,tempH=0,sdata,xiaoshu1;xiaoshu2;

voiddelay1(uchari)//嵌套循环延时函数

{

ucharj,k;

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

for(k=125;k>0;k--);

}

voidInit_DS18B20(void)//DS18B20的初始化

{

unsignedcharx=0;

DQ=0;//发送复位脉冲

delay(80);//延时(>480us)

DQ=1;//拉高数据线

delay(5);//等待(15~60us)

while(DQ==1);

while(DQ==0);

delay(20);

}

//读一个字节

ReadOneChar()//主机数据线先从高拉至低电平1us以上,产生读时隙,15us内使数据线升为高电平,从而产生读信号

{

unsignedchari=0;//每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期

unsignedchardat=0;

for(i=8;i>0;i--)//一个字节有8位

{

DQ=1;

delay

(1);//把数据线从高电平拉至低电平

DQ=0;dat>>=1;

DQ=1;if(DQ)

dat|=0x80;delay(4);

}

return(dat);

}

//写一个字节

voidWriteOneChar(unsignedchardat)

{

unsignedchari=0;//数据线从高电平拉至低电平,产生写起始信号。

15us之内将所需写的位送到数据线上,

for(i=8;i>0;i--)//在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。

{

DQ=0;//在开始另一个写周期前必须有1us以上的高电平恢复期。

DQ=dat&0x01;

delay(5);

 

DQ=1;

dat>>=1;

}

delay(4);

}

//读温度值(低位放tempL;高位放tempH;)

voidReadTemperature()

{

Init_DS18B20();//初始化

WriteOneChar(0xcc);//跳过读序列号的操作,写入0XCC跳过ROM命令

WriteOneChar(0x44);//启动温度转换,写入0X44为温度转换命令

delay(125);//转换需要一点时间,延时

Init_DS18B20();//初始化

WriteOneChar(0xcc);//跳过读序列号的操作

WriteOneChar(0xbe);//读温度寄存器(头两个值分别为温度的低位和高位)写入0XBE为读暂存器命令

tempL=ReadOneChar();//读出温度的低位LSB

tempH=ReadOneChar();//读出温度的高位MSB

//对读取的温度进行处理,tempL的低四位为小数,2的负指数次;tempH的高五位为符号位,正温度为0,负温度为1;

sdata=tempL/16+tempH*16;//整数部分

xiaoshu1=(tempL&0x0f)*10/16;//小数第一位

xiaoshu2=(tempL&0x0f)*100/16%10;//小数第二位

}

//温度处理的范围为1-99摄氏度,由于是水温加热,温度为负数和超过100度不予考虑

//温度显示函数

voidLed(unsignedintdate)

{

P1=0xfe;//P1.0=0,选通第一位

P0=seg7code[date/10];

delay1(5);

P0=0xff;

P1=0xfd;//P1.1=0,选通第二位,个位数

P0=seg7codeB[date%10];

delay1(5);

P0=0xff;

P1=0xfb;//P1.3=0,选通第三位,小数点第一位

P0=seg7code[xiaoshu1];

delay1(5);

P0=0xff;

P1=0xf7;//P1.3=0,选通第四位,小数点第二位

P0=seg7code[xiaoshu2];

delay1(5);

P0=0xff;

}

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

******************定时模块************************/

voidtimer(charminute)//定时器函数

{

unsignedintt=0;P21=0;

while(value==2)

{

if(--second<1)//最大定时为59分钟

{

second=59;

if(--minute<0)//定时的分钟为-1时,关闭继电器,改变value的值,跳出函数

{

P21=0;value=3;

}

}

TMOD=0x20;//8位自动重装定时器,每200us溢出一次

TH1=0x38;

TL1=0x38;

TR1=1;

do{//溢出一次显示一位时间,4次显示约0.8ms,既do_while语句每1ms判断一次条件

keyboard();

P1=0xff;P0=0xff;

while(TF1==0)

{

P1=0xf7;P0=table[second%10];

}

TF1=0;

P1=0xff;P0=0xff;

while(TF1==0)

{

P1=0xfb;P0=table[second/10];

}

TF1=0;

P1=0xff;P0=0xff;

while(TF1==0)

{

P1=0xfd;P0=seg7codeB[minute%10];//点小数点的显示

}

TF1=0;

P1=0xff;P0=0xff;

while(TF1==0)

{

P1=0xfe;P0=table[minute/10];

}

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

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1