找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11344|回复: 1
打印 上一主题 下一主题
收起左侧

基于单片机的风速风向毕业设计论文

[复制链接]
跳转到指定楼层
楼主
本科生毕业设计
(申请学士学位)

论文题目风速风向数据采集实验
装置的设计

作者姓名 刘江

所学专业名称  自动化

指导教师  吕承启

   月  

学       生:                  (签字)
学       号:
答 辩 日 期:      年   月   日
指 导 教 师:                  (签字)

目录
摘要
Abstract              2
1 绪论              3
     1.1 研究背景及意义              3
     1.2 研究内容              3
     1.3 国内外发展现状              4
2 系统整体方案设计              5
     2.1 系统问题分析              5
     2.2 系统框架论证与比较              6
3 硬件设计              8
     3.1 电源的选择与设计              8
     3.2 单片机选型与设计              8
            3.2.1 AT89S52单片机简介              8
            3.2.2 AT89S52单片机引脚特性              9
     3.3 显示模块设计              11
     3.4 风速风向电路设计              12
            3.4.1 风速风向仪简介
            3.4.2 风速仪工作原理
            3.4.3 风向仪工作原理
            3.4.4 光电编码器原理图              13
4 软件设计              14
     4.1 风向检测软件设计              14
     4.2 风速检测软件设计              14
     4.3 主程序设计              15
5 系统测试与评价              17
     5.1 测试方法              17
     5.2 测试结果与分析              17
参考文献              19
致 谢
附 录

风速风向数据采集实验装置的设计

摘要:风速风向采集仪主要应用在一些动作单一,工作强度大或者环境比较严峻的场合,例如沙漠,军区等。通过自动控制技术达到对仪器的类人工控制,使得对区间的测量更加有效和便捷。本文结合自动控制技术和光电探测技术,设计了一款自动风速风向采集仪。通过多个传感器模块将风速风向跟核心控制器联接在一起,定义了自己的通信协议。我们可以通过风速传感器对风速进行精确测量。也可以通过风向传感器对风向进行精确检测。然后由核心控制器对其进行显示。同时考虑到工作现场的复杂性,为本系统设计了滤波部分,使得当有异常波动时,系统不会偏离正常状态,而只有系统检测到正常变化时,才允许显示。
系统整体包括核心控制部分,风速检测部分,风向检测部分以及显示部分。通过这几大模块的综合作用,我们的系统可以应对大部分的场景以及突发状况。本设计成本低廉,功耗较小同时功能丰富,具有相当的理论和实践指导。系统采用keil编译软件进行代码的编写,使用protues进行软件仿真,整体效果稳定。



1 绪论
1.1 研究背景及意义
随着人工智能技术的不断提高,传统的探测技术已经无法满足社会的需求。虽然我们的生活条件相比以前有了很大的改善。物质生活发生了翻天覆地的变化。人类对自己生存环境已经具有了相当的改造能力。但是我们仍然生存在一个不方面的地球上。我们的计算机技术已经有了很大的提高,但是在一些传统行业中,仍然使用较为原始的探测技术。这些测量技术在过去的生产生活中占有很大的比重,应用范围也十分广泛。但是随着我们对科学技术的不断发展,对这些技术的依赖性已经开始呈现出一种降低趋势。而如何将传统测量理论结合现代科学技术,已经成为了当今的发展趋势。
风作为一种大自然的馈赠,可以给人类提供丰富的生产动力。近年来随着人们对环境友好型社会建设理念的不断加强,我们已经将能源发展的目光从石油,煤炭等化石材料转移向了风能,太阳能等这些纯净的能源。由于这些能源无污染,成本低的特点,人类已经研制出了一大批可以收集这些能源的设备。虽然这一趋势是科学发展所必然的结果。但是目前来看,这些研究领域仍然处于初级阶段。相比于传统的燃煤,燃油技术,这些新兴的技术仍然存在效率低的缺点。如何加强这些能源的转化效率已经成了一些工程师们着重研究的领域。将传统理论结合计算机等技术似乎成为了一块不错的敲门砖。  
虽然智能化技术在我们生活中已经普及开来,但是这些技术主要是一些弱智能技术,我们确实已经进入了弱智能时代,但是对智能技术的追求我们从没放慢过自己的脚步,各国也将发展的重头戏放在了相关产业链上,比如物联网就是我们正在大力发展的技术。我国每年对相关IT人员尤其是嵌入式开发人员的需求也是年年供不应求。各国之间的角力将会发生在这些领域之中。因此,我们自动风速风向采集仪不管是在民用领域还是在军事领域都具有相当的潜力以及未来,对我国人员安全以及科研都有十分重大的推动作用。
1.2 研究内容
我们结合社会需求与现有理论,在实际可行的基础上进行了本次课题设计。在经过充分的研究与讨论之后,我们完成了对本系统的电路设计。代码编写与实验仿真。在整个项目期间,我们先对需要用到的各个模块进行了充分调研与设计。在硬件电路方面,我们对转压模块,驱动模块,控制模块,风速风向检测模块进行了设计与仿真,在protues仿真与理论切合的基础上,我们进行了实际的电路制作。对于软件部分,我们对单片机进行了深入的学习,包括用到的中断系统,轮询部分,A/D转换与pwm部分进行了重点学习。经过系统的学习之后,我们对软硬件进行了综合。在确保原理正确的基础上,我们不断对软硬件进行联调。最终,我们的设计成功地实现了设计要求,并有了一定的相关扩展,可以在此基础上进行二次研发。

