收藏 分销(赏)

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

上传人:精**** 文档编号:4059248 上传时间:2024-07-26 格式:DOC 页数:17 大小:102.04KB
下载 相关 举报
水位自动控制系统设计.doc_第1页
第1页 / 共17页
水位自动控制系统设计.doc_第2页
第2页 / 共17页
水位自动控制系统设计.doc_第3页
第3页 / 共17页
水位自动控制系统设计.doc_第4页
第4页 / 共17页
水位自动控制系统设计.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、水位自动控制系统设计 华南师范大学增城学院课 程 论 文题目:水位自动控制系统设计课 程 名 称 微型机控制技术 考 查 学 期 2013/2014 学年 第 2学期 考 查 方 式 课程论文 姓 名 学 号 专 业 应用电子 成 绩 指 导 教 师 摘要2一、设计内容:3二、硬件电路设计32。1 系统框图设计32.2 单片机最小系统42.4 水位传感器的电路72.5 液晶1602显示设计82。6 键盘功能设计112.7 电机驱动电路112.8 报警电路设计12三、软件程序设计133。1 主程序流程图133.2 键盘控制流程图153.3 显示流程图153。4 水位测量流程图163。5 PWM

2、电机驱动程序173。6 水位报警程序18四、调试过程18五、心得体会19六、参考文献21七、附录22摘要水塔是在日常生活和工业应用中经常见到的蓄水装置,在我们的生活中起到了重要的作用,而水塔里面的水位控制是一个水塔发挥作用的关键.基于单片机的水塔水位控制系统使水塔水位自动保持在一定的位置,通过对其水位的控制对外供水,以满足需要。该系统使用水位传感器对水塔水位进行检测并将检测到的信号传给单片机来进行处理,通过调整定时器的定时时间来增大或者缩小占空比,并编写程序加以控制,从而实现电机的调速.最后,使用液晶屏显示当前水位状态以及电动机的转速。该系统通过了报警模块来实现了过低水位蜂鸣器鸣笛报警、过低警

3、戒水位自动处理、正常水位蜂鸣器鸣笛报警以及正常水位处理。本系统适应在不同的用水场合下的用水速度需要,节省工作时间,提高了整体工作的效率,实现水塔水位的自动控制。液位控制是工业控制中的一个重要问题,针对液位控制过程中存在大滞后、时变、非线性的特点,为适应复杂系统的控制要求,人们研制了种类繁多的先进的智能控制器,模糊PID控制器便是其中之一。模糊PID控制结合了PID控制算法和模糊控制方法的优点,可以在线实现PID参数的调整,使控制系统的响应速度快,过渡过程时间大大缩短,超调量减少,振荡次数少,具有较强的鲁棒性和稳定性,在模糊控制中扮演着十分重要的角色关键词:水位控制;单片机;模糊PID控制一、设

4、计内容:这设计课程是为了确保水位在水塔的允许的范围内浮动,采用了水位传感器测量水位变化,从而控制电动机,保证水位正常.因此,这里给出以STC89C52单片机为核心器件的水塔水位检测控制系统,该系统能实现水塔水位检测、LCD1602显示当前水位功能以及蜂鸣器鸣笛报警,手动按键调整PWM电机调速功能,实现过低和正常警戒水位报警、过低和正常警戒水位处理的系统要求。按下电源按钮后,灯会闪烁几下,然后是常亮状态,蜂鸣器会响.电机不会转的,此时系统在待机状态,且为正常状态。要先选择好电机的抽水速度是哪个档位,共有4个档位。档位越高,速度越快。在电机转的时候,按下选择档位,电机立马会停止的,这个是一个软件安

5、全冗余的设计理念.电机在水位模拟传感器端口(低水位)按下后,说明水位太低,电机转动,此时蜂鸣器会响一下,灯会闪烁几下,以此表示报警,并且液晶也会显示水位太低。当水位模拟传感器端口(正常水位)按下后,说明水位已经到正常状态,电机停转,此时蜂鸣器也会响一下,灯一样会闪烁,以此表示报警,且液晶屏也会显示水位正常.而PWM速度调整就是档位的选择,必须在电机停止的状态下去选择电机输出的速度。二、硬件电路设计2.1 系统框图设计系统的总体框图主要由主控芯片基本电路、按键电路、电动机和蜂鸣器驱动电路、液晶显示电路组成。除主控芯片电路外,其他的都是外围功能性电路。蜂鸣器和电动机电路驱动原理基本相同,都为三极管

