基于AT89C51单片机的水位控制系统设计.docx
《基于AT89C51单片机的水位控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的水位控制系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于AT89C51单片机的水位控制系统设计
1引言
1.1设计目的
在工农业生产中,常常需要测量液体液位。
随着国家工业的迅速发展,液位测量技术被广泛应用到石油、化工、医药、食品等各行各业中。
低温液体(液氧、液氮、液氩、液化天然气及液体二氧化碳等)得到广泛的应用,作为贮存低温液体的容器要保证能承受其载荷;在发电厂、炼钢厂中,保持正常的锅炉汽包水位、除氧器水位、汽轮机凝气器水位、高、低压加热器水位等,是设备安全运行的保证,因此一个安全合适的水位系统是很必要的。
1.2设计要求
利用单片机设计一个水位控制系统,要求用开关来模拟水位的状态,当设定完水位后,系统根据水位情况控制电磁阀的开启和关断。
具体要求如下:
1、设计单片机工作系统电路。
2、通过键盘设置其预定水位,根据水位不同控制电机的旋转。
5、利用Proteus进行仿真。
1.3设计方法
本设计是采用AT89C51单片机为核心芯片,及其相关硬件来实现的水体液位控制系统,采用八个键盘来模拟水位,CPU循环检键盘输入状态,并用3位七段LED显示示液位高度,检测液位数据,实施报警安全提示,当水体液位低于用户设定的值时,系统自动打开泵上水,当水位到达设定值时,系统自动打开排水泵。
2设计方法和原理
2.1水塔水位的控制原理
单片机水塔水位控制原理如图l所示,图中的虚线表示允许水位变化的上、下限位置。
在正常情况下.水位应控制在虚线范围之内。
为此,在水塔内的不同高度处,安装固定不变的3根金属棒A、B、C。
用以反映水位变化的情况。
其中,A棒在下限水位.B棒在上、下限水位之间,C棒在上限水位(底端靠近水池底部.不能过低,要保证有足够大的流水量)。
水塔由电机带动水泵供水。
单片机控制电机转动,随着供水,水位不断上升.当水位上升到上限水位时,由于水的导电作用。
使B、C棒均与+5V连通。
因此B、C两端的电压都为+5V,即为“l”状态,此时应停止电机和水泵工作,不再向水塔注水;随着水量的减少,当水位处于上、下限之间时。
B棒和A棒导通.而C棒不能与A棒导通,B端为“1”状态。
C端为“0”状态。
此时电机带动水泵给水塔注水,使水位上升,或是电机不工作,水位不断下降,都应继续维持原有工作状态;当水位处于下限位置以下时,B、C棒均不能与A棒导通,B、C均为“0”状态。
此时应启动电机转动,带动水泵给水塔注水,然后重复原来的过程,这就是简单的水位控制原理。
图1水位控制原理
2.2总体设计方案
系统的原理是采用8个按钮进行水位检测,在现场的3个不同的位置,由下至上测量水体的液位值。
并把这八个液位状态通过模数转换器传到单片机中(在本系统中采用开关的打开与闭合来模拟),在通过3位七段LED显示器显示出液位的八种状态并通过LED灯报警提示。
当水位过低(在3水位)时灯就会变亮,当水位较高(在7水位时)等也会变亮,用来让用户察觉。
在水位过高和过低时电磁阀都会自动的抽水或排水,其具体的抽水和排水位置可以设定,此系统中采用的是7水位和3水位。
3硬件设计
3.1硬件设计方案
系统方案设计液位控制是利用把液位的利用来管进行模拟,再通过AT89C51把输出状态直接接到单片机的I/O接口,单片机经过运算控制,输出数字信号,输出接口接LED进行显示,实现液位的报警和键盘的显示与控制。
由下图可观察到水位由键盘控制输入以后,通过AT89C51单片机的运算控制,在通过LED进行显示,通过报警装置进行报警,报警显示之后再通过对阀门的开启实现对水体的液位进行调节控制,阀门的驱动设备是电动机。
图2即是液位控制系统。
图2水位控制系统分析
3.2主芯片AT89C51
本系统采用AT89C51作为主要芯片,AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
AT89C51单片机为很多嵌入式系统提供了一种灵活性高且价廉的方案。
在本系统设计中采用AT89C51作为主要的芯片,它具有P0、P1、P2、P3四个I/O口,每个口又有8个接口,32个接口可以满足外接电路的需要,更方便的显示系统。
本设计中采用了单片机AT89C51的P0、P1、P3口,分别完成了显示和控制以及报警功能的实现。
下图为单片机AT89C51的引脚图。
图3AT89C51引脚图
3.3光报警及显示电路
图4所示为系统的光报警及显示电路,三段LED数码管于单片机的P0-P7口相连,同时排阻的把根线也连在单片机的P0口上,作为上拉电阻。
图4光报警及显示电路
3.4键盘连接电路
键盘连接电路如图5所示,八个键盘k1-k8分别与单片机的p1口的p1-p7相连,这八个键盘的按下与否用来模拟的是水位的高低,k1键代表水位最低点,k8
键代表的是水位最高点,当k1键按下时,指示灯亮,电机正转,开始加水,一直加水至水位7(即7键按下时),电机开始停止转动,并反向转动抽水,水位开始降低,直至到达3水位,灯亮电机开始自动加水,加水水位可以由用户自己设定,本系统中采取的是3水位便开始加水,7水位开始抽水。
本系统采用的是独立式键盘结构,每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
它软件是采用查询式结构,首先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。
图5键盘连接电路
3.5复位电路
系统的复位电路如图6所示。
复位电路中上端于单片机的复位引脚相连,下面与与EA端相连,要使CPU只访问外部程序存储器(地址为0000H~FFFFH),则EA端必须保持低电平(接到GND端)。
然而要注意的是,如果保密位LB1被编程,复位时在内部会锁存EA端的状态。
当EA端保持高电平(接Vcc端)时,CPU则执行内部程序存储器中的程序。
其复位电路部分用来对系统进行复位操作,末端与单片机的复位相连,按下复位键,当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。
图6复位电路
3.6晶振电路
晶体振荡电路的两个端口分别连接在单片机的XTAL1和XTAL2上。
晶振电路的作用是为本系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
晶振电路通常与锁相环电路配合使用,以提供系统所需的时钟频率。
如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。
图7晶振电路
4软件设计
4.1程序流程图及其分析
水位检测是通过7个按钮进行水位检测的,当水位到检测位置其输出端口就向单片机输出低电平。
由上至下的第一个位置为水位上限报警线,即当水位高于此位置时,开水阀控制系统就会自动报警,提醒工作人员注意,加水电磁阀有可能出故障;第二个位置是自动停止加水线,即当水位高于此位置时,控制系统会自动关闭加水电磁阀,停止加水;第三个位置是自动加水线,即当水位低于此位置时,控制系统会自动接通加水电磁阀,开始加水;第四个位置是水位下限报警线,即当水位低于此位置时,控制系统就会自动报警,提醒工作人员。
本设计的一个较大的优点是可以设置多个水位,既用户可根据自己需要设定加水时的水位。
根据所分析的该系统的具体功能,可以画出该系统的流程图,流程图应该尽量力求简便,而且从中可以较容易的看出设计者的目的,充分的了解所需设计的系统的功能,从而根据流程图编写程序。
图8水位控制流程图
5系统仿真及实际调试
5.1元器件清单
7SEG-COM-CAT-GRN
LED数码管
AT89C1
单片机
BUTTON
按钮
CAP
电容
G2RL-1A-CF-DC5
继电器
2N6609
三极管
CAP-ELEC
陶瓷电容
CRYSTAL
31兆晶振
LED-RED
发光二极管
MOTOR
电机
RES
电阻
RESPACK-8
排阻
5.2系统调试及仿真
将所有的硬件按照上面所说的方法连接起来,将源程序在keilc中生成.hex文件,放在在proteus中连接好的电路图中,运行,则可得到正确的结果。
图9水位控制系统仿真图
6总结
设计过程中我遇到了很多的困难,因为知识是不连贯的,所以需要准备很多方面的知识去融合,去联系。
由于在学习的时候更注重的是书面上的东西,而本次课程设计更多的是锻炼了我的动手动脑能力,让我有机会把课上学习的知识转化为可以在实际生产生活中应用的技术。
本次课程设计的系统主要介绍了水体的液位检测控制,介绍了AT89C51单片机和其它一些单片机在液位控制系统中的应用,介绍了它们的引脚和在系统中的电路图,利用LED来进行信号的输出显示,我设计的硬件系统的结构简化,系统精度高,具有良好的人机交互功能,并设有液位报警,有问题立即就能发现。
通过自动调节控制液位并实现水体的液位报警。
液位控制在设定值上正常运行不需要人工干预,操作人员劳动强度小。
通过本次课程设计,我了解到自己的知识应该充分利用在实践上,在实践中把书本上的知识固化成自己的能力。
在设计系统的时候也有很多的想法,但是有一些想法被否定了,最终完成设计的时候优先考虑了在课程上学习到的知识,并且和单片机、电子电路的知识结合起来。
这次设计之后,我感觉到自己在自动化专业上的学习应该还有很长的路走,自动化是一个很有前途的行业,它涉及了生产生活的多个方面,对人们的影响可想而知,所以,学好自动化专业的知识不仅仅是对自己能力提升和自我价值的实现,更是一件很有意义,可以让自己有所感触,有所收获的事业。
参考文献
[1]王思明.单片机原理及应用系统设计.科学出版社.2012.
[2]陈明荧.8051单片机课程设计实训教材.清华大学出版社.2004.
[3]丁明亮.单片机原理及应——基于Keilc与Proteus.北京航空航天大学出版社.2009-2.
[4]梅丽凤.单片机原理及接口技术.清华大学出版社.2006-8.
附录
源程序清单
#include
#defineucharunsignedchar/*以后定义的uchar都认为是unsignedchar*/
#defineuintunsignedint/*以后定义的uint都认为是unsignedint*/
sbitMOR=P2^7;/*电机正极为P2.7口*/
sbitMOT=P2^6;/*电机负极为P2.6口*/
sbitLED=P2^0;/*LED灯为P2.0口*/
codeuchartab[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};/*定义一个码存表*/
voiddelay(uintn)
{
while(n--);/*10ms的延时*/
}
voidLED_SHOW()
{
if(P1==0xfe)/*如果K8键按下*/
{
P0=tab[8];/*P0=0x7f*/
LED=0;/*LED为低电平*/
MOR=0;/*电机正极为低电平*/
MOT=1;/*电机负极为高电平*/
}
if(P1==0xfd)/*如果K7键按下*/
{
P0=tab[7];/*P0=0x07*/
LED=0;/*P2.0为低电平*/
MOR=0;/*电机正极为低电平*/
MOT=1;/*电机负极为高电平*/
}
if(P1==0xfb)/*如果K6键按下*/
{
P0=tab[6];/*P0=0x7d*/
LED=1;/*P2.0为高电平*/
MOR=1;/*电机正极为高电平*/
MOT=1;/*电机负极为高电平*/
}
if(P1==0xf7)/*如果K5键按下*/
{
P0=tab[5];/*P0=0x6d*/
LED=1;/*P2.0为高电平*/
MOR=1;/*电机正极为高电平*/
MOT=1;/*电机负极为高电平*/
}
if(P1==0xef)/*如果K4键按下*/
{
P0=tab[4];/*P0=0x66*/
LED=1;/*P2.0为高电平*/
MOR=1;/*电机正极为高*/
MOT=1;/*电机负极为高*/
}
if(P1==0xdf)/*如果K3键按下*/
{
P0=tab[3];/*P0=0x4f*/
LED=0;/*P2.0为低*/
MOR=1;/*电机正极为高*/
MOT=0;/*电机负极为低*/
}
if(P1==0xbf)/*如果K2键按下*/
{
P0=tab[2];/*P0=0x5b*/
LED=0;/*P2.0为低电平*/
MOR=1;/*电机正极为高电平*/
MOT=0;/*电机负极为低电平*/
}
if(P1==0x7f)/*如果K1键按下*/
{
P0=tab[1];/*P0=0x06*/
LED=0;/*P2.0为低电平*/
MOR=1;/*电机正极为高电平*/
MOT=0;/*电机负极为低电平*/
}
}
voidmain()
{
while
(1)
{
LED_SHOW();
}
}
仿真运行图
..