找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10450|回复: 0
收起左侧

基于单片机的液位控制系统设计与实现论文

[复制链接]
ID:273739 发表于 2018-1-9 14:10 | 显示全部楼层 |阅读模式
XX学院
单片机系统设计三级项目
设计说明书
(2011/2012学年第二学期)
      题    目 :基于单片机的水位检测报警系统_
专业班级 :   XXXXXXXX            
学生姓名 :       XXX XX         
学    号:      XXXXX            
指导教师 :XXXXXXXXXXXXXXXXXXX     
           XXXXXXXXXXXXXXXXXX      
设计周数 :    XXXXXXXXX           
设计成绩 :                     
           XXXX年XX月XX日
XX学院
单片机系统设计  三级项目任务书
一、题目: 基于单片机基于单片机的水位检测报警系统设计与实现  
二、参与项目班级:            XXXXXXXXXXXXXX                 
三、项目起止时间:         XXXXXXXXXXXXXXXXXXXXX               
四、原始数据及主要任务:
    原始数据:水位传感器;51单片机;扬声器。
主要任务:⑴根据技术要求和现有开发环境,分析设计题目;⑵设计系统实现的方案;⑶设计并绘制电路原理图;⑷画出功能模块的程序流程图;⑸使用汇编语言(或C语言)编写实现程序;⑹结合硬件调试、修改并完善程序;⑺编写项目报告。
五、技术要求:
⑴利用单片机及扬声器、水位传感器等器件设计;
⑵将探测到的水位变化信号转换为电压信号,经调理电路整形处理为TTL电平送入单片机;
⑶单片机对送入的信号进行数据处理,在LED或LCD上进行水位显示,超出水位警戒线时发出报警提示。
学    生(签字):                         系 主 任(签字):              
指导教师(签字):                         院 长 (签字):               
目录
1.项目设计要求与任务        3
2.项目设计正文        3
    2.1 课题背景及研究意义分析        3
    2.2 课题现状        4
    2.3 设计思路及方案        4
        2.3.1 水位传感方式的选择        4
        2.3.2 水位传感器的特点及应用        5
    2.4系统的组成        6
        2.4.1系统工作原理        6
        2.4.2稳压电路        6
        2.4.3水位显示电路        7
        2.4.4振荡电路和复位电路        8
        2.4.5自动报警电路        8
3.水位检测系统的整体电路仿真图        9
3.1硬件连接实物图        9
4. 各种水位下的仿真图        10
    4.1 高水位状态下仿真图        10
