锅炉温度51单片机的控制系统.docx

上传人:b****0 文档编号:9745704 上传时间:2023-05-20 格式:DOCX 页数:23 大小:91.88KB
下载 相关 举报
锅炉温度51单片机的控制系统.docx_第1页
第1页 / 共23页
锅炉温度51单片机的控制系统.docx_第2页
第2页 / 共23页
锅炉温度51单片机的控制系统.docx_第3页
第3页 / 共23页
锅炉温度51单片机的控制系统.docx_第4页
第4页 / 共23页
锅炉温度51单片机的控制系统.docx_第5页
第5页 / 共23页
锅炉温度51单片机的控制系统.docx_第6页
第6页 / 共23页
锅炉温度51单片机的控制系统.docx_第7页
第7页 / 共23页
锅炉温度51单片机的控制系统.docx_第8页
第8页 / 共23页
锅炉温度51单片机的控制系统.docx_第9页
第9页 / 共23页
锅炉温度51单片机的控制系统.docx_第10页
第10页 / 共23页
锅炉温度51单片机的控制系统.docx_第11页
第11页 / 共23页
锅炉温度51单片机的控制系统.docx_第12页
第12页 / 共23页
锅炉温度51单片机的控制系统.docx_第13页
第13页 / 共23页
锅炉温度51单片机的控制系统.docx_第14页
第14页 / 共23页
锅炉温度51单片机的控制系统.docx_第15页
第15页 / 共23页
锅炉温度51单片机的控制系统.docx_第16页
第16页 / 共23页
锅炉温度51单片机的控制系统.docx_第17页
第17页 / 共23页
锅炉温度51单片机的控制系统.docx_第18页
第18页 / 共23页
锅炉温度51单片机的控制系统.docx_第19页
第19页 / 共23页
锅炉温度51单片机的控制系统.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

锅炉温度51单片机的控制系统.docx

《锅炉温度51单片机的控制系统.docx》由会员分享,可在线阅读,更多相关《锅炉温度51单片机的控制系统.docx(23页珍藏版)》请在冰点文库上搜索。

锅炉温度51单片机的控制系统.docx

锅炉温度51单片机的控制系统

 

计算机控制课程设计论文

论文题目:

锅炉温度51单片机的控制系统

 

 

目录

摘要---------------------------------------------------------------------------------------------3

一:

引言---------------------------------------------------------------------------------------4

二:

设计原理及仿真------------------------------------------------------------------------5

三:

硬件电路---------------------------------------------------------------------------------6

3-1微控制器AT89S52--------------------------------------------------------------7

3-2晶振电路----------------------------------------------------------------------------7

3-3复位电路----------------------------------------------------------------------------8

3-4DS18B20芯片---------------------------------------------------------------------8

3-5液晶显示器------------------------------------------------------------------------10

3-6控制电路----------------------------------------------------------------------------11

3-7其他的硬件设备------------------------------------------------------------------11

四:

软件设计-------------------------------------------------------------------------------12

4-1锅炉温度控制系统结构框图---------------------------------------------------12

4-2编程主要思想---------------------------------------------------------------------12

4-3程序流程图------------------------------------------------------------------------13

五:

结语--------------------------------------------------------------------------------------14

参考文献---------------------------------------------------------------------------------------14

 

摘要

锅炉是工业生产中不可缺少的设备,多用于火电站、船舶、机车和工矿企业,而锅炉对温度的控制也是有很高的要求在日常的生活中。

本文就51单片机的温度控制系统,详细描述了利用温度传感器DS18B20开发的控制系统。

我们以51单片机为主控制器,DS18B20作为温度传感器,利用继电器和蜂鸣器以及液晶显示器来实现温度的实时检测和报警。

这里我们使用了proteus和keil3的结合来进行仿真测量。

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

关键词:

单片机DS18B20液晶显示器仿真模拟

 

一:

引言

锅炉是一种能量转换设备,向锅炉输入的能量有燃料中的化学能、电能,锅炉输出具有一定热能的蒸汽、高温水或有机热载体。

锅的原义指在火上加热的盛水容器,炉指燃烧燃料的场所,锅炉包括锅和炉两大部分。

锅炉中产生的热水或蒸汽可直接为工业生产和人民生活提供所需热能,也可通过蒸汽动力装置转换为机械能,或再通过发电机将机械能转换为电能。

提供热水的锅炉称为热水锅炉,主要用于生活,工业生产中也有少量应用。

产生蒸汽的锅炉称为蒸汽锅炉,常简称为锅炉,多用于火电站、船舶、机车和工矿企业。

