粮仓温湿度控制系统设计Word文件下载.docx
- 文档编号:4485599
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:25
- 大小:330.27KB
粮仓温湿度控制系统设计Word文件下载.docx
《粮仓温湿度控制系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《粮仓温湿度控制系统设计Word文件下载.docx(25页珍藏版)》请在冰点文库上搜索。
图1
方案二,测量温度选择DALLAS公司生产的数字温度传感器DS18B20,其为单总线器件,具有线路简单,体积小等特点,测量温度十分方便。
DS18B20产品的特点如下。
(1),只要求一个端口即可实现通信。
(2),在DS18B20中的每个器件上都有独一无二的序列号。
(3),实际应用不需要外部任何元器件即可实现测温。
(4),测量温度范围在-55℃到+125℃之间。
(5),其分辨率拥户可以从9位到12位选择。
(6),内部有温度上下限告警设置。
其引脚介绍如表1。
TO-92封装的DS18B20如下。
表1
湿度传感器采用NONEYWELL公司的集成湿度传感器IH3605,其测量范围0~100%RH,固有精度±
2%RH,它输出电压是供电电压,湿度及温度的函数,电源电压升高,输出电压将成比例升高,由于IH3605的输出电压较高,线性度较好,电路无需进行信号放大及调整,可将IH3605输出的信号直接加在A/D转换器上,A/D转换器也用DALLAS公司的适于单总线协议的器件DS2450。
温湿度的信号通过单总线时序送到单片机,经处理后依据要求控制固态继电器动作,同时送六位数码管实时显示温湿度。
整个系统框图如图2。
图2
方案三,传感器采用温湿度测量集成在一起的数字温湿度传感器—SHT15。
SHT15直接输出数字信号,且内部集成了工业标准的IIC接口,可以很方便地与单片机连接。
本方案通过SHT15采集温湿度数据由IIC接口送AT89C2051处理后送三位数码管分时显示,同时判断温度值,按要求通过固态继电器动作来控制冷器,抽湿机工作,维持粮仓内温湿度分别在20℃以下,30%RH以下。
其方框图如图3。
图3
方案比较:
方案一采用模拟式传感器须设计调理电路并通过复杂的校准定标过程,硬件电路庞大繁杂,抗感扰能力较差,测量精度难以保证,且线性度,重复性,互换性往往不尽人意;
方案二硬件电路相对来说比较简单,但单总线时序复杂造成软件编程比较棘手,且湿度测量精度也不太高,硬件电路造价较高,使人望而却步;
方案三温湿度采集过程集成在一起,传感器内部自带A/D转换器,直接输出数字信号,抗干扰能力强,性价比及高并且很好地解决了以上两种方案存在的问题,电路采用非常成熟的IIC接口,软件实现也简单。
通过以上比较与论证,从电路复杂程度,抗干扰能力,性价比,软件实现难易,我选择方案三。
本系统由硬件和软件两大部分协调完成,硬件主要完成信号的采集,转换,显示;
软件主要完成信息的处理与控制功能等。
二,硬件电路的设计
该系统的硬件部分包含以下几个模块,电源模块,AT89C2051主控制器模块,传感器模块,数码管显示模块,执行机构,其中AT89C2051主要完成外围的控制及一些运算功能,传感器完成信号的采样功能,数码管主要完成数字的显示,执行机构完成温湿度的调节。
整个硬件电路如图4。
图4
1,电源模块
电源采用市电经变压器降压到10V后整流滤波,用集成稳压器7809,7809稳压后得到+9V,+5V稳定电压,为AT89C2051,固态继电器提供稳定直流电压。
其电路图如图5。
电路中C2为消除输入线路的自激振荡,K1为电源开关,PWLED为电源信号灯,C3,C6消除电路的高频噪声。
图5
2,主控制器(AT89C2051)模块电路
主控制单元选择美国ATMEL公司生产的低电压,高性能CMOS8位单片机AT89C2051,它片内含2Kbytes的可反复擦写的只读存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准MCS-51指令系统,其PDIP/SOIC的20个引脚封装图如图6。
图6
引脚功能说明
(1)VCC:
电源电压
(2)GND:
地
(3)P1口:
P1口是一组8位双向I/O口,P1.2~P1.7提供内部上拉电阻,P1.0和P1.1内部无上拉电阻,主要是考虑他们是内部精密同向比较器的同向输入端(AIN0),和反向输入端(ANI1)。
如果需要应在外部接上拉电阻。
P1口输出缓冲器可吸收20MA电流并可直接驱动LED。
当P1口引脚写入“1”时可做输入端,当引脚P1.2~P1.7用作输入并被外部拉低时,它们将因内部的上拉电阻而输出电流(I1L)。
P1口还在FLASH闪速编程及程序较验时接收代码数据。
(4)P3口:
P3口的P3.0~P3.5,P3.7是带有内部上拉电阻的7个双向I/O口。
P3.6没有引出,它作为一个通用I/O口不可访问,但可作为固定输入片内比较器的输出信号,P3缓冲器可吸收20MA电流。
当P3口写入“1”时,它们被内部上拉电阻拉高可作为输入端口。
作为输入时,被外部拉低的P3口将用上拉电阻输出电流(I3L)。
如下表2所示。
表2
(4)RST:
复位输入。
RST引脚一旦变成两个机器周期以上高电平,所有的I/O口都将复位到“1”(高电平)状态,当震荡器正在工作时,持续两个机器周期以上的高电平便完成复位,每个机器周期为12个震荡周期。
(5)XTAL1:
震荡器反向放大器以及内部时钟发生器的输入端。
(6)XTAL2;
振荡器反向放大器的输出端。
(7)振荡器特征:
XTAL1,XTAL2为片内振荡器的反向放大器的输入和输出端。
可采用石英晶体振荡器组成时钟振荡器,如需从外部输入时钟驱动AT89C2051,时钟信号从XTAL1输入,XTAL2应悬空。
由于输入到内部电路是经过一个二分频触发器,所以输入的外部时钟信号无需特殊要求,但他必须符合电平的最大和最小值及时序规范。
AT89C2051构建的最小系统如图8。
图8
3,传感器采集电路模块的设计
传感器用集成数字温湿度传感器SHT15,
它是瑞士SENSIRON公司生产的是新一代基于CMOSENS(TM)技术的单片免校准温湿度传感器,该传感器将CMOS芯片与传感器技术结合在一起构成了高集成度,小体积的数字式温湿度传感器。
基于CMOSENS(TM)技术的传感器的另一优点是有IIC二线接口,这可以使其方便地与任何微处理器连接,为温湿度的测量带来了及大的便利,不仅减少了温湿度测量的开发时间,还可以节约数字化接口的软硬件成本。
其内部结构如图9。
由于采用了工业化的CMOS技术,它具有及高的可靠性和卓越的长稳定性,芯片内包含标准的相对湿度传感器,它们与一个14位的A/D转换器相连,每个传感器都是在精确的温室中进行校准的,校准系数在OTP中,在测量校准过程中要用到这些数。
其内部结构如图9,表贴四脚封装如图10。
图9
图10
SHT15传感器特点如下:
(1),全校准数字输出相对湿度,温度;
(2),温度分辨率为14位,湿度为12位,可编程降至12位和8位;
(3),具有露点计算输出功能;
(4),无需外围元件;
(5),小体积(7*5*3mm),可表面贴;
(6),卓越的长稳定性;
(7),自动断电功能;
(8),工业标准I2C总线接口;
(9),可靠的CRC传输较验。
SHT15的命令如表3。
表3
SHT15与AT89C2051的接口构成的测量路如图11。
图11
由于AT9C2051不是IIC总线接口,故使用它的I/O口来虚拟IIC总线,P3.0来虚拟数据线DATA,P3.1来虚拟时钟线。
并在两线的端口加一10K上拉电阻,同时在VCC和GND之间加一只0.1U的去耦电容。
相应的软件编程应遵循IIC总线的时序。
4,显示模块的设计
显示采用了三位共阳极数码管,从P0口输出码段,列扫描用P3.4,P3.5,P3.7来实现,数码管驱动用74HC244,列驱动用三极管9013,三位数码管分时显示温湿度。
如图12所示。
图12
5,执行机构的设计
微控制器通过对传感器采集的外界的温度,湿度处理判断温湿度是否超出设定值。
当超出设定值温度大于20℃,或湿度大于30%RH时,通过P3.2,P3.3输出低电平,通过光电耦合器4N25,由三极管8050驱动固态继电器闭合,从而使制冷器,或抽湿机工作,直到粮仓内温湿度回到设定值制冷器,或抽湿机停止工作。
其电路图如图13。
图13
三,系统软件的设计
系统程序主要包括主程序,读出温度子程序,读出湿度子程序,温度处理子程序,湿度处理子程序,显示数据子程序等。
主程序是整个软件设计的主干线,主程序流程图如图14。
图14
读出温度子程序流程图如图15。
图15
读出湿度子程序流程图如图16。
图16
后附粮仓温湿度控制系统C语言程序。
/*粮仓温湿度控制系统c语言程序*/
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeduxu[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff};
//共阳极段选码
ucharcodewexu[3]={0xef,0xdf,0x7f};
//位选码
uchardatawedubuf[3]={0xff,0xff,0xff};
uchardatashidubuf[3]={0xff,0xff,0xff};
uintcounter,wedudata,shidudata;
ucharbyte[2],k=0,t=0;
voidiicinit(void);
voidiicstart(void);
voidiicstop(void);
voidiicwait();
bitiicsentbyte(uchar);
uchariicreceivebyte(void);
voidsendacknowledge(bit);
voidsth15datainit(void);
voidpdwd(uint);
voidpdsd(uint);
voidweducl(uchara[]);
voidshducl(uchara[]);
voidwedudisplay(uint);
voidshidudisplay(uint);
voiddelay1x1ms(uint);
sbitisda=P3^0;
sbitiscl=P3^1;
sbitchoushi=P3^2;
sbitzhileng=P3^3;
bitflag,flag1=0,flag2=0;
voidmain()
{
P1=0xff;
P3=0xff;
TMOD=0x10;
//定时器1,模式1
IE=0x88;
IP=0x08;
TH1=-(1000/256);
//定时器1定时2ms,用于数码管动态扫描
TL1=-(1000%256);
TR1=1;
//打开定时器1
while
(1)
{
delay1x1ms(15);
iicinit();
iicstart();
sth15datainit();
//sth15数据传输初始化
do
{
flag=iicsentbyte(0x03);
}while(flag==0);
delay1x1ms(55);
while(isda==1);
//sth15通过下拉data线表示传输结束
byte[0]=iicreceivebyte();
byte[1]=iicreceivebyte();
weducl(byte);
pdwd(wedudata);
wedudisplay(wedudata);
sth15datainit();
flag=iicsentbyte(0x05);
delay1x1ms(210);
byte[0]=iicreceivebyte();
shducl(byte);
pdsd(shidudata);
shidudisplay(shidudata);
}
}
voidtime1scan(void)interrupt3using1
//重装定时器值
counter++;
if(counter==1000)
counter=0;
flag1=!
flag1;
}
if(flag1==0)
P1=0xff;
P3=P3&
wexu[k];
if(flag2==1)
P1=wedubuf[k]&
0x7f;
else
P1=wedubuf[k];
k++;
if(k==3)
k=0;
else
wexu[t];
P1=shidubuf[t];
t++;
if(t==3)
t=0;
voidiicwait()//iicbus的延迟时序
uchari;
for(i=0;
i<
5;
i++);
voidiicstart(void)//iicbus的起始信号
isda=1;
iicwait();
iscl=1;
isda=0;
iscl=0;
voidsth15datainit(void)
voidiicstop(void)//iicbus的停止信号
voidiicinit()//初始化
bitiicsentbyte(ucharbytedata)//传送一个byte至SHT15
bitack,ack1,ack2;
8;
i++)
bytedata=_cror_(bytedata,1);
if(bytedata&
0x01)
isda=1;
else
isda=0;
iscl=1;
iicwait();
iscl=0;
}
ack1=isda;
ack2=isda;
ack=ack1^ack2;
returnack;
uchariicreceivebyte(void)//从SHT15端读取数据
uintbytedata;
{
iicwait();
bytedata<
<
=1;
if(isda)bytedata|=0x01;
iscl=0;
returnbytedata;
/*比较判断温度子程序*/
voidpdwd(uintbytedata)
if(flag2==0)
if(bytedata>
=20)
zhileng=0;
zhileng=1;
zhileng=1;
/*比较判断湿度子程序*/
voidpdsd(uintbytedata)
if(bytedata>
=30)
choushi=0;
choushi=1;
/*温度处理子程序*/
voidweducl(uchara[2])
wedudata=a[1]*256+a[0];
if(a[1]>
0xc0)
flag2=1;
wedudata=~wedudata+1;
else
flag2=0;
wedudata=wedudata*(0.0625/4);
//计算出温度值
/*湿度处理子程序*/
voidshducl(uchara[2])
shidudata=a[1]*256+a[0];
wedudata=wedudata*0.0625;
//计算出湿度值
/*处理温度显示子程序*/
voidwedudisplay(uintbytedata)
wedubuf[0]=duxu[bytedata%10];
wedubuf[1]=duxu[bytedata/10%10];
wedubuf[2]=duxu[bytedata/100];
/*处理湿度显示子程序*/
voidshidudisplay(uintbytedata)
shidubuf[0]=duxu[bytedata%10];
shidubuf[1]=duxu[bytedata/10%10];
shidubuf[2]=duxu[bytedata/100];
voidsendacknowledge(bitack)//传送确认信号到SHT15
isda=ack;
//共延时1ms*count//
voiddelay1x1ms(uintcount)//cristal=6mhz
uinti,j;
for(i=0;
count;
for(j=0;
j<
240;
j++);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 粮仓 温湿度 控制系统 设计