4.2 低水位状态下仿真图        10
5. 通信单元硬件设计        11
6.上位机显示单元        11
6.1上位机接受部分窗体控件        12
7. 项目设计总结        14
8. 参考文献        15
附录1        16
1设计要求与任务
设计要求:⑴利用单片机及扬声器、水位传感器等器件设计;⑵将探测到的水位变化信号转换为电压信号,经调理电路整形处理为TTL电平送入单片机;⑶单片机对送入的信号进行数据处理,在LED或LCD上进行水位显示,超出水位警戒线时发出报警提示。
原始数据:水位传感器;51单片机;扬声器。
主要任务:⑴根据技术要求和现有开发环境,分析设计题目;⑵设计系统实现的方案;⑶设计并绘制电路原理图;⑷画出功能模块的程序流程图;⑸使用汇编语言(或C语言)编写实现程序;⑹结合硬件调试、修改并完善程序;⑺编写项目报告。
2  项目设计正文
2.1 课题背景及研究意义分析:
在工农业生产中,常常需要测量液体液位。随着国家工业的迅速发展,液位测量技术被广泛应用到石油、化工、医药、食品等各行各业中。低温液体(液氧、液氮、液氩、液化天然气及液体二氧化碳等)得到广泛的应用,作为贮存低温液体的容器要保证能承受其载荷;在发电厂、炼钢厂中,保持正常的锅炉汽包水位、除氧器水位、汽轮机凝气器水位、高、低压加热器水位等,是设备安全运行的保证;在教学与科学研究中,也经常碰到需要进行液位控制的实验装置。
本设计是利用STC89C52单片机设计一种水位控制系统。主要是基于单片机的硬件设计以及程序设计, 包括测量电路部分、键盘输入控制部分、液位实时数显输出部分以及液位控制部分,还在此基础上添加报警器。本设计只是概念性设计了电路部分,并不涉及具体的数值设定,经过了实际应用检测。
该系统实现了水位监测,水位控制,水位显示,故障报警功能。在设计中主要采用了传感技术、单片机技术、弱电控制强电技术、C语言编程等技术。本文还讲述了水位控制系统工作的基本原理,介绍了电路接口原理图,给出了相应了设计流程图和C语言程序。
本文主要是为了更多得了解单片机,掌握单片机的组成部分和控制原理,最终达到设计出“单片机水位控制系统的”的目的。实验证明,单片机控制的水位控制系统的硬件电路简单,软件功能完善,控制系统可靠,充分发挥了单片机的性能,可以大大的提高单片机的开发效率。
2.2  课题现状
目前,市面上进行液位测量的仪表种类繁多,但是同时具有测量、监控、数据记录及处理的液位测量装置并不多。在某些工业控制系统中,数据的测量这一基本功能已不能满足现代工业的要求,往往需要对大批数据进行记录,对其进行后期处理分析,实现差错控制、工艺改善、资源优化等一系列工作。为了获得大批量的数据,得到可靠的分析资料,往往需要长期、多网点的监控记录。在液位测量这一领域中,如江河湖海、城市用水等方面,大量数据长时间,多网点的采集记录分析具有普遍的意义。液位的变化分析,有助于人们进一步对自然环境、天气变化甚至是灾害预警提供可靠的支持。
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随即存储器RAM,只读存储器ROM、多种I/O口和中断系统、定时器、计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。
中央处理器CPU是单片微型计算机指挥、执行中心,由它读程序并执行指令。CPU功能,是以不同方式来执行各种指令。有的指令涉及到各个寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件的关系;有的则与外部器件发生关系。总的来说CPU是通过复杂的时序电路来完成不同的指令功能的。
对于本设计单片机结构简单实用性强,功能齐全,技术先进,使实现这设计不难实现。同时,C语言是单片机的重要“组成”,如果能掌握好C语言编程,这将很大程度上提高了开发效率。
在设计过程中我们采用了软硬件双结合的方式,软件设计的方法简化了硬件的要求,为设计创造了条件。单片机采用的STC89C52的单片机。
2.3 设计思路及方案
2.3.1水位传感方式的选择
简单的控制方式有浮标式、电极式等,这些控制方式的优点是结构简单,成本低廉。但有很多问题存在,比如是精度不高,不能进行数值显示,另外很容易引起误查,且只能单独控制,与计算机进行通信连接比较难实现,很难快速准确传输信号,所以不利于水位信号的传送。
2.3.2水位传感器的特点及应用
水位浮球开关特点:1小型浮球液位开关是一种结构简单,使用方便的液位控制零件,它设有复杂的电路,不会受到干扰,只要材质选择正确,任何性质液体、压力、温度皆可使用。液体介质性质与浮球关系:2液体比重不同时,浮球的动作位置将会有所变动,一般SG比水小时,浮球浸在液体中部分将相对增多。3浮球开关产品参考比重以水(SG=1)所以使用时在选用浮球时须考虑液位的比重SG,一定大于浮球规格所标示,否则,浮球开关无法浮动。4粘度高不会干涸的液体,一般应选用外径较大的不锈钢浮球。5浮球开关是使用磁铁来感应磁簧开关,因此被测液位应无铁屑,否则铁屑粘在浮球上面浮球浮不起来会影响浮球队开关的动作。用途:不锈钢浮球液位开关专门用于各种中小型常压和受压储液罐的液位检测、信号远传、开关报警,可适用于各种卫生、环保、有毒、带浓酸碱腐蚀性强介液体使用。
     
