毕业设计-基于单片机的水位检测与控制系统-精品.doc
电子信息工程实验教学中心综合课程设计设计报告设计题目基于单片机的水位检测与控制系统年级专业学 号姓 名成 绩2012电子信息工程评语:完成日期:2015/6/30 目 录摘要11 绪论21.1 项目研究背景及意义21.2 课题现状 22 总体设计方案及论证32.1 总体方案设计33 硬件实现及单元电路设计43.1 设计原理43.2 设计方案53.3 传感器模块53.3.1 传感器的选择5 3.4 系统工作原理63.5 水位显示电路73.6 外部晶振时钟电路的设计123.7 时钟电路的设计133.8 自动报警电路133.9 中央处理器模块143.10 继电器控制模块143.11 水位检测系统仿真图 144 软件设计154.1 主程序工作流程图155 总结156 参考文献15附 录16附件1:原理图16附件2:仿真图16附件3:元件清单17附件4:程序18摘要随着社会的发展,科技的进步以及人们生活水平的逐步提高,各种方便与生活的自动控制系统开始进入了我们的生活,单片机作为微型计算机发展的一个重要分支,具有高可靠性、高性能价格比、低电压、低功耗等优势,以其为核心的自动控制系统赢得了广泛的应用。该课程设计的题目是基于单片机的水塔水位控制,在此水塔水位控制系统中,检测信号来自插入水中的4个金属棒,以感知水位变化情况。工作正常情况下,应保持水位在某一范围内,当水位变化发生故障的时候,及时关断电机电源,发出声、光报警信号。其目的在于对单片机技术的应用,由单片机实现自动运行,使水塔内水位始终保持在一定范围,以保证连续正常地供水。该课程设计给出以STC89C51单片机为核心器件的水塔水位检测控制系统仿真设计,实现水位的检测控制、处理和报警等功能,并在Proteus软件环境下模拟仿真。实验结果表明,该系统具有良好的检测控制功能,可移植性和扩展性好。关键词:水位传感器 STC89C5101. 绪论1.1 项目研究背景及意义在工农业生产中,常常需要测量液体液位。随着国家工业的迅速发展,液位测量技术被广泛应用到石油、化工、医药、食品等各行各业中。低温液体(液氧、液氮、液氩、液化天然气及液体二氧化碳等)得到广泛的应用,作为贮存低温液体的容器要保证能承受其载荷;在发电厂、炼钢厂中,保持正常的锅炉汽包水位、除氧器水位、汽轮机凝气器水位、高、低压加热器水位等,是设备安全运行的保证;在教学与科学研究中,也经常碰到需要进行液位控制的实验装置。本设计是利用STC89C52单片机设计一种水位控制系统。主要是基于单片机的硬件设计以及程序设计, 包括测量电路部分、液位实时数显输出部分以及液位控制部分,还在此基础上添加蜂鸣器。本设计只是概念性设计了电路部分,并不涉及具体的数值设定,经过了实际应用检测。该系统实现了水位监测,水位控制,水位显示,故障报警功能。在设计中主要采用了传感技术、单片机技术、弱电控制强电技术、C语言编程等技术。本文还讲述了水位控制系统工作的基本原理,介绍了电路接口原理图,给出了相应了设计流程图和C语言程序。本文主要是为了更多得了解单片机,掌握单片机的组成部分和控制原理,最终达到设计出“单片机水位控制系统的”的目的。实验证明,单片机控制的水位控制系统的硬件电路简单,软件功能完善,控制系统可靠,充分发挥了单片机的性能,可以大大的提高单片机的开发效率。1.2 课题现状目前,市面上进行液位测量的仪表种类繁多,但是同时具有测量、监控、数据记录及处理的液位测量装置并不多。在某些工业控制系统中,数据的测量这一基本功能已不能满足现代工业的要求,往往需要对大批数据进行记录,对其进行后期处理分析,实现差错控制、工艺改善、资源优化等一系列工作。为了获得大批量的数据,得到可靠的分析资料,往往需要长期、多网点的监控记录。在液位测量这一领域中,如江河湖海、城市用水等方面,大量数据长时间,多网点的采集记录分析具有普遍的意义。液位的变化分析,有助于人们进一步对自然环境、天气变化甚至是灾害预警提供可靠的支持。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随即存储器RAM,只读存储器ROM、多种I/O口和中断系统、定时器、计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。中央处理器CPU是单片微型计算机指挥、执行中心,由它读程序并执行指令。CPU功能,是以不同方式来执行各种指令。有的指令涉及到各个寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件的关系;有的则与外部器件发生关系。总的来说CPU是通过复杂的时序电路来完成不同的指令功能的。2. 总体设计方案及论证2.1 总体方案设计通过水的导电性,在水位到与未到的差别形成鲜明的高低电平并利用单片机强大的数据处理能力对收到的数据进行解码、判断,做出相应的显示处理、驱动继电器打开或关闭相应的电子阀门。设计要求:利用单片机及扬声器、水位传感器等器件设计;将探测到的水位变化信号转换为电压信号,经调理电路整形处理为TTL电平送入单片机;单片机对送入的信号进行数据处理,在LED上进行水位显示,超出水位警戒线时发出报警提示。原始数据:水位传感器;51单片机;蜂鸣器。主要任务:根据技术要求和现有开发环境,分析设计题目;设计系统实现的方案;设计并绘制电路原理图;画出功能模块的程序流程图;使用C语言编写实现程序;结合硬件调试、修改并完善程序;编写项目报告。对于本设计单片机结构简单实用性强,功能齐全,技术先进,使实现这设计不难实现。同时,C语言是单片机的重要“组成”,如果能掌握好C语言编程,这将很大程度上提高了开发效率。在设计过程中我们采用了软硬件双结合的方式,软件设计的方法简化了硬件的要求,为设计创造了条件。单片机采用的STC89C51的单片机。水位传感器模块单位数码管显示STC89C51 单片机模块 状态指示灯晶振电路继电器控制端复位电路 蜂鸣器(图 1-1 系统整体方案)3. 硬件实现及单元电路设计3.1 设计原理单片机水塔水位控制原理如图1所示,图中虚线表示容许水位变化的上下线,在正常情况下,应保持水位在虚线范围之内。其中A棒处于下限水位,C棒处于上限水位,B棒在上下水位之间。A棒接+5V电源,B棒、C棒各通过一个电阻与地相连。 图1 水塔水位控制原理图水塔由电机带动水泵供水,单片机控制电机转动以达到对水位控制之目的。供水时,水位上升,当达到上限时,由于水的导电作用,B、C棒连通+5V。因此,b,c两端均为1状态,这时应停止电机和水泵的工作,不再给水塔供水。 当水位处于上下限之间时,B棒与A棒导通。因C棒不能与A棒导通,b端为1状态,c端为0状态。这时,无论是电机已在带动水泵给水塔加水,水位在不断上升;或者是电机没有工作,用水使水位在不断下降。都应继续维持原有的作状态。 当水位降到下限时,B,C棒都不能与A棒导电,因此,b,c两端均为0状态。这时应启动电机,带动水泵工作,给水塔供水。 3.2 设计方案本设计为一个实际应用系统的水塔水位控制部分。在此水塔水位控制系统中,检测信号来自插入水中的4个金属棒,以感知水位变化情况。工作正常情况下,应保持水位在1水位和4水位内,当水位变化发生故障的时候,及时关断电机电源,发出声、光报警信号。 水塔水位的硬件原理图如图2所示。图2 水塔水位的硬件原理图3.3 传感器模块3.3.1 传感器的选择此设计最重要的模块之一就是水位传感器了,因为这个模块的准确性直接决定了水位控制的准确性.如果传感器选择得不可靠,可能造成数码管所显示值非水池中的真实水位值;可能造成错误报警;错误加水或错误放水等可能. 水位的高度检测也可有多种选择,如超声波;电容传感器;红外传感器;利用水的导电性直接感应电流的"通"或"断"来判断水位是否到达了相应的水位线 方案一、使用超声波传感器。超声波具有不受被测的深度和导电性影响的特殊性,但精度不高,价格昂贵;这种产品不具有市场竞争力。再者,这种传感器与单片机的接口较复杂,需要模/数之间的转换。 方案二、使用电容式传感器。容易实现,但要求水位的变化较为缓慢,距离不能太远。 方案三、使用红外传感器,利用水面和容器的反射构成薄膜干涉,当有水时,由于水面反射光的干涉,使得红外线传感器接收不到相应的信号,由此可以探测到水位高度。但是,同样地这种传感器价格也很昂贵,而其安装起来也不太容易。 方案四、利用水的导电性,直接感应电流的"通"或"断"来判断水位是否到达了相应的水位线。这种方式不用额外的开销,而操作安装简单,其安装高度较为灵活。如下示意图 VCCP23P22P20P21图 3 水位传感器示意图3.4 系统工作原理当水箱里的水位在低水位的时候传感器传给稳压电路一个低电平,低电平通过稳压电路里的PNP三极管、电容、电阻转换成低电平。单片机收到低电平,表示水箱里没有水了需要系统开始运作,给水箱加水,蜂鸣器报警。水位达到高水位时传感器同时传送给单片机一个低电平,红灯闪烁频率加快,蜂鸣器报警频率加快。同理,水位从高水位下降时,水位离开高水位线时,高水位传感器探头与电源断开,传感器输出低电平给单片机。图4 稳压电路图本电路的主要作用是使从传感器输入的电平能够稳定的输入到单片机中,是由三极管8550、两个电阻组成。3.5 水位显示电路本电路采用数码管显示不同的水位等级,其段数码管是常用的显示器件,具有造价低廉,驱动方便等特点,其由7 个发光二极管和一个小数点组成,行成一个日字形,它们可以共阴极,也可以共阳极.但其使用方法基本相同。通过解码电路得到的数码接通相应的发光二极而形成相应的数字显示。由于,单片机复位后的各个引脚呈高电平,一般情况下,复位后数码管不亮且考虑到显示的“够用”要求,所以选择一位共阳数码管做为水位高度的显示。如下所示为一位共阳的示意图:图5 数码管模型示意图 D 2 D 3 D 4 D 图6 共阳数码管接法3.6 外部晶振时钟电路的设计STC89C51的时钟可以由两种方式产生,一种是内部方式,利用芯片内部的振荡电路;另外一种为外部方式,本论文根据实际需要和简便,采用内部振荡方式,MCS-51内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端,这个放大器与作为反馈元件的片外晶体或陶瓷谐振器一起构成了一个自激振荡器。STC89C51虽然有内部振荡电路,但要形成时钟,必须外接元件,所以实际构成的振荡时钟电路,外接晶振以及电容C1和C2构成了并联谐振电路接在放大器的反馈回路中,对接电容的值虽然没有严格的要求,但电容的大小会影响振荡频率的高低,振荡器的稳定性,起振的快速性和温度的稳定性。晶振的频率可在1.2MHZ12MHZ之间任选,电容C1和C2的典型值在20pf100pf之间选择,由于本系统用到定时器,为了方便计算,采用了12MHZ的晶振,采用电容选择30pf。 图7 晶振电路的设计3.7 复位电路的设计STC89C51的复位输入引脚RST为单片机提供了初始化的手段,可以使程序从指定处开始执行,在STC89C51的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作,只要RST保持高电平,则STC89C51循环复位,只有当RET由高电平变成低电平以后,STC89C51才从0000H地址开始执行程序,本系统采用按键复位方式的复位电路。 图8 复位电路3.8 自动报警电路下列二种情况发生系统报警: 1当水位达到上限极限水位时报警,水位到达上限极限水位时系统发出报警;2当水位达到下限极限水位时报警,水位到达下限极限水位时系统发出报警;蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个三极管的电路。通过一个三极管C8550来放大驱动蜂鸣器,当8550的基极是一个低电平时,三极管处于饱和状态,蜂鸣器通电报警,当基极为高电平,三极管处于截止状态,蜂鸣器停止报警。原理图见下面图3: 图6 自动报警电路的接线图3.9 中央处理器模块中央处理器是整个设计的数据处理中心,担负着数据接收与处理、数据显示与报警及继电器的驱动并开启电子阀门。这个中央处理器的选择应考虑价格、稳定性、易用性等因素。这里我们选择STC89C51。3.9.1 STC89C51 主要性能: 与 MCS-51 单片机产品兼容 8K字节在系统可编程Flash存储器 1000次擦写周期 全静态操作:0Hz33Hz32个可编程I/O口线三个16位定时器/计数器八个中断源全双工UART串行通道低功耗空闲和掉电模式掉电后中断可唤醒看门狗定时器双数据指针掉电标识符3.9.2 功能特性描述: STC89C51是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单片机上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 3.9.3 引脚: P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写"1"时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和 时器/计数器 2 的触发输入(P1.1/T2EX),具体如下。在flash编程和校验时,P1口接收低8位地址字节引脚号第二功能:P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVXDPTR)时,P2口送出高八位地址。在这种用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVXRI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为STC89C51特殊功能(第二功能)使用,如下所示。在flash编程和校验时,P3口也接收一些控制信号。P3.0RXD(串行输入)P3.1TXD(串行输出) P3.2INT0(外部中断 0) P3.3INT0(外部中断 0) P3.4T0(定时器 0 外部输入) P3.5T1(定时器 1 外部输入) P3.WR(外部数据存储器写选通) P3.7RD(外部数据存储器写选通) 框图:图7 中央处理器引脚图3.10 继电器控制阀门模块用一个较小的电流去控制较大的电流(如驱动阀门、高功率加热器件、机床等),可以使用诸如继电器,晶体管和晶闸管几种类型。在线路结构上都采用了隔离措施。但各有其特点:继电器输出:开关速度低,负载能力大,适用于低频场合。晶体管输出:开关速度高,负载能力小,适用于高频场合。晶闸管输出:开关速度高,负载能力小,适用于高频场合。在这个设计中,只是用于驱动阀门而已,所以选择使用继电器,要求速度不用太高,负载也无需太大。继电器是一种当输入量(电、磁、声、光、热)达到一定值时,输出量将发生跳跃式变化的自动控制器件,是一种电子控制器件,通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流。3.10.1 继电器工作原理一般机械继电器有一组触点,4根引线,两个是常开的,两个是常闭的,中间一个共用。当控制端加电之后,线圈产生磁场,常开的闭合,常闭的断开,这样可以用小电压和电流控制大功率的设备,比较方便和安全。下图为直流无极继电器,当电流通过线圈时,铁芯吸动衔铁,使推杆向上移动,带动中簧片断开后接点,而与前接点闭合;当电源切断后,铁芯失磁,衔铁自行释放,使推杆下降,中簧片断开前接点,而与后接点闭合。继电器线圈没电时,铁芯失磁,簧片与后接触点闭合,使信号灯电路接通红灯,则红灯亮。如下图:图 8 继电器断开时工作原理示意图继电器线圈有电时,铁芯吸动衔铁,簧片与前接触点闭合,使信号灯电路接通绿灯,则绿灯亮。如下图:图9 继电器接时工作原理示意图综合考虑,电子阀门工作时电流不大,形状闭合速度也要求不高,所以继电器的选择要求不高,只要市面上较易买到,价格合适,电流2A10A右就可以了.这里我们选择的是HRS4H-S-DC5V就可以3.11 水位检测系统的整体电路仿真图图10 水位控制系统仿真图4 软件设计4.1 主程序工作流程图在系统的硬件确定以后,功能完善的软件能够很好的指导和协调硬件的工作,可使系统发挥其最大的作用,并且便利以后的更新换代升级。一个完整的系统都离不开对系统状态的监控,为了更好的协调软件,硬件各个部分正常工作就必须对整个系统进行严密监控。主程序如图3-1所示。系统开始工作时,由传感器检测出水位深度,送入单片机与设定值相比较。如果测量值高于上限值则发出警报并关闭水泵;如果测量值低于下限值则发出警报并启动水泵供水;如果测量值等于设定值则关闭水泵停止供水,并由显示水位值,否则启动水泵继续供水且显示水位值。 开始传感器测量Y报警提示关闭水泵测量值高于上限值NY报警提示启动水泵测量值低于下限值NY关闭水泵停止供水测量值等于设定值N启动水泵继续供水显示液位高度高度 结束图11主程序设计5 总结本设计是利用STC89C52单片机设计一种水位控制系统。主要是基于单片机的硬件设计以及程序设计, 包括测量电路部分、液位实时数显输出部分以及液位控制部分,还在此基础上添加蜂鸣器。本设计只是概念性设计了电路部分,并不涉及具体的数值设定,经过了实际应用检测。该系统实现了水位监测,水位控制,水位显示,故障报警功能。在设计中主要采用了传感技术、单片机技术、弱电控制强电技术、C语言编程等技术。本文还讲述了水位控制系统工作的基本原理,介绍了电路接口原理图,给出了相应了设计流程图和C语言程序。6 参考文献 1 童诗白,华成英。模拟电子技术基础(第三版)。北京高等教育出版社,2001 2 谢嘉奎,宣月清,冯军。电子线路线性部分(第四版)。北京高等教育出版社,2004 3 郁有文.传感器原理及工程应用,西安电子科技大学出版社,2001.4 严钟豪.非电量电测技术.北京,机械工业出版社,2001.5 周乐挺.著传感器与检测技术.北京,机械工业出版社,2005.6 范晶彦.传感器与检测技术应用.北京,机械工业出版社,2005.7 张正伟.传感器原理与应用.北京,中央广播电视大学出版社,1991.8 李 军.检测技术及仪表.北京,轻工业出版社,1989.9 宋文绪.自动检测技术.北京,高等教育出版社,2000.10 贾伯年.传感器技术.南京,东南大学出版社,1990.11 杜 维.过程检测技术及仪表.北京,化学工业出版社,1999.12 高晓蓉.传感器技术.成都,西南交通大学出版社,2003.13 吴桂秀.传感器应用制作入门.杭州,浙江科学技术出版社,2003.14 徐 洁.电子测量与仪器.北京,机械工业出版社,2004.15 武昌俊.自动检测技术及应用.北京,机械工业出版社,2005.附 录附件1:原理图附件2:仿真图附件3:元件清单CommentDescriptionQuantity蜂鸣器蜂鸣器110uF电容120pf电容2发光二极管发光二极管1发光二极管发光二极管3Relay-SPDT继电器19012三极管61K电阻1010K电阻5SW按键3电源开关电源开关1STC89C52单片机1smg_1数码管1CON5传感器接口112M晶振1附件4:程序#include <reg52.h> /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定义变量范围065535/数码管段选定义 0 1 2 3 456 7 8 9uchar code smg_du=0xde,0x91,0xcd,0xd5,0x93,0x2b,0x5f,0xd4,0xdf,0xd1,/ AB C D E F不显示 0xd7,0x1f,0x4e,0x9d,0x4f,0x47 ; /断码uchar dis_smg1 = 0xde;sbit led_y = P22; /黄灯/高水位sbit led_g = P21; /绿灯sbit led_r = P20; /红灯/低水位sbit shuiwei1 = P34;sbit shuiwei2 = P35;sbit shuiwei3 = P36;sbit shuiwei4 = P37;sbit relay = P10; /继电器 sbit beep = P27; /蜂鸣器 uchar shuiwei; /水位/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*独立按键程序*/uchar key_can; /按键值void key() /独立按键程序static uchar key_new;P1 |= 0x06;if(P1 & 0x06) != 0x06)/按键按下delay_1ms(1); /按键消抖动if(P1 & 0x06) != 0x06) && (key_new = 1)/确认是按键按下key_new = 0;switch(P1 & 0x06)case 0x02: relay = 0; /手动进水 break; /得到按键值 case 0x04: relay = 1; /手动停止进水break; /得到按键值 else /按键松开key_new = 1;/*主程序*/ void main()P0 = P1 = P2 = P3 = 0xff; /初始化单片机IO口为高电平P0 = smg_du0 ;delay_1ms(1500);while(1)key(); /独立按键程序if(shuiwei4 = 1) /高水位 4档shuiwei = 4;led_r = 1;led_g = 1;led_y = 0; /高水位绿灯亮else if(shuiwei3 = 1) / 3档shuiwei = 3;led_r = 1;led_g = 0;led_y = 1; /正常水位绿灯亮else if(shuiwei2 = 1) / 2档shuiwei = 2;led_r = 1;led_g = 0;led_y = 1; /正常水位绿灯亮else if(shuiwei1 = 1) / 1档shuiwei = 1;led_r = 1;led_g = 0;led_y = 1; /正常水位绿灯亮else /低水位 0shuiwei = 0;led_r = 0;led_g = 1;led_y = 1; /低水位红灯亮P0 = smg_dushuiwei; /if(shuiwei < 1)/进水beep = beep; /蜂鸣器报警 relay = 0; /打开继电器 进水elsebeep = 1; /关闭蜂鸣器if(shuiwei >= 4) /停止进水relay = 1; /关闭继电器 key(); /独立按键程序delay_1ms(100);20