【《基于4G网络的远程无线通讯系统设计》16000字】_第1页
【《基于4G网络的远程无线通讯系统设计》16000字】_第2页
【《基于4G网络的远程无线通讯系统设计》16000字】_第3页
【《基于4G网络的远程无线通讯系统设计》16000字】_第4页
【《基于4G网络的远程无线通讯系统设计》16000字】_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

绪论1.1课题来源本课题来源于实验室自选题目。1.2课题研究目的及意义这几年来,随着无线通讯技术的快速发展以及大数据云监测技术的日益完善,信息化与自动化在各行各业中迅猛发展,各种领域内对远程智能监测通讯系统的需求与日俱增。各种利用物联网和大数据实现的远程监测、远程管理和健康诊断通讯系统,在医学、农业、工业等领域都取得了明显的社会效益和经济效益。如图1-1所示,一些便携式监测设备在目前可能无法进行长期供电,需要工人每隔一定的时间就前往更换一次电池,这种设备在工人无法经常进入的糟糕环境中,具有设备维护方面的问题;又如图1-2所示,是有线方式传输,这种方式布线多而且杂乱,并且其传输距离受到信号衰减幅度的限制,所以它并不是十分可靠,稳定性不够高;上述都是由单一传感器配备采集及软件的自成一体的独立系统。因此开发出一套远程智能监测通讯系统具有重要意义[1]。图SEQ图表\*ARABIC1-1便携式检测图1-2电梯的钢丝绳检测在人机交互及远程网络数据通讯方面,已有的近、远程监测通讯设备及系统难以实现人机交互界面的多样化及远程监测通讯系统模块的交互,限制了管理人员对监测设备的控制方式[2-3]。总的来讲,现有的钢丝绳检测设备都自成一体,自己为一套独立的系统,数据来源比较单一。随着智能化管理趋势的发展,需要把自成一体的独立单机设备相互连接起来,形成远程物联通讯,建立钢丝绳检测的远程无线通讯系统。为了克服上述传统方式使用场合有很大限制这一缺陷,本课题需要寻找一种用无线方式稳定传输监测数据的方法。本文针对上述系统中存在的问题,提出一种基于4G网络的远程无线监测通讯系统。1.3国内外研究现状1.3.14G技术研究现状4G通信技术也被称为第四代移动通信技术,第四代通信技术把3G技术和WLAN整合起来,能够实现各种类型数据的快速传输,比以往的通用家庭宽带快几十倍。我国的4G技术正式投入使用是在2011年,发展到现在的阶段,已经渐趋成熟。4G技术的优势主要体现在以下数个方面:首先,4G的数据传输速率很高,可以达到每秒一百兆比特,是3G技术数据传输速率的十多倍。其次,4G技术的抗干扰能力很高,可以有效防止噪声对通信造成的干扰。最后,4G技术的通信覆盖范围比较广泛,具有覆盖较多用户区域的能力。总的来讲,4G技术如今已经发展的比较成熟,本课题需要做的是将其与本课题的系统结合起来,构建一个功能完善的4G远程监测通讯系统。1.3.2远程监测通讯系统研究现状传统远程监测通讯系统的通讯方式可以分为两类,一是采用屏蔽双绞线或电缆的有线方式,这种方式大多采用RS232、RS485等串口进行通信;二是无线方式,这种方式包括建立自成一体的数据监测无线传输系统、借用他人的远程服务器等。传统远程无线监测的数据发送与接收,大多是是通过数传电台来完成的,数传电台自身具有传输距离短、使用方式复杂、运维费用高等缺陷,所以基于数传电台的无线监测通讯系统在工业领域里的应用范围受到了制约。在早期的工业生产领域里,生产过程分布范围不大,相距不远,上述的检测通讯系统在这样的场合比较经济实用[4-5]。但是随着工业领域的日趋进步,生产规模也在渐渐增长,各种设备增多,各个设备之间的距离变远,在这种情况下,有线设备的建造难度不断增加,应用场所受到限制。比如在石油、煤矿、电力等工业场所,若还是选择有线方式进行数据监测通讯,会导致技术成本和经济成本大大增加。目前的监测通讯系统方案主要分为两种:一是有线式监测系统,它基于TCP/IP网络;二是无线式监测系统,它基于3G技术或者4G技术。无线式系统相比于前者,虽然目前现有的产品功能开发的不够多,但是在产品成本、运维和市场前景等各种方面,有着很高的竞争力。随着3G和4G等技术的成熟,嵌入式无线监测通讯系统成为了新的热门研究方向。“远程无线监测通讯系统”正是利用了4G无线网络,可以实现对远程地点的综合监测与通讯。它稳定性好,成本也比较低,便于进行推广,有广阔的前景[6-7]。自从进入信息化时代以来,不同领域内的监测通讯系统基本呈现出三种发展趋势:普遍和智能云平台结合、监控终端轻量化[10]、基于大数据的数据分析。可以看出,各种监测通讯系统都在朝着智能化方向发展,呈现出多样化的趋势。各种不同系统的智能化、信息化水平显著增强。[10][18-20]图SEQFigure\*ARABIC1-3国内外各种远程监测系统应用场景如图2-1所示,近年来,国内外各种远程监测通讯系统层出不穷,迅猛发展。在很多环境监测和农业监测领域,使用了Zigbee协议将传感器群和前端设备进行连接,采集到的数据通过GPRS无线移动网发送到后端的监测中心,随时对被监测地点的各种环境因素进行探测并分析;还有些研究,将RTU、DTU、RS485、RS232等模块与GPRS结合起来,基于一个智能芯片,搭建嵌入式智能监测系统;还有些系统基于物联网(IoT)通信技术和区块链技术,构建远程实时监测系统。这些方法都有其优点和弊端,各自都是在特定的场合发挥最大的监测通讯作用,自成一体[8-16]。而且目前并未找到应用于钢丝绳监测的远程监测通讯系统。所以本文借鉴这些系统的优点和长处,提出一种基于4G网络的远程无线监测通讯系统,主要用于钢丝绳的远程监测通讯。该系统使用智能嵌入式系统作为前端,对监测得到的数据进行数据采集、综合评判和处理,直接通过4G网络上传相关数据到云端,云端再发送给用户PC端,即可实现检测数据及状态的实时无线传输;并且基于4G网络,将远程终端与监测现场的嵌入式系统建立连接,实现管理人员对设备的实时控制,建立双向远程通讯系统[17][21][23]。1.4论文主要内容基于现有的有线和无线式远程监测通讯系统以及一些便携式监测通讯系统,综合它们的优缺点,本文提出了一种新型的基于嵌入式系统的4G远程无线监测通讯系统。该系统包括硬件系统和软件部分,综合考虑到运算速度、性能、成本等因素,选择STM32作为整个系统的硬件核心,在开发中,运用层次化的思想,把软硬件分别模块化,进行模块化设计。本文主要从以下几个方面阐述:一、课题简介与描述本章为绪论部分,简单阐述了课题来源和课题的研究目的,介绍了目前的钢丝绳无线和有线监测系统的发展现状,介绍了其优点和缺陷,然后对全文的结构进行了简要的概括。二、总体方案设计第二章主要介绍整个系统的整体方案。采用层次化的设计方法,将整个系统分为硬件层、软件层、用户应用层。下面的章节就在此基础上进行一些展开阐述。三、硬件系统第三章介绍基于嵌入式的硬件系统设计。首先通过对硬件系统的结构层次化设计,介绍了硬件系统的整体框架大致可以分为三个组成部分,信号处理电路、数据采集电路、STM32核心电路。再对细分的各个硬件电路模块进行设计,包括MCU核心电路、电压转换电路、信号采集电路、信号处理电路、串口、4GDTU等模块。四、软件系统第四章介绍软件系统的设计。软件系统设计也是基于层次化的设计方法,对软件的整体结构功能进行了分析,大致分为嵌入式软件系统和GUI界面设计两大部分,然后划分各模块的功能任务,依据问题导向的方法,通过描述代码来深入介绍各个模块。主要包括主函数、自定义功能函数、数据采集函数、数据发送函数、GUI界面功能设计等。五、测试与总结展望第五章设计测试方案,对本文设计的嵌入式远程监测通讯系统进行功能测试,对测试的结果进行分析,总结已经实现的功能,分析整个系统有缺陷之处,反思有缺陷的原因,再思考并展望未来会如何进行改进,并给出下一步的优化方向。

