水位自动控制系统设计.docx

上传人:b****7 文档编号:9823994 上传时间:2023-02-06 格式:DOCX 页数:28 大小:1.09MB
下载 相关 举报
水位自动控制系统设计.docx_第1页
第1页 / 共28页
水位自动控制系统设计.docx_第2页
第2页 / 共28页
水位自动控制系统设计.docx_第3页
第3页 / 共28页
水位自动控制系统设计.docx_第4页
第4页 / 共28页
水位自动控制系统设计.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

水位自动控制系统设计.docx

《水位自动控制系统设计.docx》由会员分享,可在线阅读,更多相关《水位自动控制系统设计.docx(28页珍藏版)》请在冰豆网上搜索。

水位自动控制系统设计.docx

水位自动控制系统设计

 

华南师大学增城学院

课程论文

题目:

水位自动控制系统设计

 

课程名称《微型机控制技术》

考查学期2013/2014学年第2学期

考查方式课程论文

姓名

学号

专业应用电子

成绩

指导教师

 

摘要2

一、设计容:

3

二、硬件电路设计3

2.1系统框图设计3

2.2单片机最小系统4

2.4水位传感器的电路7

2.5液晶1602显示设计8

2.6键盘功能设计11

2.7电机驱动电路11

2.8报警电路设计12

三、软件程序设计13

3.1主程序流程图13

3.2键盘控制流程图15

3.3显示流程图15

3.4水位测量流程图16

3.5PWM电机驱动程序17

3.6水位报警程序18

四、调试过程18

五、心得体会19

六、参考文献21

七、附录22

 

摘要

水塔是在日常生活和工业应用中经常见到的蓄水装置,在我们的生活中起到了重要的作用,而水塔里面的水位控制是一个水塔发挥作用的关键。

基于单片机的水塔水位控制系统使水塔水位自动保持在一定的位置,通过对其水位的控制对外供水,以满足需要。

该系统使用水位传感器对水塔水位进行检测并将检测到的信号传给单片机来进行处理,通过调整定时器的定时时间来增大或者缩小占空比,并编写程序加以控制,从而实现电机的调速。

最后,使用液晶屏显示当前水位状态以及电动机的转速。

该系统通过了报警模块来实现了过低水位蜂鸣器鸣笛报警、过低警戒水位自动处理、正常水位蜂鸣器鸣笛报警以及正常水位处理。

本系统适应在不同的用水场合下的用水速度需要,节省工作时间,提高了整体工作的效率,实现水塔水位的自动控制。

液位控制是工业控制中的一个重要问题,针对液位控制过程中存在大滞后、时变、非线性的特点,为适应复杂系统的控制要求,人们研制了种类繁多的先进的智能控制器,模糊PID控制器便是其中之一。

模糊PID控制结合了PID控制算法和模糊控制方法的优点,可以在线实现PID参数的调整,使控制系统的响应速度快,过渡过程时间大大缩短,超调量减少,振荡次数少,具有较强的鲁棒性和稳定性,在模糊控制中扮演着十分重要的角色

关键词:

水位控制;单片机;模糊PID控制

 

一、设计容:

这设计课程是为了确保水位在水塔的允许的围浮动,采用了水位传感器测量水位变化,从而控制电动机,保证水位正常。

因此,这里给出以STC89C52单片机为核心器件的水塔水位检测控制系统,该系统能实现水塔水位检测、LCD1602显示当前水位功能以及蜂鸣器鸣笛报警,手动按键调整PWM电机调速功能,实现过低和正常警戒水位报警、过低和正常警戒水位处理的系统要求。

按下电源按钮后,灯会闪烁几下,然后是常亮状态,蜂鸣器会响。

电机不会转的,此时系统在待机状态,且为正常状态。

要先选择好电机的抽水速度是哪个档位,共有4个档位。

档位越高,速度越快。

在电机转的时候,按下选择档位,电机立马会停止的,这个是一个软件安全冗余的设计理念。

电机在水位模拟传感器端口(低水位)按下后,说明水位太低,电机转动,此时蜂鸣器会响一下,灯会闪烁几下,以此表示报警,并且液晶也会显示水位太低。

当水位模拟传感器端口(正常水位)按下后,说明水位已经到正常状态,电机停转,此时蜂鸣器也会响一下,灯一样会闪烁,以此表示报警,且液晶屏也会显示水位正常。