1.3 国内外发展现状
人工智能技术被视为未来科技领域,尤其是嵌入式行业的重点发展方向。随着物联网的兴起,人工智能也逐渐被人们拨开了迷雾,人们开始越来越关注这一领域的发展。从“小米之家”的兴起到智能家居的广泛应用,我们已经开始进入了一个智能化的时代。说到科技领域的发展,走在前沿的国家主要有美国,日本,韩国以及中国。领导这一发展趋势的公司主要是美国的苹果,谷歌,日本的索尼,韩国的三星以及中国的华为,小米等科技公司。这些国家在智能化技术领域有着不可忽视的作用。
基于单片机的风速风向采集仪属于人工智能技术领域的一种。一直被各国视为发展的重头戏,各大公司也早早地进行了战略布局。从20世纪90年代以来,日本的机器人技术便一直领先于世界,无论是从娱乐家用型机器人还是工业型机器人,日本都完成了重大的战略布局,每年的机器人大会也主要在日本举行。而美国韩国则在便携式设备领域领先于世界,无论是苹果公司还是三星,都在科技领域占有举足轻重的地位。
我国在这一领域的发展起步也较早,早在2000年左右,我国便在物联网方面有了自己的认识,国家也大力培养这一方面的人才,在各大高校开设了各类IT专业,但即使如此,也远远跟不上国内外对这一领域人才的需求,去年在嵌入式方面的人才空缺仍然在几十万以上,相关专业人员的薪水也遥遥领先于其他行业。近几年国内比较热门的互联网之家,小米之家便是其中的典范。无论是从日常使用,还是工业级产业链,人工智能都将是未来必不可少的。而随着我们科技高度发展的同时,各类相关产业也如雨后春笋帮设立起来,智能风速风向采集仪以其高度智能化以及便利性,成为了民用以及军事领域必不可少的技术之一。


2 系统整体方案设计
2.1 系统问题分析
我们首先考虑本系统架构的问题。在研发初期,我们对别人的设计模型进行了实地研究,观看了一些视频,对该仪器的设计有了一些基本的理念。具体来说,我们开发本系统所具有的问题主要来源于三个方面:系统结构的设计,硬件电路焊接以及软件代码的编写。针对这些问题,我们进行了任务分配与阶段性安排。首先我们对系统的结构进行了剖析,认真讨论完成本系统需要哪些方面的知识,其次,在对风速风向采集有了充分的了解与认识后,我们开始制作该仪器的硬件框架,最后,完成上两步的设计之后,我们开始编写代码。总体来说,在我们对系统进行分割之后,系统的制作难度有了一定的降低,但还是有一些问题存在,比如说模块之间的贴合,软硬件的联调问题,这在我们的文章中会有相应讲述。
本系统开发的第一个问题是系统结构的设计。我们在拿到任务的时候,由于对风速风向采集的了解不深,也没有过相关的制作经验,所以在此进行了相当时间的纠结。最后,还是在班级里一位参加过竞赛的同学的帮助下,解决了这个问题。我们在经过认真剖析之后,将本系统划分为了三个层次,自顶向下进行安排。首先是控制层,这里涉及到人机的交互问题,主要是控制人员与系统之间指令的传输与数据的回馈问题。由于系统在遇到突发状况时,需要等待控制人员的控制指令,同时也会传递数据给控制人员进行分析,所以这一部分的设计至关重要,设计到我们系统将来的稳定性。其次,信息采集层。系统在运行过程中,需要采集一些数据进行风速风向的显示。系统这一层次的设计关系到风速仪各种功能的完成,对提高本设计性能有很大帮助。最后一个层次为显示层。系统在完成各方面的工作后,需要对风速风向进行显示,所以本部分主要负责信息的传达。系统层次划分如下:

        表2.1 系统层次划分

