锅炉水温自动控制系统.docx

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

锅炉水温自动控制系统.docx

《锅炉水温自动控制系统.docx》由会员分享,可在线阅读,更多相关《锅炉水温自动控制系统.docx(30页珍藏版)》请在冰点文库上搜索。

锅炉水温自动控制系统.docx

锅炉水温自动控制系统

锅炉内胆动态水温实值控制设计

刘世斌(LIUSHI-bin)

(大庆石油学院华瑞学院自动控制工程系黑龙江哈尔滨150027;E-mail:

****************)

摘要:

本设计采用一块单片机(STC89C52)作为涡炉水温闭环控制系统的控制核心,实现人工设定温度,自动控制温度,显示水的实时温度等功能。

水温测试方式采用数字温度传感器DS18B20感知器皿中水的温度,通过单片机STC89C52与数字温度传感器DS18B20通讯获得实时温度,并通过程序实现闭环控制。

采用键盘扫描方式对目标温度(0℃~80℃或20~60℃)进行人工设定,并用LCD1602显示水的实时温度、给定温度及温度范围。

同时系统还通过继电器电路控制加热器件的导通与关闭,达到保持设定温度基本不变的目的,并起到强弱点隔离作用,安全可靠。

水温控制算法通过程序对给定温度与实时温度的判断,实现温度调节,其精确度可达1℃。

并设有一定的保护措施,当实时温度不在设定的安全温度范围时系统将报警。

关键词:

单片机(STC89C52),自动控制,闭环控制

Abstract:

Thisdesignusesamicrocontroller(STC89C52)asthevortexfurnacetemperaturecontrolsystem,closedloopcontrolcoreoftheartificialsettingsandautomatictemperaturecontrol,displayreal-timewatertemperatureandotherfunctions.TemperaturetestmethodusingdigitaltemperaturesensorDS18B20sensingthetemperatureofwaterincontainersthroughthemicrocontrolleranddigitaltemperaturesensorDS18B20STC89C52communicationaccessreal-timetemperature,andclosedloopthroughtheprogram.Usingthekeyboardscanningthetargettemperature(0℃~80℃or20~60℃)inartificialsettings,andwiththeLCD1602displayreal-timewatertemperature,foragiventemperatureandtemperaturerange.Systemalsocontroltheheaterthroughtherelaycircuitpartsturnonandoff,tomaintainthesettemperatureisessentiallythesamepurposeandhasplayedtheroleofstrongandweakpointofisolation,safeandreliable.Temperaturecontrolalgorithmforagiventemperaturethroughtheprocesswithreal-timetemperatureofthejudge,toachievetemperatureregulationwithanaccuracyupto1℃.Andhassomeprotectivemeasures,real-timetemperatureisnotsetwhenthesecuritysystemwillalarmwhenthetemperaturerange.Keywords:

microcontroller(STC89C52),automaticcontrol,closed-loopcontrol

Keywords:

microcontroller(STC89C52),automaticcontrol,closed-loopcontrol

 

1.系统设计

1.1设计要求

1.1.1基本要求

(1)要求采用直接数字控制(DDC)对锅炉水温进行控制,使其温度稳定在给定的值上;

(2)具有键盘输入温度给定值,能显示当前温度值;

(3)温度达到极限时提醒操作人员注意的功能。

1.1.2发挥部分

(1)具有设定温度范围的功能,并显示给定值、当前值及温度范围;

(2)温度控制精度达到1℃;

(3)采用软件实现闭环控制,降低成本;

(4)通过继电器实现对加热器件的控制,起到隔离保护作用。

1.2系统基本方案

根据题目要求,系统可以划分为控制器模块,温度测量模块,水温加热模块,显示模块。

最终选定的整体系统框图如图1.2.1所示。

为了实现各模块的功能,分别做了几种不同的设计方案并进行了论证。

图1.2.1

1.2.1各模块的方案选择和论证