自70年代以来,由于工业过程控制的需要,特别是在微电子技术和计算机技术的迅猛发展以及自动控制理论和设计方法发展的推动下,国内外温度控制系统的发展迅速。

锅炉温度的控制都能通过微控制芯片完成使锅炉的运行完全实现自动化,最大程度地将控制器应用于传统的锅炉行业。

本课题主要研究锅炉温度的过程控制。

二:

设计原理及仿真

DS18B20作为温度传感器,将实时的检测锅炉内的温度并且利用液晶显示器将所测的温度显示出来,同时通过控制电路来调节温度的上下限值,并在液晶显示器中显示。

程序中我们会不停的判断是否所测的温度与设定的值对应,如果实际的温度不在设定的范围内,则蜂鸣器会发出声音产生报警。

另外,proteus中我们利用一个白炽灯来模拟锅炉的加热装置,即白炽灯如果是发光的则表示锅炉正在加热。

所以当实际的温度超过所设定温度的最大值,则加热装置(白炽灯)会自动的关闭。

直到温度下降到所在范围,加热装置(白炽灯)会打开。

如图2.1是proteus的仿真图。

液晶显示器的第一行显示的是温度传感器的温度即锅炉内的实际温度是10摄氏度,第二行显示的是人为设置的温度上下限值(图中是-5度—10度,系统刚进来默认是-5度—10度),可以通过开关来调节温度的上下限值。

当温度传感器所测的温度超过了所设定的温度值,蜂鸣器就会发声报警;当温度传感器所测的温度大于上限温度值时,白炽灯(锅炉加热系统)就熄灭同时指示灯D1不发光。

图2.1proteus的仿真图

三:

硬件电路

3-1微控制器AT89S52单片机

图3.1AT89S52单片机

如图2.1是AT89S52单片机。

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

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

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

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。

由于篇幅所限,在这里我们就不再对该单片机的内部结构和功能进行详细的阐述了,读者可以自行翻阅相关资料。

3-2晶振电路

单片机内部实质上是种时序电路,所以必须在时钟的驱动下才能工作。

在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。

晶振电路如图2.2

图3.2晶振电路

3-3复位电路

复位电路是单片机最小系统中,必不可少的一个模块。

因为程序中经常会出现跑飞或者是死循环的状态,这样可以利用复位电路来改变单片机中PC寄存器从而使单片机中的程序能从头开始执行。

复位电路如图2.2。

图3.3复位电路

 

3-4DS18B20芯片

DS18B20是个温度传感器芯片,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

该芯片具有:

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

2.测温范围-55℃~+125℃

3.支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

4.工作电源:

3.0~5.5V/DC

5.在使用中不需要任何外围元件

6.测量结果以9~12位数字量方式串行传送

DS18B20内部结构主要由四部分组成:

64位光刻ROM,温度传感器,温度报警触发器TH和TL,配置寄存器。

而内部的温度传感器所测的温度是放在LSB和MSB寄存器,需要利用DS18B20特有的读函数将其读出来。

DS18B20在软件中包含了初始化、写函数、读温度函数的操作。

初始化是使得芯片与单片机芯片建立了联系。

写函数是对DS18B20的内部寄存器进行写入一定的数值,以达到控制芯片的目的。

读温度函数是读取DS18B20内部的温度传感器所测得的温度。

注意:

对DS18B20的读写操作或者是初始化都需要按照严格的时序来进行,否则会出现错误的,芯片的时序图读者可以查阅相关资料。

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:

每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

DS18B20芯片如图2.3。

图3.4DS18B20芯片

3-5液晶显示器

这里的液晶显示器我们选择了LM016L型号,如图2.4。

该液晶显示器是一种专门用于显示字母、数字、符号等点阵式LCD,下面我们给出了LM016L的一些主要计数参数:

显示容量:

16*2个字符

芯片工作电压:

4.5-5.5v

工作电流:

2.0mA

模块最佳工作电压:

5.0V

引脚功能说明:

编号符号引脚说明编号符号引脚说明

1VSS电源地8D1数据

2VDD电源正极9D2数据

3VEE液晶显示偏压10D3数据

4RS数据/命令选择11D4数据

5RW读/写选择12D5数据

6E使能信号13D6数据

7D0数据14D7数据

和DS18B20一样,在LM016L的程序中,都需要按照其规定的时序图来写对液晶的读写函数和初始化函数。

写函数是写入即将显示的字符到液晶显示器,让液晶显示。

写函数也可以对液晶显示器进行相关的显示控制,例如光标的设置,显示的位置等。