系统层次

在体系中的划分

功能剖析

控制层

顶层

提高系统稳定性

信息采集层

中层

完善系统功能

显示层

底层

显示信息


如上表所示,我们的系统划分成顶层,中层以及底层等三个层次,各层次也有其相应的功能划分。
在完成系统层次划分之后,我们需要考虑的第二个问题是硬件电路的设计。具体的设计方案在后续章节介绍,在这里我们重点讲解开发过程中所遇到的问题。在硬件制作上,由于以前没有进行过系统的练习,所以对电路焊接方面缺乏完善的技能。在本系统中,在电路制作上的困难主要体现在转压模块,风速风向转换模块,电源驱动模块,控制模块等。由于核心控制电路我们选择已经集成好的单片机,所以只需设计外围电路即可,最后进行各个模块的集成联调。其中,转压模块所遇到的问题在于复杂的电压要求,单片机需要5V供电,驱动模块需要12V供电。所以选择一款合适的转压芯片势在必行。电源驱动的问题主要在于选型。至于控制器件则相对简单,有现成的模块供我们使用。在完成了综合设计之后,我们对硬件的需求进行了综合分析,列出了我们所需的硬件模块。所需器件如下表所示:

      表2.2 器件选型

器件

价格(元)

功能

单片机一块

80

核心控制

LCD1602

10

显示

5号电池4节

20

供电

风速检测模块

700

检测风速

风向检测模块

600

检测风向

如上表所示为我们选择的器件类型,各个器件在淘宝均有销售。最后一部分是我们的软件功能分析。一个稳定的系统离不开完善的代码辅助。在本系统中,由于将系统架构分为了控制层,信息采集层以及显示层,所以代码也相应的分为自动控制层代码,信息采集层代码以及显示层代码。其中比较复杂的是信息采集层软件的设计。控制模块所需的软件主要是分析风速风向模块采集的数据以及控制显示屏的显示,我们在参考相关例程之后已经有了深入的了解。信息采集层我们主要是对风速风向进行定时采集,得出当前场景的风速风向的信息。而显示层则需要我们对各种数据进行显示。在后续章节中,我们会重点进行讲解

2.2 系统框架论证与比较
在设计前期,我们对可实现的方案进行了论证,基于风速风向采集仪的功能以及稳定性,我们进行了以下两方面的设想。
方案一,采用相关数字电路来完成本次设计。通过设计相关编码电路来完成系统的控制,通过核心控制电路和周边电路的综合作用,可以实现系统的设计。该方案实行难度大,效率低,周期长,成本较高。
方案二,采用基于单片机的核心控制,自主设计外围电路,包括风速风向采集电路,显示电路,转压电路等周边模块。通过对单片机进行编程,控制这些外围模块一起工作。在此方案中,我们所需要的只是用软件将这些传感器建进行通信,不管是在实现难度上还是在成本上都有很大程度的降低,并且对我们的编程能力也有很大的提高。
通过上述论证,我们采用了方案二来完成本次毕业设计,整体思路是采用单片机作为我们的控制核心,通过对单片机的编程,将周边传感器采集的数据进行分析与计算,并在自动控制模块的基础上,完成系统稳定可靠的运行。
系统整体框图如下图2.1所示:



图2.1 系统框图
由上述系统框图,我们分为了三大模块进行分工合作,在今后的叙述中,我们将对这几个模块进行分别叙述。

3 硬件设计
3.1 电源的选择与设计
电源是系统稳定工作的前提,由于任何非电量的控制都要转换为电量进行测量与控制,所以我们首先对电源进行设计。在本系统中,需要两种不同的电压,主要分为单片机供电电压(5V)与风速风向模块电压(12V),主要有以下两种方案:
方案一,采用两种电源供电。单片机及外围电路采用5V供电,外部模块采用12V供电,将两种电压完全隔离开,独立工作。此种方法的好处是设计简单,但是需要增加道闸负载。
方案二,采用单一电源供电。首先使用12V电压对外部模块供电,再有12V电压源引入转压芯片进行5V转压,给单片机及外围电路供电。此种方法设计较为复杂,但是可以减少系统的负载。
考虑到本次设计的主要目的为提高能力,增强自己的电路制作能力,也考虑到系统的灵敏性,我们选择了第二种方案,对系统进行单一供电。并且由于本次设计可能会进行反复地测试,我们决定采购可充电电池。
如下为电压转化模块:


图3.1 转压模块

在上图中,我们对12V和5V电压进行了转化,使得可以对风速风向模块和单片机分别供电。
3.2 单片机选型与设计
3.2.1 AT89S52单片机简介
52单片机是51系列单片机的一种。该款单片机芯片具有较低的工作电压,而性能通常比较高,单片机内部包含8k bytes的可以重复使用的Flash(即只读存储器)以及256 比特的随机存储器(RAM)。该MCU基于先进的存储技术和强大的计算能力。对上一代单片机进行了升级。但对传统的51单片机的指令也能够兼容。该芯片内置了通用的8位cpu以及Flash存储单元,因此该单片机的强大的运算能力和控制能力可以应用在广泛的场合中。
该单片机有40个引脚。32个外部双向输入/输出(I/O)端口。同时内含2个外中断口。3个16位的可以通过程序编程的定时器。两个全双工的串行口。2个读写引脚。可以通过常规编程方法进行控制。但不可以在线编程。该单片机通过将常用的MCU和Flash结合在了一起,尤其通过使用可重复擦写的Flash存储器,不仅在功耗上还是在效率上都具有相当的实用性。
该单片机的基本组成框图见图3.2.1。

           

图3.2.1 单片机组成框图
3.2.2 AT89S52单片机引脚特性
AT89S52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。主要功能特性:
兼容MCS51指令系统
· 8k可反复擦写(>1000次)Flash ROM
· 32个双向I/O口
· 256x8bit内部RAM
· 3个16位可以通过编程设置的定时器。
· 时钟频率0-24MHz
· 2个串行中断
· 可编程UART串行通道
· 2个外部中断源
· 共6个中断源
· 2个读写中断口线
· 3级加密位
· 低功耗空闲和掉电模式
· 软件设置睡眠和唤醒功能

                           

                                        图3.2.2 单片机引脚图
