毕业论文设计参考模板Word文档格式.docx
《毕业论文设计参考模板Word文档格式.docx》由会员分享,可在线阅读,更多相关《毕业论文设计参考模板Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
液位控制;
显示;
模数转换
Abstract
Inourlifeandproductionofliquidlevelcontroliswidelyused.Civilwatersupplyofreservoir,forexample,ifthelowwaterlevelistoohigh,willaffectourwater.HeShisoweneedtodesignthecontrollerautomaticallyadjustthewaterflow,tokeepitsnormallevel.Thispaperistodesignakindofliquidlevelautomaticcontrolsystem,itwasbasedontheAT89S52asthecontroller,throughthe89s52microcontroller,pressuresensor,converterADC0832modulusandliquidcrystaldisplaysandotherhardwaresystemandsoftwaredesignmethod,realizetheliquidlevelautomaticcontrol.Havedetectionalarmandcontrolfunctions,andcanbecarriedoutontheliquidleveldisplay.Thisdesignwiththesinglechipmicroputercontrolrelayaction,realizethemotorstartandstopthewater.Thesystemiseasytooperate,andhassimplestructure,lowcost,easyprogramdebugging,etc.
Keywords:
singlechipmicroputer;
Liquidlevelcontrol;
Display;
Analog-to-digitalconversion
0引言
随着现在科学技术的发展,单片机控制的智能控制和传感器技术在生活中广泛的应用,人们将其应运用到液位的控制上。
液位控制系统是以液位为被控参数的控制系统。
通过压力传感器检测液位高度,在通过单片机控制水位高度,具有体积小,实际运用广泛、简单,成本低,整个系统不容易被干扰,可靠性能高,具有比较高的性价比。
1液位自动控制系统方案
现在对液位的控制方法有许多种,比较常用的主要有两种方法,一种方法是比较简单的机械控制方式,另一种方法是比较复杂的控制系统控制方式。
1.1简单的机械控制方式
简单的机械控制方式其表现形式有浮标式、电极式等,这种控制方式具有的优点是结构简单,制作的价格低。
但是简单的机械控制受到的限制很大,比如电极式需要的前提就是液体导电却不能被电引燃,这就表明只能对单个溶液进行控制。
这种控制方式的精度也不高,不可显示液位当前高度的数值,很容易受到各个方面的干扰,并且要实现液位的自动控制就需要人机交换性高,但这种方式却很难实现人机交互。
1.2复杂的控制系统控制方式
复杂的控制系统控制是应用传感器技术检测液位的高度,把检测到的模拟信号放大,经过A/D转换器变换成数字信号送给单片机,由单片机处理后,用单片机的输出电平控制继电器的工作,以此来实现进水电机是否进水,达到对水位的控制。
根据本设计的要求,选取第二种控制方式实现。
最后确定的方案是以单片机为控制核心,设计一个水箱的液位自动控制系统。
液位高度是会变化的,所以要求随时检测水位高度和设定值进行比较,用单片机控制继电器的开断实现液位高度的调整。
液位检测是通过压力传感器实现对液位高度检测。
系统设定了上限高度和下限高度,当液位高度上升到上限高度设定值,系统报警,单片机控制继电器停止,控制电机停止加水,如果检测到液位低于下限高度设定值,系统报警,单片机控制继电器开启,控制电机加水。
且本系统在检测时用液晶显示器显示当前液位高度,从而实现对水箱的液位自动控制。
2液位自动控制系统原理
2.1液位控制系统的组成
液位自动控制系统是由单片机AT89S52芯片为核心、压力传感器、A/D转换器、液晶显示器、按键电路、继电器等几部分组成。
采用单片机作为系统控制器的处理器,其中把压力传感器传送来的电压信号经过A/D转换器转换后传送给单片机,然后用单片机去控制继电器工作,启动、停止进水电机达到液位的自动控制控制。
具体结构如图1所示。
图1系统框图
2.2工作原理
在水箱的水位发生改变时,压力传感器会发生变化,压力传感器接收到的压力信号后,就把变化量转换成了电压信号。
这个信号经过运算放大后送到A/D转换器,A/D转换器把这个模拟的电压信号转换为数字信号量,将数字信号传送到单片机AT89S52中进行数据的处理。
处理后按照设定的要求控制输出,同时液晶显示模块显示液位的高度,按键电路可以对液位的上限高度和下限高度进行,液位在超过上限高度或者低于下限高度都会声光报警。
3液位自动控制硬件设计
液位自动控制系统的硬件主要包含了单片机、按键电路、液晶显示器、传感器、A/D转换器和声光报警电路等。
3.1单片机
主要芯片采用的是双列40引脚的AT89S52单片机,其引脚如图2所示。
AT89S52单片机是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
3.1.1AT89S52性能介绍
AT89S52是一种低功耗、高性能的CMOS8位微控制器,并且具有8K在系统可编程Flash存储器。
使用了Atmel公司的高密度非易失性存储器技术制造,和80C51系列的单片机指令与引脚是完全兼容的。
片上Flash可以使用在常规的编程器,也可以允许程序存储器在系统中编程。
在单一的芯片上,就拥8位CPU,不用把芯片取下来,放在编程器上烧写程序,直接在应用的板子上烧定程序,这也就是大多的嵌入式控制应用系统使用AT89S52而灵活性提高的原因。
3.1.2AT89S52接口引脚介绍
电源引脚:
电源正极VCC,负极GND。
复位引脚:
REST。
时钟信号输入输出引脚:
XTAL1;
XTAL2。
外部ROM的读选引脚PSEN(低电平有效)。
地址锁存和ROM编程脉冲输入引脚:
ALE/PROG。
访问外部存储器控制引脚:
EA/VPP。
P0口可以当普通的I/O接口,也控制在系统外部扩展存储器的时候,输出低8位的地址。
P1口一般用作普通I/O接口,也可以在系统外部扩展存储器的时候,输出高8位的地址。
P3口在为普通I/O口时,可以进行位操作,是双向端口。
当系统需要扩展外部器件时,P3口也可以作为第二功能使用。
3.1.3AT89S52接口的使用
其中,P0口接液晶显示器,显示当前液位高度和设定的液位上、下限值;
P1口接A/D转换器和声光报警电路;
P2口用于控制继电器;
P3口连接按键电路,用于设定液位的上、下限值。
图2AT89S52单片机引脚图
3.2复位电路和晶振电路
单片机是无法独立完成数据处理的,我们需要在单片机外部添加复位电路和晶振电路组成最小系统来辅助单片机工作。
复位就是让单片机从程序的最初开始重新运行。
晶振是为单片机提供时钟的,单片机工作的最小时间计量单位就是由这个晶振决定。
单片机与两者的连接入图3所示。
图3最小系统
3.3传感器
传感器选用的是压力传感器。
当受到力的作用时,传感器中的电阻应变片发生形变,电阻应变片是一种电信号的敏感器件,其变化后加在电阻两端的电压发生发生变化,通过后续的放大后在传输给A/D转换器转换。
本设计传感器选用的是D3B压力传感器,如图4所示。
其工作电压:
4.2V到6.2V;
压力围:
0到1000MM水柱,0到0.1Kg/c㎡;
电压输出:
0.23V到4.9V;
线性度在0.2%;
接线方面:
G接地,I接+5V另与O之间加载2.2K上拉电阻即可通过O输出。
图4D3B压力传感器
3.4液晶显示
现在大多的字符液晶都是基于HD44780液晶芯片的,控制原理也是完全相同的。
因此基于HD44780写的控制程序可以很方便地应用于市场上大部分的字符型液晶。
本设计选用了LCD1602液晶显示,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,能够同时显示16x02即32个字符。
其引脚结构图如图5所示。
图5LCD1602液晶显示屏引脚结构
3.4.1液晶显示屏引脚接口介绍
第1脚VSS是电源地。
第2脚VCC是5V电源的正极。
第3脚V0是液晶显示器的对比度调整端,在接正电源的时候对比度是最弱,接地电源时候则相反是最高。
第4脚RS是寄存器的选择,在其高电平为1的时候选择的是数据寄存器、低电平为0的时候选择的则是指令寄存器。
第5脚RW是读写信号线,高电平为1时进行读操作,低电平为0的时候进行的则是写操作。
第6脚E端是使能端,高电平时读取信息,负跳变时执行指令。
第7至14脚:
D0至D7为8位双向数据端。
第15至16脚为空脚或者背灯电源,其中15脚是背光正极,16脚是背光负极。
其引脚与单片机连接如图6所示。
图6LCD1602引脚与单片机引脚连接
3.5A/D转换器
A/D转换器在系统中有着重要的作用,它将传感器传送来的模拟信号转换成可以提供给单片机能够处理的数字信号。
系统采用了ADC0832转换芯片,ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。
它体积小,兼容性强,性价比高。
其引DI连接到单片机P10,CLK连接P11,CS连接P12上,如图7所示。
图7ADC0832A/D转换器
3.6按键电路
按键电路采用了3个按键,包括设定键、加液位上限、减液位下限键,分别连接单片机的P30、P31、P32,如图8所示。
图8按键电路
3.7继电器控制电路
继电器控制电路如图9所示,单片机的I/O口直接控制继电器的电流不够,所以运用单片机的P20口接到三极管的基极,这里三极管起到了放大和开关的作用。
电路中接了一个二极管并联在继电器两端起到保护作用。
图9继电器控制电路
4 液位自动控制软件设计
4.1系统主程序设计
在用汇编语言编写控制器程序时,相对会比较麻烦,本系统采用C程序设计。
系统软件设计简单合理,易于控制,能有效地的对不同状态和不同外界条件进行控制,并且运行稳定、控制效果良好、抗干扰能力高。
图10为软件设计框图。
图10程序设计流程图
4.2A/D转换程序
A/D转换程序如图11所示:
图11A/D转换程序流程图
5 结果与总结
5.1仿真结果
如图12所示。
图12液位自动控制仿真
5.2实物制作结果
如图13所示。
图13液位自动控制实物
5.3总结
通过这段时间的努力完成了液位自动控制系统的设计。
在设计中,完成了方案的选择、设计的仿真、软件设计和实物制作等方面的工作。
本次设计通过查阅资料丰富了我知识,让我将所学的知识综合的运用起来,提高了我的动手动脑能力。
在老师指导下,同学的帮助中,还有自己的努力下达到了设计的目的。
参考文献
[1]全利.单片机原理及接口技术(第二版).高等教育,2008.6
[2]新民,王燕芳.微型计算机控制技术(第2版).:
电子工业2010.6
[3]虞献文.家用电器原理与应用.高等教育,2000.3
[4]胡文金.单片机应用技术实训教程.:
大学,2005
[5]永华,怡欣,芦生.新型PID控制及其应用.:
机械工业,1998.9
[6]王玉良,吴晓非,琳,禹可.原理与接口技术(第2版),2006.6
[7]齐蓉,肖维荣.可编程控制器技术电子工业.
[8]永华,怡欣,芦生.新型PID控制及其应用.:
机械工业,1998
[9]廖常初.PLC编程及应用(第2版).:
机械工业,2007
[10]雷丽文.微机原理与借口技术.:
电子工业,2001
[11]朱定华.微机原理与接口技术.:
交通大学,2003
[12]梁景凯.机电一体化设计与系统.:
机械工业,1997
[13]平,廉仲.机械电子工程设计.国防工业,2001
[14]何小阳.计算机监控原理及技术.大学,2003
[15]何力民编.单片机高级教程[M].:
航空大学,2000
致
在我本次毕业设计完成之际,我要感我的指导老师xxx教授的热情关怀和悉心指导。
在整个论文的撰写过程中,xxx老师倾注了大量的心血和汗水。
在此我表示真诚的感和深深的意。
许多同学也提出了宝贵的意见,在此也致以诚挚的意。
大学即将结束,教过我的老师们,你们严谨细致的、一丝不苟的作风一直是我们学习的榜样。
感这些年陪我的同学和朋友们,有你们的支持、鼓舞和帮助,我才充实的度过了这大学的生活。
Xxx
2015年5月于
附录
液位自动控制主程序
#include<
reg52.h>
//头文件
#defineucharunsignedchar//宏定义
#defineuintunsignedint
sbitbeep=P1^4;
sbitRelay=P2^0;
sbitLED_H=P1^6;
sbitLED_L=P1^7;
/*sbitLED_IN=P1^5;
sbitLED_OK=P1^6;
*/
sbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
ucharH_lim=11,L_lim=7;
ucharad_dat1=0;
//读取滤波后的AD值
ucharWater_dat=0;
ucharset_flag=0;
/***************************************************
函数名称:
延时子函数
函数功能:
按键消抖
***************************************************/
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=110;
j>
j--);
}
#include"
ADC0832.H"
1602.C"
//水位计算
/*voidWater_Calculate()
if(ad_dat1<
33)
{
Water_dat=10-((33-ad_dat1)/3);
}
else
Water_dat=10+((ad_dat1-33)/3);
}
}*/
voidkey()
if(K1==0)
delayms(10);
if(K1==0)
{
set_flag++;
if(set_flag>
2)
set_flag=0;
while(!
K1);
}
switch(set_flag)
case1:
if(K2==0)
{
delayms(10);
if(K2==0)
{
if(H_lim<
99)
H_lim++;
while(!
K2);
}
}
elseif(K3==0)
if(K3==0)
if(H_lim>
0)
H_lim--;
K3);
break;
case2:
if(L_lim<
L_lim++;
if(L_lim>
L_lim--;
default:
break;
voidcontrol()
staticuchari=0;
if(i<
20)
i++;
i=0;
if(Water_dat>
H_lim||Water_dat<
L_lim)
if(Water_dat>
H_lim)
if(i<
10)
LED_H=0;
else
LED_H=1;
LED_L=1;
Relay=1;
//LED_IN=1;
LED_OK=0;
else
LED_L=0;
LED_L=1;
LED_H=1;
Relay=0;
//LED_IN=0;
LED_OK=1;
if(i<
beep=0;
beep=1;
LED_L=1;
LED_H=1;
beep=1;
voidmain()
uintAD_DAT=0;
floatad_buf=0;
uchari=0;
//LED_OK=0;
init_1602();
while
(1)
10)//滤
i++;
AD_DAT+=A_D();
//波
else//算
i=0;
//法
ad_dat1=(uchar)(AD_DAT/10);
//ad_dat1=255-ad_dat1;
if(ad_dat1>
1)
ad_buf=(float)((ad_dat1-1)/2.4);
Water_dat=(uchar)(ad_buf);
Water_dat=0;
AD_DAT=0;
//Water_Calculate();
display();
key();
control();
}
液晶显示程序
sbitEN=P2^7;
sbitRS=P2^5;
sbitRW=P2^6;
unsignedcharLCD1602_Table[]="
0123456789:
-"
;
//0123456789abcdef
unsignedcharDIS1_TAB[]={"
Waterlevel:
cm"
};
unsignedcharDIS2_TAB[]={"
H:
cmL:
cm"
voidwrite_date(uchardate)
EN=0;
RS=1;
P0=date;
delayms(5);
EN=1;
voidwrite_(uchardate)
RS=0;
voidinit_1602()
unsignedchari;
RW=0;
write_(0x38);
write_(0x0c);
write_(0x06);
write_(0x01);
write_(0x80);
for(i=0;
i<
16;
i++)
write_date(DIS1_TAB[i]);
write_(0x80+0x40);
write_date(DIS2_TAB[i]);
voiddisplay()
if(set_flag>
i++;
i=0;
write_(0x80+12);
//write_date(LCD1602_Table[ad_dat1/100]);
//write_date(LCD1602_Table[ad_dat1%100/10]);
//write_date(LCD1602_Table[ad_dat1%10]);
write_date(LCD1602_Table[Water_dat/10]);
write_date(LCD1602_Table[Water_dat%10]);
write_(0x80+0x40+4);
if((set_flag==1)&
&
(i<
10))
write_date('
'
);
write_date(LCD1602_Table[H_lim/10]);
write_date(LCD1602_Table[H_lim%10]);
}