资源描述
摘 要本课题是基于单片机的液位控制系统的设计,使用在日常生活和工业应用中广泛应用的水塔作为被控装置,水塔液位和水压作为被控对象;本设计采用液位检测装置和电容式差压变送器对液位高度和压力进行实时检测并传送到单片机进行实时处理,从而使水塔水位自动保持在指定的范围。其中,液位控制系统的硬件电路主要包括水位和水压检测电路、A/D转换电路、键盘显示电路、报警电路、电机控制电路等五大部分;该系统使用电容式差压变送器对水塔水压进行检测并将检测到的信号送给A/D转换器,A/D转换器将对应的模拟电压信号转换成数字量传给单片机AT89C51进行处理,单片机将处理的结果通过数码管显示出来,并完成对排水、抽水电动机的控制;在单片机进行实时处理的同时,可以通过按键对控制系统进行相应的功能切换。该系统各个部分的硬件电路采用C51语言编写控制程序,从而实现使用键盘调整被控参数水压的上、下限以及软件复位功能;利用四位一体共阴极数码管显示水压;通过逻辑代码达到对电机控制电路的控制,使电机在一定的条件下进行抽水或者排水操作;最终使被控对象被控制在指定的水位和水压范围内。在将系统的硬件电路设计和软件程序设计完成后,需要将硬件电路部分和软件程序部分结合起来进行液位控制系统的调试,如果发现问题,就需要找到合适的解决方案,修改错误的部分;并且将这两者结合进行液位控制系统仿真结果的测试,观察实验的结果是否符合课题的设计要求,不然修改不符合课题要求的部分,最终达到液位控制系统的课题目标。关键词:AT89C51单片机;A/D转换;液位控制 I AbstractThis topic is the design of control system based on single-chip liquid level control, using the tower as a controlled device which is often seen in daily life and industrial application, the liquid level of the water tower and water pressure as the object; this design uses the liquid level detection device and capacitive differential pressure transmitter to monitor the liquid level and pressure and real-time processing, so that the water level automatically keeps in the specified range. The hardware circuit of control system mainly has five parts, which includes water pressure and liquid level detection, A/D converter, keyboard display circuit, alarm circuit, motor control and so on; the system uses capacitive differential pressure transmitter to detect the tower pressure and the detected signal is sended to the A/D converter; A/D converter will convert this analog voltage signals into digital signals which send to the AT89C51 single-chip, and the micro-controller processes the results, which can use the nixie tubes to display, and accomplish the control of drainage and pumping motor; At the same time of real-time processing in the SCM, the corresponding button can switch to different functions of the control system.Each part of the hardware circuit of the system uses C51 language to program, so as to realize the use of the keyboard to adjust the controlled parameters of upper and lower limit pressure; using one of LED to display the pressure, through the logic code to control the control circuit of the motor, the motor will pump or drain under a certain condition; ultimately the water pressure and water pressure will be controlled in a specified range.After the design of hardware circuit and software program, debugging liquid level control system combining hardware with software part is needed; if errors are found, find the right solution, modify the wrong part; also this combination of liquid level control system simulation results need test, and observe the experimental results whether or not these results are in conformity with the requirements of the project design; Otherwise, modifying the part that does not meet the requirements of the project, and ultimately the aim of liquid level control system will be achieved.Keywords: AT89C51 single chip micro-controller; A/D conversion;liquid level control II 目 录摘 要IAbstractII第1章 绪论11.1 课题的意义11.2 国内外的研究动态21.3 课题的目的和预期目标3第2章 系统整体方案设计4第3章 硬件电路设计63.1 AT89C51单片机63.1.1 单片机的功能和特点63.1.2 时钟和复位电路83.2 水位检测电路和水压检测电路93.2.1 水压检测电路以及控制仪表93.2.2 水位检测电路103.3 A/D转换设计113.3.1 A/D转换器介绍113.3.2 A/D转换电路133.4 数码管显示和键盘电路143.4.1 键盘电路143.4.2 数码管显示电路153.5 报警电路173.6 电机控制18第4章 软件设计194.1 软件语言的选择194.2 系统主程序和初始化函数194.3 A/D转换和水压的数据处理204.4 延时处理214.5 键盘部分的软件设计244.5.1 按键去抖动244.5.2 按键功能实现264.6 显示部分的软件设计264.7 水位监测和报警电路的软件设计274.8 驱动电路的软件设计28第5章 系统调试与仿真结果295.1 系统调试295.2 仿真结果305.2.1 水压仿真测试305.2.2 水位仿真测试31第6章 结论32参 考 文 献33致 谢34附 录35 IV沈阳工业大学本科生毕业设计第1章 绪论1.1 课题的意义随着很多行业对液位控制的需求日益增加,液位和液压控制技术正在不断发展。为了增加控制功能、提高生产效率,采用AT89C51单片机进行液位和液压的控制技术得到了广泛的应用。不论是在工业生产过程中,还是在农业和其他行业生产过程中,水塔都是生产生活中不可或缺的控制装置设备,所以水塔的液位控制就是我们面临的严峻问题之一。在我国液位技术需求迅猛上升之前,液位的控制需要人来进行看管,这不但降低了劳动生产率,而且还不能高效和精确地将水位和水压控制在一个指定的范围内。正因为这些各种方面的原因,所以采用单片机控制水塔的水位和水压的控制方案就达到了这一基本要求,并且解决了这一重要问题。液位控制作为过程控制研究领域重要的课题之一,它不仅在生产生活中占有相当大的比例,而且人们对液位控制的需要和要求越来越多,多功能的液位控制系统就为了满足这一情况而进行设计的。多功能的液位控制相比较传统的机械液位控制系统有无可比拟的优势;首先,多功能的液位控制系统在功能上比机械液位控制系统要多了不少,不仅是传统意义上的液位控制而已,还增加了水压的显示显示功能和键盘对液压的控制切换功能;其次,多功能的液位控制系统在控制速度上比机械液位控制系统要快了不少,机械液位控制系统依靠传统的机械杠杆进行移动产生位移会有一定的机械延迟,从而增加了滞后时间,然而采用单片机进行液位控制的系统使用了A/D转换器,采样频率相较于机械液位控制系统较高,可以对液位控制系统进行快速控制;再次,机械液位控制系统需要进行零点值和满度值进行反复的调整1,而多功能的液位控制系统不用对其进行反复的调整,只要进行过零点调整,就无需进行反复设置;最后,多功能的液位控制系统无需人为手动的调整液位,直接通过控制电机达到控制液位的效果,相较于机械液位控制系统节省了劳动力成本,同时提高了生成过程中控制的效率。多功能的液位控制系统将使用AT89C51单片机作为核心处理器,方便对整个液位控制系统的调度和操作,它具有一定的可靠性、稳定性和准确性。使用单片机实现多功能的液位控制系统不仅可以减少简单液位控制的控制成本,而且可以提高用户的可操作性,方便用户对液位控制系统的控制。因此本课题采用AT89C51单片机控制水塔的液位相比于以前的控制方式将会有更大的性能和控制操作的提升。目前,虽然市场上的液位控制系统种类繁多,但是掌握液位控制系统关键核心技术对我们有很多好处,有助于我们更有效率和安全地进行生产生活,而且,对液位变化进行分析并采集大量数据,找出数据经常变化的位置,这些数据将会帮助我们实现更加快速和稳定的控制系统。1.2 国内外的研究动态很多欧美的发达国家在液位控制系统的设计中,特别是液位控制系统,已经积累了很多的经验,具有坚实的基础,所以欧美的发达国家的液位控制系统迅速占领了国际市场。我国在液位控制系统的研究和制造上,与其他发达国家相比还存在一定差距;但是,我们国家的研究人员在液位控制系统研究的道路上克服了许多未知困难,在探索中不断前进,希望在相关封锁的技术领域有所突破,甚至超过发达国家的控制技术水平使我国的液位控制技术领先于全世界。然而,在液位控制系统中,液位测量是液位控制技术非常重要的一项步骤,依据测量的工作原理,液位测量分为直读式液位测量、浮力式液位测量、电气式液位测量等。直读式液位测量是利用连通器的原理测量液位,浮力式液位测量利用浮力原理测量液位,分为恒浮力和变浮力两种2。电气式测量法测量液位是将液位的变化转换为某些电量的变化,从而实现液位检测;一般,把敏感元件做成的杆状电极置于被测物质中,则电极的电气参数,随着液位的变化而变化;电气式测量液位又分为电极式、电容式、电感式等3。除了液位测量以外,液压的测量也是液位控制技术不可缺少的部分,测量压力一般使用差压变送器,可以将420mA的电流远传到控制室,方便对控制装置的统一管理。国外发达国家的控制方式已经由集散控制系统发展到了现场总线技术,现场总线技术的发展使得自动化控制技术发生了变革。信息技术现在正融入到生产现场,新型的现场总线技术克服了系统封闭带来的缺陷,提高了信号测量准确度和传输精度,同时可以进行多种复杂的控制运算,提高系统的可靠性。不仅如此,现场总线技术还便于操作管理人员更好、更深入地了解生产现场和自动控制装置的运行状态。1.3 课题的目的和预期目标本课题是通过单片机作为系统核心达到控制液位的目的。本设计采用液位检测装置和电容式差压变送器对液位高度和压力进行实时监控并进行实时处理,从而使水塔水位自动保持在指定的范围。其中,液位控制系统的硬件电路主要包括水位和水压检测电路、A/D转换电路、键盘显示电路、报警电路、电机控制电路等五大部分;该系统使用电容式差压变送器对水塔水压进行检测并将检测到的信号送给A/D转换器,A/D转换器将对应的模拟电压信号转换成数字量传给单片机AT89C51进行处理,单片机将处理的结果通过数码管显示出来,并完成对排水、抽水电动机的控制;在单片机进行实时处理的同时,可以通过按键对控制系统进行相应的功能切换。本设计的模型是基于水塔控制装置,以1m的水塔的液位和液压作为被控对象,液位范围是(0-100cm),液压范围是(0-9980Pa),实现液位和液压被控制在指定的范围内。本系统的软件部分采用C51语言编写控制程序,从而实现使用键盘调整被控参数水压的上、下限以及软件复位功能;利用四位一体共阴极数码管显示水压;通过逻辑代码达到对电机控制电路的控制,使电机在一定的条件下进行抽水和排水操作;最终使被控对象被控制在指定的水位和水压范围内。本课题的水位控制技术采用液位传感器和压力传感器对液位高度和压力进行实时监控;预期目标是:当水位和压力超出规定范围时,系统能够自动调整水位和水压,使其落在规定的范围内;当水位和水压低于规定范围时,就控制水泵工作抽水,使水塔内的水位和水压上升,到达规定高度。而达到不用人工专门去控制即可使水位保持在一定范围内的目的。第2章 系统整体方案设计在生产生活中有很多种方式可以对液位和液压进行控制,但是使用比较常见的有两种控制方式,一个是基于机械的简单控制方法,另一个是基于控制器的复杂控制方法。 现在介绍这两种控制方式的区别和原理。(1)基于机械的简单控制方法。可以使用的实现方式有浮标式、电极式等,基于机械的简单控制方式的优点是结构简单、成本低。但是缺点也很明显,就是精度低、不能进行数据实时显示;另外,这种控制方式很容易引起误操作,且只能单独控制,不能与其他的计算机进行数据交换,难以实现数据的采集和数据的分析以及对数据处理后的控制4。图2-1 单片机液位控制系统框图(2)基于控制器的复杂控制方法。基于控制器的复杂控制方法是通过安装在水塔下方安装差压变送器,把水塔底部的压力首先转换成变极距位移值的变化,然后再转换成电阻、电容等电量值的变化,再经过一些电路的处理,将这些电量值的变化转换成标准电压信号或者是电流信号,再经过多路切换、A/D转换器将模拟信号变换成数字信号送到单片机,然后单片机对数据进行运算和处理5,通过相应的逻辑实现单片机端口信号的变化,实现改变外围装置状态的变化,最终达到控制水塔液位和液压在指定范围内的目的。针对以上描述的两种控制方法,以及综合考虑本设计需要达到目的和要求。本设计选择第二种基于控制器的复杂控制方法进行液位和液压的控制,并且对其加以改进。最终构成的控制方案如图2-1所示,本液位控制系统由单片机AT89C51、数码管显示器、报警器、键盘、变送器和其它基本外围装置组成。使用单片机作为液位控制系统的核心,设计出了一个对供水塔液位和液压进行实时监测的系统。实时检测水塔的液位高度和液压的变化,将来自传感器测量液压和液位的信号经过AD转换或者测量电路的处理后送到单片机再进行控制处理,由单片机控制外围装置,实现排水电机、抽水电机以及报警器等外围装置进行实时动作,达到对水塔的液位高度和液压的调整,最终达到水塔的液位高度和液压保持在要求的指定范围内。除此之外,本设计实时显示测量的液压值,从而实现对水塔水位的实时监测。同时可以利用键盘输入需要控制液压的上、下限和实现其他的控制功能。第3章 硬件电路设计液位控制系统的硬件主要由AT89C51单片机,水位检测电路,水压检测传感器(使用变送器),报警电路,数码管显示电路,键盘输入电路,电动机控制电路,AD0809转换器等组成。下面对各部分硬件电路进行详细介绍。3.1 AT89C51单片机3.1.1 单片机的功能和特点单片机采用由ATMEL公司生产的双列40脚AT89C51芯片,芯片引脚如下图3-1所示。其中,P0口用于A/D转换;P1口作为数码管的段选信号;P2口的低四位给数码管提供位选信号,高四位用于连接键盘;P3口用于控制水泵的动作,并且用于控制A/D转换的启动和停止,控制报警器以及用于读取液位等。下面具体介绍各个接口的功能和特点。图3-1 AT89C51单片机引脚图P0口:单片机P0口有两种使用方式,第一种是作为通用的I/O口使用,用于传送单片机的输入输出数据,此时的输出可以得到缓存,输入的数据可以得到缓冲,保证了数据输入输出的可靠性6。第二种是连接外部的存储器,通过和单片机的P2口结合起来使用,单片机就可以访问外部存储设备的数据,可以对其进行读写操作7。P1口:单片机的P1口第一种使用方式和P0口一样;P1口的第二种使用方式是作为8751编程/校验用于ROM的低8位地址。P2口:单片机的P2口第一种使用方式和P1口一样;P2口的第二种使用方式是和P0口结合起来使用,作为访问片外存储器的高8位地址中的数据。表3-1 AT89C51端口引脚的第二功能端口号第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)P3口:单片机P3口的第一种使用方式和P1口一样;第二种使用方式是作为第二功能使用,每一个引脚都有各自的功能,可以作为控制液位控制系统的外围装置使用,如表3-1所示。RST:复位引脚。当振荡器工作时,RST引脚出现两个机器周期以上高电平,这些加到RST引脚的高电平会使AT89C51单片机复位。ALE/PROG:地址锁存引脚。ALE引脚配合单片机的P0口的第二种使用方式工作。在访问外部存储器时,单片机除了在P0口输出存储器的地址,还在ALE引脚上输出一个高电平;在没有访问外部存储器的情况下,单片机在ALE引脚输出1/6时钟频率的脉冲。PSEN:外部程序存储器的读选通引脚。EA/VPP:外部访问允许引脚。EA=1,访问片内存储器;EA=0,访问外部存储器。3.1.2 时钟和复位电路1.时钟电路如图3-2所示,左边的电路图是单片机的片内振荡电路输入线。XTAL1和XTAL2连接石英晶体和微调电容,同时连接单片机的片内振荡器的定时反馈回路。石英晶振起振后,在XTAL2线上输出一个3V左右的正弦波,以使单片机的片内OSC电路按晶振同频率自激振荡。电容C1和C2帮助起振,调节这两个电容的电容值以达到微调时钟频率的目的8。图3-2 复位电路及时钟电路(2) 复位电路复位电路可以分为上电复位和手动按键复位两种。单片机上电复位的原理是,在系统上电的一瞬间,利用电容两端的电压不能发生突变,在一上电的瞬间电容如同短路,加在RST引脚的电平是高电平,虽然时间很短,但足以让单片机复位9。手动按键复位的原理是,在系统正常工作的过程中可以手动触动按键使单片机复位。按下按键,5V的电压经过一个200欧姆的电阻分压后加到系统的RST上,手动按键按下到抬起的过程足以使系统复位10。图3-2中网络标号RST连接单片机RST引脚,同时具有上述的两种功能。3.2 水位检测电路和水压检测电路3.2.1 水压检测电路以及控制仪表1. 电容式差压变送器简介该变送器采用差动电容作为检测元件,完全没有机械传动机构和机械调整装置,抗震性好、准确度高,静压误差小,其可靠性、稳定性都较高,仪表准确度为0.25-0.5级11。由于变送器采用集成放大器和现代电子工艺,参数调整通过电路完成,简单方便,且零点调整和量程调整互不影响。图3-3 电容式差压变送器实物图电容式差压变送器使用变极距的方法测量压力差,实物图如图3-3所示。它是将被测压力差引起的弹性元件的变形转变成电容量的变化,通过测量电容量的变化,便可知道被测压力差大小。隔离膜片集成运放测量电路活动电极输入差压输出电流位移电压电容变化图3-4 电容式差压变送器原理图变送器原理如图3-4所示,从输入电压到电容变化是检测部分,从电容变化到输出电流是转换部分。由检测部分的差动电容膜盒把被测压力差转换成电容量的变化,经转换部分把电容量的变化转换为电压,再由运算放大器将电压转换成4-20mA标准信号输出。3.2.2 水位检测电路水位检测电路结合了电路和机械两个部分,其中电路部分如图3-5所示,主要是通过一个开关来检测水位的位置,当开关闭合时,说明水位到达指定的水位,对应单片机的P3.6或P3.7引脚检测的电压是低电平;如果开关断开,表明水位没有到达指定的位置,对应单片机的P3.6或P3.7引脚检测的电压是高电平。图3-5 水位检测电路机械部分是根据水的浮力使浮球漂浮,从而使浮球产生位移,达到触碰开关,实现电路部分开关的开、闭两种状态;通过在液位控制装置上设置浮球的位置,可以得到想要液位范围,使水位保持指定的范围内。3.3 A/D转换设计3.3.1 A/D转换器介绍1. ADC0809转换器概述 A/D转换器是液位控制系统中最为重要的一个电子元件,它可以将模拟信号转换成数字信号,变成单片机可以处理的数字信息。本设计考虑到液位控制系统进行A/D转换的各种要求,决定采用ADC0809进行A/D转换电路部分的设计,使用这种逐次逼近式A/D转换器转换速度比较图3-6 ADC0809引脚图快,造价成本比较低,可以满足测量水压的要求;ADC0809使用起来也比较简单,可以进行多路的模拟信号的转换,通过改变模拟信号输入地址就可以实现这一功能;单片机只需要提供一个数据接收端口和少量的控制端口就可以对该芯片进行控制和接收信号。ADC0809的引脚图如图3-6所示。单片机可以通过对与其连接的ADC0809转换器的端口进行读取操作,通过ADC0809将输入的模拟数据,处理成数字信号输出,单片机就可以获得液位控制装置的水压数字量信号;单片机将这一数字量进行数学运算处理,可以得到一个水压值,经过这些步骤,后续的键盘以及显示操作的功能才能被实现。ADC0809主要信号引脚的功能说明如下表3-1所示。表3-1 ADC0809引脚功能ADC0809引脚ADC0809引脚的功能IN7-IN0模拟电压输入线ALE地址锁存允许信号START转换启动线。上升沿,复位芯片;下降沿,开始转换ADDA、ADDB和ADDC信号输入地址线CLK时钟输入线。由外界提供频率为500KHz的时钟信号EOC转换结束信号。D7-D0数据输出线OE输出允许信号。控制输出转换的数据Vcc+5V电源Vref参考电压线2. A/D转换数据传送方式A/D转换器经过转换后,应及时把转换后的数据送到单片机的P0端口,单片机才能对这个数据继续进行处理。所以知道ADC0809转换器何时完成A/D转换是非常重要的,单片机有3种方式判断A/D转换是否完成。(1) 定时传送方式任何一个ADC转换器的转换时间都有一个固定值,可以使单片机通过定时程序中断,到达这个固定时间值去取转换后的数据。(2) 查询方式AT89C51单片机通过不断地查询ADC0809的EOC引脚的状态就可以判断转换是否完成。(3) 中断方式将ADC0809的EOC引脚连接到单片机的P3口,让单片机的P3口以第二种使用方式工作,转换时间到会给单片机发送中断请求信号,以中断方式判断转换是否完成。3. ADC0809的工作过程首先输入3位地址ADDA、ADDB、ADDC,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入线中的一个到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行,直到A/D转换完成,EOC变为高电平,指示A/D转换结束,转换结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上12。3.3.2 A/D转换电路本设计的液位控制系统中的A/D转换器采用的是ADC0808,它与ADC0809的功能没有太大差别,使用ADC0808进行液位控制系统的仿真测试。图3-7 A/D转换电路ADC0808与AT89C51单片机的电路连接图如图3-7所示,本设计使用的是查询方式;ADC0808的频率由一个外部脉冲源提供其所需要的500kHz;模拟输入通道选择IN0,所以ADDA,ADDB ADDC都是0,表明选择的输入通道是IN0;ALE接地,使000地址锁存起来;参考电压为+5V;数字量输出通道连接到单片机的P0口;开启A/D转换的引脚START连接单片机的P3.0,查询A/D转换是否完成使用到了EOC引脚,单片机的P3.1与其连接用于查询ADC0809的状态;OE引脚控制ADC0809转换器数据的输出,单片机的P3.2与其连接在一起用于获取来自ADC0809转换器的数字信号。3.4 数码管显示和键盘电路数码管显示电路和键盘电路一起进行设计,数码管显示电路由四位一体共阳极数码管组成,分为动态显示和静态显示,为了系统的优化和省电,本设计采用动态显示。键盘电路采用常用的键盘电路设计,本设计使用独立式键盘设计,用以实现液位控制系统的用户操作功能。3.4.1 键盘电路图3-8 键盘电路键盘电路是液位控制系统中一个比较重要的组成部分,它不仅可以实现向该控制系统中的单片机发送命令的功能,而且还可以向该控制系统输入信号改变液位控制系统参数。键盘电路是人与液位控制系统进行交互的重要工具。结合液位控制系统设计的实际情况,故采用独立式键盘接口电路,而非矩阵式键盘设计。独立式键盘是将每一个独立的按键直接接到单片机指定的I/O口上,每个按键连接单片机一个引脚,这是在液位控制系统使用键盘非常少才采用的设计方案。当键盘的按键按下时,需要向单片机发送一个信号,通知单片机用户按下了按键,需要单片机对该按键的功能进行响应。独立式键盘的信号检测是通过单片机指定的I/O口的状态变化实现的,通过如图3-8所示的键盘电路设计,可以使连接的单片机P2端口的高四位的状态发生变化。按下按键,这些接口的状态就变成了低电平;松开按键,这些接口的状态就变成了高电平;利用这一原理,就可以方便的编写程序实现相应的功能了。其中,MODE、ADD、SUBTRACT不仅是用来控制显示用的按键,主要功能是改变水塔被控水压的范围。可以通过ADD、SUBTRACT实现对高低警戒水压的设置。具体来说,ADD、SUBTRACT分别实现数字的增一与减一,MODE、RESET则作为模式选择和重置键。重置键会让液位控制系统回到初始化状态,模式选择键是选择水压上限还是水压下限。3.4.2 数码管显示电路本设计采用四位一体共阴极数码管。它的每一位发光段,分别是A-G段和DP段,分别按照字母顺序与单片机的P1口连接;每一位数码管1,2,3,4同样按照顺序与单片机的P2口的低四位连接。1. 数码管简介数码管是由发光二极管构成的发光显示元件。单片机将指定的数据进行处理后,将在与四位一体共阴极数码管连接的I/O上输出一些数字信号,用于驱动数码管中的发光二极管,使发光二极管发生亮灭13。这些指定的数字信号需要在程序中进行编码,具体的编码详见本设计的软件部分。它的引脚以及与外部的连接如图3-9所示。数码管又分为两种显示方式,下面分别介绍共阴极和共阳极这两种方式。图3-9 数码管显示电路2. 数码管的显示方式数码管要正常显示就要使数码管的各个段的做出相应的亮灭,从而显示出待显示的数字。因此,根据单片机对它的驱动方式不同,可以分为以下两种方式工作。(1) 静态显示:静态显示是将数码管的每一个段选线都都连接到单片机的引脚上,由单片机对其驱动,控制其显示。静态驱动的优点是结构简单,但占用单片机的引脚多,能耗高,不利于高效使用单片机。(2) 动态显示:数码管的动态显示在单片机设计中广泛应用。动态显示是将所有的数码管的8个段选线连接到单片机的同一个I/O口,通过位选线来控制哪一个数码管进行显示。在延时进行轮流的显示过程中,由于人的视觉短暂停留效应以及发光二极管的余晖效应,尽管各位的数码管不是同时点亮,但是给人的印象感觉就是显示了稳定数据14。动态显示可以达到和静态显示一样的效果,不仅功耗更低,而且还能节省大量的I/O端口。3.5 报警电路图3-10 蜂鸣器报警功能电路如图3-10所示,报警电路由三极管2N2219和蜂鸣器组成。蜂鸣器由2N2219驱动,进而实现报警功能。2N2219的集电极接电源+5V,基极通过一个电阻连接到P3.3口,射极接蜂鸣器,当P.3为低电平时,2N2219截止,报警器不响,当P3.3为高电平时,2N2219导通,报警器发出响声。3.6 电机控制电机控制系统采用普通的电磁继电器,使用2N2219三极管放大电路对其进行驱动,如图3-11所示。继电器两端连接了一个1N4001二极管。原因是,线圈通电时,1N4001对驱动电路没有任何作用。当继电器线圈在断电的一瞬间会图3-11 电机控制电路产生一个很强的逆向电压,在继电器线圈两端反向并联1N4001就是用来抵抗这个逆向电压对2N2219的影响;如果不加1N4001反向二极管,逆向电压会直接作用在2N2219上,很容易将2N2219烧坏。当单片机的控制端P3.4输出高电平时,2N2219导通,驱动电磁继电器的开关闭合,使抽水电动机开始工作;当单片机的控制端P3.4输出低电平时,2N2219截止,驱动电磁继电器的开关端口,使抽水电动机停止工作。这样便可以实现对液位控制系统水位和水压的控制。排水电机与之类似,只是受到P3.5端控制,其他与抽水电机相同,不再赘述。第4章 软件设计4.1 软件语言的选择本设计采用C51语言编写软件。C51不仅可以对单片机编程,而且还能对硬件控制系统进行高效开发,利用C51语言编写程序简便、易懂,相比较于汇编语言,使用C51编程有下列优点。1.不用写反复繁琐的指令,也不用记忆指令和考虑指令的使用2.寄存器是由编译器自动管理,不用再人工考虑设置3.使用C51编程可以是程序设计结构变得规范,程序分成函数结构化设计4.C51提供了许多标准的子程序,对数据处理起来方便5.避开了对跳转指令的直接处理,防止了程序过大出现不可预知的问题6.方便模块化的编程设计技术,易于程序的移植除了以上的优点外,C51编程对数据的是非常方便的,传统的汇编语言需要对二进制和十六进制数直接操作,这额外增加了设计的时间,所以使用C51编程可以使用人性化的十进制数,将十进制数定义为指定的数据类型即可,通过编译器自动转换成底层的二进制数。虽然C51有很多优点,但是也有一定的不足,汇编语言程序可以设计的结构清晰,方便单片机对指令的高效处理,C51编译后的程序重复度比直接编写的汇编语言程序要高。综上所述,在对比了C51语言和汇编语言的优点以及缺点后,本设计采用C51编程,方便对液位控制系统软件设计的逻辑实现,同时也能够快速排查程序出现的问题。下面是液位控制系统各部分使用C51语言编程的软件设计。4.2 系统主程序和初始化函数液位控制系统的主程序包括系统初始化函数、按键函数、水位监测函数和电动机控制函数以及水压检测函数。液位控制系统的主程序的主要功能是完成液位控制系统参数的初始化,设置默认的警戒液位和液压的上下限,实时显示水压值以及键盘扫描等工作。程序流程框图如图4-1所示。系统的初始化函数主要是对水压的上、下限进行初始化赋值,并对其他的控制参数例如电机控制位、报警器控制位等进行初始化设置。图4-1 主程序流程图4.3 A/D转换和水压的数据处理本设计采用的A/D 转换器分辨率是8 位逐次逼近型A/D 转换器,位数越高,分辨率越高。若小于最小变化量的输入模拟电压的任何变化,将不会引起输出数字值的变化15。 而常用的8-bit 的ADC0809,若是满刻度为5V的话,分辨率即为5V / 28 = 19.53mV。 程序如下:START=0; /启动A/D转换 OE=0;if(EOC=1) /查询0808转换结束信号 /这时D0-D7输出转换后的数据,CPU可以进行读取数据OE=1; temp=P0; /读取数据 temp=temp*1.0/255*500; temp=(temp-100)*25; OE=0; START=1; START=0; OE=0:禁止转换器的数据输出,为A/D转换做准备START=0;START=1;START=0;产生一个脉冲信号,启动A/D转换If(EOC=1):检测转换器是否进行A/D转换完成OE=1:允许A/D转换数据输出,并将数据传送给P0Temp=temp*1.0/255*500;OE=0:对输入的数字量0-255转换成对应的模拟量0到+5V。OE=0,禁止数据输出,防止在处理P0口数据过程中,输入P0口的数据发生变化。4.4 延时处理本设计的延时处理方案设计了两种,一种是以循环为主的延时设计,另一种是以定时器中断为核心进行计时,从而实现延时的效果;1. 通过循环进行延时处理程序如下:/延时子程序void delay(uint m)while(m-);2. 通过定时器进行延时处理 定时/计数器有两种用途:定时器和计数器。但一个定时/计数器(T1或T0)不能既做定时器又作为计数器。其实,定时/计数器的核心是一个加1的计数器,脉冲的来源有两个:一个是由系统的晶振器的脉冲提供;另一个是由外部脉冲源提供。这就是51单片机中定时/计数器 的定时功能和计数功能的区别。每来一个脉冲则加1计数,当计数器记录为全1时,再来一个脉冲就会使计数器回到0;并且计数器的溢出会在TCON寄存器中的TF0(或TF1)置位为1,向CPU发出中断请求。如果定时/计数器工作于定时模式,则表示定时时间已到16。定时器的定时时间不仅与初始值有关,而且还与系统的时钟频率有关,所以在设计中要根据时钟频率设置定时器的初值。定时/计数器有两个控制寄存器,TMOD和TCON。TMOD用于控制定时/计数器的工作方式,选择定时或者计数的功能;TCON用于控制定时/计数器的启动和停止,并控制定时/计数器的工作状态等;启动定时/计数器开始工作之前,需要定义定时/计数器的工作方式,同时对TL0、TH0及TL1、TH1进行初始化编程17。液位控制系统的显示需要定时18ms,所以采用方式1,16位定时/计数器,16位定时/计数器最大容量是65536,大约65ms,所以不能直接定时18ms,因此加入了一个计算次数的变量count,使定时器定时18ms。定时器初始值的计算:液位控制系统使用单片机的晶振频率是12MHz,并且16位定时/计数器是由TH0、TH1两个8位寄存器组成的,所以为了定时18ms,可以计算:TH0=(65536-9000)/256; /给定时器的高8位赋初始值TL0=(65536-9000)%256; /给定时器的低8位赋初始值给定时器设置的初始值是9ms,使用count作为中断次数变量。当每次中断溢出后,AT89C51单片机就会执行中断子程序,变量count加1。当count增加到2时(总时长是29ms=18ms),则定时时间18ms到,可以执行相应的显示程序。根据以上原理编写的程序如下:/选择使用定时器0并且设置其工作方式为1 TMOD=0X01;/给定时器0赋初始值为50ms TH0=(65536-9000)/256; / TL0=(65536-9000)%256; EA=1; /开总中断 ET0=1;/开定时/计数器0中断 TR0=1;/启动定时/计数器0/定时器0中断延时子程序void timer0() interrupt 1/重新给定时器赋初始值 TH0=(65536-9000)/256; TL0=(65536-9000)%256; count+; /没过50ms使count加1/到达指定的中断次数后执行响应的操作 if(count=2) count=0; /需要执行的程序 display(AD_number); 4.5 键盘部分的软件设计键盘的软件设计流程框图如图4-2所示通过程序扫描查询方式实现单片机键盘部分的软件设计。通过单片机P2端口的高四位读入按键状态,判断四个按键中哪个按键被按下。键盘部分编写程序如下。temp=P2|0 x0f; /读取P2口/判断有无按键按下 if(temp!=0 xff)delay(500); /延时再判断其的状态 /判断是否真的有按键按下,否则退出 if(temp=0 xff|reset=1)当有按键按下时,相应的单片机P2端口的高四位的某一位变为低电平,而未被按下的按键仍为高电平。通过读取单片机P2端口的高四位的状态,根据端口状态判断是否有按键按下。但是只进行一次按键判断是不够的,还需要判断是否是键盘抖动带来的影响,所以还需要再进一步处理键盘的按键是否真的被按下,下面就介绍按键去抖动的原理。4.5.1 按键去抖动由于按键是利用机械触点的闭合与断开功能进行工作的。因此,按键的按下与抬起一般都会有抖动的存在。为了获得实时准确真实的按键操作,必须去除抖动给按键扫描带来的不稳定影响,这是键盘软件设计部分中一个极其重要环节。去抖动采用了延时扫描再读取的方式,在检测到有按键按下时,执行一个延时程序后,再次进行判断该按键的闭合断开状态,如果再次判断保持闭合状态,则可以被认为是真正的按下了该按键。图4-2 键盘控制流程图4.5.2 按键功能实现MODE键功能实现:通过按下MODE键,可以对显示进行切换,这是依靠设置标志值实现的。ADD、SUBTRACT键功能实现:在判断是ADD键按下后,还需要判断是水压上限还是水压下限需要增加,这就需要上一步MODE按下后设置的标志high_pressure_flag和low_pressure_flag来判断,为1则就是需要修改的参数;SUBTRACT键的功能同ADD键。RESET键功能实现:直接在确定是RESET键按下后,调用init()函数,就可以对控制系统的参数进行重置。4.6 显示部分的软件设计4位一体共阴极数码管的数据输入只有4位,由4个数码管公用。每次显示数字时都要选中响应的数码管,才能在相应的位置显示想要的数字。因此,定义了一个数码管位选择编码表“uchar code table”。在这里使用了延时函数,在显示部分中作为延时使用,用以动态显示。表4-3 数码管字形编码表显示字符共阴极段码显示字符共阴极段码0FCH8FEH160H9F6H2DAH10EEH3F2HA3EH466HB9CH5B6HC7AH6BEHD9EH7E0HE8EH如表4-3所示,要使数码管显示出指定的数字(在本控制系统中是水压),必须使单片机的P1口输出相应的字形编码信号。根据图3-9,字型码各位定义为:数据接口P1.7与a字段对应,依此类推。使用共阴极数码管,输出位为0表示对应字段显示暗,输出位为1表示对应字段显示亮。如果要显示“0”,共阴极数码管的字型编码应为:11111100B(即FCH),依此类推。4.7 水位监测和报警电路的软件设计当系统出现异常时,可以调用报警器函数,使液位控制系统报警;实现报警器的控制方法很简单,只需要这条语句就可以改变报警器的状态: buzzer=1;buzzer=1;报警器发出声响;buzzer=0;报警器不响对液位进行检测和处理同样写成了函数,供系统调用;为保证设计的严谨性,液位在控制过程中有以下五种情形:1. 正常情况下 level_high=1&level_low=0;这样水位就在指定的范围内,否则就出现异常情况2. if(level_high=0&level_low=0) 这是水位偏高的情况,返回标志值 return 2;3. if(level_high=1&level_low=1) 这是水位偏低的情况,返回标志值 return 1;4.if(level_high=0&level_low=1) 5.硬件损坏,必须报警进行提醒操作buzzer_control();水位监测正常,什么也不做,返回标志值 return 0;4.8 驱动电路的软件设计将驱动电路部分的程序设计成函数,驱动电路函数主要是用来控制抽水电机(motor1)和排水电机(motor2)的,需要两个参数,一个是实时水压数据tmp,另外一个是水位数据level_condition;可以根据这两个参数对电机进行控制,对电机的控制情况分为以下三种情形:1. if(tmppressure_high)|(level_condition=2) 这是水压过高或者是液位为高的情况,其中level_condition=2这个值是经过液位函数处理后的一个标志的值,表明液位是过高的情况,所以需要排水,故令 motor2=1;motor1=0;2. if(tmppressure_low)|(level_condition=1)这是水压过低或者是液位为低的情况,其中level_condition=1这个值是经过液位函数处理后的一个标志的值,表明液位是过低的情况,所以需要排水,故令 motor2=0;motor1=1;3. 默认情况下水压和液位在正常范围内就无需对电机进行处理,所以 motor1=0;motor2=0;第5章 系统调试与仿真结果5.1 系统调试在液位控制系统设计过程中,不可避免的会遇到一些无法预知问题,只有对控制系统进行良好的设计,才能顺利的解决这些问题;通过对硬件电路的设计以及对单片机软件分模块的设计,不仅方便系统结构功能的扩展和重组,而且可以快捷的找到系统在设计过程中出现的错误和有效的解决遇到的指定问题;同时,对控制系统的调试不可或缺,只有不断地发现问题,和采取合适的措施解决问题才能使控制系统变得更加完善。本液位控制系统的调试主要分为硬件调试和软件调试两大部分,硬件电路的调试可以根据软件仿真的结果进行判断和处理,软件调试是最为重要的部分,系统逻辑功能的实现全靠软件部分的正确编写。可以在程序设计无误的情况下,结合单片机硬件仿真,检测实验结果是否正常,如果不正常则需要修改原来编写的程序,并进行调试和检查仿真结果。在单片机液位控制系统设计中遇到的问题以及解决方案如下介绍。(1) A/D转换不正常本设计需要将来自A/D转换后的数据进行实时显示和处理,在设计过程中,A/D转换的结果通过四位一体数码管始终为0;这是不正常的结果,在显示部分设计正确的情况下,判断A/D转换异常,然后对A/D转换电路和软件设计部分进行的检查和调试,最终发现是软件设计的错误,软件没有正确的开启A/D转换,在对程序调整后,使A/D转换在系统启动时开启,并实时转换来自于水压传感器的数据,最后由数码管显示器显示实时水压数据。(2) 键盘操作功能不能完全按照要求实现经过检查,这一部分的硬件设计完全没有问题,设计中简单的使用了四个独立的功能按键,其中第二个“模式”键并没有按照编写的逻辑代码执行,在按下“模式”键进行切换后,应该转到水压上限和水压下限数据的处理和显示,但是显示的始终是水压上限,这说明“模式”键的切换不正常,在经过一番调试后,发现对按键进行判断处理的程序没有进行延时处理才导致程序执行异常。(3) 对电机的控制出现了不合逻辑的问题软件代码问题,逻辑与、或、非编写错误,更改后正常。5.2 仿真结果5.2.1 水压仿真测试表5-1 水压仿真测试结果测试内容测试结果(水压:单位Pa)初始状态显示0000A/D转换时的显示XXXX(实时显示水压数据)RESET键按下显示0000MODE键按下一次显示MODE键按下两次显示MODE键按下三次显示ADD键按下显示SUBTRACT键按下显示3456(水压下限)5678(水压上限)XXXX(实时显示水压数据)水压上限或者下限加1水压上限或者下限减1液位控制系统的四位一体共阴极数码管在系统开始启动的初始状态显示水压为0000Pa,表示系统刚开始运行,会首先执行init()函数;在A/D转换过程中数码管显示XXXX(Pa),“XXXX”表示数码管正在显示的水压值,因为是变化的值
展开阅读全文