图3.5LM016L

3-6控制电路

如图2.6是控制电路,通过四个按键来调节温度的上下限值,最后温度的上下限值来通过液晶显示器显示出来。

图3.6控制电路

 

3-7其他的硬件设备

这里仿真中,我们还用到了芯片74LS245、蜂鸣器、继电器、白炽灯、三极管等。

74LS245是连接单片机和液晶显示器,从而驱动液晶显示器。

蜂鸣器是实现报警的。

白炽灯是模拟锅炉的加热系统(白炽灯发光即表示加热,不发光表示不加热)。

继电器作为一种开关是将单片机和其他电路隔开,从而实现小电流控制大电流,保证电路的安全。

 

四:

软件设计

4-1锅炉温度控制系统结构框图

 

AT89S52

 

单片机

液晶显示

温度传感器

继电器

负载

图4.1控制系统框图

4-2编程主要思想

DS18B20作为一个温度传感器的芯片,在与微控制器单片机进行连接通讯中,是单总线的。

单片机对芯片的读或者是写操作都是通过这条单总线来实现的,所以在这过程中它们的时序是很重要的。

所以程序中我们需要先对其进行初始化,目的是为了单片机和DS18B20通讯之前建立联系。

然后需要编写读函数,用于读取温度传感器中所采集的实际温度,便于传回主机(单片机)。

接着我们需要编写写函数,这个是用来对DS18B20进行一些操作控制,比如设置它测温的精度。

LM016L是液晶显示器中的一款芯片,可以显示两行的字符每行最多能显示16个字符。

同样对于该芯片的操作也是要注意它的时序。

程序中我们首先需要对LM016L编写一个测忙函数,用于判断液晶显示器是否处于忙碌状态,只有在不忙的状态下,才能对LM016L进行读或者是写的操作。

然后就是编写对液晶的读和写函数。

同样读函数是对LM016L进行一些人为的控制,包括设置显示光标、显示行数等等。

写函数就是让液晶显示器显示我们需要显示的内容。

编写好这两个芯片的相关程序之后,然后就是关于控制电路。

程序中会不停的扫描键盘按钮,并把值送到液晶显示器中。

程序也会不断的比较当前温度和设定值,条件满足会报警;温度过高则会关闭锅炉加热系统(我们仿真用的白炽灯)。

4-3程序流程图

开始

DS18B20初始化、并编写读写函数

LM016L初始化、并编写读写函数

读取DS18B20中所测的温度

键盘扫描并改变温度的上下限值

液晶显示出温度

是否在限定的温度范围

蜂鸣器发声报警,如果温度过高则白炽灯不发光

图4.2程序流程图

由于实现的程序相对讲是比较长的,读者可以在附录中详细查看程序。

五:

小结

由于编者水平以及其他硬件条件有限,这里我们只是利用proteus对锅炉温度控制进行了仿真的设计。

仿真和真实电路是有很大区别的,本论文可供读者参考学习。

虽然对于很多人来说这个论文题目比较简单,不过真正的做起来确实不是很轻松,包括在网上查找大量的DS18B20和LM016L的相关资料、word排版问题……虽然我们经常熬夜来做这个,不过我们却知道了很多以前不知道的东西,知道了理论联系实际的重要性,感觉到了自己的进步!

参考文献

1.李全利主编:

《单片机原理与接口技术》,高等教育出版社,2004年

2.俞金寿孙自强主编:

《过程控制系统》,机械工业出版社,2013年

3.于海生主编:

《计算机控制技术》,机械工业出版社,2007年

4.刘笃仁韩保君主编:

《传感器原理和应用技术》,西安电子科技大学出版社,2003年

附录:

#include

#include

#defineucharunsignedchar

ucharworld[]="Temperature:

";

uchara[8],i,c,b;

ucharn,k,j,flag=0;

sbitRS=P3^0;

sbitRW=P3^1;

sbitE=P3^2;

sbitdq=P3^3;

sbitclk=P3^4;

sbitCLOCK=P3^5;

sbitBF=P0^7;

sbitp14=P1^4;

sbitp15=P1^5;

sbitp16=P1^6;

sbitp17=P1^7;

/*关于DS18B20的相关函数声明*/

voiddelayus(inti);

voidinitial();

voidwrite(intdat);

intread();

voidds18b20();

voiddisplay();

voiddelayms(inti);

/*关于LM016L的相关函数声明*/

unsignedcharbusytest(void);

voidwritecontrol(unsignedcondata);

voidwritedata(unsignedd);

