温湿度控制器(上下限继电器)设计报告_第1页
温湿度控制器(上下限继电器)设计报告_第2页
温湿度控制器(上下限继电器)设计报告_第3页
温湿度控制器(上下限继电器)设计报告_第4页
温湿度控制器(上下限继电器)设计报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、温湿度控制器设计报告本设计研究单片机数字温湿度控制器,通过全数字型温湿度传感器测量宽范围的温湿度数据,用来满足恒温湿车间控制、大棚温湿度控制等工农业生产领域需要,要求温湿度测量响应时间快、长期稳定性好,抗干扰能力强,具有较高的应用价值。一、 性能特点l 配用全数字型温湿度传感器DHT11,温度测量范围0-100,湿度测量范围0%RH90%RH,可以满足一般需要。若要求更宽测量范围,只需更换温湿度传感器型号,硬件电路及软件程序全兼容。l 温湿度测量响应时间快、长期稳定性好。l 采用先进的专用微处理器芯片STC89C52,可靠性高,抗干扰能力强。l 配用EEPROM芯片AT24C04,使存储的温度

2、上下限和湿度上下限可以掉电永久保存。l 可以通过四个按键方便地实现温湿度上下限的调整。l 当温度或湿度超限后,报警信号点亮相应报警灯。l 配用三极管和继电器,可以通过驱动继电器打开或切断风机、加热器等外部设备。二、 功能说明1、实时测量当前温度值和湿度值,在液晶屏动态显示。2、可以显示当前允许温度范围,在液晶屏显示,如“20-45”表示允许温度范围为20摄氏度至45摄氏度。3、可以显示当前允许湿度范围,在液晶屏显示,如“15-60”表示允许湿度范围为15%至60%。4、当温度低于温度下限时,低温报警灯亮,控制继电器动作。5、当温度高于温度上限时,高温报警灯亮,控制继电器动作。6、当湿度低于湿度

3、下限时,低湿报警灯亮,控制继电器动作。7、当湿度高于湿度上限时,高湿报警灯亮,控制继电器动作。8、可以通过键盘调整温度上下限和湿度上下限,具体方法是连续按设置键直至温度下限、温度上限、湿度下限、湿度上限相应的位置闪烁,再通过Up键和Down键调整数值,调整完毕继续按设置键进入正常状态。9、可以保存设置参数至EEPROM中,具体方法是按保存键,此时当前设置参数存盘,重新上电显示新的设置值。如果不按保存键,所调整的设置参数只在此次运行有效,关电后恢复原先设定值。三、 硬件设计1、设计框图本研究设计的温湿度控制器框图如图1所示。图1 温湿度控制器方框图图中STC89C52单片机每2秒钟从DHT11温

4、湿度传感器中读入温度和湿度,在液晶屏上即时显示。液晶屏上同时可以显示温湿度上下限值,该上下限设置值保存外外部EEPROM存储器中,掉电不失,并且可以通过四只按键上调或下调。当温度或湿度值超过上下限值时,报警信号点亮相应报警灯。同时该报警信号通过三极管驱动继电器,以控制外部风机或加热器。2、温湿度传感器器及检测电路图2 DHT11温湿度传感器外型及管脚DHT11温湿度传感器外型及管脚如图2所示。其中电源引脚的供电电压为 3.5-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间不要发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。 DHT11典型

5、应用电路如图3所示,其连接电路简单,只需要占用控制器一个I/O口即可完成上下位的连接。建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻,图3 DHT11典型应用电路DHT11数字湿温度传感器采用单总线数据格式,即单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。 一次完整的数据传输为40bit,高位先出。 数据格式如表一:表1 DHT11数据格式3、单片机电路 (1) STC89C52 单片机特点l 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;l 工作电压: 5.5V - 3.5V(5V单片机)

6、;l 工作频率范围:040MHz,相当于普通8051的 080MHz;l 用户应用程序空间 4K/8K/16k/32K/64K字节;l 片上集成1280字节 RAM;l 通用I/O口(32/36个),复位后为准双向口/弱上拉(普通8051传统I/O口);l ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器。l 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA;l 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;l 有EEPROM功能;l 看门狗;l 内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地)

7、;l 时钟源:外部高精度晶体/时钟,内部R/C振荡器;l 用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟;l 常温下内部R/C 振荡器频率为:5.0V 单片机为: 11MHz 17MHz;l 共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器;l 外部中断I/O口4路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒;l 通用全双工异步串行口(UART) ;l 工作温度范围

