温室温度自动控制系统设计毕业论文Word文件下载.docx
《温室温度自动控制系统设计毕业论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《温室温度自动控制系统设计毕业论文Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
当所设定的温度值比采集的温度大时,通过加热器加热,以达到设定值;
反之,开启降温风扇,以快速达到降温效果。
该系统对温度的控制范围在20℃——30℃,温度控制的误差小于等于0.5℃。
通过使用该系统,对蔬菜大棚内的温度进行有效、可靠地检测与控制,保证大棚内作物在最佳的温度条件下生长,提高质量和产量。
图1系统原理框图
第2章温室控制系统硬件设计
该系统分为六个模块,分别是单片机系统模块、温度采集模块、显示模块、键盘扫描模块、加热模块和降温模块。
现分别介绍如下:
2.1基于AT89C51的单片机系统
本系统采用Atmel公司所生产的MCS—51系列中的AT89C51单片机[4]。
主芯片的功能:
AT89C51单片机系统如图2所示:
图2单片机系统
这个系统由两部分组成,现介绍如下:
AT89C51的内容:
2.1.1时钟脉冲
AT89C51内部已具备振荡电路,只要在接地引脚上面的两个引脚(即19、18脚)连接简单的石英晶体即可。
AT89C51的时钟频率为12MHz。
2.1.2复位电路
AT89C51的复位引脚(Reset)[5]为第9脚,当此引脚连接高电平超过2个机器周期(一个机器周期为6个时钟脉冲),即可产生复位的动作。
以12MHz的时钟脉冲为例,每个时钟脉冲1us,两个机器周期为12us,因此,在第9脚上连接一个12us以上的高电平脉冲,即可产生复位的动作。
对于上电复位,复位引脚上串接了一个电容,当复位引脚接+5伏电压时,电容相当于短路,经过一段时间(在这段时间内完成复位)后,电容处于充电状态,相当于断开。
还有一种是手动复位,它的接法是在AT89C51复位引脚所串连的电容上并联接一个按钮开关。
当按钮没按下时,电容处于充电状态;
当按钮按下时,电容对复位引脚放电,从而在这个引脚上产生高电平,达到复位的目的。
2.2温度采集模块
本系统的温度采集和转换电路原理图如图3所示,它的工作过程为:
系统通过AD590[6]采集外界的温度参数,并通过三个放大器的作用将温度转化为电流模拟量;
此模拟量通过ADC0804[7]的转化变成数字量,以便单片机辨认接收。
图3AD590温度传感器工作的系统结构电路图
根据电路图,说明各个器件的功能如下:
温度传感器AD590的功能:
如上图3所示:
OPA1:
以0℃为标准,调节可变电阻R10使其输出电压为2.73伏特。
OPA2:
减2.73伏特,并反相。
OPA3:
放大5倍并反相。
例如:
AD590输出电压为1.5伏特,则其温度为:
1.5/5(OPA3)+2.732(OPA2=3.032伏特;
3.032/10K=303.2微安培;
303.2-273.2=30微安培→30℃。
注意:
ADC0804的VREF=2.56V。
表1各温度与3个OPA及ADC0804的输入与输出关系
温度值
OPA1
OPA2
OPA3
ADCVIN
ADC输出值
0℃
2.732V
0V
00H
10℃
2.832V
-0.1V
0.5V
19H
20℃
2.932V
-0.2V
1V
32H
30℃
3.032V
-0.3V
1.5V
4BH
40℃
3.132V
-0.4V
2V
64H
50℃
3.232V
-0.5V
2.5V
7DH
60℃
3.332V
-0.6V
3V
96H
70℃
3.432V
-0.7V
3.5V
AFH
80℃
3.532V
-0.8V
4V
C8H
90℃
3.632V
-0.9V
4.5V
E1H
100℃
3.732V
-1V
5V
FAH
2.2.1AD转换器ADC0804的功能
图4ADC0804
(1)如图4所示,所谓A/D转换器就是模拟/数字转换器,是将输入的模拟信号转换成数字信号。
信号输入端的信号可以是传感器或是转换器的输出,而ADC输出的数字信号可以提供给微处理器,以便更广泛地应用。
(2)ADC0804电压输入与数字输出关系如下表2所示:
表2ADC0804电压输入与数字输出关系
十六进制
二进制码二
与满刻度的比率
相对电压值VREF=2.56伏
高四位字节
低四位字节
高四位字节电压
低四位字节电压
F
1111
15/16
15/256
4.800
0.300
E
1110
14/16
14/256
4.480
0.280
D
1101
13/16
13/256
4.060
0.260
C
1100
12/16
12/256
3.840
0.240
B
1011
11/16
11/256
3.520
0.220
A
1010
10/16
10/256
3.200
0.200
9
1001
9/16
9/256
2.880
0.180
8
1000
8/16
8/256
2.560
0.160
7
0111
7/16
7/256
2.240
0.140
6
0110
6/16
6/256
1.920
0.120
5
0101
5/16
5/256
1.600
0.100
4
0100
4/16
4/256
1.280
0.080
3
0011
3/16
3/256
0.960
0.060
2
0010
2/16
2/256
0.640
0.040
1
0001
1/16
1/256
0.320
0.020
0000
VIN=3V,由上表可知2.880+0.120=3V,为10010110B=96H。
(3)AD590产生的电流与绝对温度成正比,它可接收的工作电压为4V——30V,检测的温度范围为-55℃——+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流增加1微安培。
当摄氏温度为0℃时,AD590的电流为273.2微安培,经10千欧姆电阻后其电压为2.732伏特。
余者依上述方法类推。
(4)利用AD590以及接口电路把温度转换成模拟电压,经由ADC0804转换成数字信号后传送给AT89C51处理。
(5)温度采集和AD590温度传感器工作的系统结构电路图为图3.2。
2.3显示模块
译码IC及温度显示的电路图如图5所示。
显示部分的工作原理是,它将温度转换的数字量,即温度值,经由AT89C51的P1口由两个译码IC输出并分别送入两个七段数码管显示[8],这两个LED都是共阳极的。
图5译码IC及温度显示
2.3.1译码IC7447
BCD码转换成7段LED数码管的译码驱动IC,如图6所示,首推7447系列,包括7446、7449、74LS49[9]。
其中的7446及7447输出低电平驱动的显示码,用以推动共阳极7段LED数码管;
而7448及74LS49输出高电平驱动显示码,用以推动共阴极7段LED数码管,7446、7447与7448的引脚相同(双并排16pins)。
7447引脚说明:
1、D、C、B、A:
BCD码输入引脚。
2、a、b、c、……g:
7段数码管输出引脚。
3、/LT:
本引脚为测试引脚,当接高电平时,所连接的7段LED数码管全亮。
正常显示下应接低电平。
4、/RBI:
本引脚为涟波淹没输入引脚,正常显示下应接低电平。
5、/BI和/RBO:
本引脚为淹没输入或涟波淹没输出引脚,正常显示下应接低电平。
图6译码IC7447
2.3.2七段LED数码管
7段LED数码管是利用7个LED组合而成的显示设备,可以显示0到9共10个数字。
当要显示多个数码管,可分别驱动每个数码管;
当要利用人类的视觉暂留现象,则可以采用快速扫描的方式,只要一组驱动电路即可达到显示多个数码管的目的。
一般来说,7段LED数码管可分为共阳极和共阴极两种,共阳极就是把所有LED的阳极连接到共同的接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);
同样的,共阴极就是把所有LED的阴极连接到共同的接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点)。
2.4键盘扫描
图7是键盘扫描的电路图,其中74922[10]是键盘扫描IC。
键盘扫描电路的原理是,将键盘接在一个键盘扫描IC74922上,当在键盘上按下键时,相关的键码将通过74922的A、B、C、D口线传递给AT89C51单片机。
图7键盘扫描电路
2.4.1键盘
本键盘采用电话式键盘,其结构如图8所示。
键盘是接在键盘扫描IC74922(上图7所示)上面的,键盘的输入通过74922的X1——X4和Y1——Y4输入。
X1X2X3
Y1
*
#
图8电话式键盘
但鉴于键盘扫描IC为4*4形式,以下键盘编码每行后面都有0FFH,以配合硬件使用。
按键及分别对应的键盘编码如表3所示:
表3键盘编码
按键
对应编码
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
OBH
2.4.2键盘扫描芯片
键盘扫描芯片74922的图形如图7所示。
键盘扫描IC74922的工作过程是这样的:
X1——X4接键盘的行,Y1——Y4接键盘的列,按键信息由这几个口输入,由A、B、C、D四个口输出到P3口的低四位,再通过P1口经过译码IC显示在LED上。
键盘扫描芯片不断查询是否有按键输入,当查询到有按键时,DA置1,同时执行相应的程序,比较温度是否超出上、下限,进而决定是加热还是降温。
第3章软件设计
本系统的工作流程是,操作人员可以从键盘上输入要设定的温度值。
当此温度值与当前温度不同时,单片机控制系统采取调节的动作。
当设定温度大于测定温度时,则使加热器工作;
当设定温度小于测定温度时,则开启降温风扇。
此程序流程包括4个部分。
第一部分是主程序,它描述的是程序的总体结构;
第二部分是定时器T0的描述,它的功能是将实际温度和设定的温度比较,再作出相应的动作;
第三部分是键盘扫描部分;
第四部分是显示部分,用于显示温度值(系统总程序见附录2)。
3.1主程序
主程序流程图如图9所示:
图9主程序流程图
本温度控制系统的主程序流程图,温度控制系统采用温度传感器AD590采集温度数据,再由ADC0804模数转换器将温度转化为单片机可以处理的数据。
本系统将温度总体控制在20℃到30℃之间,并且可以通过键盘输入要设定的温度值,并通过7段数码管显示出来。
在整个系统的运行期间,有一个定时器T0中断每隔20ms扫描一次,用于当前温度与设定温度的比较,然后发出加温或降温的命令。
程序代码如下:
ORG00H
JMPSTART
ORG0BH
JMPTIM0;
定时器T0中断子程序
START:
MOVTMOD,#01H;
选择TIMER0,MODE1
MOVTH0,#60
MOVTL0,#76
SETBTR0;
启动定时器T0
MOVIE,#82H
MOVR4,#09H;
(30H)--(38H)寄存器
MOVR0,#30H
CLEAR:
MOV@R0,#00H;
清除RAM(30H)--(38H)
DJNZR4,CLEAR
MOVA,#00H
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOV34H,A;
(34H)为上限温度--30度
MOVA,#01H
MOV35H,A;
(35H)为下限温度--20度
MOV36H,#0FFH;
(36H)为存储的旧温度值
START0:
MOVX@R0,A;
/WR=0,ADC0804开始转换
WAIT:
JBP3.4,KEYIN;
P3.4=1表示有按键,转往按键子程序
JBP2.0,ADC;
检测ADC0804转换完成否?
P2.0=1,
;
则完成
JMPWAIT
ADC:
MOVXA,@R0;
将转换好的数据送入累加器
MOV37H,A;
温度的比较。
将现温度值存入37H
CLRC
SUBBA,36H;
现温度值减去旧温度寄存器的值
JCTDOWN
TUP:
MOVA,37H;
将现温度值存入A
SUBBA,34H;
与上限温度作比较
JNCPOFF;
C=0表示比上限温度大,必须停止加热
JMPLOOP
PON:
CLRP2.1
JMPSTART0
POFF:
SETBP2.1;
继电器不动作,即停止加热
TDOWN:
SUBBA,35H;
与下限温度作比较
JCPON;
C=1表示比下限温度小,须加热
LOOP:
MOV36H,37H;
将现温度值存入36H中
CLRA
MOVR4,#0FFH;
延迟
DJNZR4,$
CALLL1;
二--十进制转换程序
MOV21H,#10H;
显示延迟
NOVR1,#30H
DISP1:
CALLDISP;
温度值的显示
DJNZ21H,DISP1
3.2定时器T0中断
定时器T0中断的工作流程如图10所示。
当定时器T0发生中断时,就将按键输入的设定的温度值与当前的温度值比较。
当输入的温度值大于当前测定的温度值,单片机就控制加热器加热;
当设定的温度值小于当前测定的温度值,就开启降温风扇。
图10定时器T0中断子程序
TIM0:
PUSHACC
PUSHPSW
MOVTH0,#60;
重设中断时间
MOVA,33H
CJNEA,31H,T;
设定温度的十位是否等于所
;
测温度的十位数
MOVA,32H
CJNEA,30H,T;
设定温度的个位是否等于所
测温度的个位数
JMPOFF;
个位相等,则令加热器停止加热
T:
JCOFF;
设定温度小于现在温度,停止加热
CLRP2.1;
否则加热
RETURN:
POPPSW
POPACC
RETI
OFF:
停止加热
JMPRETURN
DELAY:
MOVR7,#06;
显示器扫描时间
D1:
MOVR6,#248
DJNZR6,$
DJNZR7,D1
RET
3.3显示模块
显示子程序流程图如图11所示:
(说明:
30H用于暂时存放要显示温度的高四位,31H用于暂时存放要显示温度的低四位,38H用于存放最终要显示在7段数码管上的温度值;
D1、D2分别表示两个7段数码管的存储地址。
)
图11显示子程序
系统提供温度的显示功能,将温度用两个7段数码管显示出来。
程序如下:
DISP:
MOVA,@R1
ANLA,#0F0H;
D1值:
取(30H)高4位
SWAPA
MOV38H,A
INCR1
ANLA,#0FH;
D2值:
取(31H)低4位
ORLA,38H;
D1,D2合成为8位
MOVP1,A;
送给7段数码管显示
CALLDELAY;
扫描延迟
3.4按键扫描
按键扫描子程序流程图如图12所示:
图12按键子程序
将键盘接在一个键盘扫描IC74922上,所按键将被此芯片处理后传送给单片机处理。
工作流程如图12所示。
如果要设定新的温度值,操作流程为:
按“*”→要设定的温度值→按“*”,这样就完成了温度的设定。
KEYIN:
JBP3.4,$;
有按键,放开否?
MOVA,P3;
是则读74922的按键值
取有效的低4位
MOVDPTR,#TABLE;
至TABLE取键盘转换码
XRLA,#0AH;
是否按“*”?
JNZSTART0;
不是,回到现在温度模式
JBP3.4,KEYIN1;
有新的按键否?
MOVR1,#32H;
无,设定温度显示地址
显示设定温度地址中的值
MOVR5,4FH;
几秒钟后无按键则自动解除
设定温度模式
D4:
MOVR7,#0FFH
D3:
MOVR6,#0FFH
D2:
JBP3.4,KEYIN1
DJNZR6,D2
DJNZR7,D3
DJNZR5,D4
KEYIN1:
按键放开否?
MOVA,P3;
放开则读74922键盘值
ANLA,#0FH
MOVDPTR,#TABLE
MOV20H,A;
按键值存入(20H)
JZX1;
是,则温度设定完成
MOVA,20H
XRLA,#0BH;
"
#"
未设定键
JZWAIT1
MOVA,20H;
不是"
*"
、"
,则为数字键
XCHA,32H;
按键值存入(32H),(33H)
XCHA
附录
附录1系统电路图
附录2源程序代码
程序要完成的功能是将总体温度控制在20℃——30℃之间,在这个范围内,可以设定任一温度值,并使之达到恒温效果;
如果超出这个范围,则程序自动控制继电