锅炉水温自动控制系统
锅炉内胆动态水温实值控制设计
刘世斌 (LIU SHI-bin)
(大庆石油学院华瑞学院 自动控制工程系 黑龙江 哈尔滨 150027;E-mail:
摘要:本设计采用一块单片机(STC89C52)作为涡炉水温闭环控制系统的控制核心,实现人工设定温度,自动控制温度,显示水的实时温度等功能。水温测试方式采用数字温度传感器DS18B20感知器皿中水的温度,通过单片机STC89C52与数字温度传感器DS18B20通讯获得实时温度,并通过程序实现闭环控制。采用键盘扫描方式对目标温度(0℃~80℃或20~60℃)进行人工设定,并用LCD1602显示水的实时温度、给定温度及温度范围。同时系统还通过继电器电路控制加热器件的导通与关闭,达到保持设定温度基本不变的目的,并起到强弱点隔离作用,安全可靠。水温控制算法通过程序对给定温度与实时温度的判断,实现温度调节,其精确度可达1℃。并设有一定的保护措施,当实时温度不在设定的安全温度范围时系统将报警。
关键词:单片机(STC89C52 ),自动控制,闭环控制
Abstract: This design uses a microcontroller (STC89C52) as the vortex furnace temperature control system, closed loop control core of the artificial settings and automatic temperature control, display real-time water temperature and other
functions. Temperature test method using digital temperature sensor DS18B20
sensing the temperature of water in containers through the microcontroller and digital temperature sensor DS18B20 STC89C52 communication access real-time
temperature, and closed loop through the program. Using the keyboard scanning the target temperature (0 ℃ ~ 80 ℃ or 20 ~ 60 ℃) in artificial settings, and with the LCD1602 display real-time water temperature, for a given temperature and
temperature range. System also control the heater through the relay circuit parts turn on and off, to maintain the set temperature is essentially the same purpose and has played the role of strong and weak point of isolation, safe and reliable. Temperature control algorithm for a given temperature through the process with real-time
temperature of the judge, to achieve temperature regulation with an accuracy up to 1 ℃. And has some protective measures, real-time temperature is not set when the security system will alarm when the temperature range. Keywords: microcontroller (STC89C52), automatic control, closed-loop control
Keywords: microcontroller (STC89C52), automatic control, closed-loop control
目录
1. 系统设计........................................................................................................................................ 3
1.1设计要求 . ............................................................................................................................ 3
1.1.1基本要求 . ................................................................................................................. 3
1.1.2发挥部分 . ................................................................................................................. 3
1.2系统基本方案 . .................................................................................................................... 3
1.2.1各模块的方案选择和论证 . ..................................................................................... 4
2. 单元电路设计 . ............................................................................................................................... 5
2.1 水温测量电路的设计 . ....................................................................................................... 5
2.1.1DS18B20单线数字温度传感器 .............................................................................. 5
2.1.2 DS18B20单线数字温度传感器电路 ..................................................................... 8
2.2 STC89C52控制电路 . ......................................................................................................... 9
2.2.1STC89C52单片机管脚图 . ....................................................................................... 9
2.2.2 STC89C52单片机最小系统及外围电路接口图 ................................................... 9
2.3LCD1602液晶显示屏电路 . .............................................................................................. 10
2.3.1 LCD1602液晶显示屏 . .......................................................................................... 10
........................................................................................................................................................ 11
2.3.2LCD1602液晶显示屏显示电路图 . ....................................................................... 12
2.4继电器电路 . ...................................................................................................................... 12
2.4.1继电器主要技术参数 . ........................................................................................... 12
2.4.2HK4100F 继电器驱动电路原理 . ........................................................................... 13
2.5键盘电路 . .......................................................................................................................... 14
2.5.1键盘电路图 . ........................................................................................................... 14
2.5.2按键说明 . ............................................................................................................... 14
2.6蜂鸣器报警电路 . .............................................................................................................. 14
2.6.1蜂鸣器报警电路图 . ............................................................................................... 14
3. 软件设计...................................................................................................................................... 15
3.1软件框图 . .......................................................................................................................... 15
3.2各模块主要程序 . .............................................................................................................. 16
3.2.1LCD1602程序 . ....................................................................................................... 16
3.2.2DS18B20程序 ........................................................................................................ 20
4. 系统整体电路图 . ......................................................................................... 错误!未定义书签。
4.1系统整体电路图 . .............................................................................. 错误!未定义书签。
5. 结束语.......................................................................................................... 错误!未定义书签。 参考文献......................................................................................................... 错误!未定义书签。
附录一 ............................................................................................................................................ 25 附录二 ............................................................................................................ 错误!未定义书签。
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单线数字温度传感器
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.2 DS18B20单线数字温度传感器电路
DS18B20单线数字温度传感器电路
2.2 STC89C52控制电路
2.2.1STC89C52单片机管脚图
2.2.2 STC89C52单片机最小系统及外围电路接口图
STC89C52单片机最小系统及外围电路接口图
2.3LCD1602液晶显示屏电路
2.3.1 LCD1602液晶显示屏
(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 电磁继电器 主要技术参数:
触点形式:1C (SPDT ) 触点负载:3A 220V AC/30V DC 阻 抗: ≤100mΩ 额定电流:3A
电气寿命:≥10万次 机械寿命:≥1000万次 阻值(士10%): 120Ω 线圈功耗:0.2W
额定电压:DC 5V 吸合电压:DC 3.75V
型 号 : HK4100F-DC5V-SH 外形尺寸(mm ):
释放电压:DC 0.5V 工作温度:-25℃~+70℃ 绝缘电阻:≥100MΩ
触点与触点间耐压:750VAC/1分钟
10.5*15.5*11.8mm(W*L*H) 线圈与触点间耐压:4000VAC/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" #define lcd_rs P2_7 #define lcd_rw P2_6 #define lcd_e P2_5
#define lcd_bus P0 //数据指令的输入/输出端口 sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7; void del_nop(){;}
void del_1ms(uint timecounter) //更好的延时程序 1709
{
uint j;
register i;
j=timecounter;
while(1) {
for(i=71;i>0;i--); j--; if(j==0) break;
} }
/**********判断忙标志,返回的是一个位BF**********/ bit lcd_busy(void)
register bflag; /*bflag is the busy flag BF*/ lcd_rs=0; lcd_rw=1; _nop_(); lcd_e=1; del_nop(); bflag=lcd_bus; lcd_e=0;
return(bit)(bflag&0x80); /*return the BF flag bit */ }
/*********写命令,有两个参数,第一个是要写的命令控制字, 第二个是用来控制是否进行忙标志的判断。 busyflag=1:判断;为 0:不判断****************/ void lcd_wrcmd(uchar cmd,bit busyflag) {
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 ?*/
/*********指定要显示的位置************/ void moveto(uchar position) {
uchar const cmd=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);
}
/************向液晶片写数据***************/ void lcd_wrdata( uchar lcddata) {
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;
/************液晶片初始化***************/ void lcd_init(void) {
lcd_wrcmd(0x38,0); /*two lines ,5x7,8 bit*/ del_1ms(5);
lcd_wrcmd(0x38,0); /*two lines ,5x7,8 bit*/ del_1ms(5);
lcd_wrcmd(0x38,0); /*two lines ,5x7,8 bit*/ del_1ms(5); lcd_wrcmd(0x38,1); lcd_wrcmd(0x0c,1); lcd_wrcmd(0x06,1); lcd_wrcmd(0x01,1); }
/************向液晶片写字符串***************/ void lcd_wrstr(uchar *str,uchar position) { register i,j; j= position; moveto(j);
for(i=0;j
if(j++==17) moveto(17);
lcd_wrdata(str[i]);
}
}
3.2.2DS18B20程序
#include #include #include "LCM1602.h"
#define BUSY1 (DQ1==0) sbit DQ1 = P1^0; //sbit DOWN_30=P3^0; //sbit UP_31=P3^1; sbit ON_OR_OFF_35=P3^5; //sbit RANGE_34=P3^4; sbit CONTROL_36=P3^6; sbit ALARM_37=P3^7; unsigned char idata TMP=0; void wr_ds18_1(char dat); unsigned char rd_ds18_1();
/***************延时程序,单位us, 大于10us*************/ void time_delay(unsigned char time) { time=time-10; time=time/6; while(time!=0)time--;
}
/*****************************************************/ /* reset ds18b20 */ /*****************************************************/ void ds_reset_1(void) {
unsigned char idata count=0;
DQ1=0;
time_delay(240); time_delay(240); DQ1=1; return;
}
void check_pre_1(void) { while(DQ1);
while(~DQ1); time_delay(30); }
void read_ROM(void) { int n; int ROM[8]; ds_reset_1(); check_pre_1(); wr_ds18_1(0x33);
for(n=0;n
}
/*****************************************************/ /* Read a bit from 1820 位读取 */ /*****************************************************/ bit tmrbit_1(void) {
idata char i=0; bit dat;
DQ1=0;_nop_();
DQ1=1; _nop_(); _nop_(); _nop_(); _nop_();
_nop_();
_nop_(); _nop_(); _nop_(); _nop_();
_nop_();
_nop_(); _nop_(); _nop_(); _nop_();
dat = DQ1;
time_delay(50); return dat;
}
/*****************************************************/ /* read a bety from ds18b20 字节读取 */ /*****************************************************/ unsigned char rd_ds18_1() {
unsigned char idata i,j,dat=0;
for(i=1;i
{
j=tmrbit_1(); dat=(j
}
return dat;
}
/*****************************************************/ /* write a bety from ds18b20 写字节 */ /****************************************************/ void wr_ds18_1(char dat) { signed char idata i=0; unsigned char idata j; bit testb; for(j=1;j
{
testb=dat & 0x01; dat = dat>>1; if(testb)
{
DQ1=0;
_nop_();
_nop_();
DQ1=1;
time_delay(60);
} else
{
DQ1=0; time_delay(50); DQ1=1;
_nop_();
_nop_();
}
}
}
int get_temp(void) { unsigned char idata a=0,b=0; unsigned char idata i; EA=0; ds_reset_1(); check_pre_1();
wr_ds18_1(0xcc); wr_ds18_1(0x44);
while(BUSY1); ds_reset_1(); check_pre_1();
wr_ds18_1(0xcc); wr_ds18_1(0xbe); a=rd_ds18_1();
b=rd_ds18_1();
}
i=b; /*若b 为1则为负温 */ i=(i>>4); if(i==0) { } else {
ALARM_37=1; TMP=((a>>4)|(b8) { }
TMP=TMP+1;
del_1ms(3000); } EA=1; return(TMP);
ALARM_37=0;
附录一 主程序: void main(void) {
//unsigned char show;
int
unsigned it_j=0,time_delay;
count_temp,count_temp_h,count_temp_l,given,given_h,given_l,range_h=80,range_l=20,bit_i=0,b
unsigned char code table1[10]={"0123456789"}; while(1) {
P3=0xff;
CONTROL_36=0;
ALARM_37=0;
lcd_init();
lcd_wrstr("RANGE_TEMP:",1); lcd_wrstr("COUNT_TEMP:",17); lcd_wrstr("/",30); del_1ms(1000); given=get_temp(); del_1ms(1000); given=get_temp(); given_h=given/10; given_l=given%10; if(given>99) ALARM_37=1; else {
lcd_wrstr("00~80",12); moveto(28);
lcd_wrdata(table1[given_h]); lcd_wrdata(table1[given_l]); moveto(31);
lcd_wrdata(table1[given_h]); lcd_wrdata(table1[given_l]);
}
while(ON_OR_OFF_35) {
CONTROL_36=0; ALARM_37=0; switch(P3) {
case 0x3d :
if(given
ALARM_37=1;
for(time_delay=0;time_delay
if(given>range_l) given=given-1; else {
ALARM_37=1;
for(time_delay=0;time_delay
case 0x2f :
bit_i=!bit_i; bit_j=1; break; default:; } while(bit_j) {
if(bit_i==0) {
lcd_wrstr("00~80",12); range_h=80; range_l=0; } else {
lcd_wrstr("20~60",12); range_h=60; range_l=20;
if(given>60||given
given_h=given/10; given_l=given%10; moveto(31);
lcd_wrdata(table1[given_h]); lcd_wrdata(table1[given_l]); bit_j=0;
for(time_delay=0;time_delay
}
}
while(ON_OR_OFF_35==0) {
count_temp=get_temp(); del_1ms(1000);
count_temp_h=count_temp/10; count_temp_l=count_temp%10; moveto(28);
lcd_wrdata(table1[count_temp_h]); lcd_wrdata(table1[count_temp_l]);
while(count_temprange_h) P3=0x9f; if(count_tempgiven) P3=0x1f; }
} }
致谢:
不积跬步无以至千里”,这次毕业论文能够最终顺利完成,归功于各位老师四年间的认真负责,使我能够很好的掌握专业知识。也正是你们长期不懈的支持和帮助才使得我的毕业论文最终顺利完成。最后,我向中华瑞学院的全体老师们再次表示衷心感谢:谢谢你们,谢谢你们四年的辛勤栽培
作者简介;刘世斌 男 黑龙江哈尔滨人 1987年11月23生 本科 现就读于华瑞学院