(1)控制器模块

采用STC公司的STC89C52作为系统的控制器。

单片机算术运算功能强,软件编程灵活,自由度大,可用软件编程实现各种算法,并且具有功耗低,体积小,技术成熟,成本低廉等有点,使其在各个领域应用广泛。

(2)水温探测模块

水温探测模块用于测量器皿中水的温度。

系统需要利用测温传感器检测出水的实时温度,是控制模块做出正确的反应,控制水的温度。

采用单总线可编程温度传感器测温度。

DS18B20数字可编程温度传感器可测温范围-55℃~+125℃,在-10~+85℃时精度为0.5℃。

可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

并且其所需辅助电路简单,依靠程序直接读取温度,总费用低。

(3)显示模块

使用LCD1602液晶显示屏显示水温。

液晶显示屏(LED)具有轻薄短小,低耗电量,无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点,且显示更为人性化,电路焊接更为简单。

(4)水温控制模块

水温控制模块用来控制加热器件的导通与关闭,从而达到控制加热时间,控制水温的目的。

采用继电器驱动电路控制。

继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。

故在电路中起着自动调节、安全保护、转换电路等作用。

电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。

只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。

当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。

这样吸合、释放,从而达到了在电路中的导通、切断的目的。

对于继电器的“常开、常闭”触点,可以这样来区分:

继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。

2.单元电路设计

2.1水温测量电路的设计

2.1.1DS18B20单线数字温度传感器

序号

名称

引脚功能描述

1

GND

地信号

2

DQ

数据输入/输出引脚。

开漏单总线接口引脚。

当被用着在寄生电源下,也可以向器件提供电源。

3

VDD

可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

DS18B20的使用方法

 由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:

初始化时序、读时序、写时序。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

(1)DS18B20的复位时序

DS18B20单线数字温度传感器复位时序图

(2)DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

 对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。

DS18B20在完成一个读时序过程,至少需要60us才能完成。

DS18B20单线数字温度传感器读时序图

(3)DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

DS18B20单线数字温度传感器写时序图

(4)DS18B20单线数字温度传感器温度/数据转换关系

图表1

2.1.2DS18B20单线数字温度传感器电路

DS18B20单线数字温度传感器电路

2.2STC89C52控制电路

2.2.1STC89C52单片机管脚图

2.2.2STC89C52单片机最小系统及外围电路接口图

STC89C52单片机最小系统及外围电路接口图

2.3LCD1602液晶显示屏电路

2.3.1LCD1602液晶显示屏

(1)LCD1602液晶显示屏主要技术参数

(2)LCD1602液晶显示屏引脚说明

LCD1602液晶显示屏引脚图

1602采用标准的14脚接口,其中:

第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位双向数据线。

另外引脚"A"和"K"为背光引脚,"A"接正,"K"接负便会点亮背光灯。

这两个管脚可以不接置空。

(3)LCD1602液晶显示屏指令说明

LCD1602液晶显示屏指令表

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:

1为高电平、0为低电平)

指令1:

清显示,指令码01H,光标复位到地址00H位置

指令2:

光标复位,光标返回到地址00H

指令3:

光标和显示模式设置I/D:

光标移动方向,高电平右移,低电平左移S:

屏幕上所有文字是否左移或者右移。

高电平表示有效,低电平则无效

指令4:

显示开关控制。

D:

控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:

控制光标的开与关,高电平表示有光标,低电平表示无光标B:

控制光标是否闪烁,高电平闪烁,低电平不闪烁

指令5:

光标或显示移位S/C:

高电平时移动显示的文字,低电平时移动光标

指令6:

功能设置命令DL:

高电平时为4位总线,低电平时为8位总线N:

低电平时为单行显示,高电平时双行显示F:

低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符

指令7:

字符发生器RAM地址设置

指令8:

DDRAM地址设置

指令9:

读忙信号和光标地址BF:

