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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机控制课程设计论文
论文题目:锅炉温度51单片机的控制系统
目录
摘要---------------------------------------------------------------------------------------------3 一:引言---------------------------------------------------------------------------------------4 二:设计原理及仿真------------------------------------------------------------------------5 三:硬件电路---------------------------------------------------------------------------------6 3-1 微控制器AT89S52--------------------------------------------------------------7 3-2 晶振电路----------------------------------------------------------------------------7 3-3 复位电路----------------------------------------------------------------------------8 3-4 DS18B20芯片---------------------------------------------------------------------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和keil 3的结合来进行仿真测量。

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

关键词:单片机DS18B20 液晶显示器仿真模拟
一:引言
锅炉是一种能量转换设备,向锅炉输入的能量有燃料中的化学能、电能,锅炉输出具有一定热能的蒸汽、高温水或有机热载体。

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

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

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

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

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

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

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

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

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

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

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

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

如图2.1是proteus的仿真图。

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

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

图2.1 proteus的仿真图
三:硬件电路
3-1 微控制器AT89S52单片机
图3.1 AT89S52单片机
如图2.1是AT89S52单片机。

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

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

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

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

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

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

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

晶振电路如图2.2
图3.2 晶振电路
3-3 复位电路
复位电路是单片机最小系统中,必不可少的一个模块。

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

复位电路如图2.2。

图3.3 复位电路
3-4 DS18B20芯片
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.4 DS18B20芯片
3-5 液晶显示器
这里的液晶显示器我们选择了LM016L型号,如图2.4。

该液晶显示器是一种专门用于显示字母、数字、符号等点阵式LCD,下面我们给出了LM016L的一些主要计数参数:
显示容量:16*2个字符
芯片工作电压:4.5-5.5v
工作电流:2.0mA
模块最佳工作电压:5.0V
引脚功能说明:
编号符号引脚说明编号符号引脚说明
1 VSS 电源地8 D1 数据
2 VDD 电源正极9 D2 数据
3 VEE 液晶显示偏压10 D3 数据
4 RS 数据/命令选择11 D4 数据
5 RW 读/写选择12 D5 数据
6 E 使能信号13 D6 数据
7 D0 数据14 D7 数据
和DS18B20一样,在LM016L的程序中,都需要按照其规定的时序图来写对液晶的读写函数和初始化函数。

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

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

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

图3.6 控制电路
3-7 其他的硬件设备
这里仿真中,我们还用到了芯片74LS245、蜂鸣器、继电器、白炽灯、三极管等。

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

蜂鸣器是实现报警的。

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

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

四: 软件设计
4-1 锅炉温度控制系统结构框图
4-2 编程主要思想
DS18B20作为一个温度传感器的芯片,在与微控制器单片机进行连接通讯中,是单总线的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

虽然对于很多人来说这个论文题目比较简单,不过真正的做起来确实不是很轻松,包括在网上查找大量的DS18B20和LM016L的相关资料、word 排版问题……虽然我们经常熬夜来做这个,不过我们却知道了很多以前不知道的东西,知道了理论联系实际的重要性,感觉到了自己的进步!
参考文献
1.李全利主编:《单片机原理与接口技术》,高等教育出版社,2004年
2.俞金寿孙自强主编:《过程控制系统》,机械工业出版社,2013年
3.于海生主编:《计算机控制技术》,机械工业出版社,2007年
4.刘笃仁韩保君主编:《传感器原理和应用技术》,西安电子科技大学出版社,2003年
附录:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar world[]="Temperature:";
uchar a[8],i,c,b;
uchar n,k,j,flag=0;
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
sbit dq=P3^3;
sbit clk=P3^4;
sbit CLOCK=P3^5;
sbit BF=P0^7;
sbit p14=P1^4;
sbit p15=P1^5;
sbit p16=P1^6;
sbit p17=P1^7;
/*关于DS18B20的相关函数声明*/
void delayus(int i);
void initial();
void write(int dat);
int read();
void ds18b20();
void display();
void delayms(int i);
/*关于LM016L的相关函数声明*/
unsigned char busytest(void);
void writecontrol(unsigned condata);
void writedata(unsigned d);
void lcdinit(void);
void keyscan();
/*主函数*/
void main()
{
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);
}
}
/*微秒级别延时*/
void delayus(int i)
{
while(i--);
}
/*毫秒级别延时*/
void delayms(int i)
{
int j;
while(i--)
{
for(j=100;j>0;j--);
}
}
/*测忙函数*/
unsigned char busytest(void)
{
bit result;
RS=0;
RW=1;
E=1;
delayms(4);
result=BF;
E=0;
return result;
}
/*对LM016L的写函数控制*/
void writecontrol(unsigned condata) {
while(busytest()==1);
RS=0;
RW=0;
E=0;
delayus(2);
P0=condata;
delayus(4);
E=1;
delayms(4);
E=0;
}
/*对LM016L进行写数据*/
void writedata(unsigned d)
{
while(busytest()==1);
RS=1;
RW=0;
E=0;
P0=d;
delayus(4);
E=1;
delayms(4);
E=0;
}
/*对LM016L进行初始化*/
void lcdinit(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进行初始化
void initial()
{
dq=0;
delayus(70);
dq=1;
delayus(8);
while(1)
{
if(dq) break;
}
}
//DS18B20写函数
void write(int dat)
{
int i;
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读函数
int read()
{
int i,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);
}
void ds18b20()
{
uchar m,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;} }
void display()
{
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;
}
void keyscan()
{
if(p14==0)
{
while(p14==0);
c++;
}
if(p15==0)
{
while(p15==0);
c--;
}
if(p16==0)
{
while(p16==0);
b++;
}
if(p17==0)
{
while(p17==0);
b--;
}
}。

相关文档
最新文档