2系统总体方案设计根据远程监测通讯系统的原理和功能要求,整个系统总共可以分为三个层次,分别为硬件层、软件层、用户应用层。如图2-1所示。最底层是硬件层,基于MCU核心模块,实现信号采集与信号处理功能,并实现与4G模块的连接;中间层为软件层,通过各个驱动程序实现对硬件层各种功能的控制;顶层为用户应用层,在PC上运行,对接收到的数据进行显示,并可通过简单的数据发送来控制硬件的启动或关闭。[25]图2-1总体系统框架硬件层围绕MCU,搭建最小系统,搭载一些硬件模块,包括AD转换模块、电压转换模块、信号处理模块、串口模块等。还有一些围绕MCU的核心电路模块。通过这些硬件模块来为整个系统提供嵌入式硬件基础,其中涉及到电路的搭建,芯片的选型等。这些电路模块都在AltiumDesigner环境里进行绘制。嵌入式软件层就是利用ARM官方提供的KeiluVision5(MDK)的开发环境,根据自己想要实现的功能,编写程序代码。包括一些固件库的移植,主程序的编写,各种自定义功能函数的编写。要实现的代码包括数据采集、数据处理、数据发送、定时器等各个模块的驱动程序。用户应用层是在QT5的编译环境下进行GUI的界面设计。此GUI界面需要在电脑上运行,电脑端通过串口连接到4G模块。需要实现的功能包括通过4G模块接收单片机发来的损伤数据,并将其显示在固定的区域内;还要实现字符串接收与16进制接收之间的转换;还需要能够通过4G模块给单片机发送控制数据,然后4G模块发送给单片机,实现用户对单片机的控制。总的来讲,其实就是自己实现一个简单的串口调试助手。

