您的当前位置:首页正文

水位自动控制系统设计

2024-07-16 来源:易榕旅网



华南师大学增城学院

课程 论 文




课 程 名 称

微型机控制技术》

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

考 查 方 式

课程论文


应用电子






.

指导 教 师

摘要.....................................................................................................................................2
一、设计容:....................................................................................................................3
二、硬件电路设计............................................................................................................3
2.1系统框图设计.....................................................................................................3
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水位测量流程图..............................................................................................163.5PWM电机驱动程序.......................................................................................173.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-2 STC89C52 的引脚图说明



资料

3-4 最小系统原理图



.

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


机上电复位,系统复位。

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



资料



.

3-6晶振电路

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

2.3蜂鸣器报警电路原理



蜂鸣器报警功能电路使用的是三极管8550驱动,三极管8550PNP三极管,射极接电源+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显示设计

液晶显示器以其微功耗、体积小、显示容丰富、超薄轻巧的诸多优点,在袖


字、216个字、220个字等等。

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

示模块。之所以称字符型液晶显示模块是因为其液晶显示器件的电极图形是由若

干个5×85×11点阵块组成的字符块集。每一个字符块是一个字符位,每一位

都可以显示一个字符,字符位之间空有一个点距的间隔起着字符间距和行距的作

用,这是其一;其二是这类模块使用的是专用于字符显示控制与驱动的IC芯片[13]

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

字符型液晶显示模块。


资料



.

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

的字符型液晶显示驱动控制器是HD44780U,也出现使用HD667O1HD66702

等字符型液晶显示驱动控制器单片控制的字符型液晶显示模块。液晶显示驱动器

HD44100及其替代品。

字符型液晶显示模块在世界上是比较通用的,而且接口格式也是比较统一的,

其主要原因可能是各制造商所采用的模块控制器都是HD44780U及其兼容品,

不管它的显示屏的尺寸如何,它的操作指令及其形成的模块接口信号定义都是兼

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

块。

一个8 位的数据端口。常用指令说明如表3-1
液晶1602 有三条控制线,RS/数据命令端,RW/读写选择端、EN/使能端,
3-1 常用指令说明


指令名称

控制信号

控制代码

D/I R/W


D7

D6

D5 D4

D3

D2 D1 D0

清屏

0
0


0

0

0

0

0

0

0 1

home

0
0


0

0

0 0 0 0

1 *



资料



.

输入方式设置

0
0


0

0

0

0

0

1

I/D S

显示状态设置

0
0


0

0

0

0

1

D

C B

光标画面滚动

0
0


0

0

0

1

S/C

R/L * *

工作方式设置

0
0


0

0

1

DL

N

F * *

CGRAM 地址设置

0
0


0

1

A5 A4

A3

A2 A1 A0

DDRAM ww

0
w.ta 1

豆网A5 A4 A3

odocs.co

AC2 AC1 AC0

写数据

1
0

读数据

1
1

资料



.

3-10液晶1602显示电路图

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

2.6键盘功能设计

资料



.

3-9按键功能电路

一种是电机PWM 输出的调整按钮。按键功能电路里面有两种按键,原理是通过一个10k的电阻接到+5v电源线一种按键是模仿水塔水位开关的功能按钮,

一端来讲是高电平。当按键按下时,因为电路导通,有电流流过,和单片机引脚

接触的那一端接地,所以是低电平。因此能检测到信号的变化,交给程序处理后

做出相关的动作。

2.7电机驱动电路



资料



.

3-8电机驱动电路

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

2.8报警电路设计

资料

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



.

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

三、软件程序设计

3.1主程序流程图

当系统按下电源开关,且确定有电源存在时候,系统进入初始化状态,灯会闪烁、蜂鸣器响一声、液晶初始化,初始化完以后,进入PWM按键调速选择,如有按键按下,进入PWM按键调整子程序,若没有,进入主程序等待状态,检

模拟抽水过程,此时蜂鸣器报警,灯闪烁,且液晶会显示水位过低状态。当模拟

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

资料



.

开始

系统初始化,灯闪烁,

