基于多平台互交的无线数据采集系统研究与开发
2021-01-12庞凯元徐家川
庞凯元,徐家川
(山东理工大学 交通与车辆工程学院, 山东 淄博 255049)
随着计算机技术、软件技术和网络技术的发展,越来越多通过传感器采集的数据可以通过计算机和仪器的结合实时显示到人们面前。LabVIEW是美国国家仪器(NI)公司开发的图形化编程语言(G语言),该语言能实现在封装函数功能的同时完成数据流控制[1],但是其配套的数据采集卡较为昂贵、不支持编程更改。近年来,国内外越来越多的研究者开始使用LabVIEW或LabVIEW多平台互交的理念去解决众多的实际问题,多平台互交的优势逐渐体现[2-4]。
本文针对与LabVIEW相匹配的数据采集卡较为昂贵且不方便、不支持编程处理等问题,研究并开发一套基于多平台互交、中长距离数据传输并实时显示的数据采集系统。
1 无线数据传输系统的整体框架
该无线数据采集系统是在山东理工大学至尚方程式赛车队的实践平台上研究开发的。数据采集系统采集的数据有:发动机温度、左后悬和右前悬的伸缩量、加速度、侧向加速度。
利用Arduino开发平台对Arduino控制板进行二次开发,在采集各个数据的同时进行数据处理工作。Arduino将数据按照时间索引分批打包生成单个字符串后,与具有SX1278芯片的发射器进行串口通讯。接收器端与基于LabVIEW设计的上位机进行串口通讯,数据在上位机中分解并整理后,在上位机的前面板进行具体的显示,系统整体框架图如图1所示。
图1 系统整体框架Fig.1 Overall system framework
2 无线数据采集系统下位机设计
2.1 数据采集和处理
2.1.1 加速度和侧向加速度的数据采集和数据处理
利用三轴加速度计、陀螺仪传感器(MPU605)采集车辆行驶时X轴(正前方)、Y轴(正右方)、Z轴(正上方)三轴的加速度值和角度值。
利用加速度计测量时,会有大量噪音信号的干扰,造成加速度计波形严重失真。相比之下,陀螺仪测量的是角度值,所以对于发动机和车体的震动没有那么敏感;同时,利用卡尔曼滤波,可以过滤噪音以还原X、Y、Z三轴加速度。
卡尔曼滤波是不断递归的运算过程,即使在初始非稳态的条件下,卡尔曼滤波也能在一定时间内进行若干次递推运算从而达到稳态收敛的输出值[5]。卡尔曼滤波递推公式如下[5]:
(1)
在本设计中,先估计X、Y、Z三轴的角度值以及加速度、侧向加速度,使加速度和侧向加速度的预测和实际测量值的差值,即均方差收敛;再通过X、Y、Z三轴角度值估计值的加权来修正加速度和侧向加速度的估计值。
2.1.2 发动机温度的数据采集和数据处理
基于插装方便、后期车辆便于保养等要求,温度传感器的位置设置在发动机进水口端,以近似测量发动机温度。测温传感器采用具有只需单引脚就可以通讯、测温范围-55 ℃~+125 ℃、全部功能集成在器件中、无需再增加其他外部器件等特点的DS18B20[6]。
DS18B20 主要由四部分组成:64位ROM、温度敏感元件、温度报警触发器TH和TL及相应的配置寄存器[7]。在传感器出厂之前,厂家已经将64位的唯一序列号内置到传感器的储存器当中[6]。Arduino控制板在读取数据时,首先在总线上发送某个DS18B20序列号,该DS18B20触发响应,实现单总线多DS18B20测温传感器识别的目的。
非阻塞式算法流程如下:
步骤1:设置1 000 ms的时间间隔,并将程序初始时间设置为0,实现初始化。
步骤2:不断读取当前时间,并计算与初始时间的差值。
步骤3:当时间的差值大于设定的时间间隔,便向单总线获取索引为0的DS18B20温度值。
步骤4:不断改变时间间隔和索引号,实现多DS18B20的单总线数据采集。
此算法中没有使用数据结构中的“锁”,大大降低了对Arduino控制板性能上的消耗。
2.1.3 左后悬和右前悬伸缩量的数据采集和数据处理
根据弹簧和阻尼器的长度选用位移传感器KMP16J-225MM,该传感器输出模拟电压信号,最大工作速度5 m/s,具有使用时间长等特点。
传感器将数据通过模拟电压信号输出到Arduino控制板,Arduino采集数据并将其保存到数组,然后在中值滤波处理下刷新数组数值,得到平均值,成为较为可靠的数据。
2.2 数据存储与数据传输
2.2.1 数据存储
利用Arduino开发平台中的SD库进行函数的调用,操作方便且可移植性强。在代码中设置保存路径、文件名称和保存内容后,便在SD卡得到存储的数据。在源头可以得到数据的备份,方便后期与上位机数据的比对和用户对数据的保护。
2.2.2 数据传输
Arduino将数据进行初步处理后,分别将其拼接成一个字符串,并利用串口通讯和发射机进行数据通讯。在无线数据传输系统中,采用SEMTECH公司LoRa TM 调制技术的无线射频芯片SX1278,把采集到的数据通过无线远距离发送出去,也可以接收控制中心或手持自检预置器的命令,其优点是在满足低成本、低功耗的前提下实现远距离数据传输[8-9]。
3 无线数据采集系统上位机设计
3.1 前面板界面设计及功能
用无线数据采集系统去控制5个独立的采集通道,该无线数据采集系统可以单独实现数据流的接收和切断、新建文件、删除文档、退出系统和自动保存数据等功能,还可以分块单独显示各部分数据、程序运行时间、数据采集数量等。
上位机界面图如图2所示。图2中,前面板的左上侧有停止和打开串口两个控制按钮③,分别控制系统的退出并保存数据和数据流的切断及接收功能,每一次接收到数据便进行闪烁,闪烁的速率表示数据采集的速率。侧采集周期选板⑤可以主动更改上位机接收数据的速率。右下侧的两个波形图表①、②,分别实时显示左后悬和右前悬的伸缩量,波形图表的上方有图例和实时显示的具体数值。右侧下方的XY图⑥中,Y轴对应的数值为侧向加速度,X轴对应的数值为加速度。最右侧的温度计⑦实时显示发动机温度。通讯指示灯④显示通讯状态。
图2 上位机界面Fig.2 Labview interface
3.2 上位机流程图
上位机流程图编写步骤如下:
步骤1:利用LabVIEW中VISA库函数控制串口通讯,实现上位机与接收器之间的串口通讯,进行数据传输。
步骤2:通过在Bytes at Port属性节点中读取字节数是否为空,来控制上位机数据处理和显示是否工作,如果为空则输出错误信号,使后面程序失效。在检测到有数据采集后,便进入子VI(数据接收处理),分成5条分路。
步骤3:在进入数据接收处理的子VI前删除空白字符串,并在子VI 中进行字符串数据位数的判断,查看数据是否丢失,自检数据传输中是否出现错位字符导致后面的拆分错误。
步骤4:应用LabVIEW中自制数据接收处理子VI,在Arduino中将每种采集到的数据在发送至发送机时,通过自定的规则(如图3所示),拼接成合适的字符串,在LabVIEW子VI中按照上述规则拆分字符串。其中子VI按照图3把数据拆分成5条数据流,每一条分路都是上述提到的用户所需数据,并前往特定的显示函数进行前台显示。
图3 数据传输时自定的规则Fig.3 Custom rules for data transmission
步骤5:左右两侧悬架伸缩量、加速度和侧向加速度,经过数值至小数字符串转换函数后,与系统检测到的绝对时间拼接成一个字符串。在文件存储函数和路径设置后生成以时间命名的TXT文件,并存入本上位机的存储目录下,用来备份数据和方便用户数据导出,上位机主体流程图如图4所示。
图4 上位机主体流程图Fig.4 Labview main process
步骤6:在保存加速度和侧向加速度数据的同时,利用反馈节点和数组插入函数使单个数据生成一个动态数组。该动态数组在Express函数库的帮助下转换成动态数据输入XY图函数,从而在前面板生成二维的加速度图。
4 实验验证
完成上位机和下位机分别独立编程后,对其进行实际的通讯测试,检测无线数据采集系统的数据传输距离和稳定性。本次实验选用的下位机控制板为Arduino UNO单片机,无线射频芯片SX1278和MPU6050的硬件连接如图5所示。
图5 硬件连接Fig.5 Hardware connection
在发射器固定的前提下移动接收器,并在特定的距离将接收器的数据接收速率和发射器的发射源发送速率进行比较,比值见表1。
由表1可知,数据接收距离在700 m以内可以实现实时接收数据,符合实验预期。
表1 数据接受速率和发送速率的比值Tab.1 The ratio of data receiving rate to sending rate
5 结束语
本无线数据采集系统用开源、简单的开发平台和控制板实现了较为复杂的运算和显示功能。由于本设计抛弃了传统数据采集多线多程和固定数据采集卡的弊端,因而具有低成本、实时性较强、开源灵活、方便后期改进等突出优点,在特种车辆和工业机器人领域具有较高的实用价值。