3嵌入式系统设计3.1硬件系统总体方案设计3.1.1MCU最小系统方案MCU,叫做微控制单元,也叫做单片机,是一种可编程集成电路。它把中央处理器与外部功能电路进行小型化的集成,用于各种设备的自动化控制。MCU根据指令结构又可分为CISC和RISC架构,而大多数MCU都采用RISC架构,其指令集较为简单,寄存器比较多,效率较高,运行速度较快。ARM处理器就是一种基于RISC架构的MCU,广泛用于嵌入式领域,由于其具有节能、低成本、高性能等各种优点,所以在各种自动控制领域具有非常重要的位置。[26][28]为满足远程监测通讯系统的总体性能要求,且在硬件方面能够支持A/D模块、JTAG、串口等外设,软件方面能够方便用户开发并实现各种功能,综合考虑后选择STM32F407ZGT6作为整个硬件系统的微控制单元。其系统结构如图3-1所示。图3-1STM32F407内部结构STM32F4系列是意法半导体(ST)公司推出的基于CortexM4内核的产品。相比于其之前基于CortexM3的STM32F1/F2系列,STM32F4系列的主频提高了很多,有168Mhz,所以其模数转换速度更快,定时器功能增加、IO口复用等功能增强,串口通信速度更快。[22]STM32F4的模数转换器在采集数据方面的能力很强。它具有12位的精度、转换速度能够达到一微秒,还有多个独立的控制器,这表明它可以对多个不同的模拟量同时进行高速采集。[22][27][31]。3.1.2电路系统总体结构方案基于STM32F407单片机,系统总体硬件电路大致可以分为三个组成部分,信号处理电路、数据采集电路、STM32核心电路。如图3-2所示。实验室现有的前端传感器为电感传感器和霍尔传感器,它们通过检测钢丝绳的漏磁信号对其损伤进行检测,测得的电压信号先通过信号处理电路进行放大和滤波,之后通过AD转换并进行信号采集,进入单片机进行数据处理,最后通过串口发送给4GDTU模块,此模块再远程传输到上位机进行显示。图3-2硬件系统总体方案3.2硬件核心电路基于STM32F407单片机的MCU最小系统电路主要包括:晶振电路、滤波电路、复位电路、JTAG电路等。如图3-3至3-7所示。图3-3复位电路图3-4STM32F407最小系统核心电路图3-5晶振电路图3-6部分滤波电路图3-7JTAG电路对STM32F407系列MCU进行复位的方式是低电平复位,即RST引脚处于低电平时,CPU会处在复位状态。如图3-3所示,本文设计的复位电路中,是通过按下按钮进行复位,C24与R13组成了一个较为简单的RC复位电路。RC复位电路的原理如下:单片机刚刚连接到电源的瞬间,电容两端的压差还未变化,仍然为零,此时CPU处于复位的状态;系统接电运行后,电源通过电阻R13给电容C24充电,当电容C24的充电量超过STM32的高电平阈值时,RST引脚变为高电平,CPU由复位状态启动,开始工作。当按键SW1被按下时,电容被短路,RST就接地并变为低电平,这样就实现了通过按键进行复位。此电路中,电阻R13的值和电容C24的值会影响RST的低电平持续时间,所以要合理选择它们的值,保证CPU复位所需的脉冲时间能够与RST低电平持续时间相匹配。[33]如图3-5所示,晶振电路是整个系统的关键,它为整个系统提供时钟信号,是CPU的“脉搏”,如同人的心跳一样。为了整个系统能够正常工作,电路采用了一个32.768kHz的低频晶振和一个8MHz的高频无源晶振。晶振两端与GND之间接的电容,是为了使其能够正常起振并工作在稳定状态。系统中大部分外设所用的时钟源都是8MHz的高频晶振,即高频晶振就是主时钟;而低频晶振为独立看门狗、自动唤醒单元、RTC时钟等提供时钟信号。[34]如图3-6所示,滤波电路是为了对电路的电源进行滤波,并同时起到去耦合的作用。因为外界电源在使用过程中可能会出现一些抖动,如果不进行滤波,这种抖动可能会导致单片机异常复位。所以滤波电路能够提高系统的稳定性和可靠性。如图3-7所示是JTAG接口电路。JTAG是一个国际标准协议,可以用于调试ARM类型的芯片。其接口电路主要为用户提供在线调试的功能。[35]用户在编程后,利用JTAG,可以将编写好的程序实时下载到开发板上进行在线调试,比起串口下载,速度更快,效率更高,可以缩短程序的开发时间。3.3电压转换模块设计在整个STM32F4嵌入式硬件控制系统中,采用的是外部电源进行供电,各个模块大多需要5V或3.3V直流电源进行供电。本文选择的电压转化芯片为AMS1117,并起到稳压的作用。因为AMS1117虽然在同类型产品中不是性能最好的,却是比较稳定的,并且它价格便宜,管脚定义比较简单,对于本系统来说是比较理想的芯片。电路设计如图3-8所示。图3-8AMS1117稳压电路AMS1117是一个低漏失压调整器,是一个三端线性稳压电路,它有多种固定电压版本,也有可调输出版本。其固定电压版本外围电路的搭建比较简单,输入部分和输出部分各连接两个电容就可以工作。而芯片内部,有各种模块,包括启动模块、电压基准源模块、偏置模块、驱动模块以及各种保护模块等。其最简单的封装以及引脚定义如图3-9及表3-1所示。图3-9AMS1117引脚图表3-1AMS1117引脚定义引脚名称引脚标号引脚定义ADJ/GND1可调端/接地端VOUT2电压输出VIN3电压输入3.4信号处理模块设计实验室现有的前端传感器为电感传感器和霍尔传感器,它们通过检测钢丝绳的漏磁信号对其损伤进行检测,最后产生的电压信号比较微弱,是低频的小信号,而且还很容易被外界其他无用信号干扰。[35]所以不能对其进行直接采集,需要先对其进行放大。另外,信号采集过程中,外界环境还可能存在一些噪声干扰,这些干扰信号大多都是高频信号,若不进行处理,很容易就会造成测得的缺陷信号失真。所以为了提高所得信号的信噪比,需要对传感器测得的信号进行低通滤波处理,尽量滤除那些高频的无用信息和噪声。[29]图3-10信号处理电路如图3-10所示为信号处理电路原理图。传感器测得的某一路电压信号通过CH1端进入两个级联的运算放大器进行放大并滤波。因为共有16路电压信号,所以如图2-11所示的电路在实际使用中共有16个,它们对16路电压信号进行滤波。两级放大电路中,第一级对信号进行放大处理,其放大倍数为A1=R1/R3=100;第二级除了有相同倍数的放大功能以外,还是一个带通滤波器,它的下截至频率为fL=1/(2πR4C4)=15.9Hz,上截止频率为fH=159Hz。一、二级之间有一个10uF的电容,作用是隔绝两级放大电路之间的干扰,并且与第二级放大电路构成带通滤波器。据实验室已有数据可知,前端传感器测得的有效信号的频率在50Hz左右,此通带的滤波范围满足滤除噪声的要求。两级运算放大电路的总放大倍数为A=A1×A2=100×100=10000运算放大器芯片的选型中,选择了TLC2262AI作为要使用的运放芯片。它是一个双运放芯片,具有功耗小、噪声小、干扰小、输入阻抗大等优点,输出电压的幅值可以达到STM32ADC输入电压的需求。其引脚定义如图3-11所示。图3-11芯片TLC2262AI引脚定义3.5信号采集模块设计信号采集电路,其实就是采用的STM32F407中内置的逐次逼近型A/D转换器,它是12位的,内部有数个独立的A/D转换器,有可复用的16个转换通道,转换模式可以有单次转换、连续转换等模式,对于通道有单通道转换、多通道扫描模式,还支持外部触发转换、定时器触发转换、软件触发转换,支持DMA存储。其采样频率最高能有2.4MHz。[22]与STM32的ADC相关的引脚如表3-2所示。表3-2ADC相关引脚引脚名称引脚信号引脚定义VREF+模拟参考电压正极正极参考电压最大值为1.8V~VDDAVREF-模拟参考电压负极负极参考电压最小值为VSSAVSSAVDDA模拟负电压模拟正电压工作电源负极工作电源正极EXTI_11/EXTI_15外部触发信号两路外部触发信号ADCX_IN[15:0]模拟信号输入16通道模拟信号输入如图3-12所示,用一个2×10的接插件来连接ADC的16个通道对应的引脚。在20针的IO口接插件中,除了有16针是用于连接ADC的16路通道以外,另外还有两个接口是定时器的外部接口,用来连接编码器,配合STM32定时器的编码器模式来使用;最后两个接口连接电源和GND,用于电路软硬件的调试。图3-1220针接插件(IO口)3.6串口模块设计串口,全称为串行接口,顾名思义,它的传输原理就是数据一位一位地按顺序传送,比较简单,适用于远距离通信,成本较低,但是传输速率不高。它是一种物理接口形式,但是有许多电平标准协议。串口按照电平标准协议可划分为TTL、RS232、RS485、RS422等串口。[37]这里我们使用的是STM32的TTL串口,它可以进行异步接收、发送,只需要四个引脚,其电平标准为:低电平为0,高电平为1,是标准的数字电路逻辑。如图3-13所示,是串口模块。串口模块其实就是一个四脚的插针。四个脚分别接到电源、GND、单片机的RXD1(单片机数据接收脚)、单片机的TXD1(单片机数据发送脚)。图3-13串口模块此串口模块,是用来与4GDTU模块进行通信的。其简要工作原理如图3-14所示。如图3-15为市面上常见的4GDTU模块,图3-16为其自带的一些串行接口。这些4G模块大多都是通过串行接口与前端的嵌入式数据采集设备进行连接,再通过手机卡连接上4G网络,与厂商搭建的服务器建立双向连接,设置好数据透传模式,就可以上传数据到服务器,然后服务器可以把数据发送给另一个连接到PC机上的4G模块,两个4G模块这样进行数据传输,就叫做数据透传。[24]图3-144GDTU模块的简要工作原理图3-154GDTU模块图3-164GDTU模块接口单片机串口与此4G模块的硬件连接,就是连接到它的RS232串口上。单片机与4G模块串口都有TX、RX脚,把它们互接,再将G脚接到GND即可。通过串口方式实现数据互相发送与接收。因为串口的传输速率较低,制约了整个系统的整体传输速率,即使4G模块与服务器之间的无线传输速率很高,也无法提高整个系统的传输速率。所以目前还无法进行数据的大批量快速完整传输,仅能够发送损伤部位的数据。3.7本章小结本章节的主要内容为嵌入式硬件系统的设计。包括硬件总体结构的设计以及各细分模块的硬件电路设计。在硬件总体结构的设计中,选择了STM32F407单片机平台作为硬件系统的平台方案,运用了层次化的设计方法,将其细分为了数个层次,包括硬件核心电路、电压转换电路、信号处理电路、信号采集电路、串口等,然后再对各个层次进行了模块化描述,介绍了其各自的实现过程,也对要用到的4G模块进行了简要介绍。