6、驱动电路,按键电路为平常的独立按键电路,液晶电路参考设计手册既可.电路设计框图如图2。1所示:图2。1 水塔水位控制系统总框图2。2 单片机最小系统STC89C52是一款完全兼容8051内核指令的芯片,是宏晶科技公司的新一代增强性的8051单片机9。采用最新的加密技术解决了全球89系列单片机都被解密的困惑。并且管脚完全兼容,性能更好,驱动力更强,功耗更低,价格也比传统的89系列低10。STC89C52的引脚说明图如图3-1图32 STC89C52的引脚图说明图34 最小系统原理图此图是单片机工作的最小系统原理图,在这个电路中又可以分为复位电路和晶振电路,如图3-4和图3-5所示:图3-5复位电

7、路复位电路可以分为上电复位和手动按键复位两种。在系统上电的一瞬间单片机上电复位,原理是利用电容两端的电压不能突变,在一上电的瞬间电容好比短路,所以加在第九脚RST的电平是高电平,虽然时间很短,但是足以让单片机系统复位。手动按键复位的原理是,在系统正常工作的过程中可以手动触动按键使单片机复位。具体原理是,按下S1按键,因此5V电压经过一个200欧姆的电阻分压后加到系统的RST上,手动按键按下到抬起的过程足以使系统复位。图36晶振电路对于单片机系统而言,晶振电路就好比是人的心脏一样,是一个跳动的动力来源,18,19号引脚接的是11.0592M的晶振。 2.3蜂鸣器报警电路原理图3-7蜂鸣器报警功能

8、电路蜂鸣器报警功能电路使用的是三极管8550驱动,三极管8550是PNP三极管,射极接电源+5V,基极通过一个电阻连接到P1.0口,集电极接蜂鸣器,当P1.0为高电平时,三极管截止,蜂鸣器没有不响,当P1。0为低电平时,三极管导通,蜂鸣器发出响声。2。4 水位传感器的电路按键是现阶段电子设计中最常用、最实用的输入设备.按键能够成为最普遍的输入设备,主要是其具备了以下几个优点:工作原理、硬件电路连接简单、操作实用性强、价格便宜,程序编写简单。缺点:机械抖动比较严重、外型不够美观.按键部分实现的主要原理是单片机读取与按键相连接的I/O口状态,来判定按键是否按下,达到系统参数设置的目的.键盘在单片机

9、应用系统中的作用是实现数据输入、命令输入,是人工干预的主要手段。独立式按键就是按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键的工作状态,不会影响其他I/O口线上的工作状态。各按键开关均需要采用了上拉电阻,是为了保证在按键断开时,各I/O有确定的高电平。当输入口线内部已有上拉电阻,外电路的上拉电阻可省去。因此,通过检测输入线的电平状态就可以很容易判断是哪个按键被按下了。优点:电路配置灵活,软件结构简单.缺点:每个按键需占用一根I/O口线,在按键数量较多时,I/O口浪费大,电路结构显得复杂.因此,此键盘适用于按键较少或操作速度较高的场合。矩阵式键盘适用于按键数量多的场合,它通常

10、由行线和列线组成,按键位于行、列的交叉点上.单片机的键盘检测通常有三种方式:查询、中断、定时扫描。查询和中断方式同普通的 I/O 传送是一致的,定时扫描方式是利用单片机内部定时器产生定时中断,在中断服务程序中对键盘进行扫描获得键值.在本设计中采用的是 4 行*4 列键盘,其电路图如图3.12所示,列线由 P2。4-P2.7口控制,行线由 P2.0P2。3口控制。电路中共 16个按键,包括设置键、3 个温度参数和时间设置键、1个增加键、1个减小键。系统在程序初始化时控制键盘行线的 P2.0-P2.3口输出高电位,控制键盘列线的P2.4P2。7口输出低电位,在判断电路是否有按键按下时,读 P2.0

11、-P2。7端口值,若端口值不是11110000,则说明电路中有按键按下.然后根据程序进行去抖动处理和计算键值. 图2。4 矩阵式键盘电路图2.5 液晶1602显示设计液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用12. 字符型液晶模块是一种用57点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等.字符型液晶显示模块是一类专用于显示字母、数字、符号等的点阵型液晶显示模块。之所以称字符型液晶显示模块是因为其液晶显示器件的电极图形是由若干个58或511点阵块组成的字符块集。每一个字符块