而PWM速度调整就是档位的选择,必须在电机停止的状态下去选择电机输出的速度。

 

二、硬件电路设计

2.1系统框图设计

系统的总体框图主要由主控芯片基本电路、按键电路、电动机和蜂鸣器驱动电路、液晶显示电路组成。

除主控芯片电路外,其他的都是外围功能性电路。

蜂鸣器和电动机电路驱动原理基本相同,都为三极管驱动电路,按键电路为平常的独立按键电路,液晶电路参考设计手册既可。

电路设计框图如图2.1所示:

图2.1水塔水位控制系统总框图

2.2单片机最小系统

STC89C52是一款完全兼容8051核指令的芯片,是宏晶科技公司的新一代增强性的8051单片机[9]。

采用最新的加密技术解决了全球89系列单片机都被解密的困惑。

并且管脚完全兼容,性能更好,驱动力更强,功耗更低,价格也比传统的89系列低[10]。

STC89C52的引脚说明图如图3-1

图3-2STC89C52的引脚图说明

图3-4最小系统原理图

此图是单片机工作的最小系统原理图,在这个电路中又可以分为复位电路和晶振电路,如图3-4和图3-5所示:

图3-5复位电路

复位电路可以分为上电复位和手动按键复位两种。

在系统上电的一瞬间单片机上电复位,原理是利用电容两端的电压不能突变,在一上电的瞬间电容好比短路,所以加在第九脚RST的电平是高电平,虽然时间很短,但是足以让单片机系统复位。

手动按键复位的原理是,在系统正常工作的过程中可以手动触动按键使单片机复位。

具体原理是,按下S1按键,因此5V电压经过一个200欧姆的电阻分压后加到系统的RST上,手动按键按下到抬起的过程足以使系统复位。

图3-6晶振电路

对于单片机系统而言,晶振电路就好比是人的心脏一样,是一个跳动的动力来源,18,19号引脚接的是11.0592M的晶振。

2.3蜂鸣器报警电路原理

图3-7蜂鸣器报警功能电路

蜂鸣器报警功能电路使用的是三极管8550驱动,三极管8550是PNP三极管,射极接电源+5V,基极通过一个电阻连接到P1.0口,集电极接蜂鸣器,当P1.0为高电平时,三极管截止,蜂鸣器没有不响,当P1.0为低电平时,三极管导通,蜂鸣器发出响声。

2.4水位传感器的电路

按键是现阶段电子设计中最常用、最实用的输入设备。

按键能够成为最普遍的输入设备,主要是其具备了以下几个优点:

工作原理、硬件电路连接简单、操作实用性强、价格便宜,程序编写简单。

缺点:

机械抖动比较严重、外型不够美观。

按键部分实现的主要原理是单片机读取与按键相连接的I/O口状态,来判定按键是否按下,达到系统参数设置的目的。

键盘在单片机应用系统中的作用是实现数据输入、命令输入,是人工干预的主要手段。

独立式按键就是按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键的工作状态,不会影响其他I/O口线上的工作状态。

各按键开关均需要采用了上拉电阻,是为了保证在按键断开时,各I/O有确定的高电平。

当输入口线部已有上拉电阻,外电路的上拉电阻可省去。

因此,通过检测输入线的电平状态就可以很容易判断是哪个按键被按下了。

优点:

电路配置灵活,软件结构简单。

缺点:

每个按键需占用一根I/O口线,在按键数量较多时,I/O口浪费大,电路结构显得复杂。

因此,此键盘适用于按键较少或操作速度较高的场合。

矩阵式键盘适用于按键数量多的场合,它通常由行线和列线组成,按键位于行、列的交叉点上。

单片机的键盘检测通常有三种方式:

查询、中断、定时扫描。

查询和中断方式同普通的I/O传送是一致的,定时扫描方式是利用单片机部定时器产生定时中断,在中断服务程序中对键盘进行扫描获得键值。

在本设计中采用的是4行*4列键盘,其电路图如图3.12所示,列线由P2.4-P2.7口控制,行线由P2.0-P2.3口控制。

电路中共16个按键,包括设置键、3个温度参数和时间设置键、1个增加键、1个减小键。