8、:-40 +85(工业级) / 0 75(商业级) ;l 封装:PDIP-40, PLCC-44。 (2) STC89C52 单片机管脚及封装STC89C52 单片机有多种封装形式,本设计中选用40DIP封装,其管脚定义如图4所示。其最小应用系统如图5所示。图4 STC89C52 管脚图 图5 单片机最小系统(4) 单片机电路由STC89C52组成的温湿度控制器单片机系统原理图如图6所示。图中DATA引脚为温湿度传感器单总线引脚,单片机通过该引脚和传感器通信,读取温湿度数据。K1、K2、K3、K4为四只调节按键,分别为设置键、上调键、下调键和保存键,用以调整温湿度上下限值并保存数据。L2、L3

9、、L4、L5为四只报警灯,其中L2为低温报警,L3为高温报警,L4为低湿报警,L5为高湿报警。图6 单片机系统原理图4、显示电路显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:表2 液晶屏技术指标接口信号说明如表3所示。表3 液晶屏接口信号说明与单片机接口电路如图7所示。图7 LCD与单片机接口电路5、温湿度上限存储温湿度阈值存储在EEPROM芯片AT24C04中,并可以通过K1K4按键调节并保存,其中K1、K2、K3、K4分别为设置键、上调键、下调键和保存键。AT24C04是IIC芯片,其电路如图8所示。图8 EEPROM存储电路6、继电器驱动电路当温湿度数据超过正常范围时

10、,单片机发出继电器动作信号。该低电平信号通过三极管方法,驱动继电器线圈得电,继电器结点动作。该结点可以控制空调、加热器、抽风机等电器,以控制温湿度范围。具体电路如图9所示。图9 继电器电路四、Portel电路图设计Protel是目前国内最流行的通用EDA软件,它是将电路原理图设计、PCB板图设计、电路仿真和PLD设计等多个实用工具软件组合后构成的EDA工作平台,是第一个将EDA软件设计成基于Windows的普及型产品。它集成了软件界面、仿真功能和PLD设计和信号完整性分析,在此基础上Protel 99SE又增加了一些新的功能,用户使用更加方便灵活。Protel的功能十分强大,在电子电路设计领域

11、占有极其重要的地位。它以其强大功能和实用性,逐渐获得广大硬件设计人员的青睐,是目前众多EDA设计软件中用户最多的产品之一。Protel软件组成Protel软件主要由电路原理图设计模块、印制电路板设计模块(PCB设计模块)、电路信号仿真模块和PLD逻辑器件设计模块等组成,各模块具有强大的功能,可以很好的实现电路设计与分析。(1) 原理图设计模块(Schematic模块)电路原理图是表示电气产品或电路工作原理的重要技术文件,电路原理图主要由代表各种电子器件的图形符号、线路和结点组成。图4.1所示为一张电路原理图。该原理图是由Schematic模块设计完成的。Schematic模块具有如下功能:丰富

12、而灵活的编辑功能、在线库编辑及完善的库管理功能、强大的设计自动化功能、支持层次化设计功能等。 (2) 印制电路板设计模块(PCB设计模块)印制电路板(PCB)制板图是由电路原理图到制作电路板的桥梁。设计了电路原理图后,需要根据原理图生设计成印制电路板的制板图,然后在根据制板图制作具体的电路板。印制电路板设计模块具有如下主要功能和特点:可完成复杂印制电路板(PCB)的设计;方便而又灵活的编辑功能;强大的设计自动化功能;在线式库编辑及完善的库管理;完备的输出系统等。(3) 电路信号仿真模块电路信号仿真模块是一个功能强大的数字/模拟混合信号电路仿真器,能提供连续的模拟信号和离散的数字信号仿真。它运行

13、在Protel的EDA/Client集成环境下,与Protel Advanced Schematic原理图输入程序协同工作,作为Advanced Schematic的扩展,为用户提供了一个完整的从设计到验证仿真设计环境。在Protel中进行仿真,只需从仿真用元器件库中放置所需的元器件,连接好原理图,加上激励源,然后单击防真按钮即可自动开始。五、 软件编程1、软件流程图本设计软件主程序流程图如图13所示。图13 主程序流程图2、主程序 下面介绍main.c主程序编写,其他程序略。(1) 头文件和一些宏定义#include <reg52.h>#include "1602.h&