12、是一个字符位,每一位都可以显示一个字符,字符位之间空有一个点距的间隔起着字符间距和行距的作用,这是其一;其二是这类模块使用的是专用于字符显示控制与驱动的IC芯片13.这两种因素确定了这类模块的应用范围仅局限于字符而显示不了图形,所以称其为字符型液晶显示模块。字符型液晶显示驱动控制器广泛应用于字符型液晶显示模块上。目前最常用的字符型液晶显示驱动控制器是HD44780U,也出现使用HD667O1或HD66702等字符型液晶显示驱动控制器单片控制的字符型液晶显示模块.液晶显示驱动器为HD44100及其替代品。字符型液晶显示模块在世界上是比较通用的,而且接口格式也是比较统一的,其主要原因可能是各制造商

13、所采用的模块控制器都是HD44780U及其兼容品,不管它的显示屏的尺寸如何,它的操作指令及其形成的模块接口信号定义都是兼容的.所以会使用一种字符型液晶显示模块,就会通晓所有的字符型液晶显示模块。液晶1602有三条控制线,RS/数据命令端,RW/读写选择端、EN/使能端,一个8位的数据端口。常用指令说明如表31:表31常用指令说明指令名称控制信号控制代码D/I R/WD7 D6 D5 D4 D3 D2 D1 D0清屏0 00 0 0 0 0 0 0 1归home位0 00 0 0 0 0 0 1 输入方式设置0 00 0 0 0 0 1 I/D S显示状态设置0 00 0 0 0 1 D C B

14、光标画面滚动0 00 0 0 1 S/C R/L 工作方式设置0 00 0 1 DL N F CGRAM地址设置0 00 1 A5 A4 A3 A2 A1 A0DDRAM地址设置0 01 A6 A5 A4 A3 A2 A1 A0读BF和AC0 1BF AC6 AC5 AC4 AC3 AC2 AC1 AC0写数据1 0数 据读数据1 1数 据图310液晶1602显示电路图液晶1602从左到右依次有16根引脚,每个引脚定义不同。有三根控制引线和八根信号线,必须注意的一点是3号引脚是背光电源指示端。背光电阻选择的不同有不同的结果.我们这里选择2。7k电阻做为背光电阻.2.6 键盘功能设计图39按键功

15、能电路 按键功能电路里面有两种按键,一种按键是模仿水塔水位开关的功能按钮,一种是电机PWM输出的调整按钮。原理是通过一个10k的电阻接到+5v电源线上,当按键没有按下时,按键没有导通,所以没有电流,但对于连到引脚上的那一端来讲是高电平。当按键按下时,因为电路导通,有电流流过,和单片机引脚接触的那一端接地,所以是低电平。因此能检测到信号的变化,交给程序处理后做出相关的动作。2.7 电机驱动电路图3-8电机驱动电路电机驱动电路和蜂鸣器的电路基本相同,同样使用8550三极管驱动,三极管的基极接P1.1,当P1.1为高电平时,电机不转动,当P1。1为低电平时,电机转动. 2.8 报警电路设计图37蜂鸣

16、器报警功能电路蜂鸣器报警功能电路使用的是三极管8550驱动,三极管8550是PNP三极管,射极接电源+5V,基极通过一个电阻连接到P1。0口,集电极接蜂鸣器,当P1。0为高电平时,三极管截止,蜂鸣器没有不响,当P1.0为低电平时,三极管导通,蜂鸣器发出响声。三、软件程序设计3.1 主程序流程图当系统按下电源开关,且确定有电源存在时候,系统进入初始化状态,灯会闪烁、蜂鸣器响一声、液晶初始化,初始化完以后,进入PWM按键调速选择,如有按键按下,进入PWM按键调整子程序,若没有,进入主程序等待状态,检测水塔水位的液位状态,当模拟液位低水位按键按下后,电机以显示速度启动,模拟抽水过程,此时蜂鸣器报警,