图1 水位浮球式传感器及工作原理
浮子开关是利用开关上面磁性浮子随液位升或降,使开关检测管内设定位置的干簧管芯片动作,发出接点开(关)转换信号。
动作原理:在密闭的非导磁性管内安装有一个或多个干簧管,然后将此管穿过一个或多个中空且内部有环形磁铁的浮球,液体的上升或下降将带动浮球一起上下移动,从而使该非导磁性管内的干簧管产生吸合或断开的动作,从而输出一个开关信号,也叫做无源触点信号。
应用范围:
我们常见的浮子开关一般水箱里面控制水位,用水箱高液位或者低液位报警作用。还可以用在饮水机、空调、加湿器、雾化器、空压机、净水器、水箱、热水炉、水池、油箱、油罐、压力罐、一些有酸碱液体的大小型设备。
适用范围广、安装形式多样侧装、直装、顶部和底部安装、螺纹法兰安装达到多点液位报警效果。 
无源器件,性能稳定可靠,安全方便,抗干扰能力强,结构简单,安装方便,维护费用低。
2.4系统的组成
水位控制系统由电源电路、水位探测传感电路、稳压电路、继电器控制电机加水电路、水位显示电路、单片机STC89C52组成。系统组成的方框图如下:
图2 系统组成方框图
2.4.1系统工作原理
当水箱里的水位在低水位的时候传感器传给稳压电路一个低电平,低电平通过稳压电路里的NPN三极管、电容、电阻转换成高电平。单片机收到高电平,表示水箱里没有水了需要系统开始运作,给水箱加水,这时单片机通知红灯缓慢闪烁,蜂鸣器报警。水位达到高水位时传感器同时传送给单片机一个低电平,红灯闪烁频率加快,蜂鸣器报警频率加快。
同理,水位从高水位下降时,水位离开高水位线时,高水位传感器探头与电源断开,传感器输出高电平给单片机。当水位下降到蓄水位时,红灯闪烁变慢。2.4.2稳压电路
      