14、quot;#include "dht.h"#include "2402.h"(2) 管脚定义/定义三个LED灯sbit L2=P13;sbit L3=P14;sbit L4=P15;sbit L5=P16;sbit Key_SET = P32;/设置键sbit Key_UP= P33;/加 键sbit Key_DOWN = P34;/减 键sbit Key_SAVE = P35;/保存键sbit Relay = P20;(3) 常量、变量定义/定义标识volatile bit FlagStartRH = 0; /开始温湿度转换标志volatile bit

15、 FlagKeyPress = 0; /有键按下/定义温湿度传感器用外部变量extern U8 U8FLAG,k;extern U8 U8count,U8temp;extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;extern U8 U8comdata;extern U8 count, count_r;U16 temp;S16

16、 temperature, humidity;S16 idata TH, TL, HH, HL; /温度上限和湿度上限char * pSave;U8 keyvalue, keySET, keySAVE, keyUP, keyDOWN;/定义变量U16 RHCounter;U8 FlagSet,hide;(4) 各子程序/数据初始化void Data_Init() RHCounter = 0; L2 = 1; L3 = 1; L4 = 1; TH = 40; TL = 20; HH = 85; HL = 20; keyvalue = 0; keySET = 1; keySAVE = 1; key

17、UP = 1; keyDOWN = 1; FlagSet = 0; hide = 0;/定时器0初始化void Timer0_Init()ET0 = 1; /允许定时器0中断TMOD = 1; /定时器工作方式选择TL0 = 0x06; TH0 = 0xf8; /定时器赋予初值TR0 = 1; /启动定时器/定时器0中断void Timer0_ISR (void) interrupt 1 using 0TL0 = 0x06;TH0 = 0xf8; /定时器赋予初值 RHCounter +;/设闪烁标志if (RHCounter>400) hide = 0;else hide = 1;/每

18、2秒钟启动一次温湿度转换 if (RHCounter >= 800) FlagStartRH = 1; RHCounter = 0; /存入设定值、void Save_Setting() pSave = (char *)&TL; /地址低位对应低8位,高位对应高8位 wrteeprom(0, *pSave); /存温度上限值TH低8位 DELAY(500); pSave +; wrteeprom(1, *pSave); /存温度上限值TH高8位 DELAY(500); pSave = (char *)&TH; wrteeprom(2, *pSave); /存温度下限值TL

19、低8位 DELAY(500); pSave +; wrteeprom(3, *pSave); /存温度下限值TL高8位 DELAY(500); pSave = (char *)&HL; /地址低位对应低8位,高位对应高8位 wrteeprom(4, *pSave); /存湿度上限值HH低8位 DELAY(500); pSave +; wrteeprom(5, *pSave); /存湿度上限值HH高8位 DELAY(500); pSave = (char *)&HH; wrteeprom(6, *pSave); /存湿度下限值HL低8位 DELAY(500); pSave +;

20、wrteeprom(7, *pSave); /存湿度下限值HL高8位 DELAY(500);/载入设定值、void Load_Setting() pSave = (char *)&TL; *pSave+ = rdeeprom(0); *pSave = rdeeprom(1); pSave = (char *)&TH; *pSave+ = rdeeprom(2); *pSave = rdeeprom(3); pSave = (char *)&HL; *pSave+ = rdeeprom(4); *pSave = rdeeprom(5); pSave = (char *)&

21、amp;HH; *pSave+ = rdeeprom(6); *pSave = rdeeprom(7); if (TL>99)|(TL<0) TL = 20; if (TH>99)|(TH<0) TH = 40; if (HL>99)|(HL<0) HH = 20; if (HH>99)|(HH<0) HH = 85;void KeyProcess(uint num) /键盘设置功能:通过设置键和加、减键修改当前设置,只有按下保存键才存盘,否则掉电不保存。 switch (num) case 1:/设置键按下,依次设定TLTHHLHH退出 Fla

22、gSet +; if (FlagSet>4) FlagSet = 0; L1602_char(1, 12, TL/10+48); L1602_char(1, 13, TL%10+48); L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH%10+48); L1602_char(2, 12, HL/10+48); L1602_char(2, 13, HL%10+48); L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH%10+48); break; case 2:/加键按下 if (FlagS

23、et=1) /设TL if (TL<100) TL+; L1602_char(1, 12, TL/10+48); L1602_char(1, 13, TL%10+48); if (FlagSet=2) /设TH if (TH<100) TH+; L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH%10+48); if (FlagSet=3) /设HL if (HL<100) HL+; L1602_char(2, 12, HL/10+48); L1602_char(2, 13, HL%10+48); if (FlagSet=4)