蜂鸣器响一声,液晶显示

PWM 调速按键选择电机的转速

Y

N

进入主程序等待状态 PWM按键调制子程序

检测模拟水塔水位按键




显示速度启动电机,灯闪烁几下,蜂鸣器响,液晶显示低水位

停止电机,灯闪烁几下,蜂鸣器响几声,液晶显示正常

4-2 程序总体流程图

资料



.

3.2键盘控制流程图

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

根口线。在程序查询方式下,通过I/O端口读入按键状态,当有按键按下时,相

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

盘的程序流程图如下:



4-1键盘程序流程图

3.3显示流程图

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


如图3.4所示。


资料



.


3.4 水位测量流程图

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

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

读取液位数

启动A/D

开始


资料

实际液位≥高警戒液

实际液位≤低警戒液是

且电机关闭

且电机已启动

关闭电机

返回

启动电机

记录数据

记录数据





.


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

资料



.

PWM调速按键调整子程序

N

检测是否有按键按下

Y

N

延时15ms,确定有按键按下

减按键

检测哪一个按键按下

加按键

液晶屏显示速度值增加液晶屏显示速度值减少

先停止电机,PWM速度增加 PWM速度减少

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

3.6水位报警程序

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

序流程图如下图3.6

资料



.

开始

N

是否越限?

Y

返回

声光报警

关闭电源

结束

3.6报警子程序流程图



本系统的调试主要分为硬件调试、软件调试等两大部分。经过初步的分析设

计后,在制作硬件电路的同时,调试也在穿插进行。这样有利于问题的分析和解

决,不会造成问题的积累,而且不会因为一个小问题而进行整体电路的检查,从

而可以节约大量的调试时间。软件编程中,首先编写单元模块的程序,并且在硬

件上调试成功问题,即可以做系统整体程序的调试。联机调试是最重要的一部分,

同时也是本设计成功的关键。

上电后观察电路工作性能,如不能正常工作,按原理图分模块进行电路检测,

是否有虚焊或漏焊现象;如焊接正常,在按信号传递的方向逐级检测,找出出问

题的一级,并向该级的上级进行检测,直到将故障排除。对于虚焊和漏焊的情况

资料



.

最好的办法是先找到一个比较大的电路回路,如果用的是指针式万用表,打到欧

姆档1X10欧姆档就可以测,如果是指针摆到最右端,说明我们的线路连接是正

常的!如果用的是数字万用表,我们可以调整到短路档位,接上要测的点直接就

可以测,如果有蜂鸣响说明线路连接正常。

在元件没有在万能板上进行焊接的时候我们是不能直接拿过来就进行使用

的,必须经过检测,像LED灯可以用万用表测试一下看其是否会发光,测试三

级管的好坏,器件的检测工作都要在焊接之前做好。

用万用表接到按键的信号输入端口,如果按键按下信号肯定会有变化,并且

会在万用表上直接测试读出,这样直接通过硬件测量按键是否能打到预期的效果。

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

的测试。

五、心得体会

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

义的,而且也是必要的。在做这次课程设计的过程中,我感触最深的当属查阅大

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

要的,也是必不可少的。

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

仿真、汇编语言、模拟和数字电路知识等。虽然过去我从未独立应用过他们,但

在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收

资料



.

获。

最后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机

的部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和

一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复

修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料

的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问

题。

在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,

把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写

与读的过程中才能提高,这就是这次课程设计的最大收获。




资料



.

六、参考文献
[1]吕小红,周凤星,马亮.基于单片机的电阻炉温度控制系统设计[C].:科技大
,2008
[2] 马云峰,郭文川.微机原理与接口技术[M].:高等教育,2001
[5] 俊謨.单片机中级教程[M]。:航空航天大学,2006
[6]君华.智能传感器系统[M]。国防工业,1998
[7]侯国章.测试与传感技术[M].:工业大学,2000
[8] 夏大勇,周晓辉,,博峰,虎恩典.MCS-52 单片机温度控制系统[J].航空航天大
,2007

资料



.



七、附录
#include<reg51.h>
#defineuint unsigned int
#defineuchar unsigned char

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