系统在程序初始化时控制键盘行线的P2.0-P2.3口输出高电位,控制键盘列线的P2.4-P2.7口输出低电位,在判断电路是否有按键按下时,读P2.0-P2.7端口值,若端口值不是11110000,则说明电路中有按键按下。

然后根据程序进行去抖动处理和计算键值。

图2.4矩阵式键盘电路图

2.5液晶1602显示设计

液晶显示器以其微功耗、体积小、显示容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用[12]。

字符型液晶模块是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。

字符型液晶显示模块是一类专用于显示字母、数字、符号等的点阵型液晶显示模块。

之所以称字符型液晶显示模块是因为其液晶显示器件的电极图形是由若干个5×8或5×11点阵块组成的字符块集。

每一个字符块是一个字符位,每一位都可以显示一个字符,字符位之间空有一个点距的间隔起着字符间距和行距的作用,这是其一;其二是这类模块使用的是专用于字符显示控制与驱动的IC芯片[13]。

这两种因素确定了这类模块的应用围仅局限于字符而显示不了图形,所以称其为字符型液晶显示模块。

字符型液晶显示驱动控制器广泛应用于字符型液晶显示模块上。

目前最常用的字符型液晶显示驱动控制器是HD44780U,也出现使用HD667O1或HD66702等字符型液晶显示驱动控制器单片控制的字符型液晶显示模块。

液晶显示驱动器为HD44100及其替代品。

字符型液晶显示模块在世界上是比较通用的,而且接口格式也是比较统一的,其主要原因可能是各制造商所采用的模块控制器都是HD44780U及其兼容品,不管它的显示屏的尺寸如何,它的操作指令及其形成的模块接口信号定义都是兼容的。

所以会使用一种字符型液晶显示模块,就会通晓所有的字符型液晶显示模块。

液晶1602有三条控制线,RS/数据命令端,RW/读写选择端、EN/使能端,一个8位的数据端口。

常用指令说明如表3-1:

表3-1常用指令说明

指令名称

控制信号

控制代码

D/IR/W

D7D6D5D4D3D2D1D0

清屏

00

00000001

归home位

00

0000001*

输入方式设置

00

000001I/DS

显示状态设置

00

00001DCB

光标画面滚动

00

0001S/CR/L**

工作方式设置

00

001DLNF**

CGRAM地址设置

00

01A5A4A3A2A1A0

DDRAM地址设置

00

1A6A5A4A3A2A1A0

读BF和AC

01

BFAC6AC5AC4AC3AC2AC1AC0

写数据

10

数据

读数据

11

数据

图3-10液晶1602显示电路图

液晶1602从左到右依次有16根引脚,每个引脚定义不同。

有三根控制引线和八根信号线,必须注意的一点是3号引脚是背光电源指示端。

背光电阻选择的不同有不同的结果。

我们这里选择2.7k电阻做为背光电阻。

2.6键盘功能设计

图3-9按键功能电路

按键功能电路里面有两种按键,一种按键是模仿水塔水位开关的功能按钮,一种是电机PWM输出的调整按钮。

原理是通过一个10k的电阻接到+5v电源线上,当按键没有按下时,按键没有导通,所以没有电流,但对于连到引脚上的那一端来讲是高电平。

当按键按下时,因为电路导通,有电流流过,和单片机引脚接触的那一端接地,所以是低电平。

因此能检测到信号的变化,交给程序处理后做出相关的动作。

2.7电机驱动电路

图3-8电机驱动电路

电机驱动电路和蜂鸣器的电路基本相同,同样使用8550三极管驱动,三极管的基极接P1.1,当P1.1为高电平时,电机不转动,当P1.1为低电平时,电机转动。

2.8报警电路设计

图3-7蜂鸣器报警功能电路

蜂鸣器报警功能电路使用的是三极管8550驱动,三极管8550是PNP三极管,射极接电源+5V,基极通过一个电阻连接到P1.0口,集电极接蜂鸣器,当P1.0为高电平时,三极管截止,蜂鸣器没有不响,当P1.0为低电平时,三极管导通,蜂鸣器发出响声。

 

三、软件程序设计

3.1主程序流程图