图3 稳压电路图
本电路的主要作用是使从传感器输入的电平能够稳定的输入到单片机中,,是由三极管9013、两个电阻、和一个无极性电容组成。
如果我们不使用此稳压电路也能实现我们的设计目的,但有时会产生水位误判和不稳定现象,所以我认为此电路是不可缺少的。
2.4.3水位显示电路
图4 水位显示电路图
本电路采用不不同颜色的LED作为显示装置,有单片机P2.0、P2.3口控制进行水位显示。红灯闪烁缓慢代表水位在低水位。红灯闪烁急促表示在高水位以上。
此电路采用的是共阳极的,所以只有单片机给发光二极管为低电平的时候才能是发光二极管点亮。R1, R4,为上拉电阻起限压控流作用。
LED(Light Emitting Diode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附着LED灯株在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长决定光的颜色,是由形成P-N结材料决定的。
2.4.4振荡电路和复位电路
图5 振荡电路和复位电路图
振荡电路和复位电路是单片机不可缺少的部分,是单片机的重要组成,它们集成在单片机里,对于单片机稳定工作有至关重要的作用。并且可以延长它的使用寿命。
2.4.5自动报警电路
下列二种情况发生系统报警:
1当水位达到上限极限水位时报警,水位到达上限极限水位时系统发出报警;
2当水位达到下限极限水位时报警,水位到达下限极限水位时系统发出报警;
          图6 自动报警电路的接线图
3水位检测系统的整体电路仿真图
图7 水位控制系统仿真图
3.1实物图
图8 实物图
4 各种水位情况下的仿真图
4.1 高水位状态
加水水到达在蓄水位时:高水位警示灯红灯闪烁急促,蜂鸣器快频率鸣叫。仿真图如下所示:
图9高水位仿真图
4.2 低水位状态
水位减少到低水位时:低水位警示红灯闪烁,蜂鸣器低频率鸣叫。仿真图如下所示:
图10 低水位仿真图
5通信单元硬件设计
MAX485仅有8个管脚,电路设计比较简单。
RO引脚接到单片机串口接收引脚RXD(P3.0),DI引脚接到单片机串口发送引脚TXD(P3.1)。由于MAX485为半双工通信方式,不能同时发送和接收数据,只能通过控制RE和DE引脚的状态来进行发送数据和接收数据的转换。为了节省单片机I/O口资源,将RE和DE引脚连在一起,输入低电平时,MAX485处于接收状态;输入高电平时,其处于发送数据状态。定义RE和DE连接在一起的网络标号为E,接入单片机P1口,用于发送与接收的转换。A,B端为发送接收差分信号端,一般需在A,B端之间加匹配电阻,匹配电阻为120Ω。
硬件电路如图3-13:
图12 串行通信模块电路图
6上位机显示单元
上位机编程与下位机结合对应,下位机发“0”代表当前水位为高水位,下位机发“1” 代表当前水位为低水位。
水位变化当高水位发“0”时上位机接受到对应ASCII码为48,此时上位机显示“警戒!当前水位为高水位!”。
水位变化当高水位发“1”时上位机接受到对应ASCII码为49,此时上位机显示“警戒!当前水位太低!”。
图13 上位机程序代码
6.1上位机接受部分控件窗体
图14 水位检测报警系统窗体
7设计总结
通过这次项目设计,上位机和下位机的编程中我对软件开发有了进步的了解,把理论知识应用于实验中。也让我重新熟悉了C语言和C#语言的相关内容,加深了对C语言、C#语言知识的深化和用途的理解。在这次的项目设计过程中,我发现自己的基础知识和应用能力都很差。刚接过项目,按照设计步骤走的时候,在很多都卡住了,原理的知识忘记了很多,以至于在设计开始时必须得先复习一下相关的基础知识。
在老师和同学的帮助下我顺利的完成了这次项目设计,对于我来说,收获最大的是方法和能力;那些分析和解决问题的能力。在整个项目设计的过程中,我发现我们学生在经验方面十分缺乏,空有理论知识,没有理性的知识;有些东西可能与实际脱节。总体来说,我觉得像课程设计这种类型的作业对我们的帮助还是很大的,它需要我们将学过的相关知识系统地联系起来,从中暴露出自身的不足,以待改进!
本次的项目设计,培养了我们综合应用设计项目及其他项目的理论知识和理论联系实际,应用生产实际知识解决工程实际问题的能力;在设计的过程中还培养出了我们的团队精神,同学们共同协作,解决了许多个人无法解决的问题;在今后的学习过程中我们会更加努力和团结。
我决定认真总结这次项目设计的经验,以及学习到的知识,来更加的充实自己的头脑和完善自己的知识结构。另外,我也在这次设计中看到了自己的许多不足之处,通过项目设计,发现自己在理论研究和实际工作能力等方面都得到了提高,同时在老师的指导和课题组同学的共同帮助下,及时总结研究成果,这些无疑会对我今后的工作和学习带来很大的帮助。总之,这次的课程设计的顺利完成使我受益匪浅。
要做好一个项目的设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。
在这次的项目设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次项目设计的最大收获。
8 参考文献
[1]王祁. 智能仪器设计基础[M]. 北京:机械工业出版社,2009.
[2]张毅刚,彭喜元,董继成.单片机原理及应用[M].北京:高等教育出版社,2003.
[3]蔡黎.一种基于单片机的水位控制系统设计[J].仪器仪表用户,2007,14(4):44-45.
[4]李书旗,沈金荣.液位测量传感器系统的设计与实现[J].计算机测量与控制,2009,17(11):2131-2133.
[5]王洪君.单片机原理及应用[M]. 济南:山东大学出版社,2009
[6]阎石. 数字电子技术基础[M]. 北京:高等教育出版社,2006.
[7]刘得营,张志霞等.单片机原理及接口技术[M].中国水利水电出版社 2006.3-4
[8]刘刚 《单片机原理及应用》 中国林业出版社
评    语
   
成    绩
   
   
指导教师
(签字)
   
            年    月    日
附录1
上位机程序设计
水位检测报警系统C#语言程序如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace 水位检测报警系统上位机控制
{
    public partial class Form1 : Form
    {
        SerialPort port;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
           String[] PortNames = SerialPort.GetPortNames();
            comboBoxPort.Items.Clear();
            if (PortNames.Length > 0)
            {
                for (Int32 i = 0; i < PortNames.Length; i++)
                {
           comboBoxPort.Items.Add(PortNames);
                }
                comboBoxPort.SelectedIndex = 0;
                comboBoxBaudRate.SelectedIndex = 1;
                comboBoxData.SelectedIndex = 0;
                comboBoxStop.SelectedIndex = 1;
            }
            else
            {comboBoxPort.Text = "无串口"; }
            btnClosePort.Enabled = false;
        }
        public delegate void showInfo(string str);
        byte[] cmd = new byte[2];
        Thread t;
        private void btnOpenPort_Click(object sender, EventArgs e)
        {
            port = new SerialPort();
            port.PortName = comboBoxPort.SelectedItem.ToString();
            port.BaudRate = Convert.ToInt32(comboBoxBaudRate.SelectedItem);
            port.Parity = Parity.None;
            port.DataBits = Convert.ToInt16(comboBoxData.SelectedItem);
            port.StopBits = StopBits.One;
            if (port.IsOpen == false)
            {
                try
                {
                    port.Open();
                    t = new Thread(new ThreadStart(RecieveData));
                    t.Start();
                    listBox1.Items.Add("串口打开成功!");
                    btnClosePort.Enabled = true;
                    btnOpenPort.Enabled = false;
                    comboBoxBaudRate.Enabled = false;
                    comboBoxData.Enabled = false;
                    comboBoxPort.Enabled = false;
                    comboBoxStop.Enabled = false;
                }
                catch {
                    listBox1.Items.Add("串口打开失败");
                }
            }
        }
        private void RecieveData()
        {
            while (true)
            {
                int str;
                float st;
                string info;
                str = port.ReadByte();
                switch (str)
                {
                    case 48:
                        info = "警戒!当前水位为高水位!";
                        break;
                    case 49:
                        info = "警戒!当前水位太低!";
                        break;
                    default:
                        info = "接收数据失败,无法知道当前水位!";
                        break;
                }
                showinfo(info);
            }
        }
        public void showinfo(string str)
        {
            if (listBox1.InvokeRequired)
            {
                showInfo d = new showInfo(showinfo);
                listBox1.Invoke(d, str);
            }
            else
            {
                listBox1.Items.Add(str);
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
            }
        }
        private void btnClosePort_Click(object sender, EventArgs e)
        {
            if(t.IsAlive)
            {
                t.Abort();                     
            }
            try
            {
                port.Close();
                listBox1.Items.Add("串口关闭成功!");
                btnOpenPort.Enabled = true;
                comboBoxBaudRate.Enabled = true;
                comboBoxData.Enabled = true;
                comboBoxPort.Enabled = true;
                comboBoxStop.Enabled = true;
                btnClosePort.Enabled = false;
            }
            catch {
                listBox1.Items.Add("串口关闭失败!");
            }
        }
        private void btnOpen_Click(object sender, EventArgs e)
        {
        }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
        private void comboBoxStop_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (t.IsAlive)
            {
                t.Abort();
            }
            try
            {
                port.Close();
                listBox1.Items.Add("串口关闭成功!");
            }
            catch
            {
                listBox1.Items.Add("串口关闭失败!");
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }
        }
    }


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表