17、灯闪烁,且液晶会显示水位过低状态.当模拟水位正常按键正常按键按下后,电机停止转动,蜂鸣器报警、液晶显示当前正常状态,然后程序进入循环,继续检测模拟水位状态按键。具体流程图的如图42所示停止电机,灯闪烁几下,蜂鸣器响几声,液晶显示正常检测模拟水塔水位正常按键开始系统初始化,灯闪烁,蜂鸣器响一声,液晶显示进入主程序等待状态显示速度启动电机,灯闪烁几下,蜂鸣器响,液晶显示低水位检测模拟水塔水位按键检测模拟水塔水位低按键NYNYPWM按键调制子程序NYPWM调速按键选择电机的转速图42程序总体流程图3。2 键盘控制流程图由于使用的按键较少,所以本文采用了独立式键盘,即每个按键单独占用一根口线。在程序查

18、询方式下,通过I/O端口读入按键状态,当有按键按下时,相应的端口变为低电平,这样通过读入I/O口状态判断是否有按键按下.查询式键盘的程序流程图如下:图4-Error! Bookmark not defined. 键盘程序流程图3。3 显示流程图共阴极数码管是用高电平(“1”)点亮的,要求驱动功率较大。程序流程图如图3。4 所示.图 3.4 显示子程序流程图3.4 水位测量流程图本设计采用单片机主控芯片控制继电器外围电路,用于驱动电机的启动与关停.其程序流程图如图43所示。启动A/D转换读取液位数据开始实际液位高警戒液位且电机已启动关闭电机记录数据实际液位低警戒液位且电机关闭返回启动电机记录数据

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

20、调整子程序流程图3.6 水位报警程序报警子程序主要实现在温度超限的情况下,进行声光报警,并切断电源。程序流程图如下图3.6.图3.6 报警子程序流程图四、调试过程本系统的调试主要分为硬件调试、软件调试等两大部分。经过初步的分析设计后,在制作硬件电路的同时,调试也在穿插进行。这样有利于问题的分析和解决,不会造成问题的积累,而且不会因为一个小问题而进行整体电路的检查,从而可以节约大量的调试时间。软件编程中,首先编写单元模块的程序,并且在硬件上调试成功问题,即可以做系统整体程序的调试。联机调试是最重要的一部分,同时也是本设计成功的关键。上电后观察电路工作性能,如不能正常工作,按原理图分模块进行电路检

21、测,是否有虚焊或漏焊现象;如焊接正常,在按信号传递的方向逐级检测,找出出问题的一级,并向该级的上级进行检测,直到将故障排除.对于虚焊和漏焊的情况最好的办法是先找到一个比较大的电路回路,如果用的是指针式万用表,打到欧姆档1X10欧姆档就可以测,如果是指针摆到最右端,说明我们的线路连接是正常的!如果用的是数字万用表,我们可以调整到短路档位,接上要测的点直接就可以测,如果有蜂鸣响说明线路连接正常。在元件没有在万能板上进行焊接的时候我们是不能直接拿过来就进行使用的,必须经过检测,像LED灯可以用万用表测试一下看其是否会发光,测试三级管的好坏,器件的检测工作都要在焊接之前做好。用万用表接到按键的信号输入

22、端口,如果按键按下信号肯定会有变化,并且会在万用表上直接测试读出,这样直接通过硬件测量按键是否能打到预期的效果.写一个功能小程序,来具体单个的功能硬件电路是否有问题,如果有问题再具体看是硬件的问题还是软件的问题,若没有问题,则可以进行下一个功能电路的测试。五、心得体会作为一名电气的大四学生,在即将毕业之际,通过做这次课程设计是很有意义的,而且也是必要的.在做这次课程设计的过程中,我感触最深的当属查阅大量的设计资料了.为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。其次,在这次课程设计中,我们运用了以前学过的专业课知识,如:proteus仿真、汇编语言、模拟和数字电路

23、知识等。虽然过去我从未独立应用过他们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获.最后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经

24、常写与读的过程中才能提高,这就是这次课程设计的最大收获。六、参考文献1 吕小红,周凤星,马亮。基于单片机的电阻炉温度控制系统设计C.武汉:武汉科技大学,20082 马云峰,郭文川。微机原理与接口技术M.北京:高等教育出版社,20013 张开生。MCS51单片机温度控制系统的设计J。微计算机信息,20054 胡寿松。自动控制原理(第五版)M。北京:北京科学出版社,20075 张俊謨.单片机中级教程M。北京:北京航空航天大学出版社,2006;6 刘君华.智能传感器系统M。国防工业出版社,1998;7 侯国章。测试与传感技术M.哈尔滨:哈尔滨工业大学出版社,20008 夏大勇,周晓辉,赵增,陈博峰,