为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:

写数据

指令11:

读数据

2.3.2LCD1602液晶显示屏显示电路图

LCD1602液晶显示屏与STC89C52连接显示电路图

2.4继电器电路

2.4.1继电器主要技术参数

HK4100F电磁继电器

主要技术参数:

型号:

HK4100F-DC5V-SH

外形尺寸(mm):

10.5*15.5*11.8mm(W*L*H)

触点形式:

1C(SPDT)触点负载:

3A220VAC/30VDC

阻抗:

≤100mΩ额定电流:

3A

电气寿命:

≥10万次机械寿命:

≥1000万次

阻值(士10%):

120Ω线圈功耗:

0.2W

额定电压:

DC5V吸合电压:

DC3.75V

释放电压:

DC0.5V工作温度:

-25℃~+70℃

绝缘电阻:

≥100MΩ

线圈与触点间耐压:

4000VAC/1分钟

触点与触点间耐压:

750VAC/1分钟

2.4.2HK4100F继电器驱动电路原理

HK4100F继电器驱动电路原理图如下图所示,三极管Q1的基极B接到单片机的P3.6,三极管的集电极极C接到继电器线圈的一端,线圈的另一端接到+5V电源VCC上;继电器线圈两端并接一个二极管IN4148,用于吸收释放继电器线圈断电时产生的反向电动势,防止反向电势击穿三极管Q1及干扰其他电路;R6和发光二极管LED1组成一个继电器状态指示电路,当继电器吸合的时候,LED1点亮,这样就可以直观的看到继电器状态了。

HK4100F继电器驱动电路原理图

(1)当STC89C52单片机的P3.6引脚输出低电平时,三极管Q1饱和导通,+5V电源加到继电器线圈两端,继电器吸合,同时状态指示的发光二极管也点亮,继电器的常开触点闭合,相当于开关闭合。

(2)当STC89C52单片机的P3.6引脚输出低电平时,三极管Q1截止,继电器线圈两端没有电位差,继电器衔铁释放,同时状态指示的发光二极管也熄灭,继电器的常开触点释放,相当于开关断开。

注:

在三极管截止的瞬间,由于线圈中的电流不能突变为零,继电器线圈两端会产生一个较高电压的感应电动势,线圈产生的感应电动势则可以通过二极管IN4148释放,从而保护了三极管免被击穿,也消除了感应电动势对其他电路的干扰,这就是二极管D1的保护作用。

2.5键盘电路

2.5.1键盘电路图

键盘电路图

2.5.2按键说明

S2调小给定温度值,每按一下给定温度值减一;

S3调大给定温度值,每按一下给定温度值加一;

S4切换温度范围,每按一下切换一次,默认为(0℃~80℃),还可切换为(20℃~60℃);

S6闭合则启动温度自动控制,断开则扫描按键。

2.6蜂鸣器报警电路

2.6.1蜂鸣器报警电路图

当STC89C52的P3.7端输出为高电平时,蜂鸣器则报警;当P3.7输出为低电平时,则属于正常情况,蜂鸣器不响。

3.软件设计

3.1软件框图

软件框图

3.2各模块主要程序

3.2.1LCD1602程序

#include

#include

#include"LCM1602.h"

#definelcd_rsP2_7

#definelcd_rwP2_6

#definelcd_eP2_5

#definelcd_busP0//数据指令的输入/输出端口

sbitP2_5=P2^5;

sbitP2_6=P2^6;

sbitP2_7=P2^7;

voiddel_nop(){;}

voiddel_1ms(uinttimecounter)//更好的延时程序1709

{

uintj;

registeri;

j=timecounter;

while

(1)

{

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

j--;

if(j==0)break;

}

}

/**********判断忙标志,返回的是一个位BF**********/

bitlcd_busy(void)