voidlcdinit(void);

voidkeyscan();

/*主函数*/

voidmain()

{

clk=0;

CLOCK=0;

c=5;

b=10;

lcdinit();

delayms(100);

writecontrol(0x01);

writecontrol(0x80);//显示在液晶显示的第一行

i=0;

while(world[i]!

='\0')

{

writedata(world[i]);

i++;

delayms(50);

}

while

(1)

{

keyscan();//键盘扫描,控制温度的上下限值

ds18b20();//读温度传感器中的温度

display();//将读取的温度值转换为ASCII码

if(flag==0&&n>b)//温度过高时,关闭白炽灯

{

clk=0;

}

else

clk=1;

if((flag==0&&n>b)||(flag==1&&n>c))//温度超过了上下限值,蜂鸣器发声报警

CLOCK=1;

else

CLOCK=0;

if(flag)

{

writedata('-');

delayms(50);

}

else

writedata(a[0]);

delayms(50);

writedata(a[1]);

delayms(50);

writedata(a[2]);

delayms(50);

writecontrol(0xc0);

keyscan();

writedata('-');

delayms(25);

a[3]=c/10+0x30;

a[4]=c%10+0x30;

a[5]=b/100+0x30;

a[6]=b/10%10+0x30;

a[7]=b%10+0x30;

writedata(a[3]);

delayms(25);

keyscan();

writedata(a[4]);

delayms(25);

writedata('_');

delayms(25);

writedata(a[5]);

delayms(25);

writedata(a[6]);

delayms(25);

writedata(a[7]);

delayms(25);

writecontrol(0x8c);

}

}

/*微秒级别延时*/

voiddelayus(inti)

{

while(i--);

}

/*毫秒级别延时*/

voiddelayms(inti)

{

intj;

while(i--)

{

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

}

}

/*测忙函数*/

unsignedcharbusytest(void)

{

bitresult;

RS=0;

RW=1;

E=1;

delayms(4);

result=BF;

E=0;

returnresult;

}

/*对LM016L的写函数控制*/

voidwritecontrol(unsignedcondata)

{

while(busytest()==1);

RS=0;

RW=0;

E=0;

delayus

(2);

P0=condata;

delayus(4);

E=1;

delayms(4);

E=0;

}

/*对LM016L进行写数据*/

voidwritedata(unsignedd)

{

while(busytest()==1);

RS=1;

RW=0;

E=0;

P0=d;

delayus(4);

E=1;

delayms(4);

E=0;

}

/*对LM016L进行初始化*/

voidlcdinit(void)

{

delayms(100);

writecontrol(0x38);

delayms(100);

writecontrol(0x38);

delayms(100);

writecontrol(0x38);

delayms(100);

writecontrol(0x0d);//开显示,没有光标,光标不闪烁

delayms(100);

writecontrol(0x06);//光标右移,字符不移动

delayms(100);

writecontrol(0x01);//清屏

delayms(100);

}

//对DS18B20进行初始化

voidinitial()

{

dq=0;

delayus(70);

dq=1;

delayus(8);

while

(1)

{

if(dq)break;

}

}

//DS18B20写函数

voidwrite(intdat)

{

inti;

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

{

dq=0;

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

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

dq=dat&0x01;

delayus(5);

dq=1;

dat=dat>>1;

_nop_();

}

}

//DS18B20读函数

intread()

{

inti,temp=0;

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

{

dq=0;

_nop_();

dq=1;

temp=temp>>1;

if(dq==1)temp=temp|0x80;

delayus(4);

}

return(temp);

}

voidds18b20()

{

ucharm,temp1,temp2;

dq=1;

initial();

write(0xcc);//跳过rom

write(0x44);//温度转换

dq=1;

initial();

write(0xcc);

write(0xbe);//读取ram

temp1=read();//读取高八位

temp2=read();//读取低八位

if(!

(temp2&0xf0))

{n=(temp1>>4)|(temp2<<4);flag=0;}

else

{m=(temp1>>4)|(temp2<<4);n=~m;n++;flag=1;}

}

voiddisplay()

{

a[0]=n%1000/100;

a[1]=n%100/10;

a[2]=n%10;

a[0]=a[0]+0x30;

a[1]=a[1]+0x30;

a[2]=a[2]+0x30;

}

voidkeyscan()

{

if(p14==0)

{

while(p14==0);

c++;

}

if(p15==0)

{

while(p15==0);

c--;

}

if(p16==0)

{

while(p16==0)

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

当前位置:首页 > 小学教育 > 语文

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

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