25、虎恩典。MCS 52单片机温度控制系统J. 北京航空航天大学出版社,2007七、附录#includereg51.h#define uint unsigned intdefine uchar unsigned charsbit led=P01; /led灯显示,低电平亮sbit speaker=P10; /蜂鸣器,低电平报警sbit lcd_rs=P07; /1602数据选择命令端 sbit lcd_rw=P06; /1602读写选择端 sbit lcd_enable=P05; /1602 使能端定义 sbit key_up=P30; /pwm速度调整端口,电机速度加一sbit key_down

26、=P31;/pwm速度调整端口,电机速度减一sbit monter=P11;/电机驱动端口,pwm控制输出sbit water_normal=P16;/水位过高传感器模拟按键端口,低电平报警sbit water_low=P17;/水位过低传感器模拟按键端口,低电平报警uchar code pwm_t=45,90,100,130;/模式下的pwm值,人为已经设定的时间是100,可以调整上限值 uint model=1,pwmT=150,time_count=0; void key_scan(); /按键扫描函数 void check_water_level(); /检测水位是否正常函数void

27、delay(uint z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);/*1602液晶显示函数*/ void lcd_write_comd(uchar comd) /1602写指令函数 lcd_rs=0; /选择指令 lcd_rw=0; /选择写 delay(5); P2=comd; /取命令 delay(8); lcd_enable=1; /使能有效 delay(8); lcd_enable=0;void lcd_write_data(uchar date) /1602写数据函数lcd_rs=1; /选择数据 lcd_rw=0; /选择写

28、操作 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);void lcd_write_char(uchar x,uchar y,uchar date)/写一个字符函数 lcd_set_xy(x,y); /设定位置 lcd

29、_write_data(date); /写入数据 void lcd_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灯闪烁 for(i=0;i15;i+) led=led; delay(count);count=count+5; led=0; lcd_write_comd(0x38);/

30、设置16*2行显示,57点阵,8位数据接口 lcd_write_comd(0x0c); /开显示 lcd_write_comd(0x01); /清屏 lcd_write_comd(0x80); /设定初始位置 lcd_write_string(0,1,Water Lev:Normal); lcd_write_string(0,0,”Monter Speed: 1); speaker=0; /蜂鸣器鸣响一声 delay(1000); speaker=1; TMOD=0X02; /定时0,定时时间为150us,工作在方式2 TH0=(256-150)%256; TL0=TH0; EA=1;/开总中

31、断 ET0=1;/开定时器0的中断 TR0=0; /定时器0不启动void main() /主函数 init(); while(1) key_scan(); check_water_level(); /检测水位是否正常函数 void timre_0() interrupt 1/定时器0的中断子函数 time_count+; if(time_count=pwmT) /和PWM脉宽的时间比较,时间到了定时器清零,重新开始 time_count=0; if(time_countpwm_tmodel-1) /当计数器在PWM定制时间内的时候,输出相关的pwm控制信号 monter=0; else mo

32、nter=1; void check_water_level() /检测水位是否正常函数 uchar i; if(water_normal=0) /水位是否正常状态检测 led=1; TR0=0; monter=1; /关闭电机 speaker=0; /蜂鸣器报警 lcd_write_string(0,1,”Water Lev:Normal);/液晶屏显示 for(i=0;i20;i+) /灯闪烁报警 led=led; delay(100); led=0; speaker=1; if(water_low=0) /水位过低检测 led=1; TR0=1; /开启电机 monter=0; spea

33、ker=0; /蜂鸣器报警 lcd_write_string(0,1,”Water Lev:Low ”);/液晶屏显示 for(i=0;i20;i+) /灯闪烁报警 led=led; delay(100); led=0; speaker=1; void key_scan() /按键扫描函数 uchar i; if(key_up=0) /检测是否增加按键按下 delay(15); 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) /pwm速度定制值调整减少 model=4; i=model+0x30; lcd_write_char(14,0,i);/液晶显示变化 while(!key_down); /按键是否释放检测 课程论文成绩评定表成绩评定: 指导教师签名:年 月 日16

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服