部分引脚说明:
(1)时钟电路引脚XTAL1 和XTAL2:
XTAL2(18 脚):可以外接晶体振荡器。可以构成内部系统的振荡电路,振荡器的振荡频率等于系统的固有频率。当需要外部时钟提供信号时,可以从该端口输入所需信号。在验证该部分是否处于正常状态时,可将示波器的输入引脚连接该端口,在示波器上观察系统的输出信号。
XTAL1(19 脚):同上述18脚连接方式相同。系统的内部时钟振荡器。如果使用内部时钟时,将该脚接地。若要使用外部时钟,则将时钟信号加到该引脚即可。
(2)控制信号引脚RST,ALE,PSEN 和EA:
复位引脚:复位信号输入端,高电平有效。该引脚为备用电源引脚,可以由外部电源进行供电。在该引脚上输入两个时钟周期的高电平,便完成了对MCU的复位。同时RST 端口具有另外一种功能,即当接入RST接口时,可以作为RAM 备用电源,以使系统在突然掉电时,在寄存器内的数据不会丢失,在系统复位之后仍可以继续运行。
ALE/PROG:地址锁存允许信号端。51单片机在正常上电之后,该引脚对外输出高电平,频率是振荡电驴振荡频率的1/6。MCU读取外部存储器。作为低8 位地址的锁存信号。该引脚会输出相应的信号。
单片在在不访问外部ROM时,该引脚则以内部振荡器1/6 的频率固定输出高电平信号,所以该引脚的输出信号可以用来给外部电路提供工作时钟。在验证单片机的性能时,可以示波器的输入端外界ALE引脚,观察示波器是否显示对应信号。当输出正常的信号时。芯片正常。
ALE 端的驱动能力较强,可以带动多个负载。
同时这个引脚可以作为单片机的地址输入端口。进行地址选择时,可以在此端口进行。
PSEN:输出使能信号。完成对相应功能的使能。该引脚外界存储器的使能端口,后续会有相应原理图展示。PSEN 端有效,即允许读出EPROM/ROM 中的指令码。PSEN 端同样可驱动8 个LS 型TTL 负载。
EA/Vpp(31 脚):该引脚是单片机的程序输入使能引脚。该引脚外接高电平时,MCU只在内部存储其中进行寻址,即只能执行内部命令。在地址选择器的值大于内部存储器时。单片机会自动去外部存储器中读取指令。即0x0FFF是内外存储器的区分点。当给该引脚接地时,MCU将脂肪纹外部程序存储器的内容,而忽略内部存储器的内容。对于无片内ROM 的8031 或8032,需外扩EPROM,此时必须将EA 引脚接地。
(3)输入/输出端口P0/P1/P2/P3:
P0口(P0.0~P0.7,39~32 脚):P0口是一个漏极开路的8 位准双向I/O口。该引脚的构成方式为漏极开路模式,一共可以对8个负载进行驱动。当P0用作输入引脚时,必须先向口锁存器(地址80H)写入0XFFFF,导致P0口引脚成为悬浮状态,成为了高阻态。该引脚作为输入端使用时,需要配置相应的寄存器。即先由该引脚进行写出,再进行读入。即具有双向的特性。
P1口(P1.0~P1.7,1~8 脚):P1口是一个带内部上拉电阻的8 位准双向I/O口。P1口每位能驱动4 个LS 型TTL 负载。当将P1端作为输入端使用时,同样应该向控制端写入控制信号,不同于P0,此时P1端自动进入上拉状态,显示高电平。
P2口(P2.0~P2.7,21~28 脚):P2口是一个带内部上拉电阻的8 位准双向I/O口。该引脚可以同时驱动四个负载。在访问片外寄存器时,它输出高地址。
P3口(P3.0~P3.7,10~17 脚):P3口是一个带内部上拉电阻的8 位准双向I/O口。如下:
P3.0:(RXD)串行数据接收。
P3.1:(RXD)串行数据发送。
P3.2:(INT0#)外部中断0输入。
P3.3:(INT1#)外部中断1输入。
P3.4:(T0)定时/计数器0的外部计数输入。
P3.5:(T1)定时/计数器1的外部计数输入。
P3.6:(WR#)对外部的数据存储器进行使能。
P3.7:(RD#)选择片外存储器。
3.3 显示模块设计
系统采用1602作为显示器件,可以较为清晰地显示我们需要的字符与数字,相比其他显示器件,具有功耗低,成本低的特点。液晶的命令操作脚是RS、RW、EN接在单片机的P1^1、P1^2、P1^3脚。显示屏的数据输入端应该分别接单片机的的P0口。在显示特定字符时,单片机通过这些引脚对显示内容进行控制。具体电路图如图下所示:
图3.3 显示模块原理图
3.4 风速风向电路设计
3.4.1 风速风向仪简介
风速仪用来检测风的速度,而风向仪可以测量风的方向。两者结合起来使用可以确定环境中风的特性。在对风的常规测量中,经常将这两者结合起来使用,以达到对环境中风的检测。在风速仪模块电路中,因为需要检测风的速度,所以通常包括一个风杯(三杯),该风杯在受到环境中风的作用时发生旋转,带动下级检测电路运动,下级检测电路根据风杯的运动即可检测到风的速度。为了在任何角度都能检测到风,所以经常采用三个风杯来组成检测模块。而风向仪用来测量环境中风的方向,所以在检测电路中包括一个由风向标组成的指示模块。风向仪在受到风的作用后受力旋转,但不同于风速计的不断旋转,风向仪会达到一个平衡状态,在平衡状态时,风向标指示的即为风当前的方向。
风速风向仪在检测到当前环境中的风速和风向后,将采集的数据传递给单片机,单片机对这些数据进行滤波处理,通常为求均值后,将这些信息显示在显示屏上,用户即可得到当前环境中风的特性。通常将风向以读数表示,而风速以等级或者m/s的形式展示。用户在得到这些信息后,便可以据此安排自己的生产生活,提高自己的作业水平。
3.4.2 风速仪工作原理
本系统采用的风速仪是基于光电编码器的原理工作的。光电编码器的传动轴与风杯连接在一起,在风的吹动下,编码器传动轴跟随转动,由此不停地产生出脉冲信号。外部电路检测到脉冲信号后,根据脉冲信号产生的频率,即可计算出风的速度。
在工作时,我们将光电编码器即风速仪的输出引脚连接至单片机的中断引脚处,配置单片机为上升沿触发中断。则由于风的转动,风速仪的引脚会源源不断地产生脉冲信号。这些脉冲信号传递给单片机后,单片机进入中断。由于风的速度不同,导致编码器脉冲信号的频率也不尽相同,所以单片机内部根据这些信号的频率,即可得到风速仪的转速。按照动量守恒原理,风的速度便可以得到。
3.4.3 风向仪工作原理
风速仪在工作工程中,三个风杯在风的作用下不断旋转,由此得到风的速度。而风向仪的工作原理与此不同。由于我们需要采集环境中风的方向,当环境中风的方向比较稳定时,风向仪的风标不会有大幅度的波动。
风向仪的核心元器件同样采用光电编码器。但是与风速仪不同的是,风速仪根据光电编码器脉冲产生的频率工作,而风向仪根据编码器转动方向的不同而工作。由于编码器在进行正转或者反转时,产生脉冲信号的电平不同。在正转时,编码器输出高电平,而反转时,输出低电平。由此根据编码器输出电平的正负,我们便可以得知风向标正转或者反转过的角度,经过初始定位,便得到了风的方向。
3.4.4 光电编码器原理图
光电编码器原理图如下所示:

                    

                             图3.4.4 光电编码器原理图

如上图所示为系统采用的光电编码器原理图。传感器通过外部转子的带动,产生不同频率,不同电平的脉冲。单片机根据脉冲频率得到转速,根据电平高低得到转角。便可以精确地测量风的转速和转向。


4 软件设计
4.1 风向检测软件设计
在进行风向检测时,我们设计系统中断来对风向进行检测。将风向仪的A相引脚接至单片机的INT0中断引脚,而将B相接至普通输入引脚。配置INT0为下降沿中断,即外部引脚产生下降沿时触发中断,程序进入中断服务函数进行处理。风向仪在正常工作时,A相产生中断,系统进入中断程序后判断B引脚的电平。若该引脚电平为低,则表示风向标反转,将其计数减一。而如果该引脚为高电平,则代表风向标正转,计数值加一。
光电编码器具有自己的转值,即旋转一周产生的脉冲个数。本系统采用的风向仪的转数为500.即风向标每转过一圈,产生五百个脉冲。所以风向标的角度为N/500*360度。在程序中设计计数值N的绝对值小于500,当大于500时,减去500。而当小于-500时,加上500即可。
该部分的软件流程图如下:


                              图4.1 风向检测流程图

4.2 风速检测软件设计
在进行风速的测量时,我们需要采集风速仪在一定时间内产生脉冲的个数。设计定时器T0作为定时器,定时时间为1s,即检测在1s内产生脉冲的个数,我们即可得到风速仪的转速。设计N1为脉冲计数个数,连接至中断引脚INT1。风速仪在进行工作时,不断有脉冲产生。当产生脉冲时,我们在中断程序中对计数值N进行加1操作。每当1s的定时到达时,对脉冲计数个数进行计算。由此我们得到了以脉冲个数表达的转速。即v=N1。每秒转过的度数为:N1/500*360。乘以风速仪的半径,即为风的速度。
风速检测部分流程图如下:





图4.2 风速检测流程图
由上图所示,我们刚开始先初始化定时器T0,以及中断引脚INT1。
初始化计数值N1为0.每当有脉冲产生时,计数值加1。
定时器的定时周期为1s。每当1s定时到达时,计算当前风速,并用显示屏进行显示。
4.3 主程序设计
系统的软件主要包括风速检测,风向检测,与数值显示。在上文中,我们讨论了风速和风向的检测部分的软件流程。
显示部分仅仅是对各个数值进行显示,比较简单,故在此不再赘述。
系统在工作时,处于等待状态,等待风向仪的中断或者风速仪的中断的脉冲到来,系统转去执行相应的处理函数。
在完成对各部分的处理之后,驱动显示屏显示对应的风速和风向。
整体流程采用顺序流程,原理也比较简单。整体流程图如下所示:





















         图4.3 整体流程图
如上所示系统的整体流程图,在程序中,主程序一直等待外部脉冲的到来。在有脉冲产生后,系统判断脉冲的来源,并转而去执行各自的处理程序。在完成处理后,驱动显示屏进行显示。

5 系统测试与评价
5.1 测试方法
所需仪器:测试仪器主要包括数字万用表,秒表,量角器,示波器,USB转TTL设备。
所需软件:keil编译软件,串口调试软件,protues仿真软件。
调试前准备工作:
数字万用表测量电压源(5V和12V)输出电压是否为标准电压,测量标准电阻是否标称(本文用到的电阻为1k,5k,10k和100k)。示波器检查风速仪和风向仪输出波形是否准确。用量角器检测风向仪的精准度是否足够。
测试步骤:
给各模块上电,用数字万用表检查各个模块是否处于正常工作电压。其中单片机,显示屏模块等标准电压应处于4~6V,检查电压源电压,防止发生泄露,电压源电压位于12V左右,误差不超过1V。
各模块检查无误,对各模块组装供电。用万用表检查各模块电压是否标准,LED指示是否正确。
打开单片机开关,让系统处于等待状态。首先对风速仪进行检测。
打开电源开关,模拟外界环境产生风源,检测风速仪的输出,测量10次,每次测试1分钟。
进而对风向仪进行检测。
让风从不同角度吹动风向标,观察显示屏显示的角度是否精确。测量5次,每次30s。
5.2 测试结果与分析
表5-1 风速仪检测状况(10次)

次数

理论(m/s)

实际(m/s)

1

5

4.5

2

10

9

3

15

14

4

20

19

5

15

15

6

13

13

7

12

12

8

10

10

9

5

4.7

   10

3

3


         表5-2 风向仪检测


理论

实际

第一次

10

11

第二次

50

49

第三次

100

103

第四次

150

145

第五次

200

202



误差分析:我们进行了两类的系统测试:验证系统风速仪状态的正确性和风向仪检测精准度。在速度检测准确性方面,我们可以达到百分之九十以上的准确性,这是由两方面因素决定的:代码健壮性以及编码器模块的稳定性。由于我们在代码中只是测试指令的数值,并没有进行大量的运算,所以其精准度会很高。
在风向检测方面,其误差出现的原因主要包括:编码器精度不够,风向波动较大,以及单片机定时器的误差。即使存在这些影响因素,我们的精准度也达到了百分之九十以上,已经足够面对日常使用了。


参考文献
[1] 何立民. 单片机应用系统设计. 北京:航天航空大学出版社,2002.22-33
[2] 李广弟. 单片机基础.北京:北京航空航天大学出版社,2001.1-3
[3] 何希才. 新型实用电子电路400例. 电子工业出版社,2000.7-9
[4] 赵负图. 传感器集成电路手册. 第一版,化学工业出版社,2004.12-14
[5] 陈伯时. 电力拖动自动控制系统. 第二版,北京:机械工业出版社,2000.15-19
[6] 张毅刚,彭喜元. 新编 MCS-51 单片机应用设计. 第一版,哈尔滨工业大学出版社,2003.1-9
[7] 邵贝贝. 单片机嵌入式应用的在线开发方法, 清华大学出版社,2004.12-19
[8] 杨宁,胡学军. 单片机与控制技术,北京航空航天大学出版社,2005.44-46
[9] 赵亮,侯国锐.单片机C语言编程与实例,人民邮电出版社,2003.43-48
[10] 黄开胜,金华民,蒋狄南. 韩国智能模型车技术方案分析,2006.33-39
[11] 胡汉才. 单片机原理及系统设计.北京:清华大学出版社,2003.13-15
[12] 李朝青. 单片机原理及接口技术.北京:北京航空航天大学出版社,2003.22-25
[13]《8051 单片机课程设计实训教材》陈明荧编著,北京:清华大学大学社,2005.16-18
[14]《单片机实训教程》张迎军,贡雪梅,北京:北京大学出版社,2005.34-35
[15]《单片机应用实训教程》袁启昌,王宏宇,北京:科学出版社,2006 .46-49
[16] 胡汉才. 单片机原理及系统设计.北京:清华大学出版社,2003.55-56
[17] 李朝青. 单片机原理及接口技术.北京:北京航空航天大学出版社,2003.65-66
[18]黄家升. 基于IAP的单片机软件远程升级[J]. 舰船电子对抗, 2007,(03) 41-44 .
[19]杨美仙. 单片机的发展及其应用[J]. 科技信息(学术研究), 2007,(35) 26-28.
[20]陈寿元. 单片机多机通信网络改进及数据通信容错技术[J]. 山东师范大学学报(自然科学版), 2006,(02) . 23-28
[21]栗欣,周东辉,孙晓苗,李立. 单片机程序远程升级的设计[J]. 微计算机信息, 2006,(32) 33-35.
             致 谢
在我完成本科毕业设计的几个月时间里,我的指导老师吕承启在学习上给予了悉心的指导和极大的帮助,在生活上给予了无微不至的关怀与照顾。吕承启老师深厚的理论功底、严谨的治学态度、科学的思维方式,务实的工作作风令我收益非浅。值此论文完成之际,向吕承启老师致以最崇高的敬意和衷心的感谢。此外,同时还要感谢同实验室和同班的各位同学给我的无私的帮助,是他们使我在本科阶段的学习和生活充满乐趣,受益良多,在这里向他们表示由衷的感谢。最后要特别感谢我的父母,在我多年的求学生涯中,不断的支持和鼓励我,承受了各种的压力,付出了最真挚的爱。谨以此文献给所有关心我的老师、同学、朋友。
最后,向评阅本文的专家、教授致敬!


附录


单片机源程序如下:
  1. #include<reg52.h>
  2. #define  uchar  unsigned  char
  3. #define  uint   unsigned  int    //宏定义
  4. sbit lcdrs=              P1^0;
  5. sbit lcden=P1^1;            
  6. #define Da P2     //液晶1602数据口
  7. uint temp;    //保存检测到的电平数据以便比较      
  8. uint count;   //用于计数
  9. uint aa,bb;                //用于计数
  10. uint speed;   //用来计算转速
  11. void delay(uchar z);
  12. void time_init();                                          //定时器的初始化
  13. void write_com(uchar com);              //液晶写指令
  14. void write_data(uchar date); //液晶写数据
  15. void lcd_init();                                          //液晶初始化
  16. void display(uint rate);              //显赫速度
  17. void int0_init();                                          //定时器0初始化
  18. void main()
  19. {
  20.   time_init();                                          //定时器的初始化
  21.   lcd_init();                                          //液晶初始化
  22.   int0_init();                                          //外部中断初始化
  23.    while(1)
  24.    {
  25.   }
  26. }
  27. void time_init()
  28. {
  29.   TMOD=0x11;              //两个定时器都设定为工作方式1   十六位定时计数器
  30.   EA=1;                            //开启总中断

  31.   TH0=(65536-50000)/256;
  32.   TL0=(65536-50000)%256;   //定时初值
  33.   ET0=1;
  34.   TR0=1;       //开中断

  35. }
  36. void int0_init()   //加个防伪
  37. {
  38.    EX0=1;  //外部中断源可以申请中断
  39.    IT0=1;  //外部中断源下降沿触发
  40. }
  41. void  timer0()   interrupt 1 using 0
  42. {
  43.   TH0=(65536-50000)/256;
  44.   TL0=(65536-50000)%256;              //装载初值  50ms
  45. aa++;
  46.   if(aa==20)                                               //1s 时间内统计脉冲个数
  47.    {
  48.       aa=0;
  49.                 temp=count*10/16;                  //计算风速,每米转多少圈,每圈设定多少个脉冲进行计算
  50.                          //(若设定风速为1m/s时,叶片每秒转2圈,每圈给传感器8个脉冲,屏幕显示的值为count/16)
  51.                 count=0;                                                                         //重新开始计数脉冲数
  52.                 display(temp);                                          //把计算得的结果显示出来
  53.    }
  54.   }
  55. /*******外部中断*******************/
  56. void  service_int0()                interrupt                 0
  57. {
  58.                 count++;                 //来一个下降沿沿就计一个脉冲数
  59. }
  60. /*******显示函数***********/
  61. void display(uint rate)
  62. {
  63.    uchar wan,qian, bai,shi,ge;
  64.    wan=rate/10000;   //万转
  65.    qian=rate/1000%10; //
  66.    bai=rate/100%10;
  67.    shi=rate/10%10;
  68.    ge=rate%10;
  69.    write_com(0x80);
  70.    write_data('0'+wan);
  71.    write_data('0'+qian);
  72.    write_data('0'+bai);
  73.    write_data('0'+shi);
  74.    write_data('.');
  75.    write_data('0'+ge);
  76.    write_data('m');  //单位
  77.    write_data('/');
  78.    write_data('s');
  79. }
  80. /******延时函数********/
  81. void delay(uint z)
  82. {
  83.    uint x,y;
  84.    for(x=z;x>0;x--)
  85.       for(y=110;y>0;y--) ;
  86. }
  87. /************写指令************/
  88. void write_com(uchar com)
  89. {
  90.               lcdrs=0;
  91.               Da=com;
  92.               delay(1);
  93.               lcden=1;
  94.               delay(1);
  95.               lcden=0;
  96. }
  97. /************写数据**********/
  98. void write_data(uchar date)
  99. {
  100.               lcdrs=1;
  101. ……………………

  102. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整论文下载(word格式 可编辑):
03-(设计论文-自动化-2013211320-刘江)风速风向数据采集实验装置的设计(吕承启老师).doc (510.92 KB, 下载次数: 123)




评分

参与人数 1黑币 +5 收起 理由
拾浪. + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:327163 发表于 2018-5-10 21:20 | 只看该作者
为什么没有总图啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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