关于温度和湿度控制电路Word文档格式.docx
《关于温度和湿度控制电路Word文档格式.docx》由会员分享,可在线阅读,更多相关《关于温度和湿度控制电路Word文档格式.docx(57页珍藏版)》请在冰点文库上搜索。
但大部分粮库目前还是采取人工测量温度和湿度的方法,这不仅使粮库工作人员工作量增大,且工作效率低,尤其是大型粮库的温度和湿度检测任务如不能及时彻底完成,则有可能会造成粮食大面积变质。
据有关资料统计,中国每年因粮食变质而损失的粮食达数亿斤,直接造成的经济损失是惊人的。
影响粮食安全储藏的主要参数是粮食的温度和湿度,这两者之间又是互相关联的。
粮食在正常储藏过程中,含水量一般在12%以下(为安全状态),不会产生温度突变,一旦粮库进水、结露等使粮食的含水量达到20%以上时,由于粮粒受潮,胚芽萌发,新陈代谢加快而产生呼吸热,使局部粮食温度突然升高,必然引起粮食“发烧”和霉变,并可能形成连锁反应,从而造成不可挽回的损失。
因此设计出一种经济实用的粮库粮情温湿度智能检测系统是非常有必要的[1]。
1.2国内外发展状况
粮情检测属监控系统范畴,近年来,由于传感器技术、计算机技术、超大规模集成电路技术和网络通信技术的发展,使监控系统广泛应用于工农业生产等领域,因此,粮情检测技术的研究在软、硬件等方面都有了一定的进展。
早期粮情监测主要采用温度计测量法,它是将温度计放入特制的插杆中,根据经验插在粮堆的多个测温点,管理人员定期拔出读数,确定粮温的高、低,决定是否倒粮。
这种方法对储粮有一定的作用,但由于温度计精度、人工读数的人为因素等原因,温度检测不仅速度慢,而且精度低,抽样不彻底,局部粮温过高不易被及时发现,导致因局部粮食发霉变质引起大面积坏粮的情况时有发生。
随着科技的发展,从1978年开始,采用电阻式温度传感器、采样器、模数转换器、报普器等组成的储粮监测系统出现,它可对各粮库的各个测温点进行巡回检测,检测速度、精度大大提高,降低了劳动强度,但由于电阻传感器的灵敏度低,致使检测精度、系统可靠性还不够理想。
至1990年,粮情检测系统
有了很大的改善和提高,系统在布线上采用矩阵式布线技术,简化了数据采集部分的线路,在传感器方面应用了半导体、热电偶等器件;
在线路传输上采用了串行传输方式,从而减少了传输线根数;
采用单片机进行数据处理,并采用各种手段提高数据传输及检测速度,通过软硬件技术的结合,检测精度和可靠性较以前有很大提高。
但温度传感器的线性度差,系统的检测精度仍不理想,无法大面积推广。
近年来,随着单片机功能的日益强大和计算机的广泛应用,粮情检测的准确性、稳定性要求越来越高。
寻找最佳配置和最好的性价比成为粮情监测研究的热点[2]。
国外在粮情监控技术上己达到了很成熟的地步,高科技数字式传感器广泛应用于粮情检测系统。
这种传感器采用了半导体集成电路与微控制器最新技术,在一个管芯上集成了半导体温度检测芯片、数据信号转换芯片、计算机接口芯片,存储芯片等,除完成温度检测功能外,还可完成预置范围温度、报警、多路AD转换、温度补偿等功能。
由于数字温度传感器直接传出数字量,从而解决了温度信号长距离传输问题及传输过程中因干扰和衰减而导致的精度降低等问题。
目前,国内出现了丰富的数字传感器配套产品,如远程控制模块、中继器、接插器、分线器等,技术也比较成熟。
1.3系统的设计要求
具体来说该学生的主要任务是在系统硬件电路的基础上,利用MCS-51单片机的汇编语言或C51语言编写程序,实现:
(1)粮食仓库的温度、湿度实时测量功能;
(2)将测量到的温湿度含量显示在4位数码管;
(3)利用若干个开关按键设置温度、湿度的标准值;
(4)实现系统温度、湿度超限报警功能。
1.4本课题的主要研究内容
1.设计相应的信号采集电路、执行电路等硬件电路;
2.实现各环境要素的自动监测;
3.通过单片机汇编语言编制数据采集、分析处理、显示、修改、参数设置、控制等程序功能模块;
4.研究装置的软硬件抗干扰措施,提高系统工作的可靠性和稳定性。
2系统方案及论证
2.1总体方案设计
经分析,将系统分为两个部分,一个是由温湿度传感器组成的检测部分,另一个是由单片机和LED数码管组成的主控与显示部分。
如图所示DS18B20和HS1101湿度检测电路将检测到的数送到单片机,单片机对接收到的数据进行处理并送到LED数码管,5V稳压电源给各个部分供电。
系统组成框图如图2.1所示。
图2.1系统组成框图
2.2模块化编程思想方案论证
如果一本书没有章、节和段落,学习起来该有多么困难。
将复杂任务和主题分解为更便于管理的部分,是使它们更容易处理的一种方法。
同样,计算机程序也可以分解为小的子程序,或模块,而这些子程序或模块可以分别进行开发和测试。
这种方法就称为模块化程序设计(modularprogramming)。
模块最重要的属性是它们应该尽可能的独立和自包含。
另外,一般将它们设计成执行一个特定的、定义好的函数,它有一个入口点和一个退出点。
同时,模块常常很短(通常只有50到100条指令)和高度内聚的[3]。
模块化程序设计有很多优点。
不管对于开发者还是用户来说,小的、自包含的单元都更易于设计和理解底层的逻辑。
模块化程序设计使开发更方便,这是因为每个模块都可以独自得以完善。
事实上,对于大型软件项目,不同的程序员可以只负责各自的组件。
模块化设计也使调试和测试程序更加容易,因为错误更容易隔离开来。
最后,程序的维护和修改更加方便。
这主要是因为可以开发新模块来执行额外的任务,然后将其集成到现有的、组织良好的架构中。
尽管所有这些属性都是使用模块的理由,而与数值工程问题求解相关的、最重要的理由是,可以对有用的模块库进行维护,以便以后在其的程序中使用。
2.3显示模块的选择与论证
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出需要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
2.3.1静态显示方案
对于单片机的I/O接口进行驱动,或者使用如BCD码二-十进位解码器解码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O接口多,如驱动5个数码管静态显示则需要5×
8=40根I/O接口来驱动,要知道一个89S51单片机可用的I/O接口才32个呢。
故实际应用时必须增加解码驱动器进行驱动,增加了硬体电路的复杂性。
2.3.2动态显示方案
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O接口,而且功耗更低[4]。
2.4编程语言选择方案
2.4.1汇编语言
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。
高级的汇编器如MASM,TASM等等为写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。
在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。
现在的汇编环境已经如此高级,即使全部用汇编语言来编写Windows的应用程序也是可行的,但这不是汇编语言的长处。
汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
2.4.2C语言
C语言是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
C语言是功的系统描述语言,用C语言开发的UNIX操作系统就是一个成功的范例;
同时C语言又是一种通用的程序设计语言,在国际上广泛流行。
世界上很多著名的计算公司都成功的开发了不同版本的C语言,很多优秀的应用程序也都使用C语言开发的,它是一种很有发展前途的高级程序设计语言。
1.C是中级语言。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3.C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
4.C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;
也适用于多种机型。
C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。
C语言具有较好的可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。
它是数值计算的高级语言[5]。
汇编语言是低级语言,在编写程序的时候会把根据不同的情况指定使用不同的寻址方式,能够对内存和CPU里的通用寄存器直接操纵。
不同的计算机系列会有不同的汇编语言此次课题选择了C语言进行编写。
3系统软件设计
3.1系统硬件工作原理
该系统的硬件电路由以下几部分电路模块组成:
单片机、温度传感器检测电路、湿度传感器检测电路、数码管显示电路、键盘开关电路、蜂鸣器报警电路等部分。
系统硬件框图如图3.1所示。
图3.1系统硬件框图
3.2系统软件设计概述
本章在硬件电路设计的基础上,全面阐述各部分软件的设计思想和具体实现方法。
整个软件采用模块化设计结构,并利用汇编语言编制。
整个程序由主程序、显示、报警、测量等子程序模块组成[6]。
3.3主程序模块设计
主程序框图如图3.2所示。
程序初始化包括寄存器设置、堆栈设置和相关单元清零设置等。
主程序存放于89c52中,启动后循环执行,不停地进行采样计算,得出实际温、湿度值,并与设定值进行比较,实现声光报警信号。
在主程序是单片机程序的主体,整个单片机端系统软件的功能的实现都是在其中完成的。
软件设计的主要思路是将采集、接收、显示灯功能编成独立的模块。
是
否
是
否
图3.2主程序流程图
/*主函数*/
/************************************/
voidmain()
{
EA=1;
//开总中断
init_t0();
//初始化定时器
init_t1();
TR0=1;
//定时器开始工作
TR1=1;
ET0=1;
lcd_init();
//初始化LCD
ok_menu();
BEEP=0;
while
(1)
{
if(key1==0)
lcd_init;
wendu_Menu();
do
{
Read_Temperature();
Disp_Temperature();
baojing();
}
while(key2);
}
if(key2==0)
lcd_init;
shidu_Menu();
if(int_flag==1)
{
disp();
}
while(key1);
}
3.4温度采集模块程序设计
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功[7]。
是
图3.3温度检测程序流程
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位[8]。
图3.4DS18B20温度值
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;
如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度(例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H)[9]。
/**********************************************************
/************温度测量**************************************
/**********************************************************/
/*初始化ds1820*/
/*******************************************************************/
Init_DS18B20(void)
{
DQ=1;
//DQ复位
Delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
Delay(90);
//精确延时大于480us
//拉高总线
presence=DQ;
//如果=0则初始化成功=1则初始化失败
Delay(100);
return(presence);
//返回信号,0=presence,1=nopresence
}
/*读一个字节*/
ReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
>
=1;
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
/*写一个字节*/
WriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=8;
DQ=dat&
0x01;
Delay(5);
dat>
=1;
/*读取温度*/
Read_Temperature(void)
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器
temp_data[0]=ReadOneChar();
//温度低8位
temp_data[1]=ReadOneChar();
//温度高8位
/*数据转换与温度显示*/
Disp_Temperature()
display[4]=temp_data[0]&
0x0f;
display[0]=ditab[display[4]]+0x30;
//查表得小数位的值
display[4]=((temp_data[0]&
0xf0)>
4)|((temp_data[1]&
0x0f)<
<
4);
display[3]=display[4]/100+0x30;
display[1]=display[4]%100;
display[2]=display[1]/10+0x30;
display[1]=display[1]%10+0x30;
if(display[3]==0x30)//高位为0,不显示
{
display[3]=0x20;
if(display[2]==0x30)//次高位为0,不显示
display[2]=0x20;
lcd_pos(0x48);
lcd_wdat(display[3]);
//百位数显示
lcd_pos(0x49);
lcd_wdat(display[2]);
//十位数显示
lcd_pos(0x4a);
lcd_wdat(display[1]);
//个位数显示
lcd_pos(0x4c);
lcd_wdat(display[0]);
//小数位数显示
}
//报警
voidbaojing()
if(display[2]>
=0x32&
&
display[1]>
=0x31)
BEEP=1;
else
3.5湿度采集模块
显示电路采用四位七段LCD数码管显示即LED四位七段数码管字符型液晶模块,是目前使用最广泛的液晶屏之一。
LED四位七段数码管字符型液晶模块是点阵型液晶驱动方便,经编码后显示内容多样化[10]。
标定即显示当下工作状态,显示温湿度。
否
图.3.4湿度检测流程图
由图3.5可知相对湿度与电容的关系可