• 498.50 KB
  • 2022-04-22 13:45:58 发布

居民小区水箱控制系统毕业设计论文.doc

  • 44页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'居民小区水箱控制系统毕业设计论文目录第一章前言…………………………………………………2第二章功能说明,结合功能框图…………………………3第三章使用操作说明……………………………………5第四章原理图分析主要部分工作原理……………………7第五章PCB板制作…………………………………………9第六章主要芯片资料应用说明……………………………11第七章程序框图及说明……………………………………15第八章调试数据记录表及调试故障现象及其解决方法…16第九章心得体会…………………………………………20第十章致谢………………………………………………22第十一章参考文献…………………………………………23第十二章附录(源程序)…………………………………2443 第一章前言水箱智能控制系统是小区智能化发展过程中必不可少的重要组成部分,他的性能和工作质量的优良时刻关系着人民的安全。在过去,大量的对水箱操作是由相应的人员进行操作的,这样的人工方式带来了很大的弊端,比如水位的控制,时刻监控水位的环境,夜间的监控等等,操作员稍有疏忽,或者简易的监测器件损坏,将带来无法弥补的损失。所以,对水箱控制,如果能够使用精密的而且完全会严格按照成产规定运行的自动化系统,可以最大限度的避免事故的几率,同时也能节省资源并能有效提高生产的效率。相对于机械式水位控制器,电子式的水位控制器有着无可比拟的优点:添加水位显示电路、点击保护电路、强制性手动开、关机电路可以达到水位显示、简单的电机保护、水位自动控制,控制精度是传统机械式水位控制器的几何倍。本控制采用了高效率、高稳定性、低功耗的ATM89C51单片机,正是由于它单芯片的结构形式与所采用的半导体工艺,使其在速度、功耗、成本上和多芯片系统相比具有较大的优势。它侧重的是增强对测控对象的控制功能,提高工业环境下的可靠性,构成灵活、方便的应用计算机系统的界面接口。其主要优点归纳起来有五点:(1)性价比高;(2)集成度高,可靠性好;(3)功能完善,接口多样;(4)低功耗、低电压;(5)总线多样,易于扩展。43 第二章功能说明,结合功能框图数码管显示状态指示灯按键控制部分潜水泵报警装置水位开关结构方框图(-)本产品控制部分采用低电压,高性能CMOS8位微处理器ATMEL的AT89C51,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,功能十分强大并且价格低廉。水位开关采用三组带环行磁铁的密封在水管中的干簧管,磁铁在水的浮力作用下吸合干簧管而使之导通,灵敏度很高。工作电压:220V±10%消耗功率:0.1W(待机)2W(工作)控制输出功率:≤6.6KW水位控制精度:±5cm短期使用环境温度:-40~75度短期使用环境湿度:5%~95%稳定使用环境温度:-20度~50度长期使用环境湿度:35%~80%误差:<1%43 2.1各部分的设计:2.1.1水位开关的设计:三个水位开关由三个钢簧管组成。分别安装在水塔的高,中,低部位。最高是停止抽水,最低是启动抽水,中间是起时间报警保护水泵作用。2.1.2潜水泵的选择:水泵为单相水泵。潜水泵安装在水源内部。2.1.3设计按键部分:复位按键,维护按键,模式按键,功能按键,电源开关。复位按键设计在内部。维护按键,模式按键,功能按键,电源开关按键都安装在外部。2.1.4数码管显示设计:抽水时间和次数,由一个四位数码管显示2.1.5报警器的设计:以低电平触发。当电机出现空转,欠压,失压,水源缺水以及系统电路出现故障时,进行自动报警并且自动控制电机停止运转。2.1.6状态指示灯设计:当红、黄、绿三灯同时亮起时显示水位已满,红灯闪烁表示高水位警告显示,红灯亮表示高水位正常显示,黄灯亮表示中水位显示,绿灯亮表示低水位正常显示,绿灯闪烁表示低水位警告,红黄绿三灯同时闪烁表示水源缺水报警。2.1.7控制部分:按下电源开关后,本产品开始自动检测,若无故障则开始工作,检测水塔内的水位,若水位过低则绿灯闪烁,自动启动水泵开始抽水直到水满,数码管开始显示抽水时间,水位过中间时黄灯会亮,当水抽满时三盏等全亮;如果水位正常则本产品进入待机状态。43 第三章使用操作说明3.1产品操作简介:三盏灯常亮高水位警告红灯闪烁水满红灯常亮高水位正常黄灯常亮中水位显示绿灯常亮低水位正常绿灯闪烁低水位警告三灯闪烁水源缺水报警指示灯功能表(一)本产品为智能化水位自动控制器,接同电源后无须任何操作即可自动工作。如有必要也可通过按键在任何正常工作情况下强制开启停止水泵。产品面板上有三个按键,左边一个红色带锁的维护键,中间一个绿色点触式模式键、和右边一个绿色点触式按键,内部还有一个复位按键,按下复位键则恢复默认设置。四个数码管分别显示和记录抽水次数、时间。当红、黄、绿三灯同时亮起时显示水位已满,红灯闪烁表示高水位警告显示,红灯亮表示高水位正常显示,黄灯亮表示中水位显示,绿灯亮表示低水位正常显示,绿灯闪烁表示低水位警告,红黄绿三灯同时闪烁表示水源缺水报警。操作规程:按下电源开关后,本产品开始自动检测,若无故障则开始工作,检测水塔内的水位,若水位过低则绿灯闪烁,自动启动水泵开始抽水直到水满,数码管开始显示抽水时间,水位过中间时黄灯会亮,当水抽满时三盏等全亮;如果水位正常则本产品进入待机状态。用水时,数码管全部显示横杠,三盏指示灯显示相应的水位,灯的显示情况与水位状况如下所示:43 本产品的水位为自动控制,在水位过低时可自动抽水,水满则自动停机。若想进入手动状态,在抽水状态下按下红色维护键,再按下功能键就停止抽水,再按一次则再次启动水泵抽水;在待机状态下按下红色维护键,再按一次功能键就启动水泵抽水,再按一次则停止抽水。注意:在水已经满了的时候,按启动键无效,不能手动启动水泵。在不抽水的用水期按下维护键,数码管显示00-00,可通过功能键可以翻阅以前的抽水次数和时间。当出现了一些程序错误不能正常工作的时候,按下内部的复位键则可以解决大部分的问题。按下复位键的同时再按下模式跟功能按键1S以上则清除所有数据,恢复出厂状态。43 第四章原理图分析主要部分工作原理4.1电源部分采用了常用的三端稳压电路。通过变压器将220v的市电降成12v的交流电,经过D1~D4桥堆和2200UF电容进行整流、滤波,通过0.1uf电容滤出高次谐波,得到了波形叫平稳的13.2v左右的直流电,通过7812后得到了非常平稳的12v直流电;再经过一次相同的稳压过程得到了纹波系数更小的5v直流电。整个电路的输出功率也完全可以达到本厂品的需求。原理图(-)4.2主面板:主要是由TA89S51、24C04存储芯片和一些外围电路构成主要由小电流控制大电流。由三个水位开关分别装在水塔的“上,中,下”三个水位。当水塔水位在底水位时,底水位传感器信号输入给TA89S51P2.5-P2.7,然后TA89S51通过P3.7控制光耦来控制水泵抽水,直到水塔抽满,水泵才停.在抽水的过程中4位数码管显抽水时间,和的抽水的次数.4.3TA89S51各引脚所对应外电路如下:43 P0.0~P0.7数码管驱动P1.0~P1.2按键控制输入端P1.3~P1.5指示灯输出端P1.6~P1.7接24C204第5、6脚P2.0~P2.4数码管位选信号输出P2.5~P2.7传感器信号输入P3.7接光耦第2脚4.424C04各引脚功能:第1、2、3、4、7脚接地第8脚接电源4.5光耦各引脚功能:第1脚5v电源第2脚P3.7第3脚悬空第4脚三极管Q5基极第5脚12v电源第6脚悬空43 第五章PCB板制作5.1主面板PCB:5.2控制与显示PCB:43 5.3电源部分:5.5电路板的选用:选用环氧树脂板,环氧树脂与铜箔有极好的粘合力,同箔的附着强度与工作温度高,可以在260度的焊锡熔中不起泡。也可使用覆铜聚四氟乙烯玻璃布层压板。不同的材料有不同的特点,由调试中可能多次更换元件,所以要考虑到铜箔的粘合力。5.6布线注意事项:布线的好环直接影响着放大器的性能,不好的线路板,会使信号产生歧变,产生本底噪音生尖峰脉冲干扰等,为了尽避免上述影响,线路板在线出尽量做到:5.6.1接照信号的传输路径由小到大的顺序在电路板上合路的布置各各元器的位置,尽量缩短各元器件之间的距离,以减少外部干扰的引入和不必要的干扰。5.6.2在供电线路中,大电流通过的路径应尽量度设计得实一些,以降低电源内阻,使电流能顺利通过。5.6.3在供电线路中,应尽量避免大电流的印刷电路式导线交布置在小电流通路的中间或附近,以免造成对小电流的干扰。5.6.4走线时,应尽量走大于90度直角的线以防止产生尖峰脉冲造成干扰。5.6.5在设计电线时,尽量使星型供电方式,而且地的低尽量离滤波电的地端近。,5.6.6大功率元件与小功率元件尽量分开布线。43 第六章主要芯片资料应用说明6.1AT89S51单片机:ATMEL公司生产的AT89S51单片机是采用高性能的表态8051设计,由先进工艺制造,并带有非易性FLADSH程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用多。主要性能特点有:l8KBFLASHROM,可以擦除1000次以上,数据保存10年。l256字节内部RAM。l电源控制模式——时钟可停止和恢复;——空闲模式;——掉电模式。l5个中断源。l2个中断优先级。l4个8位I/O口。l全双工增强型UART。l2个16位定时/计数器,T0、T1(标准80C51)l全静态工作方式:0~24MHz。6.28051单片机的简介:MCS-51单片机是Intel公司在1980年继MCS-48系列8位单片机之后推出的高档8位单片机。MCS-51单片机在性能和片内功能方面大大优于MCS-48系列单片机。MCS-51的典列产品有:8031、8051、8751。8051内部有4KBROM,8751内部有4KBEPROM,8031片内无ROM;除此之外,三者的内部结构完全相同。在此主要介绍8051单片机。8051单片机内部由CPU、4KBROM、256B有RAM、两个16位的定时/计数器T0和T1,4个8位的I/O端口P0、P1、P2、P3、串行口等组成。其内部原理框图如下:43 芯片内部结构图(-)6.2.18位CPU由运算器、指令寄存器、定时和控制电路、振荡器等电路组成。为整个单片机芯片提供控制逻辑时序信号,并完成各类算术、逻辑运算。6.2.2存储器电路:由4K字节的ROM或EPROM,以及程序地址寄存器等组成程序存储器电路。用来存放程序。若内部存储器容量不足,可扩展外部存储器,程序存储器最大容量可达64K字节。由128个字节的RAM及RAM地址寄存器等组成数据存储器电路,用以存放用户数据。也可扩展外部数据存储器,外扩最大容量可达64K字节。43 还有20几个特殊功能寄存器(SFR)。包括累加器ACC、B寄存器、数据指针DPTR等,用以临时存放中间运算结果或一些特殊用途等。6.2.1输入、输出接口电路P0、P1、P2、P3口的锁存器、驱动器及串行口控制等组成并行/串行接口电路,完成片机与外部设备之间的数据交换。两个16位定时/计数电路构成定时器/计数器接口。中断电路为5个中断源提供中断逻辑控制信号。AT89S51工作极限参数:工作温度……………………………储藏温度……………………………任一脚对地电压………………………-1.0Vto+7.0V最高工作电压…………………………   6.6V直流输出电流…………………………  25.0mA6.3引脚说明:8051单片机的外形结构为40条引脚双列直插式封装,其引脚排列如图:引脚说明图(-)43 6.3.1主电源引脚Uss(20脚):电路地电平。Ucc(40脚):正常运行和编程校验时为+5V电源。6.3.2外接晶振或外部振荡器引脚XTAL1和XTAL2:接外部晶振电路。当采用外部振荡电路时,XTAL1应当接地,XTAL2接外部振荡信号的输入。6.3.3制引脚RST/Upd:RST是复位信号输入端。Upd为备用电源输入端,即Ucc掉电时,由此引脚提供备用电源,以保持内部RAM的信息。ALE/PROG:ALE是地址锁存允许信号。PROG为编程脉冲输入端,即当选用8751单片机时,对片内程序存储器进行编程时,由此引脚输入编程脉冲。PSEN:访问外部程序存储器选通信号,低电平有效。Upp/EA:EA为访问内部或外部程序存储器选择信号。为1时,访问内部程序存储器;当程序计数器PC超过片内程序存储器地址时,将自动转向外部程序存储器继续运行。为0时,则只能访问外部程序存储器。6.3.4输入/输出口引脚P0口(32~39):8位漏极开路双向并行I/O端口。当访问外部存储器时,它是复用的地址和数据总路线;外部不扩展只做单片使用时,用做双向I/O口;在进行片内部程序校验期间,作指令代码输出,负载能力为8个LSTTL。P1口(1~8):8位准双向并行I/O端口,在片内程序校验期间,作低8位地址用。负载能力为4个LSTTL。P2口(21~28):8位准双向并行I/O端口。当访问外部存储器时做高8位地址用;不做外部扩展时,则做为准双向I/O口使用;在片内程序校验时作高8位地址线负载能力为4个LSTTL。43 第七章程序框图及说明开始调用函数库初始化源程序水位、按键扫描状态扫描数码管显示指示灯状态24C04读写操作启停加水时间计时蜂鸣器报警电机运行监控程序流程图(-)程序清单详见附录43 第八章调试数据记录表及调试故障现象及解决方法8.1硬件调试:(一)、首先我们将硬件分为五个小模块(电源模块、主面板模块、显示模块、按键和指示灯模块、传感器部件)进行腐蚀并焊接好元件,将各个模块都进行测试。8.1.1电源模块:说明:因为我们的继电器需要12V进行驱动,所以在此我们所选用的变压器为220V~12V交流变压器,整流元件选用7812跟7805稳压管。调试:它的输出电压就得到了我们所需要的12V、5V、GND电源。焊接好元件后,接好变压器,发现电源的指示灯不亮,用手触摸7812与7805稳压管,发现7812与7805稳压管严重发热,用万用表测量输出电压,发现12V、5V于GND的电压都为0.36V。立即取下变压器。将电路进行检测,在此我就对元件的引脚分别加以测试,看其是否短接。经过测试发现7812稳压管的散热片与电容的接地脚短接,7805稳压管的散热骗与电阻的的输入脚短接。我们将稳压管平放在电路板上,测试无短接的情况下再次接上变压器。电源指示灯亮,用万用表测试输出电压,分别为+12.05V、+4.98V、GND。电源部分正常工作。将测试数据交给PCB制作人,让他修改好PCB,不让散热片再次有短接的情况。8.1.2主面板模块:说明:主面板选用AT89S51芯片进行控制,24C04芯片作为外部存储扩充空间。AT89S51单片机控制光耦芯片的断开与闭合来控制NPN三极管的导通,继电器的驱动电压是+12V直流,当三极管导通后继电器的线圈就有了+12V的直流电压。从而触发继电器的断开与闭合。调试:主要测试对象是继电器能否带动大功率的水泵(750W),复位电路是否正常。继电器:将电源插在主面板上,接好水泵,写入一个测试程序,将AT89S51的17脚置为低电平,接通电源后,查看继电器是否闭合。得到预期的实验结果,继电器正常工作。#includesbitP3^7=a;main(){43 a=0;}(在光耦芯片中,我们可以看到当给以P3.7低电平(GND)时,光耦芯片将会导通,三极管将会导通从而使继电器闭合,水泵工作。)按下电源开关,查看水泵是否正常工作,继电器能否承受起20mA的冲击电流,测试后发现,水泵正常工作。继电器完好无损!主面板的继电器部分正常。复位电路:接好电源后,测试单片AT89S51的RST脚的电压,测试数据得出为0V。按下复位按键后进行测试,RST脚的电压为0.8V。依据复位电路的原理,按键复位不正常,检测元件是否有电源(+12V、+5V)与地(GND)是否有短路,在线路的检查中没有出现短路情况,将原理图进行分析,查看元件时候放置正确,结果检查发现24C04芯片被接反,取下芯片再次测试,按下按键,RST脚为电压为3.8V,依据单片机复位电路的原理,单片机以高电平复位。得出按键复位正常工作。8.1.3显示模块:说明:我们所使用的是共阳极四位八段数码管,位接高电平(高电平是+3V以上,以数码管的要求不能超过5V。)调试:首先用万用表测试数码管是否是损坏,将万用表调至二极管测量档位,将正表笔接位,接位1时,负表笔接段选a.b.c.d.e.f.dp段,查看数码管是否显示各个段,测试后,位1正常,然后分别接位2、位3、位4结果显示全部正常,数码管无损坏。结合主面板测试,写入一个测试程序,将AT89S51的P0、P2口置为低电平,接通电源后,查看数码管显示是否为满格。得到预期的实验结果,数码管显示为满格。#includesbitP0=a;sbitP2=b;main(){a=0;b=0;}8.1.4按键和指示灯模块:43 说明:当接上单片机时,若单片机的引脚没有定义,其默认就为高电平。当指示灯引脚为低电平时指示灯亮。调试:首先检查按键是否正常,没按下时为断开,按下按键则导通,测试结果,没按下时其为闭合,经过检测,发现电路板在敷铜时将两个脚接到了一起,解决方法,用刀片将外围的铜全部刮掉,将方案交给PCB制作人,进行修改PCB。结合主面板进行测试按键,放入一个单片机,不写入任何程序,按键的引脚默认为高电平,接入电源,用万用表测试引脚,结果为高电平,当按下按键则为低电平,用万用表进行测试是否为低电平,测试结果为低电平。测试指示灯时,写入一个程序:将AT89S51的P1.3~P1.5脚置为低电平,接通电源后,查看指示灯是否亮。得到预期的实验结果,指示灯亮。#includesbitP1^3=a;sbitP1^4=b;sbitP1^5=c;main(){a=0;b=0;c=0;}8.1.5传感器部件:说明:我们使用的是钢簧管,当钢簧管受到磁场力时就会闭合,没有磁场力时则会断开,我们在此使用三个钢簧管作为传感器部件,达到三个水位显示效果。接出四根线,三根单片机引脚线,一根接地线。调试:用磁芯去吸引钢簧管,再用万用表测试钢簧管是否闭合,测试结果,闭合。传感器部件一切正常。接入主面板进行调试,放入一个没有程序的单片机,接上电源,用磁芯吸引钢簧管,用万用表测试其相对应的单片机脚是否为低电平。测试结果,没当吸引钢簧管时其单片机相对应的管脚为低电平。得出结论,此钢簧管进入面板调试一切正常。8.1.6总结调试:43 组合全部面板:写入一个测试程序,查看数码管显示、指示灯的亮、灭,按键功能是否正常。接入电源,运行该程序,查看其效果是否一切正常,调试结果该组合部分全部正常,然后将所有有误差的PCB修改好,腐蚀出电路板,焊接好元件,经过全部组合后的调试方法进行调试,其电路能够顺利的进行工作。8.2软件调试:8.2.1水位按键扫描程序的调试。将high_water_scan()等函数的输出项如high_up_pulse,high_down_pulse直接联系到P0口观测P0口输出电压是否正确。8.2.2状态扫描函数的调试。该函数输出项都为外部输出,可以直接从数码管等外部器件知函数否正常。由观测结果进行调试。8.2.3蜂鸣器报警函数的调试。蜂鸣器为4分之1秒响一次。时间周期由计时器0提供。由观测结果进行调试。8.2.4指示灯状态函数的调试。在自动运行模式时,由传感器提信号,低水位绿灯亮,中水位黄灯亮,高水位红灯亮由观测结果进行调试。。8.2.5数码管显示函数的调试。在自动运行模式时,数码管显示当前加水时间,在查询模式显示历史加水时间,在手动模式时显示----。由观测结果进行调试。8.2.624C04读写操作函数的调试。在计时10次之后,进入查询模式,按下模式/功能进行上翻/下翻。由观测结果进行调试。8.2.7电机运行监控函数的调试。在所有的调试完成之后,进入手动模式,进行启动/停止操作观察继电器是否工作。进入自动模式,移动干簧管观察继电器是否与设计思路工作方式相同。由上述步聚依次调试、改进直至完成所有目标任务43 第九章心得体会在一个多月的时间里我们终于完成了毕业设计——居民小区水箱控制系统。这段时间我们虽然相当辛苦但收获良多。许许多多的困难被我们克服,只因为我们是一个优良的团队有一个相当负责相当能干的指导老师,而在此期间学到的将使我受用终身。1、市场会因为竞争而使商品变得极为精练和符合供求关系。在当初选择毕业设计课题时我就瞄准了居民小区水箱控制系统这种看似简单的东西。在我国广大农村地区因为生活水平的提高农民们再也不想没天都去井里打水用了,他们非常希望拥有城里人一样的自来水供水系统。于是由水井、潜水电泵、家用水塔、自动水位控制器组成的自动供水系统的市场前景变得相当可观,而该系统的核心自动水位控制器又是其中最有利可图的部分。我想以我现在学到的知识自己设计一个应该不是太难的事。为了牟利所做的设计首先要做的事便是市场调查。但出乎我们意料之外的是此时的市场上已经充斥着各式各样的水位控制器了,最便宜的仅二十几元。我们买回一个拆开一看它简单得几乎没有任何电路,成本不超过十元,但它确有最基本的功能。简单一算便知它的利润超过100%,这使我们相当受鼓舞,但它超低的成本是我们无法超越的。正在我们一筹莫展之际老师指给我们一条明路:别人做低端我们可以做高端啊。没错我们学了这么多电子知识为什么不做个功能强大的水位控制器呢?而此时我们还没看到市场上有超过100元的产品。2、元器件的选择就像做菜时的原料一样,选得好你就成功了一大半。确定了目标后就马不停蹄的开始设计工作。原始数据资料找齐了,元件的选择是一个大难关,必尽我们实际操作的经验太少。虽然有老师的大力帮助但元件上的问题还是在之后的时间里造成了一些相当棘手的问题几乎让我们推倒重来。3、程序的价值往往比硬件高。我们的作品是用单片机控制的,在编写过程中我了解到实际应用中的程序和书上的习题根本是两回事。书上的习题往往把所有的条件都告诉你了。而在实际中没有人会告诉你将会发生什么但是所有的可能性你都得想到,要做到这点非常困难。生活经验的不足和逻辑思维训练不够使我编写出来的程序漏洞百出。在无数次修改和老师的帮助下我终于在硬件完成调试之前编写出了调试用的软件。这次程序的编写中我体会到硬件是比较死板的只要能够运行他就一定是好的,而软件呢,它在没有语法错误的情况下都能运行但却不一定是好的甚至错得更厉害。而且软件还可以在一定程度上祢补硬件的不足,而硬件却很难反过来祢补软件。43 第十章致谢今天我的毕业设计终于定稿了,这是我毕业设计的致谢部分,应该说是写进了我真实的想要表达的谢意,其实,还有许多人要感谢,只是不太适合放在论文里。半年的时间一晃而过,至此毕业设计成文之际,回想起半年来的点点滴滴,心里不由感慨万分。这次的毕业设计,对我而言是一个全新的领域,从基本原理的学习,到相关的理论分析,不仅仅是对三年学习的一个检验,更是对科研能力的培养。在这半年之中,有许多人给予了我帮助指导,在此,表达我最真挚的感谢:首先我要感谢我的导师董老师,董老师踏实严谨的治学态度,扎实的学术功底,丰富的经验,以及对于科研事业的热爱,让我崇敬,也为我树立起了前进道路上的榜样。平时工作中,老师平易近人,耐心解答我的任何疑问,悉心指导我的理论学习和实际操作,使我在短短半年的时间内迅速融入了所学习的专业中,在专业上有了很大的提高。其次,我想感谢自动化系的其它老师,各位老师虽然没有直接参与我的毕业设计指导工作,但也给予了我很多鼓励和帮助。平时工作中各位老师所表现出的踏实敬业,耳濡目染地影响着我对工作和学习的态度,使我学到了许多道理,谢谢各位老师。不论是大学以来一直一同努力的同伴,还是在毕业设计阶段才认识的同学,你们给我这半年忙碌的生活中注入许多欢乐,每一次与你们的探讨都让我深受启发。最后,感谢父母二十多年的养育,不论什么时候都在背后支持我,给我适时的鼓励和提醒,看着我成长。毕业设计是将大学三年所学综合运用的过程,我相信,这段时间的锻炼和学习必将为我的将来打下良好的基础。再一次向所有关心过我,帮助过我的人表达最诚挚的谢意!感谢我的导师董静老师,以及所有任课老师,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予了我无尽的启迪。43 第十一章参考文献1.李全利单片机原理及接口技术高等教育出版社2.廖常初S7-200PLC编程及应用机械工业出版社3.张莉C/C++程序设计教程清华大学出版社4.黄仁欣单片机原理及应用技术.清华大学出版社5.胡文金单片机应用技术实训教程重庆大学出版社6.朱殿栋数字电路设计实用手册北京电子工业出版社7.朱月秀单片机原理与应用科学出版社8.冯建华基于单片机的控制系统研究单片机学报9.杨欣,王玉凤51单片机应用从零开始清华大学出版社10.龚运新,胡长胜单片机实用技术教程北京师范大学出版社43 第十二章附录12.1源程序#include#defineLED_LIGHT0#defineLED_OUT1#defineSPEAK_ON0#defineSPEAK_OFF1#defineW_MOTOR_START0#defineW_MOTOR_STOP1/***********************************输入输出端口***************************/sbithigh_water_s=P25^;//上水位干璜管sbitmid_water_s=P2^6;//中水位干璜管sbitlower_water_s=P2^7;//下水位干璜管sbitspeak=P2^4;//蜂鸣器驱动端口sbitled_red=P1^3;//红色指示灯端口sbitled_yellow=P1^4;//黄色指示灯端口sbitled_green=P1^5;//绿色指示灯端口sbitmaintain_key=P1^0;//维护开关端口(第一个按键)bitflag_maintain=0;bitflag_maintain_stroken=0;sbitmode_key=P1^1;//模式键端口(第二个键)bitflag_mode=0;bitflag_mode_stroken;43 sbitfunction_key=P1^2;//功能键端口(第三个键)bitflag_function=0;bitflag_func_stroken=0;sbitw_motor=P3^7;//电机驱动端口sfrdata_seg_port=0x80;//数码管段码驱动端口sfrdata_wei_port=0xa0;//数码管位码驱动端口/***************************状态表示位**************************************/bithigh_up_pulse=0;//上水位上升沿bithigh_down_pulse=0;//上水位下降沿bitmid_up_pulse=0;//中水位上升沿bitmid_down_pulse=0;//中水位下降沿bitlower_up_pulse=0;//下水位上升沿bitlower_down_pulse=0;//下水位下降沿bitflag_start_t0=0;//定时器启停标示bitflag_add_water=0;//加水标志0为用水状态、1为加水状态bitflag_motor_error=0;//电机出错或下水源缺水bitflag_erase_24c04//24c04数据删除标志/*********************************基本处理数据*******************************/charcodeseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义数据段码charcodewei[8]={0x7f,0x0bf,0x0df,0x0ef,0x0f7,0x0fb,0x0fd,0x0fe};//P2.0为S1定义数据位码//个位在wei[7]、高位在wei[0]intcount_50ms=0;//50ms计时变量43 charwater_point_status=0;//水塔水位状态标示bitflag_250ms;//0.25ms闪烁标志chardisplay_data[4];//数码管显示数据数组charadd_water_count=0;//加水次数charfind_water_count=0;//查阅加水次数charlower_add_water_time=0;//下层加水时间分钟charup_add_water_time=0;//上层加水时间分钟charadd_water_time_second;//加水时间秒钟charadd_water_time_minute;//加水时间分钟charadd_water_uptime=0;//加上层水时间charadd_water_downtime=0;//加下层水时间charadd_water_uptime_storage=0;//存储加上层水时间charadd_water_downtime_storage=0;//存储加下层水时间charmod_status=0;//0为手动启停方式1为手动查阅上次加水时间(通过功能键执行)charram_write_24c04[4];//24c04写数组charram_read_24c04[4];//24c04读数组/*******************************延时函数************************************/voiddelay(intn){inti;for(i=0;i2)mod_status=0;}if(mod_status==0){if(flag_func_stroken){flag_func_stroken=0;flag_add_water=~flag_add_waterif(flag_add_water)//手动起动电机start_counter_timer();elsestop_counter_timer();//手动停止电机}}elseif(mod_status==1){if(flag_func_stroken){flag_func_stroken=0;find_water_count--;if(find_water_count<0)find_water_count=add_water_count;//修改查询指针}}else{;}43 if(flag_erase_24c04==1)clr_24c04();//删除24c04中有效数据}}//ifelse//复位控制过程到正常监控阶段(非调整阶段){flag_mode_stroken=0;mod_status=0;flag_func_stroken=0;flag_erase_24c04=0;}}/********************************状态扫描函数********************************/bitflag_add_water=0;//加水标志0为用水状态、1为加水状态voidstatus_scan(void){if(flag_add_water==0)//用水方式状态扫描{if(high_down_pulse&&high_water_s==1)//上位警戒水位{water_point_status=1;high_down_pulse=0;}elseif(high_up_pulse&&high_water_s==0)//上水位{water_point_status=2;high_up_pulse=0;}elseif(mid_down_pulse&&mid_water_s==1)//中水位{water_point_status=3;mid_down_pulse=0;}elseif(mid_up_pulse&&mid_water_s==0)//下水位43 {water_point_status=4;mid_up_pulse=0;}elseif(lower_down_pulse&&lower_water_s==1)//下位警告水位{water_point_status=5;lower_down_pulse=0;}elseif(lower_up_pulse&&lower_water_s==0)//水塔严重缺水状态{water_point_status=6;lower_up_pulse=0;start_counter_timer();}//自动启动电机elseif(high_up_pulse&&high_water_s==1){water_point_status=0;high_up_pulse=0;}else;}else//加水方式状态扫描{if(lower_down_pulse&&lower_water_s==0){water_point_status=7;lower_down_pulse=0;}elseif(lower_up_pulse&&lower_water_s==1){water_point_status=8;lower_up_pulse=0;}elseif(mid_down_pulse&&mid_water_s==0){water_point_status==9;mid_down_pulse=0;}elseif(mid_up_status&&mid_water_s==1){water_point_status=10;mid_up_pulse=0;}elseif(high_down_pulse&&high_water_s==0){water_point_status=11;high_down_pulse=0;}elseif(high_up_pulse&&high_water_s==1){water_point_status=12;high_up_pulse=0;stop_counter_timer();}//自动停止电机else;}}/********************************蜂鸣器报警函数******************************/voidwarn_speak(void)43 {if(flag_250ms)speak=SPEAK_ON;elsespeak=SPEAK_OFF;}/********************************指示灯状态函数******************************/voidled_red_flick(void)//红指示灯闪烁{if(flag_250ms)led_red=LED_LIGHT;elseled_red=LED_OUT;}voidled_yellow_flick(void)//黄指示灯闪烁{if(flag_250ms)yellow_red=LED_LIGHT;elseyellow_red=LED_OUT;}voidled_green_flick(void)//绿指示灯闪烁{if(flag_250ms)green_red=LED_LIGHT;elsegreen_red=LED_OUT;}43 voidled_red_light(void)//红指示灯亮{led_red=LED_LIGHT;}voidled_red_out(void)//红指示灭{led_red=LED_OUT;}voidled_yellow_light(void)//黄指示灯亮{led_yellow=LED_LIGHT;}voidled_yellow_out(void)//黄指示灯灭{led_yellow=LED_OUT;}voidled_green_light(void)//绿指示灯亮{led_green=LED_LIGHT;}voidled_green_out(void)//绿指示灯灭{led_green=LED_OUT;}voidled_scan(void)//指示灯工作状态扫描43 {switch(water_point_status){case0://水塔水位爆满、严重警告case12:led_red_light();led_yellow_light();led_green_light();warn_speak();flag_add_water=0;w_motor=W_MOTOR_STOP;break;case1:case11:led_red_flick();//水塔高水位警告显示led_yellow_out();led_green_out();break;case2:case10:led_red_light();//水塔高水位正常显示led_yellow_out();led_green_out();break;case3:case9:led_red_out();//水塔中水位闪烁显示led_yellow_flick();led_green_out();break;43 case4:case8:led_red_out();//水塔下水位正常显示led_yellow_light();led_green_out();break;case5:case7:led_red_out();//水塔下水位闪烁警告显示led_yellow_out();led_green_flick();break;case6:led_red_flick();//水塔下水位闪烁警告显示led_yellow_flick();led_green_flick();warn_speak();flag_add_water=1;w_motor=W_MOTOR_START;break;default:led_red_out();led_yellow_out();led_green_light();break;}}/********************************数码管显示函数*****************************/voidadjust_add_water_time(void)//实时显示加水时间43 {display_data[0]=seg[add_water_time_second%10];display_data[1]=seg[add_water_time_second/10];display_data[2]=seg[add_water_time_minute%10];display_data[3]=seg[add_water_time_minute/10];}voidfind_add_water_time(void)//显示查阅加水时间数据{display_data[0]=seg[add_water_time_minute%10];//分钟display_data[1]=seg[add_water_time_minute/10];display_data[2]=0x0bf;display_data[3]=seg[find_water_count%10];}voidMotor_Error_indicator(void){chari;for(i=0;i<4;i++)display_data[i]=0x7f;led_red_out();led_yellow_out();led_green_out();}voidadjust_water_use(void)//用水状态显示"----"{chari;for(i=0;i<4;i++)display_data[i]=0x0bf;}43 voidErase_24c04_Indicator(void)//删除24c04数据指示{if(flag_erase_24c04==1){display_data[0]=0x0bf;//"-1-1"display_data[1]=seg[1];display_data[2]=0x0bf;display_data[3]=seg[1];}}voiddisplay_seg_data_scan(void){if(maintain_key){if(flag_add_water==0)//用水状态adjust_water_use();elseadjust_add_water_time();//自动加水状态}if(maintain_key==0&&mod_status==0)//手动加水状态adjust_add_water_time();if(maintain_key==0&&mod_status==1)//查阅状态find_add_water_time();if(flag_motor_error)//电机出错或下水源缺水报警指示{Motor_Error_indicator();warn_speak();}43 Erase_24c04_Indicator();//删除24c04数据指示}voiddisplay_seg(void){chari;display_seg_data_scan();for(i=0;i<4;i++){if(maintain_key&&flag_add_water==0&&flag_250ms)//用水阶段闪烁显示"----"data_seg_port=display_data[i];elsedata_seg_port=0x0ff;data_wei_port=wei[i];delay(100);}if(maintain_key&&flag_add_water==1||maintain_key==0&&mod_status==0){data_seg_port=0x7f;data_wei_port=wei[2];delay(30);}}/***********************24c04读写操作函数*******************************/voidRead24c02(unsignedchar*RamAddress,unsignedcharRomAddress,unsignedcharbytes)voidWrite24c02(unsignedchar*Wdata,unsignedcharRomAddress,unsignedcharnumber)charram_write_24c04[4];//24c04写数组43 charram_read_24c04[4];//24c04读数组charadd_water_count=0;//加水次数charfind_water_count=0;//查阅加水次数voidclr_24c04(void)//手动清除24c04中所有有效数据{chari;ram_write_24c04[1]=-1;//存储数据有效为置无效"-1"for(i=0;i<50;i++)//最大存储数据50组Write24c02(ram_write_24c04,4*i,4);add_water_count=0;}charread_24c04_average(void)//读取各次加水上下水位时间{chari;chartemp1,temp2;Read24c02(ram_read_24c04,0,4);if(ram_read_24c04[1]!=-1){temp1=ram_read_24c04[2];temp1=ram_read_24c04[3];}elsereturn-1;for(i=1;i(add_water_uptime_storage-5)&&add_water_uptime<(add_water_uptime_storage+5)&&(add_water_downtime>(add_water_downtime_storage-5)&&add_water_downtime<(add_water_downtime_storage+5))Write24c02(ram_write_24c04,4*add_water_count,4);elseadd_water_count--;}voidread_24c04_one_dataArray(void)//查询一次加水数据{Read24c02(ram_read_24c04,4*find_water_count,4);add_water_time_minute=ram_read_24c04[2]+ram_read_24c04[3];}/********************************启停加水时间计时***************************/voidstart_counter_timer(void){add_water_time_second=0;add_water_time_minute=0;read_24c04_average();//求历次加水平均数据flag_start_t0=1;43 w_motor=W_MOTOR_START;flag_add_water=1;}voidstop_counter_timer(void){flag_add_water=0;flag_start_t0=0;w_motor=W_MOTOR_STOP;add_water_downtime=add_water_time_minute-add_water_uptime;add_water_count++;//计数指针加一write_24c04_one_dataArray();//保存数据}/*****************************电机运行监控函数*******************************/voidMotor_monitor(void){if(w_motor==W_MOTOR_START;){if(add_water_uptime>(add_water_uptime_storage+5)||add_water_downtime>(add_water_downtime_storage+5)){w_motor==W_MOTOR_STOP;flag_motor_error=1;}elseflag_motor_error=0;}}/**********************主函数*************************************/voidmain(void){43 }voidtimer0(void)interrupt1{TH0=0X3C;TL0=0XBO;count_50ms++;if(count_50ms%5==0)flag_250ms=~flag_250ms;if(flag_start_t0)if(count_50ms>19){count_50ms=0;if(flag_add_water){add_water_time_second++;if(add_water_time_second>59){add_water_time_second=0;add_water_time_minute++;if(add_water_time_minute>59)add_water_timer_minute=0;}}}}43 Ⅱ.市场调查数据①.不锈钢水塔尺寸规格(T)内/外直径(mm)内/外板厚(mm)桶身高(mm)保温层(mm)0.3620/7200.5/0.41220500.4670/7700.5/0.41220500.5720/8200.5/0.41320500.8900/10000.5/0.41320501900/10000.5/0.41520501.25950/10500.5/0.41600501.51200/13000.7/0.513205021300/14000.7/0.51520502.51300/14000.7/0.518205031300/14000.7/0.523205041600/17201.0/0.712106051600/17201.0/0.726206061600/17201.0/0.731206082000/21501.2/0.8267070102300/24501.2/0.8256770l水泵扬程与功率扬程(m)出水口内径(mm)功率(kw)25250.7525351.130250.7543 30250.8532251.138250.7540251.147251.150251.160251.160514(三相)②.两类常见的传统机械式水塔水位控制器原理及不足1.内嵌开关的浮球控制器——报价:95元工作原理:类似于床头电扇的跌停开关,椭球状的浮球内部有一个导电小球(形状未知)和一个常开触点,通过小球的移动来达到开关的断开和闭和以控制水泵的停转的目的。水位过低的时候,浮力不足浮起浮球,浮球倾斜,导电小球滚到触点位置,常开触点闭和,水泵开始抽水。水位上升过程中由于浮球的位置及阻力作用,触点继续闭和,水位继续上升。当水位上升到一定程度的时候,浮球向另一方向倾斜,触点段开,水泵停止控制。缺点:浮秋太重,小球放在浮秋内部,其开关断、开全由导电小球决定,小球的离合受水的波动较大,可靠性不高,而且无水位显示、电机保护功能,水井水位过低、水泵内无水容易烧坏水泵,控制精度不高。2.浮球拉线开关水位控制器——报价:30元工作原理:一个特制的拉线开关下掉两个装水的浮球,下面的浮秋作为低水位,并结合上面的浮球作为开关的启动。上面的浮秋作为高水位、在水位上升过程中维持开关的导通。水位过低的时候,两个浮秋的力作用开关上,开关导通,水泵工作;当水位上升浮起下面的浮秋,仅仅靠上面的浮秋维持开关的导通;当水位淹没高水位的浮秋时,拉线开关所受的浮力不足以维持开关的导通而断开。缺点:可靠性不高,而且无水位显示、电机保护功能,水井水位过低、水泵内无水容易烧坏水泵,控制精度不高。43'