硕士学位论文论文题目:基于单片机的温室温度控制系统学 号:_________________________ 作 者:_________________________ 学 科 名 称:_________________________2014年 01月 08日卢弘博 现代测控仪器与装置 2013395沈阳工业大学目录第1节引言 (3)1.1设计任务书 (3)1.2前言 (4)第2节系统硬件模块化设计 (5)2.1 系统硬件结构 (5)2.2 信号采集模块 (6)2.3 显示模块 (6)2.4 键盘模块 (6)2.5 转换模块 (7)第3节系统的软件设计………………………………………………………………3.1 系统控制流程图 (7)3.2 温度控制系统程序 (8)第4节结束语 (12)第5节参考文献 (12)设计题目:基于单片机的温室温度控制系统一、设计实验条件自动化实验室各实验系统二、设计任务查找资料,确定蔬菜大棚温室在植物生长的不同阶段所需的温度范围与控制精度,并以此为依据设计以单片机为核心的温度控制系统。
要求:1.写出温度控制过程,绘制控制系统组成框图2.选择性能、价格合适的器件,给出温度检测与控制电路3、编写温度检测与控制程序框图三、设计说明书的内容1、设计题目与设计任务(设计任务书)2、前言(绪论)(设计的目的、意义等)3、主体设计部分4、结束语5、参考文献前言蔬菜是人民生活中不可缺少的副食品,人们要求周年不断供应新鲜、多样的蔬菜产品,仅靠露地栽培是很难达到目的的,尤其是我国北方地区无霜期短,而长江流域地区虽然冬季露地能生产一些耐寒蔬菜,但种类单调,且若遇冬季寒潮或夏秋暴雨,连绵阴雨等灾害性天气,则早春育苗和秋冬蔬菜生产都可能会受到较大的损失,影响蔬菜的供应。
大棚栽培蔬菜可促进早熟、丰产和延长供应期,是人类征服自然、扩大蔬菜生产、实现周年供应的一种有效途径,是发展"三高"农业、振兴农村经济的组成部分,是现代农业的标志之一。
而利用大棚进行蔬菜栽培可利用保护设备在冬、春、秋进行蔬菜生产,以获得多样化的蔬菜产品,可提早和延迟蔬菜的供应期,能对调节蔬菜周年均衡供应,满足人们的需要起重要作用,随着人们生活条件的不断改善,人们更关注自身的健康,绿色蔬菜尤其受到重视。
大棚种植充分满足了人们的需求,但对于和农作物生长密切相关的大棚温度的控制,对大部分没有专业知识的农民来说着实是一件头疼的事。
基于单片机的大棚种植的温度控制系统,能顺利解决长期以来困扰农民的问题,它不仅便于农民操作,更重要的是,在无形之中提高了作物的产量,增加了农民的收入,满足了人们对大棚蔬菜的需求。
大棚蔬菜满足了人民能一年四季吃到新鲜蔬菜的愿望,为提供更多量、更有营养价值的蔬菜,智能的大棚温度控制系统已成为农民的迫切需要。
以89S52单片机为主的温度控制系统可对大棚内部的温度和蔬菜所需的正常温度进行比较,以人性化的方式向大棚管理人员提供温度调节的信息,帮助农民提高农作物的产量,减少农民的工作量。
温度控制系统采用89S52单片机为核心。
大棚温度经温度传感器采样后变换为模拟电压信号,经低通滤波滤掉干扰信号后送放大器,信号放大后送模/数转换器转换为数字信号送单片机,单片机根据输入的温度得出结果,片提醒农民作出适当的温度调节。
该系统成本低,操作方便,设计人性化,具有良好的推广价值。
第2节系统硬件模块化设计2.1 系统硬件结构2.2信号采集模块信号发生采用的是直接从电源上得到可变的电压.”可变”体现在滑动变阻器上.滑动变阻器一端接地,另一端接高电平,滑动滑动变阻器,可输出渐变的电压,作为模拟电压信号.运用于蔬菜大棚的温度控制系统,不需要信号发生装置,可采用温度检测器检测实际大棚内温度.将模拟电压信号转换为数字信号,送入单片机,完成信号采集单元.模/数转换器采用TLC549,它是8位串行A/D 转换芯片.可与通用微处理器、控制器通过CLK 、CS 、DATA OUT 三条口线进行串行接口。
具有4MHz 片内系统时钟和软、硬件控制电路,转换时间最长17μs ,TLC549允许最高转换速率为40 000次/s 。
总失调误差最大为±0.5LSB ,典型功耗值为6mW 。
采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,V REF-接地,V REF+-V REF-≥1V ,可用于较小信号的采样。
TLC549芯片如下图所示.2.3 显示模块将AT89S52接到排阻上,然后接到74LS374上,最后连接到数码管显示器上。
(1)RESPACK8一般接在89S52单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。
排阻就是好多电阻连载一起,他们有一个公共端。
(2)74LS374具有三态输出的边沿触发器,374输出端O0……O7可直接与总线相连,当三态允许控制端OE 为低电平,O0……O7为正常逻辑状态,可用来驱动负载总线。
OE为高电平,O0……O7高阻态,不驱动总线负载。
当时钟端脉冲上升没作用下,O随数据D而变。
本次试验,采用两个74LS374芯片,一个用作段选U3,控制八位数码管的各段显示管,另一个用作片选U4。
(3)数码管显示电路。
2.4键盘模块将键盘与AT89S52连接到一起,如硬件连接图连接方式连接电路。
键盘作为可输入设定值,在之后的模块中与检测到的温度值作比较。
2.5转换模块当SW 接于高电平时,选择数码显示模块,当SW接于低电平时,选择键盘设定值模块。
硬件设施很简单,在AT89S52的P1.7口引出一条线,让它控制选择个模块。
第3节 系统的软件设计3.1 系统控制流程图3.2 温度控制系统程序#include <REG51.H>#include "intrins.h"#define uchar unsigned char#define uint unsigned int#define fl floatuchar out0=0x7f ; //赋初值uchar buf[3]={0,0,0};//全局数组uchar pr[]={0x57,0x6E,0x5E,0x3E,0x6D,0x5D,0x3D,0x6B,0x5B,0x3B}; uchar discode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uint AD; //转换结果,十六进制uint uuu,sc=0; //带小数部分数据处理结果int Int_result,float_result; //Int_result 整数部分,float_result 小数部分sbit Dataout=P1^0; //数据线sbit cs=P1^1; //片选sbit sclk=P1^2; //io口时钟sbit dx=P1^3; //段码显示控制锁存sbit wx=P1^4; //位控控制锁存sbit sw=P1^7;sbit PWM=P1^5;void delay1ms(uchar T) //单位时间1ms延时{uchar time;while(T--)for(time=0;time<120;time++);}/***********显示程序*************/ void display(uint num){uchar qian,bai,shi,ge;qian=num/1000; //千,百,十,个处理bai=num/100%10;shi=num/10%10;ge=num%10;wx=0;P0=0xf7;wx=1;dx=0;P0=discode[ge]; //显示个位dx=1;delay1ms(1);if(num>0){wx=0;P0=0xfb;wx=1;dx=0;P0=discode[shi]|0x80; //显示十位dx=1;delay1ms(1);wx=0;P0=0xfd;wx=1;dx=0;P0=discode[bai]; //显示百位,带小数点dx=1;delay1ms(1);}}/*************AD转换程序************/AD_val() //TLC549处理{uchar i,temp=0;cs=1; //初始化,启动sclk=0;cs=0;_nop_();for(i=0;i<8;i++) //读取采集数据,读取的是上一次采集数据{sclk=1;temp=temp<<1;if(Dataout) temp |=0x01;sclk=0;}cs=1;AD=temp;for(i=0;i<5;i++) //延时17us以上,进行复位_nop_();Int_result=AD*5/256; //处理整数float_result=AD*5%256*100/256; //处理小数部分uuu=((Int_result*100)+(float_result));//整数部分和小数部分合成return uuu;}/****************键盘扫描程序*************/void KB_Scan1(){ uchar tmp,line,i,j,flag,press;line=0x7E;for(i=1;i<=4;i++){P3=line;tmp=P3;tmp&=0x70;if(tmp!=0x70){ tmp=P3;flag=1;break;}else line=(line<<1)|0x01;}if(i==5) {tmp=0xFF;flag=0; }for(j=0;j<10;j++){if(tmp==pr[j])press=j;}if(flag==1){buf[2]=buf[1];delay1ms(100);buf[1]=buf[0];delay1ms(100);buf[0]= press;delay1ms(100);sc=buf[2]*100+buf[1]*10+buf[0];}}/***************PID服务程序*************/void PID(){ fl e0,e1,e2;uchar du,out1;uchar kp=16, kd=0,ki=0;// ts=1;e0=e1;e1=e2;e2=(sc-uuu)/10; //设定值-采集量if(e2>=0){ if(e2>=10) //测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率加热。
{TR0=0;PWM=1;}else{ du=25*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0); // PID算法out1=du;//+out0;TR0=1; //若到达设定范围则调用PID程序,进行有效功率加热.}}else //测得值与设定值比较,测得值大于设定值,关闭加热设备,停止加热。