当系统按下电源开关,且确定有电源存在时候,系统进入初始化状态,灯会闪烁、蜂鸣器响一声、液晶初始化,初始化完以后,进入PWM按键调速选择,如有按键按下,进入PWM按键调整子程序,若没有,进入主程序等待状态,检测水塔水位的液位状态,当模拟液位低水位按键按下后,电机以显示速度启动,模拟抽水过程,此时蜂鸣器报警,灯闪烁,且液晶会显示水位过低状态。

当模拟水位正常按键正常按键按下后,电机停止转动,蜂鸣器报警、液晶显示当前正常状态,然后程序进入循环,继续检测模拟水位状态按键。

具体流程图的如图4-2所示

图4-2程序总体流程图

 

3.2键盘控制流程图

由于使用的按键较少,所以本文采用了独立式键盘,即每个按键单独占用一根口线。

在程序查询方式下,通过I/O端口读入按键状态,当有按键按下时,相应的端口变为低电平,这样通过读入I/O口状态判断是否有按键按下。

查询式键盘的程序流程图如下:

图4-1键盘程序流程图

 

3.3显示流程图

共阴极数码管是用高电平(“1”)点亮的,要求驱动功率较大。

程序流程图如图3.4所示。

图3.4显示子程序流程图

3.4水位测量流程图

本设计采用单片机主控芯片控制继电器外围电路,用于驱动电机的启动与关停。

其程序流程图如图4-3所示。

 

 

图4-2液位检测流程图

3.5PWM电机驱动程序

在进入PWM按键子程序后,首先要做的事是先检测是否确定有按键按下,这个过程延时15ms,在确认有按键按下后,判断是哪一个按键按下,如果是速度加按键按下,电机不管在什么状态,都是首先停止,然后是调整PWM调制时间,液晶屏显示速度增加,按下减按键,也是先停止电机,调整PWM调制时间,液晶屏显示速度减少。

具体流程图如图4-1所示。

图4-1PWM按键调整子程序流程图

3.6水位报警程序

报警子程序主要实现在温度超限的情况下,进行声光报警,并切断电源。

程序流程图如下图3.6。

图3.6报警子程序流程图

 

四、调试过程

本系统的调试主要分为硬件调试、软件调试等两大部分。

经过初步的分析设计后,在制作硬件电路的同时,调试也在穿插进行。

这样有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而进行整体电路的检查,从而可以节约大量的调试时间。

软件编程中,首先编写单元模块的程序,并且在硬件上调试成功问题,即可以做系统整体程序的调试。

联机调试是最重要的一部分,同时也是本设计成功的关键。

上电后观察电路工作性能,如不能正常工作,按原理图分模块进行电路检测,是否有虚焊或漏焊现象;如焊接正常,在按信号传递的方向逐级检测,找出出问题的一级,并向该级的上级进行检测,直到将故障排除。

对于虚焊和漏焊的情况最好的办法是先找到一个比较大的电路回路,如果用的是指针式万用表,打到欧姆档1X10欧姆档就可以测,如果是指针摆到最右端,说明我们的线路连接是正常的!

如果用的是数字万用表,我们可以调整到短路档位,接上要测的点直接就可以测,如果有蜂鸣响说明线路连接正常。

在元件没有在万能板上进行焊接的时候我们是不能直接拿过来就进行使用的,必须经过检测,像LED灯可以用万用表测试一下看其是否会发光,测试三级管的好坏,器件的检测工作都要在焊接之前做好。

用万用表接到按键的信号输入端口,如果按键按下信号肯定会有变化,并且会在万用表上直接测试读出,这样直接通过硬件测量按键是否能打到预期的效果。

写一个功能小程序,来具体单个的功能硬件电路是否有问题,如果有问题再具体看是硬件的问题还是软件的问题,若没有问题,则可以进行下一个功能电路的测试。

五、心得体会

作为一名电气的大四学生,在即将毕业之际,通过做这次课程设计是很有意义的,而且也是必要的。

在做这次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。

为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。

其次,在这次课程设计中,我们运用了以前学过的专业课知识,如:

proteus仿真、汇编语言、模拟和数字电路知识等。

虽然过去我从未独立应用过他们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。

最后,要做好一个课程设计,就必须做到:

在设计程序之前,对所用单片机的部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。

在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。

 

六、参考文献

[1]吕小红,周凤星,马亮.基于单片机的电阻炉温度控制系统设计[C].:

科技大学,2008

[2]马云峰,郭文川.微机原理与接口技术[M].:

