当前位置:文档之家› 基于单片机的水位控制系统设计

基于单片机的水位控制系统设计

单片机原理及系统课程设计专业:自动化班级:自动化1201姓名: 王文玉学号:201209005指导教师:苟军年兰州交通大学自动化与电气工程学院2014年12月12日基于单片机的水位控制系统设计1 引言单片机课程的学习,不仅要在课本上学到知识,更要在实际中得到锻炼。

我认为要学好单片机这门课程,更重要的是要学会通过实践巩固学到的知识,只有把学到的知识通过实践不断体会理解,才能更好的掌握这门课程。

本次课程设计我选择制作的题目是基于单片机的水位控制系统的设计,在此次课程设计中主要以水塔供水为例,进行设计介绍。

该系统能实现水位检测、电机故障检测、处理和报警等功能,实现超高、低警戒水位报警,超高警戒水位处理。

介绍电路接口原理图,给出相应的软件设计流程图和C语言程序,并用Proteus软件仿真。

1.1 设计背景水位控制系统是现今生活和工业一种比较实用的系统,其应用范围广泛,主要涉及水塔、水库和锅炉水位的控制等领域。

以水塔供水为例,供水的主要问题是塔内水位应始终保持在一定范围,避免“空塔”、“溢塔”现象发生。

目前,控制水塔水位方法较多,其中较为常用的是由单片机控制实现自动运行,使水塔内水位保持恒定,以保证连续正常地供水。

实际供水过程中要确保水位在允许的范围内浮动,应采用电压控制水位,通过实时检测电压,测量水位变化,从而控制电动机工作状态,保证水位在正常范围内。

2 设计方案及原理2.1通过水位变化上下限的控制方式这种控制方式通过在水塔的不同高度固定不动的3根金属棒ABC,以感知水位的变化情况。

A棒接+5V电源,B棒﹑C棒各通过一个电阻与地相连。

利用51单片机为控制核心,设计成一个对供水箱水位能自动进行检测控制的系统。

如果水塔水位处于警界低水位状态时,启动水泵,水泵开始正转,开始向水塔供水;如果水塔水位处于正常水位状态时,水泵停止工作,水泵停转;如果水塔水位处于警界高水位状态时,启动水泵,水泵开始反转,开始从水塔排水;供水系统出现故障时,自动报警;故障解除时,水泵恢复正常工作。

2.2水塔水位控制原理在水塔内的不同高度处,安装固定不变的3根金属棒A、B、C,用以反映水位变化的情况。

其中,A棒在下限水位,B棒在上、下限水位之间,C棒在上限水位。

水塔由电机带动水泵供水,单片机控制电机转动,随着供水,水位不断上升,当水位上升到上限水位时,由于水的导电作用,使B、C棒均与+5 V连通。

因此b、c两端的电压都为+5 V即为“1”状态.此时应停止电机和水泵工作,不再向水塔注水;水位处于上、下限之间时,B棒和A棒导通,而C棒不能与A棒导通,b 端为“1”状态,c端为“0”状态。

此时电机带动水泵给水塔注水,使水位上升;当水位处于下限位置以下时,B、C棒均不能与A棒接通,b、c均为“0”状态,此时应启动电机转动,带动水泵给水塔注水。

设计原理图如1所示。

图1 水塔水位控制原理图3电路设计水塔水位控制系统主要由CPU(AT89C51)、水位检测接口电路、报警接口电路、存储器扩展接口电路、复位电路、时钟振荡等部分组成。

设计中所用到的原件有排阻、AT89C51、L298、数码管、直流电机、LED灯。

电路框图如图2所示。

图2 水塔水位控制系统结构框3.1主要芯片的介绍AT89C51:89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM —Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。

L298:L298是SGS公司的产品,比较常见的是15个脚Multiwatt的L298N,内部同样包含4通道逻辑驱动电路,可以方便的驱动两个直流电机,或一个两相步进电机,是一款电机驱动芯片。

3.2水位检测接口电路为了便于实现水位检测功能,用一个两位的拨码开关模拟b、c端的状态(1、0),正电极接+5 V电源,每个负电极分别通过4.7 kΩ的电阻接地。

将单片机的端口接开关开。

假设被水淹没的负电极都为高电平,此时开关置合;露在水面的负电极都为低电平,开关此时置为0。

单片机通过负电极重复采集检测水位,当缺水时(此时两个开关均置0),电机必须带动水泵抽水;若水位在正常范围内时,检测信号为高,低电平;当水位过高时,检测信号为高电平单片机检测到端口为高电平后,电机反转带动水泵排水。