24、/设HH if (HH<100) HH+; L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH%10+48); break; case 3: /减键按下 if (FlagSet=1) /设TL if (TL>0) TL-; L1602_char(1, 12, TL/10+48); L1602_char(1, 13, TL%10+48); if (FlagSet=2) /设TH if (TH>0) TH-; L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH%10+48); if (

25、FlagSet=3) /设HL if (HL>0) HL-; L1602_char(2, 12, HL/10+48); L1602_char(2, 13, HL%10+48); if (FlagSet=4) /设HH if (HH>0) HH-; L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH%10+48); break; case 4: /保存键按下 Save_Setting(); FlagSet = 0; break; default: break; /* 名称 : Main()* 功能 : 主函数*/void main()

26、U16 i, j, testnum; EA = 0;Timer0_Init(); /定时器0初始化 Data_Init();EA = 1;L1602_init();L1602_string(1,1," Welcome to T&H ");L1602_string(2,1," Control System! ");/延时for (i=0;i<1000;i+) for (j=0;j<1000;j+) ; /清屏L1602_string(1,1," ");L1602_string(2,1," ");

27、L1602_string(1,1,"Tem: C - ");L1602_string(2,1,"Hum: % - "); /载入温度上限和湿度上限设定值Load_Setting();L1602_char(1, 12, TL/10+48);L1602_char(1, 13, TL%10+48);L1602_char(1, 15, TH/10+48);L1602_char(1, 16, TH%10+48);L1602_char(2, 12, HL/10+48);L1602_char(2, 13, HL%10+48);L1602_char(2, 15, HH/

28、10+48);L1602_char(2, 16, HH%10+48);while(1) /温湿度转换标志检查 if (FlagStartRH = 1) TR0 = 0; testnum = RH(); FlagStartRH = 0; TR0 = 1; /读出温湿度,只取整数部分 humidity = U8RH_data_H; temperature = U8T_data_H; /显示温湿度 L1602_int(1,5,temperature); L1602_int(2,5,humidity);/闪烁显示if (hide = 1) switch (FlagSet) case 0: break;

29、 case 1: L1602_string(1,12," "); break; case 2: L1602_string(1,15," "); break; case 3: L1602_string(2,12," "); break; case 4: L1602_string(2,15," "); break; else L1602_char(1, 12, TL/10+48); L1602_char(1, 13, TL%10+48); L1602_char(1, 15, TH/10+48); L1602_char(

30、1, 16, TH%10+48); L1602_char(2, 12, HL/10+48); L1602_char(2, 13, HL%10+48); L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH%10+48);/温湿度控制/温度低于下限if (temperature < TL) L2 = 0; else L2 = 1; /温度高于上限if (temperature > TH) L3 = 0; else L3 = 1; /湿度低于下限if (humidity < HL ) L4 = 0; else L4 = 1; /湿度高

31、于上限if (humidity > HH) L5 = 0; else L5 = 1;/控制继电器动作 if (temperature<TL)|(temperature>TH)|(humidity<HL)|(humidity>HH) Relay = 0;else Relay = 1; /键盘查询,在弹起时响应if (Key_SET)&&(keySET=0) FlagKeyPress = 1; keyvalue = 1; /设置键值1 else if (Key_UP)&&(keyUP=0) FlagKeyPress = 1; keyva

32、lue = 2; /上 键值2 else if (Key_DOWN)&&(keyDOWN=0) FlagKeyPress = 1; keyvalue = 3;/下键值3 else if (Key_SAVE)&&(keySAVE=0) FlagKeyPress = 1; keyvalue = 4;/保存键值4if (FlagKeyPress = 1) KeyProcess(keyvalue); FlagKeyPress = 0; if (!Key_SET) keySET = 0;else keySET = 1; if (!Key_UP) keyUP = 0;else keyUP = 1; if (!Key_DOWN) keyDOWN = 0;else keyDOWN = 1; if (!Key_SAVE) keySAVE = 0;else keySAVE = 1;DELAY(500); 六、 下载与调试提供例程在uVision4环境下编译,如果是其他版本uVision,只需将所有.c和.h 文件拷贝至新建项目,重新编译即可。当编译生成.hex文件后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论