4软件系统设计4.1软件总体结构设计如图4-1所示,软件的总体结构以层次化的方法来划分,可以包括嵌入式软件系统设计和GUI界面设计两大部分。嵌入式软件系统设计是在MDK(KEIL5)的编译环境中进行编写的;而GUI界面设计则是选择了QT5作为编译环境。嵌入式软件设计要实现的功能包括模数转换数据采集、数据处理、损伤数据的发送、各模块底层驱动、与4GDTU模块的串口通信等;GUI界面设计除了设计用户交互界面以外,要实现的功能还包括与4GDTU模块的通信、指令发送、损伤数据显示等功能。[32]图4-1软件系统总体结构4.2嵌入式软件系统设计要进行嵌入式软件的编写,首先是在电脑上安装好MDK的编译环境。MDK全称为MicrocontrollerDevelopmentKit,它基于KeiluVision5的集成开发环境,为基于Cortex-M系列等各种处理器的设备提供开发平台,专门用于单片机的开发,能够满足嵌入式设计的各种需求。[22]安装好编译环境之后,仍不能马上编写程序,还要添加一些固件库。官方为了方便用户进行开发,提供了一套标准固件库。建立自己的工程时,需要根据自己所用到的硬件添加对应的标准固件库。如图4-2所示,这些固件库能够作为中间层,实现软件与硬件的连接,为上层软件系统对硬件的操作提供支持,并且对硬件设备进行初始化与自检操作。还可以为用户编写代码提供便利,比如将一些难以记忆的寄存器操作封装成函数,增加代码的可读性。图4-3为系统包含的一些固件库。图4-2固件库在程序中的作用图4-3系统包含的一些固件库最后,编译环境搭建完成,编写代码时,主要编写方法为功能导向、问题导向。把要实现的功能、要解决的问题罗列出来,再由程序来实现这些功能,并解决问题。4.2.1主函数设计软件系统主函数部分,主要实现的功能为根据串口接收到数据的不同来调用功能函数。具体流程图如图4-4所示。主函数在进入while循环之前,先进行了各个模块的初始化,包括LED设置、串口设置、定时器设置、中断优先级分组设置等,然后进入循环检测,若检测到串口接收到数据,则判断此数据是否符合条件,若符合条件,则根据相应的条件调用自定义功能函数。图4-4主函数的流程图main函数核心代码与注释如下:intmain(void){ u16s; u8t=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//系统中断优先级的设置 delay_init(168);//初始化延时函数 uart_init(115200); //初始化串口波特率为115200 KEY_Init();//初始化按键 LED_Init(); //初始化LEDs=0; while(1)//循环检测 { if((USART_RX_STA&0x8000)!=0) { t=USART_RX_BUF[0]; }//如果检测到串口有数据接收完毕,则将接收到的数据保存至t中 else continue;//如果未检测到串口数据接收,则直接跳过本次循环 if(t!=s)//如果接收到的值相较于上次的值发生变化 { flag=1;//全局变量,初次调用标志位置为1 s=t;//s记录下接收到的数据 App_Call(t,1.5);//调用功能函数 } elseif(t==0)//如果接收到的值相较于上次的值无变化,且为0 { //空过这轮循环 } elseif(t==1)//如果接收到的值相较于上次的值无变化,且为1 { flag=0;//初次调用标志位置为0 App_Call(t,1.5);//维持功能函数的调用 } }}4.2.2自定义功能函数设计软件系统的自定义功能函数包括App_Call函数、Check_Data函数以及Send函数。它们的功能分别为:App_Call函数根据从串口接收到数据的不同,执行开启数据采集或关闭数据采集的操作,串口接收到1,则启动各功能,串口接收到0,则关闭各功能;Check_Data函数检测接收到的数据,与设定好的阈值进行比较,如果大于设定的阈值,说明此数据可能为损伤数据,则进行发送操作;Send函数是执行将数据发送到串口的操作。(1)App_Call函数没有返回值,在函数体内完成开启数据采集或关闭数据采集的功能,需要传进来两个参数t和y,t为从串口接收到的数据,y为设定的检测电压阈值,其功能流程图如图4-5所示。图4-5App_Call函数流程图其核心代码与注释如下:voidApp_Call(u8t,floaty)//功能函数,有两个传入参数t和y{ intdata_remain;//记录接收缓冲数组空余的数据量 intdata_now;//记录本次调用时数据采集到接收缓冲区的哪个位置 if(t==0) {//t为函数的传入参数,若为0,则说明需要关闭所有数据采集与传输 ADC_Cmd(ADC1,DISABLE); DMA_Cmd(DMA2_Stream0,DISABLE); DMA_Cmd(DMA2_Stream7,DISABLE); TIM_Cmd(TIM4,DISABLE);//关闭所有数据采集与传输功能 } if(t==1) {//t为函数的传入参数,若为1,则说明需要开启所有数据采集与传输 if(flag==1) {//全局变量flag为1,表明此次为初次调用,则需要对各数据采集模块进行启动;flag不为1时,说明已经启动过,直接执行下面的操作 data_last=0; Encoder_Init(); Adc_Dma_Init();//启动编码器、adc的数据采集 } data_remain=DMA_GetCurrDataCounter(DMA2_Stream0);//得到接收缓冲区当前有多少个数据空余data_now=SAMPLE_COUNT-data_remain;//得到本次调用时数据采集到接收缓冲区的哪个位置 if(data_now>data_last) { Check_Data(data_last,data_now,y);//Check_Data函数功能为逐个检测接收到的电压值是否有超出设定的阈值y,如果有,就发送此数据,没有就不发送 } if(data_now<data_last) { Check_Data(data_last,SAMPLE_COUNT,y); Check_Data(0,data_now,y); } //根据采集到的数据位置与上次的数据位置来检测数据 data_last=data_now; }}(2)软件系统启动后,Check_Data函数会被App_Call函数调用,用来检测接收到的电压数据的大小是否超过阈值,如果其超过了阈值,则调用Send函数,将损伤部位的电压数据与同时采集到的位置数据一同发送出去,给上位机提供损伤部位的位置信号和电压幅值信号。其核心代码和注释如下:voidCheck_Data(inta,intb,floaty)/*Check_Data函数有三个参数,分别为a,b,y,函数检测的时候检测的范围就是接收缓冲数组里a到b之间的值,检测的电压阈值就是y*/{ inti; for(i=a;i<b;i++)//循环检测接收缓冲数组里的电压值 { temp=(float)dma_buf.ADCConvertedValue[i]/4096*3.3f; if(temp>y)//如果超过了设定的阈值,则视为损伤数据,发送损伤的位置和幅值 { Send_Buf[0]=Read_Position(); Send_Buf[1]=temp; Send(0); // printf("CH1value=%fV\r\n",temp);//printf为调试用,把某个通道的数据显示到串口,方便观察数据 } } }(3)Send函数功能则较为简单,就是启动DMA,对需要发送的数据进行DMA发送。其代码和注释如下:voidSend(void){ dma_Init();//对dma进行初始化配置,并启动 while(!DMA_GetFlagStatus(DMA2_Stream7,DMA_FLAG_TCIF7));//等待传输完成标志位置位,标志位置位时表示此次传输完成,跳出循环 DMA_Cmd(DMA2_Stream7,DISABLE);//传输完成,关闭本次dma传输 DMA_ClearFlag(DMA2_Stream7,DMA_FLAG_TCIF7);//清楚传输完成标志位}4.2.3DMA传输任务设计DMA全称为DirectMemoryAccess,即直接存储器访问。顾名思义,它对存储器的访问不需要CPU来进行直接控制传输,CPU只需要对DMA进行初始化,后续的数据传输工作就交给DMA来完成。它没有复杂的工作,而是在硬件部分为内存与外设之间开辟一条直接传送数据的通路,这样能使CPU分配更多时间到其他工作上。[22]在STM32F407中,DMA控制器共有2个,每个DMA控制器都可以控制数个数据流。每个数据流与硬件相连接,可以用来实现外设与内存之间的数据传输。STM32F4的DMA支持的传输类型有外设到存储器的传输、存储器到外设的传输、存储器到存储器的传输,并可以设置单次发送和连续发送模式。还有许多的模式配置,在这里不再赘述,见下面的DMA配置核心代码。本文有两个地方需要用到DMA传输。一是ADC数据采集,数据采集要搭配DMA来使用,把外设采集到的数据通过DMA直接发送到设置好的数据接收缓冲数组中;二是数据发送函数,需要用到DMA将损伤数据从内存发送到串口,即发送给串口上连接的4G模块。开启DMA之前,要对其进行初始化配置,先使能与DMA有关的时钟,对相应的数据流、通道进行具体化配置。内存发送到串口所用的数据流是DMA2_Stream7的Channel_4通道。具体配置如图4-6所示:图4-6DMA配置代码及注释4.2.4ADC传输任务的设计在启动ADC进行数据采集之前,要先通过程序对ADC进行初始化配置,这种程序就叫做驱动程序。STM32的ADC支持的触发模式为:软件触发、外部事件触发、定时器触发。可以设置单次采样或连续采样模式,对于ADC的16个通道来说,有单通道模式和多通道扫描模式。因为ADC是从外设采集数据,经模数转换存放到内存中,所以一般都搭配DMA传输来使用。本文对ADC的模式配置采用的是定时器触发,多通道扫描模式,关闭连续转换。采用定时器触发就意味着等时间采样。初始化配置时,首先需要使能用到的GPIO口、ADC、DMA相关的时钟,然后配置相应的GPIO口为模拟输入模式。本系统使用的是ADC1,控制STM32ADC1的DMA数据流为DMA2_Stream0,通道0,其具体配置与上一小节用于发送数据的DMA2_Stream7相差不大,仅仅是发送方向反过来,外设地址为ADC1的数据寄存器地址,内存地址为自己设定的数组的地址。其他DMA2_Stream0的配置不再赘述。本系统采用定时器触发,STM32的ADC虽然有连续转换模式加扫描模式,但是这样的话采样频率就比较固定,不能由开发者进行配置。所以就采用了定时器对ADC进行触发,这样就可以通过编写程序来改变定时器的计数周期,进而改变采样频率,方便开发者的操作。设置ADC为独立模式,禁止连续转换,开启多通道扫描模式,触发方式选择为定时器1的上升沿触发,在每次计数的上升沿,就会触发模数转换。其部分核心代码如图4-7所示:图4-7ADC部分核心代码及注释4.2.5编码器数据采集任务的设计编码器,简单来讲就是一种能够探测位移信号,然后将其转化为电信号的一种传感器。编码器可以分为许多种类,本系统使用的是其中的一种——增量式编码器。增量式编码器能够将位移转化为周期性的电信号,然后把这个电信号转化为计数脉冲,用脉冲个数来表示位移的大小。这种编码器一般都有三相输出信号:通常为A相、B相、Z相输出。其中A、B两相输出的脉冲有一定的先后,由这两相的先后关系可以判断编码器的正反转;Z相则是每转一圈发出一个脉冲。而STM32F407为了方便用户使用,专门提供了一种编码器接口模式。定时器1、2、3、4、5、8都能够提供这种模式。这种模式提供了单项计数模式和双项计数模式,其中单项计数只能测量位移,而双项计数模式可以测量方向和位移,并且能够很好地消除一些毛刺的干扰。本系统虽然不用得到位移的方向,但是为了消除毛刺干扰,还是使用双项计数。在进行定时器初始化之前,要初始化用到的各个时钟,还要对所用定时器对应的通道GPIO口进行初始化。本系统选择的是定时器TIM4,对应的IO口为PB6和PB7,要注意将其设置为复用模式。用STM32定时器TIM4配置编码器接口模式的部分核心代码如图4-8所示:图4-8编码器模式的配置及注释定时器的EncoderMode有三种模式,TI1,TI2和TI12,因为增量式编码器有AB两相,分别接入了定时器的通道1和通道2,TI1和TI2模式意思是只在通道1的上升沿或者通道2的上升沿计数,TI12是在通道1和通道2的上升沿都计数,得到的结果是位移量的两倍;如果再把模式选择为通道1和通道2的上升沿和下降沿均计数,则为编码器位移量的四倍。因为本系统用的是TI12模式,设置此模式在两个输入通道的上升沿进行计数,所以得到的结果会是位移量的两倍。最后再编写一个简单的函数,对定时器TIM4的计数值进行读取,再除以2就是位移量。当需要读取位移量的时候,调用此函数即可。4.3GUI界面设计GUI界面采用QT5的编译环境进行开发。其界面如图4-9所示。主要实现的功能包括:(1)创建串口,并搜索电脑上的可用串口,对其功能和参数进行配置;(2)创建信号槽函数,由按钮开启或关闭串口,同时也由这个按钮发送开启或关闭的指令;(3)创建两个文本显示窗口,一个用来显示串口接收到的数据,另一个用来显示串口开启或关闭的状态;(4)创建另一个按钮,此按钮也连接信号槽函数,功能为清除文本窗口目前显示的所有信息;(5)创建一个选择框,用来实现16进制显示的功能。勾选上时,文本框以16进制显示串口接收到的数据;未勾选时,文本框以字符串方式显示串口接收到的数据;(6)创建一个输入窗口,限制其只能输入数字,输入完成后用户可以点击“输入完成”按钮来发送这个数据到单片机,从而设置单片机检测损伤信号的电压阈值。图4-9GUI界面设计4.4本章小结本章主要介绍了系统的软件设计部分。其主要分为嵌入式软件设计和GUI界面的设计。其中,在嵌入式软件设计的部分,先介绍了开发环境的一些准备操作,然后介绍了主函数、自定义功能函数、ADC和DMA的配置、定时器的编码器接口模式的配置等具体实现细节和部分核心代码及注释;最后,介绍了GUI界面设计所实现的一些具体功能。

5测试与总结展望5.1系统测试由于时间和水平有限,本系统并未自己做出实物,用的是实验室师兄现有的单片机学习板来进行测试。此学习板的MCU也是STM32F407,它搭载的各个模块和本系统的都很相似,多了一些引出GPIO口,多了一些高级外设。它的MCU是STM32F4系列,也保证了添加固件库和烧写软件时不会遇到无法适配的问题,所以可以用它来模拟本系统的测试。首先要把4G模块与单片机通过串口连接起来,为数据发送端。如图5-1所示。图5-14G模块与单片机串口的连接然后将另一4G模块也通过串口连接至电脑端,用于接收数据。如图5-2所示。图5-2另一4G模块连接至PC端本测试中,ADC共有16个通道,采用单片机自带的3.3V电源对这些通道进行测试,每次只把一个通道置为3.3V,其他通道都接GND,再把检测电压的阈值设置为3V,以此来测试每个通道的可用性。如图5-3所示,是通过串口对ADC通道1的测试,其他各个通道的测试方法与之相同。测试时用的是字符串显示,单片机以字符串方式发送数据到串口。图5-3ADC通道1测试经测试,得出的结果为ADC的16个通道都能够很好地采集到正确数据;DMA也能够正常工作,把数据发送到上位机;还有检测电压阈值的算法,也能够很好地检测到超过阈值的数据并发送出来,不会发送低于阈值的电压数据。5.2总结与展望5.2.1系统设计总结在本次毕业设计任务中,针对现有的有线式或便携式监测通讯系统存在的一些问题,提出了一套基于嵌入式系统的4G远程无线监测通讯系统。利用层次化设计的方法,完成了嵌入式硬件方案设计、嵌入式软件设计和GUI界面设计,最后经过测试,验证了上述基于STM32F407的嵌入式硬件方案、基于MDK的软件设计以及基于QT5的GUI界面设计的可行性。硬件启动后,把软件烧写进去,目的是通过软件实现数据采集、数据接收、数据发送的功能,经测试后发现这些预设的功能都能够正常实现;GUI界面设计了一个简单的串口调试助手,经测试,其发送数据、接收数据、显示数据、清除显示、16进制显示的功能都有效,能够合理地实现,验证了其可靠性。5.2.2展望在本次设计中,由于时间有限和自身水平不够高的原因,整个设计也存在有很多缺陷,所以还有很大的完善空间,正式进入实验室后,计划开展进一步的工作,逐步改善改系统。系统存在的缺陷以及以后要进一步开展的工作包括以下方面:(1)未能实现大批量的数据传输。因为4G模块与外部设备只能通过串口连接,而串口是一种低速的接口,限制了整个系统的数据传输速度。所以本系统还没有实现大批量的数据快速进行传输,只是采集数据后对数据进行评判,找出损伤数据,只传输损伤数据的信息。所以,对于这个问题,后续我还要继续深入开展下去,继续深入学习嵌入式的知识,找到解决大批量数据传输问题的方法。(2)实践部分不够充分。因为自身能力不够高还有时间有限的原因,本系统硬件虽然画出了电路图和PCB图,但未做出实物,只能用实验室相似的STM32F407开发板来代替本系统的硬件。所以我以后要加强自身的实践方面能力,让自己在规定的时间内能够做出东西,进行实践操作。(3)软件功能不够完善。本系统的软件虽然有实现了数据采集、数据评判、数据接收、数据发送等各种功能,但是仍然有一些缺陷:逻辑功能不够完整、代码冗杂等。今后我必须提高自身编写代码的水平,做到快速高效地用代码实现各种功能。(4)自研度不够高。在系统中,因为4G这方面设计的原理较为复杂,所以4G远程传输采用的是别人研发的4G模块来进行的,之后要在4G模块这方面进行深入,弄懂其原理。在本任务的设计过程和论文撰写过程中,由于本人的水平有限,出现的错误、缺陷以及疏漏的地方,恳请各位老师批评指正!

参考文献[1]江鹏程,李志浩,齐晓辉.4G网络装备车辆远程监控系统[J].兵工自动化,2020,39(02):24-27.[2]李广毅.无线数据传输技术在通信电源监控系统中的应用[J].通信电源技术,2018,35(11):157-158.[3]王德麾,冯军帅,宋海亮,谢志梅.基于无线传感器网络和3G/4G的远程环境监测系统研究[J].物联网技术,2015,5(03):17-18.[4]王东,穆武第,张广政.基于3G网络的远程无线监控系统设计[J].电视技术,2012,36(05):106-109.[5]刘景锋,沈骏,李炎亮.基于i.MX6UL平台的重型车辆远程监控系统研究[J].上海工程技术大学学报,2020,34(03):232-237.[6]王铭,倪平,王冬,李道德.基于3G网络的远程无线综合监控系统[J].电子技术应用,2011,37(01):114-116+119.[7]李双喜,徐识溥,刘勇,郑宪清,王运圣,吕卫光.基于4G无线传感网络的大田土壤环境远程监测系统设计与实现[J].上海农业学报,2018,34(05):105-110.[8]WangS,HouY,GaoF,etal.AnovelIoTaccessarchitectureforvehiclemonitoringsystem[C]//2016IEEE3rdWorldForumonInternetofThings(WF-IoT).IEEE,2016:639-642.[9]LeeHC,KeKH.Monitoringoflarge-areaIoTsensorsusingaLoRawirelessmeshnetworksystem:Designandevaluation[J].IEEETransactionsonInstrumentationandMeasurement,2018,67(9):2177-2187.[10]XiaK,NiJ,YeY,etal.Areal-timemonitoringsystembasedonZigBeeand4Gcommunicationsforphotovoltaicgeneration[J].CSEEJournalofPowerandEnergySystems,2020,6(1):52-63.[11]GarbhapuVV,GopalanS.IoTbasedlowcostsinglesensornoderemotehealthmonitoringsystem[J].Procediacomputerscience,2017,113:408-415.[12]VijayalakshmiMM.IoTBasedSmartFarminginaAgriculture[J].[13]HuhS,ChoS,KimS.ManagingIoTdevicesusingblockchainplatform[C]//201719thinternationalconferenceonadvancedcommunicationtechnology(ICACT).IEEE,2017:464-467.[14]ZhangJ.ResearchonRemoteMonitoringSystemofLocomotiveSignalBasedon4GNetwork[C]//20183rdInternationalConferenceonAutomation,MechanicalControlandComputationalEngineering(AMCCE2018).AtlantisPress,2018.[15]AhmadNizarHarun,NorlizaMohamed,RobiahAhmad,etal.ImprovedInternetofThings(IoT)monitoringsystemforgrowthoptimizationofBrassicachinensis.2019,164[16]ChienLee,Yu-JenWang.Developmentofacloud-basedIoTmonitoringsystemforFishmetabolismandactivityinaquaponics.2020,90(C)[17]李锦龙,李晓根,于运渌,邓小宝.基于ZigBee和4G的空气质量远程监测系统设计[J].自动化与仪表,2019,34(02):99-102.[18]李义斌.浅谈工程机械远程监控系统的发展趋势[J].南方农机,2020,51(05):124.[19]余红波.浅谈智能化远程监控及其机房的配电系统发展趋势[J].中国设备工程,2019(04):211-212.[20]陈经纬.物联网通信技术发展现状及趋势研究[J].中小企业管理与科技(中旬刊),2020(11):193-194.[21]路荣坤,陈忠孝,秦刚,叱婵娟.基于4G-DTU水质监测系统的设计[J].机械与电子,2018,36(01):58-61.[22]张洋,刘军,严汉宇,左忠凯.原子教你玩STM32库函数版[M],北京:北京航空航天大学出版社,2015.[23]李文瀚,林海,闫茂德,杨盼盼,朱旭.基于4G的径流泥沙远程监测云平台设计[J].电子测量技术,2020,43(02):33-37.[24]钱建锋.TCP/IP嵌入式单片机网络智能监控系统的开发与实现[J].轻工科技,2019,35(07):82-83.[25]张中前.基于STM32单片机的uC/OS-Ⅱ操作系统移植[J].机电元件,2020,40(06):57-61.[26]王博思,黄子恒,赵雅,巫涛江,张帅,曾卿卿,镇鑫羽,王渝.基于STM32F103的钢丝绳漏磁检测数据采集实验研究[J].自动化与仪器仪表,2020(09):108-110.[27]玄兆燕,洪健俊,赵欣.基于STM32的下肢康复机器人控制系统设计[J].机械工程与自动化,2020(06):145-147.[28]马文家.基于STM32F1的钢丝绳无损检测系统[J].机电工程技术,2020,49(06):28-30.[29]王星.基于DSP的钢丝绳在线检测系统设计[D].河南科技大学,2013.[30]孙佳胜.基于DSP的提升机钢丝绳损伤检测装置研究[D].中国矿业大学,2015.[31]孙燕华,马文家,田晓贺,谢菲,姜宵园,康宜华.基于STM32F4嵌入式的钢丝绳漏磁检测数据采集系统[J].无损检测,2018,40(09):56-59+67.[32]刘志辉.基于漏磁原理的钢丝绳断丝损伤定量识别研究[D].江西理工大学,2020.[33]董文琪.基于嵌入式系统的手持钢丝绳漏磁检测仪[D].华中科技大学,2019.[34]刘志斌,张持健.嵌入式系统中高精度晶体振荡器及其应用分析[J].计算机系统应用,2014,23(05):222-226.[35]赵振宇.基于Hi3519的360°无线全景监控系统的设计与实现[D].东北师范大学,2018.

附录MCU核心电路图GUI设计部分核心代码:MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,[=]()//按钮1的信号-槽函数,按下按钮,可以实现一些功能{if(ui->pushButton->text()=="启动")//如果按钮1上的文字为“启动”,则按下此按钮时执行开启串口的操作,再将串口上的文字重置为“关闭”{serial->setBaudRate(QSerialPort::Baud115200);serial->setDataBits(QSerialPort::Data8);serial->setParity(QSerialPort::NoParity);serial->setStopBits(QSerialPort::OneStop);serial->setFlowControl(QSerialPort::NoFlowControl);ui->pushButton->setText("关闭");//串口参数配置,波特率设置为115200,数据位为八位,无停止位,无奇偶校验位,无硬件数据流控制foreach(constQSerialPortInfo&Info,QSerialPortInfo::availablePorts()){serial->setPort(Info);QStringportName=serial->portName();ui->StatusInfo->append(portName);}//搜索电脑目前可用的串口,供用户使用if(serial->open(QIODevice::ReadWrite))/*串口可读可写地打开,判断其返回值,如果返回值为1,表示串口已经打开,则在textedit上输出“串口已经打开”,并通过串口向单片机发送启动指令*/{QByteArraysendBuf0;sendBuf0="1";sendBuf0+='\r';sendBuf0+='\n';//发送的数据后面加上换行符,即\r\n,发送新行,这样单片机才能准确接收ui->StatusInfo->append("串口已打开");//在textEdit上显示“串口已打开”serial->write(sendBuf0);//向串口发送字符串}else//若返回值不为1,则表明串口打开失败{ui->StatusInfo->append("串口打开失败");}}elseif(ui->pushButton->text()=="关闭")/*如果按钮1上的文字为“关闭”,则按下此按钮时执行关闭串口的操作,再将串口上的文字重置为“启动”,并通过串口向单片机发送关闭的指令*/{QByteArraysendBuf1;sendBuf1="0";sendBuf1+='\r';sendBuf1+='\n';ui->pushButton->setText("启动");serial->close();//串口关闭serial->write(sendBuf1);ui->StatusInfo->append("串口已关闭");}});connect(serial,&QSerialPort::readyRead,this,[=](){this->receiveData();}//连接信号槽,每当检测到串口有数据准备好被读取时,就调用读取函数);connect(ui->pushButton_2,&QPushButton::clicked,this,[=](){ui->ReceiveInfo->clear();ui->StatusInfo->clear();temp="";});//按钮2的功能为清空所有textedit上的信息,并把中间变量temp清空connect(ui->pushButton_3,&QPushButton::clicked,this,[=](){QStringnum;num=ui->lineEdit->text();QByteArraysendData;StringToHex(num,sendData);serial->write(sendData);});//按钮3的功能为提取lineEdit中的信息,并通过串口发送给单片机connect(ui->checkBox,&QCheckBox::stateChanged,this,[=](intstate)//checkbox是勾选框,当勾选上时,实现16进制接收的功能,未勾选时,以字符串方式接收{QStringreceive=QString(temp);//temp里储存的是上次接收到的数据ui->ReceiveInfo->clear();//每次显示时先清楚上次textEdit的数据if(state==0)//state为0时,是未勾选的状况,直接以字符串方式接收{a=0;ui->ReceiveInfo->append(receive);}if(state==2)//state为2时,是勾选上的状况,以16进制方式接收{a=1;QStringstrDis;QStringstr2=temp.toHex().data();str2=str2.toUpper();for(inti=0;i<str2.length();i+=2){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论