即可检测到水位的变化。

3.3报警接口电路为了避免系统发生故障时,水位失去控制造成严重后果,在超出、低于警戒界水位时,报警信号从高、低警界水位电极获得,通过51单片机控制进行报警,警示水位在非正常水位。

单片机通过给控制电机的两个控制端口高低电平从而控制电机的正转、停转和反转,控制电机工作;两端口都为高电平,电机停止工作,两端口为一高一低两种不同电平时,电机开始正转或反转。

电机故障报警由单片机控制,电机故障报警信号由显示器显示。

水位超过高警戒水位,单片机控制系统使电机反转,从水塔内开始抽水,直至水位降至正常水位,电机才能停止工作,即可根据水位的显示发出警报。

4系统软件设计4.1流程图水塔水位控制程序流程图如图3所示图3 水塔水位控制程序流程图4.2实验源程序实验源程序如附录。

5实验仿真结果根据所设计系统的软件流程图,编写相应的程序在Proteus软件环境下实际仿真。

实验结果表明,该系统能成功实现了水位检测、电机故障检测、处理和报警等功能,具有良好的检测控制功能,可移植性和扩展性强。

实验仿真图如图4所示。

图4 实验仿真图总结该系统设计是基于在单片机嵌入式系统而设计的,充分利用单片机强大控制功能和方便通信接口,该检测控制系统在实验室某实验水冷却系统得到成功实践,实现水位检测、电机故障检测、处理和报警等功能,提高了实验的自动控制能力。

因此,该系统在农村水塔,城市水源检测控制等领域有着广阔的应用前景。

参考文献[1] 陈海宴.51单片机原理及其应用[M].北京:北京航空航天大学出版社,2010.3[2] 何希才.传感器及其应用实例[M].北京:机械工业出版社,2004.9[3] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,2007.6[4] 童诗白.数字电子技术[M].北京:高等教育出版社,2001.6[5] 王思明.单片机原理及应用[M].北京:科学出版社,2012.9附录实验源程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit motor1=P2^6;sbit motor2=P2^7;//定义两个电机控制位sbit LED=P2^0;//定义电机工作指示灯控制位sbit beep=P3^6;//定义蜂鸣器发生控制位sbit gao=P3^0;sbit zhong=P3^1;sbit di=P3^2;//定义高中低三个水位指示灯的相应控制位code uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};void delay (uint n){uchar a,b;for(a=n;a>0;a--)for(b=110;b>0;b--);}void didi(){beep=0;//蜂鸣器发声delay(100);beep=1;//蜂鸣器停止发声delay(100);}void LED_SHOW(){if(P1==0xff){zhong=1;di=1;P0=tab[8];//数码管显示水位为8,为高水位didi();//低水位报警LED=0;//电机工作指示灯亮gao=0;//点亮高水位指示灯motor1=1;motor2=0;//电机开始反转,从水塔排水}if(P1==0xfe){zhong=1;di=1;P0=tab[7];//数码管显示水位为7,为高水位LED=0;gao=0;motor1=1;motor2=0;}if(P1==0xfc){gao=1;di=1;P0=tab[6];//数码管显示水位为6,为正常水位LED=1;//电机工作指示灯熄灭zhong=0;//点亮中水位指示灯motor1=0;motor2=0;//电机停转}if(P1==0xf8){gao=1;di=1;P0=tab[5];//数码管显示水位为5,为正常水位LED=1;zhong=0;motor1=0;motor2=0;}if(P1==0xfc0){gao=1;di=1;P0=tab[4];//数码管显示水位为4,为正常水位LED=1;zhong=0;motor1=0;motor2=0;}if(P1==0xe0){gao=1;di=1;P0=tab[3];//数码管显示水位为3,为正常水位LED=1;zhong=0;motor1=0;单片机原理及系统课程设计报告motor2=0;}if(P1==0x80){gao=1;zhong=1;P0=tab[2];//数码管显示水位为2,为低水位LED=0;di=0;motor1=0;motor2=1;}if(P1==0x00){gao=1;zhong=1;P0=tab[1];//数码管显示水位为1,为低水位didi();//低水位报警LED=0;//电机工作指示灯亮di=0;//点亮高水位指示灯motor1=0;motor2=1;//电机开始正转,向水塔加水}}void main(){P0=0;while(1){LED_SHOW();}}10。

相关主题