{

registerbflag;/*bflagisthebusyflagBF*/

lcd_rs=0;

lcd_rw=1;

_nop_();

lcd_e=1;

del_nop();

bflag=lcd_bus;

lcd_e=0;

return(bit)(bflag&0x80);/*returntheBFflagbit*/

}

/*********写命令,有两个参数,第一个是要写的命令控制字,

第二个是用来控制是否进行忙标志的判断。

busyflag=1:

判断;为0:

不判断****************/

voidlcd_wrcmd(ucharcmd,bitbusyflag)

{

if(busyflag==1)

while(lcd_busy());

lcd_bus=cmd;

lcd_rs=0;

lcd_rw=0;

del_nop();

lcd_e=1;

del_nop();

del_nop();

lcd_e=0;

lcd_bus=0xff;/*needed?

*/

}

/*********指定要显示的位置************/

voidmoveto(ucharposition)

{

ucharconstcmd=0x80;

position-=1;

if(position>32)/*如果大于32,则光标移回上一行*/

position=0;

if(position>=16)/*如果大于16,则光标移到下一行*/

position+=0x30;

//cmd=cmd|position;/*指定初始的位置*/

//lcd_wrcmd(cmd,1);

lcd_wrcmd(position|cmd,1);

}

/************向液晶片写数据***************/

voidlcd_wrdata(ucharlcddata)

{

while(lcd_busy());

lcd_bus=lcddata;

lcd_rs=1;

lcd_rw=0;

del_nop();

lcd_e=1;

del_nop();

del_nop();

lcd_e=0;

lcd_bus=0xff;

}

/************液晶片初始化***************/

voidlcd_init(void)

{

lcd_wrcmd(0x38,0);/*twolines,5x7,8bit*/

del_1ms(5);

lcd_wrcmd(0x38,0);/*twolines,5x7,8bit*/

del_1ms(5);

lcd_wrcmd(0x38,0);/*twolines,5x7,8bit*/

del_1ms(5);

lcd_wrcmd(0x38,1);

lcd_wrcmd(0x0c,1);

lcd_wrcmd(0x06,1);

lcd_wrcmd(0x01,1);

}

/************向液晶片写字符串***************/

voidlcd_wrstr(uchar*str,ucharposition)

{

registeri,j;

j=position;

moveto(j);

for(i=0;j<32,str[i]!

='\0';i++)

{

if(j++==17)moveto(17);

lcd_wrdata(str[i]);

}

}

3.2.2DS18B20程序

#include

#include

#include"LCM1602.h"

#defineBUSY1(DQ1==0)

sbitDQ1=P1^0;

//sbitDOWN_30=P3^0;

//sbitUP_31=P3^1;

sbitON_OR_OFF_35=P3^5;

//sbitRANGE_34=P3^4;

sbitCONTROL_36=P3^6;

sbitALARM_37=P3^7;

unsignedcharidataTMP=0;

voidwr_ds18_1(chardat);

unsignedcharrd_ds18_1();

/***************延时程序,单位us,大于10us*************/

voidtime_delay(unsignedchartime)

{

time=time-10;

time=time/6;

while(time!

=0)time--;

}

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

/*resetds18b20*/

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

voidds_reset_1(void)

{

unsignedcharidatacount=0;

DQ1=0;

time_delay(240);

time_delay(240);

DQ1=1;

return;

}

voidcheck_pre_1(void)

{

while(DQ1);

while(~DQ1);

time_delay(30);

}

voidread_ROM(void)

{

intn;

intROM[8];

ds_reset_1();

check_pre_1();

wr_ds18_1(0x33);

for(n=0;n<8;n++){ROM[n]=rd_ds18_1();}

}

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

/*Readabitfrom1820位读取*/

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

bittmrbit_1(void)

{

idatachari=0;

bitdat;

DQ1=0;_nop_();

DQ1=1;

_nop_();

_nop_();

_nop_();

_

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

当前位置:首页 > 总结汇报 > 学习总结

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

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