高等教育,2001

[3]开生.MCS-51单片机温度控制系统的设计[J].微计算机信息,2005

[4]胡寿松.自动控制原理(第五版)[M].:

科学,2007

[5]俊謨.单片机中级教程[M]。

航空航天大学,2006;

[6]君华.智能传感器系统[M]。

国防工业,1998;

[7]侯国章.测试与传感技术[M].:

工业大学,2000

[8]夏大勇,周晓辉,增,博峰,虎恩典.MCS-52单片机温度控制系统[J].航空航天大学,2007

 

七、附录

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitled=P0^1;//led灯显示,低电平亮

sbitspeaker=P1^0;//蜂鸣器,低电平报警

sbitlcd_rs=P0^7;//1602数据选择命令端

sbitlcd_rw=P0^6;//1602读写选择端

sbitlcd_enable=P0^5;//1602使能端定义

sbitkey_up=P3^0;//pwm速度调整端口,电机速度加一

sbitkey_down=P3^1;//pwm速度调整端口,电机速度减一

sbitmonter=P1^1;//电机驱动端口,pwm控制输出

sbitwater_normal=P1^6;//水位过高传感器模拟按键端口,低电平报警

sbitwater_low=P1^7;//水位过低传感器模拟按键端口,低电平报警

ucharcodepwm_t[]={45,90,100,130};//模式下的pwm值,人为已经设定的时间是100,可以调整上限值

uintmodel=1,pwmT=150,time_count=0;

voidkey_scan();//按键扫描函数

voidcheck_water_level();//检测水位是否正常函数

voiddelay(uintz)//延时函数

{uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

 

//*******************1602液晶显示函数************************//

voidlcd_write_comd(ucharcomd)//1602写指令函数

{lcd_rs=0;//选择指令

lcd_rw=0;//选择写

delay(5);

P2=comd;//取命令

delay(8);

lcd_enable=1;//使能有效

delay(8);

lcd_enable=0;

}

voidlcd_write_data(uchardate)//1602写数据函数

{lcd_rs=1;//选择数据

lcd_rw=0;//选择写操作

delay(5);

P2=date;//取数据操作

delay(8);

lcd_enable=1;//使能有效

delay(8);

lcd_enable=0;

}

voidlcd_set_xy(ucharx,uchary)//定位具体位置

{uintaddress;

if(y==1)

address=0x80+x;//第一行的位置

else

address=0xc0+x;//第二行的位置

lcd_write_comd(address);

}

voidlcd_write_char(ucharx,uchary,uchardate)//写一个字符函数

{

lcd_set_xy(x,y);//设定位置

lcd_write_data(date);//写入数据

}

voidlcd_write_string(ucharx,uchary,uchar*s)//写一个字符串函数

{lcd_set_xy(x,y);//设定位置

while(*s)//循环写入数据

{lcd_write_data(*s);

s++;

}

}

 

//********电机PWM调速函数及程序主函数*******//

voidinit()//初始化函数

{uchari,count=25;

led=1;//开机led灯闪烁

for(i=0;i<15;i++)

{

led=~led;

delay(count);

count=count+5;

}

led=0;

lcd_write_comd(0x38);//设置16*2行显示,5*7点阵,8位数据接口

lcd_write_comd(0x0c);//开显示

lcd_write_comd(0x01);//清屏

lcd_write_comd(0x80);//设定初始位置

lcd_write_string(0,1,"WaterLev:

Normal");

lcd_write_string(0,0,"MonterSpeed:

1");

speaker=0;//蜂鸣器鸣响一声

delay(1000);

speaker=1;

TMOD=0X02;//定时0,定时时间为150us,工作在方式2

TH0=(256-150)%256;

TL0=TH0;

EA=1;//开总中断

ET0=1;//开定时器0的中断

TR0=0;//定时器0不启动

}

voidmain()//主函数

{init();

while

(1)

{

key_scan();

check_water_level();//检测水位是否正常函数

}

}

voidtimre_0()interrupt1//定时器0的中断子函数

{time_count++;

if(time_count==pwmT)//和PWM脉宽的时间比较,时间到了定时器清零,重新开始

{time_count=0;

}

if(time_count

{

monter=0;

}

else

{

monter=1;

}

}

voidcheck_water_level()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1