sbit speaker=P1^0; //蜂鸣器,低电平报警sbit lcd_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;//水位过低传感器模拟按键端口,低电平报警

uchar code pwm_t[]={45,90,100,130};//模式下的pwm值,人为已经设定的
void key_scan(); //按键扫描函数
void check_water_level(); //检测水位是否正常函数

void delay(uint z) //延时函数
{ uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}


资料



.

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

voidlcd_write_comd(uchar comd) //1602 写指令函数

{

lcd_rs=0;

//选择指令

lcd_rw=0;

//选择写

delay(5);

P2=comd; //取命令

delay(8);

}

lcd_enable=1; delay(8);

//使能有效


void lcd_write_data(uchar date) //1602 写数据函数

{

lcd_rs=1;

//选择数据

lcd_rw=0;

//选择写操作

delay(5);

P2=date; //取数据操作

delay(8);

lcd_enable=1;

//使能有效


delay(8);


资料



.

lcd_enable=0;
}

void lcd_set_xy(uchar x,uchar y) //定位具体位置
{ uint address;
if(y==1)
address=0x80+x; //第一行的位置
else
address=0xc0+x;
//第二行的位置 lcd_write_comd(address);

}

voidlcd_write_char(uchar x,uchar y,uchar date) //写一个字符函数{
lcd_set_xy(x,y); //设定位置
lcd_write_data(date); //写入数据
}
voidlcd_write_string(uchar x,uchar y,uchar *s) // 写一个字符串函数

{

lcd_set_xy(x,y);

//设定位置


while(*s)

//循环写入数据


资料



.

{lcd_write_data(*s);
s++;
}
}

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

void init() //初始化函数

{

uchar i,count=25; led=1;

//开机led 灯闪烁

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,"Monter Speed: 1");

speaker=0; //蜂鸣器鸣响一声
delay(1000);
speaker=1;

TMOD=0X02; //定时0,定时时间为150us,工作在方式2TH0=(256-150)%256;

}

TL0=TH0; EA=1;

//开总中断


void main() //主函数
{ init();
while(1)
{
key_scan();
check_water_level(); //检测水位是否正常函数

}

}



资料



.

void timre_0() interrupt 1
{ time_count++;
if(time_count==pwmT)时器清零,重新开始
{ time_count=0;
}

//定时器0的中断子函数

//PWM脉宽的时间比较,时间到了定

if(time_count<pwm_t[model-1]) //当计数器在PWM 定制时间的时候,
输出相关的pwm 控制信号
{
else
{
monter=1;
}
}

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

{

uchar i;

//水位是否正常状态检测


if(water_normal==0)


资料



.

{ led=1;
TR0=0;
monter=1; //关闭电机
speaker=0; //蜂鸣器报警

lcd_write_string(0,1,"WaterLev:Normal");//液晶屏显示
for(i=0;i<20;i++) //灯闪烁报警
{
led=~led;
delay(100);
}
}

if(water_low==0) //水位过低检测
{ led=1;
TR0=1; //开启电机
monter=0;
speaker=0; //蜂鸣器报警
lcd_write_string(0,1,"Water Lev:Low ");//液晶屏显示
for(i=0;i<20;i++)//灯闪烁报警
资料



.

{
led=~led;
delay(100);
}
led=0;
speaker=1;
}
}
voidkey_scan() //按键扫描函数

{

uchar i;
if(key_up==0)

//检测是否增加按键按下

{ TR0=0; // 有按键按下,电机一定要停止转动

model++;

//pwm 速度定制值调整加大

if(model==5)
model=1;
i=model+0x30;
lcd_write_char(14,0,i);//液晶显示变化

}

while(!key_up);

//按键是否释放检测



资料



.

}
if(key_down==0) //检测是否减少按键按下
{delay(15);
if(key_down==0)
{ TR0=0; // 有按键按下,电机一定要停止转动

model--;

if(model==0)
model=4;

//pwm速度定制值调整减少

i=model+0x30;
lcd_write_char(14,0,i);
}
}

资料



.

课程论文成绩评定表



资料



.




资料

显示全文