温室大棚温度控制Word文档格式.docx
《温室大棚温度控制Word文档格式.docx》由会员分享,可在线阅读,更多相关《温室大棚温度控制Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
5总结体会-14-
6参考文献-15-2
附录一:
系统硬件电路原理图13
附录二:
恒温控制程序-16-
1绪论
随着生活条件的不断改善,人们更关注自身的健康,绿色蔬菜尤其受到重视。
大棚种植充分满足了人们的需求,但对于和农作物生长密切相关的大棚温度的控制。
对于大棚种植而言,良好的物种、本地适合种植的物种及土地酸碱度都是可以通过农民长期的种植经验获得的。
但是温度是农民不能轻易解决的问题,而且温度的变化幅度大,不易人工控制,对于农民来说时刻关注作物的生长温度是个庞大的工作量。
“白天太阳很好,阳光充足,
外面的温度零下5度如果大棚的薄膜没有破,里面照样产生有25度以上的温度,从而地温也可以得到提升至15度左右。
漆黑大风的夜晚棚内的温度会大幅度降低,能降低到零下5度以下,停止刮风可以恢复到较地温少低点为止。
”这些专业知识对于常年种植的农民也未必了解。
应用于大棚种植的温度控制系统解决了长期以来困扰农民的问题,它的制作成本低廉,应用广泛,对农民自身的素质要求不高,便于农民操作。
更重要的是,它不仅帮助农民节约了大量,还在无形之中提高了作物的产量,增加了农民的收入,满足了人们对大棚蔬菜的需求。
基于单片机的大棚温度控制系统是个小型的软硬件结合的产品,它针对个体农民的需要设计,适于中小面积的大棚种植。
大棚蔬菜满足了人民能一年四季吃到新鲜蔬菜的愿望,为提供更多量、更有营养价值
的蔬菜,智能的大棚温度控制系统已成为农民的迫切需要。
以AT89C2051单片机为主的温
度控制系统可对大棚内部的温度进行模拟和蔬菜所需的正常温度进行比较,以人性化的方式向大棚管理人员提供温度调节的信息,帮助农民提高农作物的产量,减少农民的工作量。
温度控制系统采用AT89C2051单片机为核心。
大棚温度采用AD590集成温度传感器检测。
该系统成本低,操作方便,设计人性化,具有良好的推广价值。
2总体方案设计
在温室大棚的方案设计中,我们采用温度传感器,A/D转换器等措施,并加入报警电
数码管显示
路,大大提高了温度控制的准确性。
温度传感器
报警器
键盘输入
键盘控制
图1系统组成结构图
3系统硬件的设计
3.1单片机AT89C2051
PDIP/SOIC
1
20
2
W
3
u
4
5
谄
6
15
7
14
a
13
9
12
10
11
F1ST/VPP匚(RXD)P30匚(TXD)P3.1匚XTAL2CXTAL1匚(INTO)(INTi)F33匚
(TO)P3.4匸(T1)P3.6CGND匚
jvec
□Pl7
□Pl6
□Pi5
□PI4
□3
□PI2
□P1.1(AlNt)
□P10(AINO)
□P37
图2AT89C2051引脚图
AT89C2051(以下简称2051)是一种低功耗、高性能的8位CMO繳控制器芯片,片内带2KB的快闪可编程及可擦除只读存储器(FPERO)它于MCS-51指令系统兼容,片内FPERO允许对程序存储器在线重新编程,也可以用常规的EPRO编程器编程。
ATME的2051将具有多种功能的8位CPU与FPERO结合在同一芯片上,为很多嵌入式控制应用提供了高度灵活且价格适宜的方案。
2051还增加了在零频下工作的静态逻辑方式及两种软件可选的省电模式。
在其中,在闲置模式下,CPU停止工作,但RAM定时器、计数器、串行口和终端系统仍在工作。
在掉电模式下,只保存RAM勺内容,振荡器停振,关闭芯片的所有
其它功能,直到下一次硬件复位为止。
89C2051主要性能如下:
1.与MCS-51产品兼容。
2.2KB的在线可重复编程快闪存储器,寿命可达1000次写/擦除周期。
3.宽工作电压范围为2.7V~6V。
4.全静态工作方式:
0Hz~24Hz。
5.两级程序存储加密。
6.128*8位SRAM
7.15条可编程I/O线。
8.2个16位定时器/计数器。
9.5个中断电源。
10.可编程串行通道。
11.可直接驱动LED
12.有片内精密模拟比较器。
13.低功耗的闲置与掉电模式。
14.软件设置睡眠和唤醒功能。
15.可编程UARL通道。
16.两个16位可编程定时/计数器。
P3口还用于实现AT89C2051的各种第二功能,如下表所列:
P3口管脚
备选功能
P3.0
:
RXD串行输入端口—
P3.1
TXD串行输出端口
P3.2
INT0外中断0
P3.3
INT1外中断1
P3.4
T0定时器0外部输入:
P3.5
T1定时器1外部输入
表1P3口管脚备选功能
3.2AD590集成温度传感器
图3AD590集成温度传感器引脚图
AD590是美国ANALOGDEVICE公司的单片集成两端感温电流源,其输出电流与绝对温度成比例。
在4V至30V电源电压范围内,该器件可充当一个高阻抗、恒流调节器,调节系数为1卩A/K片内薄膜电阻经过激光调整,可用于校准器件,使该器件在298.2K(25°
C)时输出298.2讥电流;
AD590适用于150°
C以下、目前采用传统电气温度传感器的任何温度检测应用。
低成本的单芯片集成电路及无需支持电路的特点,使它成为许多温度测量应用的一种很有吸引力的备选方案。
应用AD590时,无需线性化电路、精密电压放大器、电阻测量电路和冷结补偿;
除温度测量外,还可用于分立器件的温度补偿或校正、与绝对温度成比例的偏置、流速测量、液位检测以及风速测定等。
AD590可以裸片形式提供,适
合受保护环境下的混合电路和快速温度测量;
AD590特别适合远程检测应用。
它提供高阻
抗;
电流输出,对长线路上的压降不敏感。
任何绝缘良好的双绞线都适用,与接收电路的距离可达到数百英尺。
这种输出特性还便于AD590实现多路复用:
输出电流可以通过一个CMO多路复用器切换,或者电源电压可以通过一个逻辑门输出切换。
主要指标:
1.测温范围:
-55~+150V。
2.输出电流It与绝对温度T成正比:
匸aT(uA),其中a=1uA/K,+25°
C(298.2k)时IT=298.2MA
3.线性误差土0.3Co
4.电源电压:
4-30V。
5.输出电阻为710mQ
3.3系统报警电路
报警电路是超过设定的范围,单片机输出信号驱动蜂鸣器发声警报,如图所示,当BDLL端为低电平时,有电流通过蜂鸣器,蜂鸣器报警,反之不报警。
+5V
图4报警电路
3.4A/D转换器的设计
利用比较器、定时器测量电容的充电时间。
Up=R2E/(R1+R2)、Cduc/dt=lt、Uc=Tt/C,当Up=Uc时Up=h/C*tt,
tT=Cup/aTo
3.5系统的电源电路设计
在温室大棚系统中,单片机需要+5V电源供电,所以必须要有一种稳压电路,在此设计由7805组成的5V输出的电源电路。
IC采用集成稳压器7805,C1、C2分别为输入端和输出端滤波电容,RL为负载电阻。
二极管VD1VD2起保护作用。
图5+5V稳压电源电路
3.6相关硬件电路设计
1、显示:
8位字形口,4位位置口。
2、键盘:
+、-、set(设置键)、esc(取消键)
3、测温电路:
3条I/O脚(Pl.0、Pl.1、P3.6)。
4、热丝驱动:
1I/O脚。
5、串行I/O扩展:
2I/O脚
3.6.1温度检测电路
图6温度检测电路图
图7温度检测电路图
4系统软件的设计
4.1主流程图设计
C复位°
初站化
丄
幵扫描走时
幵中断
否
猜泗I昱定时
pi.1M1
X
取丫则星吋I司TO^ljTP
计算UTC
~nr~
屮亘温扌空制
同」新当苛温
铤盘魁理
图8主程序流程图
4.2中断服务流程图设计
4.3键盘处理流程图
图10键盘处理流程图
4.4键盘扫描及流程图
图11键盘扫描流程图
5总结体会
这次课程设计是我们专业课程知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程。
”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。
说起课程设计,我认为最重要的就是做好设计的预习,选一个自己有兴趣的题目;
其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。
最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
我在两周内认真的进行本次课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.通过这次恒温控制设计,本人在多方面都有所提高,综合运用本专业所学课程的理论和生产实际知识进行一次实际训练从而培养和提高学生独立工作能力,独立思考的能力也有了提高。
在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢我们的鞠晓君老师和一组的同学们,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;
老师循循善诱的教导和不拘一格的思路给予我无尽的启迪。
和同学们一起探讨研究合作,也让我学到了很多,感受颇深,受益匪浅。
6参考文献
1.张毅刚等主编.单片机应用技术.哈尔滨工业大学出版社
2.王兆安黄俊主编.电力电子技术.机械工业出版社
3.孙传友等主编.测控电路及装置.北京航空航天大学出版社
4.陈治明主编.电力电子器件基础.机械工业出版社
5.朱一轮主编.智能仪器基础.电子工业出版社
6.何希才主编.传感器及其应用电路.电子工业出版社
7.于春勇主编.温室大棚自动控制系统.中国农业出版社
8.杨彬主编.温室温、湿度智能控制系统的研究.甘肃农业大学
系统硬件电路原理图
ftSCCETCDP1
lk7
Y0
A0
D0
Y1
A1
Y2
A2
6
—Dz
Y3
A3
8
D3
OE
U2:
A
18
C1
4.7uF
R11
1K
76543RRRRR
C4
C3
S4
S3
P3.1/TXD
P3.0/RXD
33pF
卜
T
L4
I89C2051
P3.7
P3.5/T1
P3.4/T0
P3.3/INT1
P3.2/INT0
RST
XTAL2
XTAL1
U3
4|
Crossing
Zero
j£
MOC3031M
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
R12
74HC240
D[0..3]
D2
R9
2K
G
SET
ESC
C2(+)
(A)
INCIDEC
R10
3K
恒温控制程序
/*单片机恒温控制程序
(1)单片机型号89C2051,时钟频率12MHz
(2)P3口作为字型口
P3.0~P3.7(除P3.6)对应七段LED?
段a~g,低电平亮;
2051内部模拟比较器输出经P3.6脚输入。
(3)P1口的使用:
P1.0~P1.1为内部模拟比较器输入脚;
P1.2为键盘输入脚;
P1.3为加热控制输出脚;
P1.4~P1.7为显示/键盘扫描输出线,对应#0~#3位置,低电平有效;
(4)利用T0作为A/D转换定时器(单位1us)o
(5)利用T1作为5mj键盘/显示扫描定时器。
*/#include<
Reg51.h>
#includevintrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineTC1(-5000)
/*T15ms时间常数*/
#defineSTFH100
/*
闪烁周期500ms单位5ms*/
#defineSTC200
米样1s疋时常数,单位5ms*/
#defineKTC113
重发键延时,单位20ms*/
#defineKTC28
重发键周期,单位20ms*/
#defineKSET1
/*SET键值*/
#defineKINC2
/*+
键值*/
#defineKDEC3
/*-
#defineKESC4
/*ESC键值*/
#defineFSPC0xff
空字型*/
#defineFNGS0xbf
负号字型*/
#defineTUP1300
设定温上限,单位0.1r*/
#defineTLOW-300
设定温下限,单位0.1r*/
#defineTDA3
温度控制死区,单位0.1r*/
constfloatCVp=2e+6;
计算常数*/
sbitAI0=P1A0;
比较器+输入脚*/
sbitAl1=P1A1;
比较器-输入脚*/
sbitKI=P1A2;
键盘输入脚*/
sbitHT=P1A3;
加热输出脚*/
sbitCMP=P3A6;
比较器输出脚*/
uchardbuf[4];
显示缓冲区*/
ucharkey;
/*
bitDTC,STF;
当前温度显示、采样时间到标志
voidfresh(int,uchar,uchar*);
显示刷新函数*/
voidthermost(int,int);
恒温控制函数*/
intkbfun(uchar,int*);
键盘处理函数*/
/*主函数*/
main()
{uinttp;
电容C2充电时间*/
inttem,stem;
当前温度、设定温度*/
TMOD=0x11;
定时器1工作在定时方式、16位计数、
TH1=TC1>
>
8;
装入定时器1时常*/
TL1=TC1;
Al仁0;
关闭C2充电*/
key=0;
清键值*/
DTC=1;
置当前温度显示态*/
STF=1;
置采样时间到标志*/
stem=250;
设定温初值25r(单位0.1r)*/
fresh(0,4,dbuf);
显示0.0*/
IE=0x88;
开中断,允许定时器1请求中断*/
TR1=1;
启动定时器1*/
while
(1)/*
工作循环*/
{if(_testbit_(STF))/*
若米样时间到*/
{TH0=0;
清T0计数器*/
TLO=O;
*/
内启动*/
开始C2充电*/开始T0计时*/
等待AI1>
AI0*/停止T0计时*/关闭C2充电*/
读取T0计数值*/
显示当前温度*/
恒温控制*/
若按键有效*/
键盘处理*/
AI仁1;
TR0=1;
while(CMP);
/*TR0=0;
AI1=0;
tp=TH0*256+TL0;
/*计算当前温度值*/tem=(CVp/tp-273.2)*10;
if(DTC)/*
fresh(tem,4,dbuf);
thermost(stem,tem);
}
if(key)/*
{if(kbfun(key,&
stem))/*fresh(tem,4,dbuf);
key=0;
}//while
}//main/*恒温控制函数*/
voidthermost(intx,inty)
{
if(x-y>
TDA)HT=0;
/*开加热*/
if(x-yv-TDA)HT=1;
/*关加热*/
/*显示刷新函数*/
voidfresh(intx,ucharnum,uchar*y)
{/*0~9字型表*/
staticucharfont[10]={0xc0,0xf9,0x64,0x70,0x59,
0x52,0x42,0xf8,0x40,0x50};
uintux;
uchari;
ux=(x>
=0?
x:
-x);
i=0;
do/*将ux转换成十进制数字字型送到y[]中*/
{y[i]=font[ux%10];
ux=ux/10;
i++;
while(i<
num&
&
ux);
if(i<
x<
0)y[i++]=FNGS;
/*负数写入"
-"
字型*/
while(i<
num)y[i++]=FSPC;
/*多余位写入空字型*/
/*键盘处理函数*/
intkbfun(uchark,int*pt)
{staticinttmp;
if(DTC)/*
if(k==KSET)/*SET{tmp=*pt;
DTC=0;
}/*
elsereturn(O);
else/*
switch(k)
{caseKSET:
*pt=tmp;
/*caseKESC:
/*return
(1);
caseKINC:
在当前温度显示态下*/
键处理*/
读取设定温度到tmp*/切换到设定温度显示态*/其他键处理*/
设定温度显示态下*/
按SET®
处理*/
修改设定温度*/
按ESC®
切换到当前温度显示态*/
按+键处理*/
if(tmp==TUP)tmp=TLOW;
elsetmp+=5;
/*+0.5°
C*/
break;
caseKDEC:
/*按-键处理*/
if(tmp==TLOW)tmp=TUP;
elsetmp-=5;
/*-0.5C*/
fresh(tmp,4,dbuf);
/*刷新设定温显示*/
return(0);
/*键盘、显示扫描和定时中断服务,一次/5ms*/
time1()interrupt3
{/*扫描位置表*/
staticucharpot[4]={0xef,0xdf,0xbf,0x7f};
staticucharsi=0;
staticucharkst=1;
/*staticucharkstr;
/*staticucharsit;
/*staticucharfltr=0;
/*staticucharsamtr=STC;
/*bitkc;
TH仁TC1>
/*显示扫描*/
P1=(P1|0xf5)&
pot[si];
/*if(!
DTC&
fltr>
STFH/2)/*P3=FSPC;
else
P3=dbuf[si];
/*/*计时*/if(++fltr==STFH)fltr=0;
/*扫描位置*/键盘扫描状态*/键盘扫描定时器*/扫描位置暂存*/闪烁计时器*/采样定时器*/键入值暂存*/重装定时器1时常*/
当前位置送P1口*/
若显示设定温且在消隐期*/空字型送P3口*/
当前字型送P