课程设计单片机水塔水位控制.docx
《课程设计单片机水塔水位控制.docx》由会员分享,可在线阅读,更多相关《课程设计单片机水塔水位控制.docx(14页珍藏版)》请在冰豆网上搜索。
![课程设计单片机水塔水位控制.docx](https://file1.bdocx.com/fileroot1/2022-11/27/23fdfa66-2663-4bce-8d1e-1d1e518509f3/23fdfa66-2663-4bce-8d1e-1d1e518509f31.gif)
课程设计单片机水塔水位控制
目录
第1章系统整体设计说明1
第2章整体设计方案2
第3章设计系统方框图与工作原理3
3.1工作原理3
3.2系统结构框图4
第4章硬件设计及说明5
4.1硬件设计说明5
4.2水位控制硬件设计5
4.3故障及水质监测硬件设计6
4.4水位显示硬件设计原理图7
第5章软件设计与说明8
5.1软件设计8
5.2软件设计流程图10
第6章调试步骤、使用说明12
第7章设计总结13
参考文献14
附录14
第1章系统整体设计说明
现代传感技术、电子技术、计算机技术、自动控制技术、信息处理技术和新工艺、新材料的发展为智能检测系统的发展带来了前所未有的奇迹。
在工业、国防、科研等许多应用领域,智能检测系统正发挥着越来越大的作用。
检测设备就像神经和感官,源源不断地向人类提供宏观与微观世界的种种信息,成为人们认识自然、改造自然的有力工具。
现代的广义智能检测系统应包括一切以计算机(单片机、PC机、工控机、系统机)为信息处理核心的检测设备。
因此,智能检测系统包括了信息获取、信息传送、信息处理和信息输出等多个硬、软件环节。
从某种程度上来说,智能检测系统的发展水平表现了一个国家的科技和设计水平。
本课题研究的内容是“水塔水位控制系统”。
水位控制在日常生活及工业领域中应用相当广泛,而以往水位的检测是由人工完成的,值班人员全天候地对水位的变化进行监测,用有线电话及时把水位变化情况报知主控室。
然后主控室再开动电机进行给排水。
很显然上述重复性的工作无论从人员、时间和资金上都将造成很大的浪费。
同时也容易出差错。
因此急需一种能自动检测水位,并根据水位变化的情况自动调节的自动控制系统,我所设计的就是这方面的课题。
水位检测可以有多种实现方法,如机械控制、逻辑电路控制、机电控制等。
本设计采用单片机进行主控制,在水水塔上安装一个自动测水位装置。
利用水的导电性连续地全天候地测量水位的变化,把测量到的水位变化转换成相应的电信号,主控台应用单片微机对接收到的信号进行数据处理,完成相应的水位显示、控制及故障报警及显示水位等功能。
第2章整体设计方案
本设计用80C51单片机为核心,由于单片机I/O管脚能够使用的只有P0口,而设计的要求是利用引脚输入信号并对信号进行处理,并且要输出水位显示,故障报警,污水报警,启动停止水泵等功能,这样一来我们只用单片机的P1引脚是远远不够的,(单片机的P1,P2和P3的部分引脚不能用来信号的输入输出)因此我利用8255A对其引脚进行扩展,通过8255A的PC口进行信号的输入并利用8255A的PA口连接两个数码管来显示实际水位,当水位在不同的位置时利用程序控制将在数码管上显示这段时间的水位。
并利用延时子程序来延时,延时时间1S,每间隔1S系统将进行一次水位检测,当水位低于下限水位时将通过PC口输入信号并由8255A将信号送到单片机,通过单片机来控制水泵工作,同样当水位上升到上限水位时将通过PC口输入信号并由8255A将信号送到单片机,通过单片机的P1.6口来控制停止水泵工作,当处于上下线之间是保持原有状态,并且此设计我还设计故障报警和水质检测,当检测到故障时通过PC口输入信号并由8255A将信号送到单片机,再由单片机的P1.5和P1.7口输出信号到发光二极管,通过二极管和水质有问题时我通过发光二极管来显示,同时停止系统工作。
水位显示我设计的是动态的,因此在设设计时我要设计一个延时子程序,延时时间2ms,通过延时子程序经过一段时间间隔后,再调用显示子程序。
通过这种反复调用来实现LED显示器的动态扫描。
第3章设计系统方框图与工作原理
3.1工作原理:
我们可以设置水位的上下限,在正常情况下,应保持水位在上下限之间。
为此,在水塔内的不同高度安装3根金属棒,以感知水位变化情况。
其中,A棒处于下限水位,B处于上限水位,G浮球在上下水位之间,它可以在水面上浮动。
水塔由电机带动水泵供水,单片机控制电机转动,以达到水位控制之目的。
供水时,水位上升,当达到上限时,由于水的导电作用,G棒连通+5V。
因此,A、B两端均为1状态,这时应停止电机和水泵的工作,不再給水塔供水。
当水位降到下限时,A、B棒都不能与G棒导电,因此A、B两端均为0状态。
这时,应启动电机,带动水泵工作,給水塔供水。
当水位处于上下限之间时,G棒与A棒导通,因此B棒不能与G棒导通,A端为1状态,B端为0状态。
这时,无论是电机已在带动水泵給水塔供水,水位在不断上升,或者是电机没有工作,用水使水位在不断下降,都应继续维持原有的工作状态。
为了满足本次课程设计的要求,我们还要显示上下限水位之间的几个数值,其电路的接法和A棒和B棒一样,都是接一个电阻然后接地,然后将端口接到单片机上,通过单片机与显示器连接,以显示不同的水位值。
由于本次课程设计不需要动态显示所以只需要一个显示器即可。
3.2系统结构框图:
该方案以单片机为核心,配以一定的外围电路和软件,以实现水塔水位控制的功能。
它由硬件部分和软件部分组成。
系统设计方案的硬件电路设计框图如下图1所示。
图3.1
第4章硬件设计及说明
4.1硬件设计说明:
此设计也可以用PROTEUS来进行仿真,我们可以在此软件中仿真有点繁琐,我的硬件仿真是在试验台上进行的,但基本接线与下图2一样,由于试验台上没有水泵,我就用发光二极管来代替水泵,通过二极管是否发光来显示出水泵是否工作。
用80C51设计一个单片机最小控制系统。
其中PC0接水位上限传感器;PC1接水位下限传感器;PC4输出后接光电耦合器,用来检测水的质量,P1.6输出后通过继电器控制水泵工作;P1.5输出后接LED,当出现故障是LED发亮;P1.7输出后接LED,当水出现浑浊时LED发亮。
4.2水位控制硬件设计:
用导电片、导线等设计一个水塔水位传感器。
其中A电极置于水位2m处经4.7K下拉电阻接8255A的PC1口,B电极置于水位12m处经4.7K下拉电阻接8255A的PC0口,C电极置于水位4m处经4.7K下拉电阻接8255A的PC2口,D电极置水位6m处经4.7K下拉电阻接8255A的PC4口,E电极置于水位8m处经4.7K下拉电阻接8255A的PC5口并将它们全部接地。
再设计一个导电浮球G并在浮球上接+5V电压。
设计一个单片机至水泵的控制电路。
要求单片机与水泵之间要用光电耦合器和继电器控制,计算出LED限流电阻,接好继电器的续流二极管。
硬件仿真图如下:
图4.1
4.3故障及水质监测硬件设计:
利用光电传感器测出水的浑浊度并转换成电压与标准水质所得电压做与比较,通过PC3口接入单片机。
利用发光二极管来显示。
硬件仿真图如下:
图4.2
4.4水位显示硬件设计原理图:
利用单片机与8255A连接,将显示水位信号通过8255A的PA口送到数码管进行显示。
而我们通过单片机的P1.0和P1.1来控制两个LED管硬件仿真图如下:
图4.3
第5章软件设计与说明
5.1软件设计:
一个应用系统,要完成各项功能,首先必须有较完善的硬件作保证。
同时还必须得到相应设计合理的软件的支持,尤其是单片机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。
甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。
因此充分利用其内部丰富的硬件资源和软件资源,采用MCS—51汇编语言和结构化程序设计方法进行软件编程。
这个系统程序由主控程序、延时子程序,显示子程序组成。
其中主控程序是核心。
由它控制着整个系统程序的运行和跳转。
流程图如图5所示。
包括系统初始化,数据处理,故障报警等。
软件设计的具体步骤如下:
①当水位低于A时,由于极棒A和G、B和G之间被空气绝缘,PC1和PC0得到低电平,全置0,单片机控制电路使P3.0置零,继电器吸合,启动水泵向水塔灌水;
②当水位高于A低于B时,PC1置1,PC0置0,继电器常开触电自保,因此升到A以上时,继电器并不立即释放,电极仍然供水;
③当水位达到B时,PC0、PC1均置1,单片机控制电路使P3.0置1,继电器释放,水泵停止工作;
④用水过程中,水位降到B以下,PC0置0,PC1置1,维持原状,电机不工作,直到降到A以下,如此循环往复。
系统出现故障时,由P1.8置零,输出报警信号,驱动一支发光二极管D1进行光报警。
⑤用水过程中,当光电传感器检测到水质有问题时,此时由P1.7口置零,输出报警信号,驱动一支发光二极管D2进行光报警。
若水泵工作则停止工作。
5.2软件设计流程图:
流程图1:
下图2主要实现的是控制水泵是否工作,故障检测,水质检测的功能。
图5.1
如下图3是显示水位的子程序设计流程图,我们可以通过下面的子程序来显示水位,此时若水位低于A导电片下我将其LED显示水位为00,这是水泵工作,若水位低于C导电片下我将其LED显示水位为02,若水位低于D导电片下我将其LED显示水位为04,若水位低于E导电片下我将其LED显示水位为06,若水位低于B导电片下我将其LED显示水位为08,若水位高于和等于B导电片时我将其LED显示水位为12,停止水泵工作。
图5.2
第6章调试步骤、使用说明
1)硬件的调试机器故障排除
硬件的调试在上电后的工作是不是正常,主要包括不插单片机的调试和插上单片机的检测。
2)无单片机的调试
无单片机调试主要检查电路工作是否正常,调试数码管是否点亮,显示数据是否正确,具体步骤如下:
A:
打开电源,将输出电压调到5伏,然后关闭电源。
B:
将电路板的火线与电源正极相连,地线与负极相连。
C:
打开电源,用万用表检测电路板是否有输出电压,如果有就是好的,没有就要检测是否有短路。
D:
电路检查完后,关闭电源,用一根导线与电源负极相连,然后打开电源,用导线的另一端逐个与P0、P2口的管脚接触,看数码管显示是否正确。
调试过程中遇到的问题及解决办法:
(1)上电后,用导线一端接低电平,另一端逐一连接P0、P2管脚,数码管显示不正常,检测后发现管脚有短路现象,将短路管脚重新焊接后,显示正常。
(2)反复调试几次后,发现电路不稳定,有时没反应。
仔细分析后,觉得是稳压管有问题,拆除后直接接5V电压源,问题解决。
(3)有单片机的调试
加上单片机,目的是看单片机能否正常工作,有效地控制显示数据。
编写一个小程序,烧入芯片中加点调试。
将编好的程序进行编译,即将*.ASM文件转化为*.BIN文件,然后烧入片子。
程序的编译和烧入将在以后介绍。
把单片机AT89C51接入底座插入底座,加电,看各位显示是不是正确。
用复位键看显示是否正确,如果稳定,表示调试成功。
调试过程中遇到的问题:
上电后,用示波器检测30脚,发现没有时钟频率输出,仔细分析发现30脚没接高电平,重新焊接后,输出漂亮的时钟脉冲。
第7章设计总结
本次课程设计我们设计的是水塔水位控制。
整个设计过程就是一个不断熟悉和掌握单片机系统设计方法的过程。
这个过程又似一个探索与发现的过程,在这个过程中,我们会不断的发现新问题,从而需要不断的去探索,去寻求解决问题的方法与途径,而每一次成功解决问题都会给我们以无比的鼓励和愉悦。
这个过程能够给我们一个很好的锻炼,不仅只是专业知识更好的掌握,更重要的是可以培养我们的兴趣、思维能力和动手能力。
作为一名电气工程专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这俩个星期认真的学习,在老师和同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
一开始我们从老师那领来课题,回去后找参考书,上网找资料,把程序输到软件中再仿真,发现很多程序都是不完整的,这让我们伤透了脑筋。
看着别的小组都弄得有模有样了,可是我们连这个课题程序都没有弄好。
最后反复推敲仿真结果还是很不尽人意。
程序接线什么的都没改好了,使用电脑软件调试没有问题,可是就是无法达到预期想要的结果。
无奈之下不得不求助于老师,经过老师给我们分析讲解程序的各个环节设计。
经过大家一起努力,终于完成了设计。
应该说这是通过我们小组成员的共同努力和动脑完成的,虽然内容并不是很复杂,但是我们觉得设计的过程相当重要,学到了很多,收获了很多。
参考文献
[1]教材《单片微型计算机技术》刘国荣编机械工业出版社
[2]《单片微型计算机原理、应用及接口技术》张迎新编国防工业出版社
[3]《单片机实用系统设计技术》房小翠编国防工业出版社
[4]《单片机应用系统设计》何立民编北航出版社
[5]《单片机原理及接口技术》曹琳琳编国防科技大学出版社
附录
附录A系统原理图
附录B系统程序清单
org0000h
sjmpmain
org0030h
main:
movdptr,#0cfa3h
mova,#89h
movx@dptr,a
movdptr,#0cfa2h
movxa,@dptr
jnbacc.3,lp1
jbacc.0,one
jbacc.1,three
clrP1.6
setbp1.5
setbp1.7
acallmain1
back:
acalldelay1
sjmpmain
lp1:
clrP1.5
setbP1.6
acallmain1
lp2:
sjmpmain
one:
jbacc.1,two
clrP1.7
setbP1.6
setbp1.5
acallmain1
four:
ajmpmain
two:
setbP1.6
setbp1.5
acallmain1
ajmpback
three:
clrP1.6
setbp1.5
setbp1.7
acallmain1
ajmpback
;延时2ms
delay:
movr6,#10
dl1:
movr5,#48
dl3:
nop
nop
djnzr5,dl3
djnzr6,dl1
ret
;延时1S
delay1:
movr6,#4
dl1:
movr5,#251
dl2:
movr4,248
dl3:
nop
nop
djnzr4,dl3
djnzr5,dl2
djnzr6,dl1
Ret
;显示水位
main1:
jbacc.1,return1
movr1,#0
mova,r1
acalldir
ret
return1:
jbacc.2,return2
movr1,#02
mova,r1
acalldir
ret
return2:
jbacc.4,return3
movr1,#04
mova,r1
acalldir
ret
return3:
jbacc.0,return4
movr1,#06
mova,r1
acalldir
ret
return4:
jbacc.0,return5
movr1,#08
mova,r1
acalldir
ret
return5:
movr1,#12
mova,r1
ret
dir:
clrp1.0
setbp1.1
movb,#10
divab
acalldir
acalldelay
setbp1.0
clrp1.1
mova,b
acalldir
movdptr,#tab
movca,@a+dptr
movdptr,#0cfa1h
movx@dptr,a
ret
tab:
db3fh06h5bh4fh
db66h6dh7dh07h
db7fh6fh77h7ch
db39h5eh79h71h
end