基于Linux的电子系统健康状态识别平台的设计与实现

2022-11-19 09:15周武徐飞洋蒋絮李玉晓
现代信息科技 2022年19期
关键词:开发板驱动状态

周武,徐飞洋,蒋絮,李玉晓

(江西理工大学 理学院,江西 赣州 341000)

0 引 言

电子系统健康状态识别是视情维护的关键问题之一。电子系统健康状态识别的本质在于研究故障信号的严重程度识别问题。在故障严重程度识别中,故障特征与故障严重程度存在正相关或负相关关系,可以通过特征来评估电子系统健康状态水平[1,2]。但实际故障特征中存在不相关信息及冗余成分,使得识别算法复杂度增大、降低了识别准确度。同时,识别模型的好坏可以直接影响识别结果的准确率。因此故障严重程度识别的关键在于故障特征提取和识别模型的建立。

故障特征提取指通过变换域分析、数据处理等技术,得到原始数据中有效的特征。目前常用的故障信号特征提取方法有:时域分析方法,频域分析方法和时频分析方法[3]。故障严重程度在电子系统退化过程中具有累积效应,电子系统越老旧,发生故障的严重程度就越大。即故障信号的参数分布是随时间变化的,属于非平稳信号。时域分析方法和频域分析方法很难准确识别非平稳信号。而时频分析方法可以有效识别故障的时域和频域成分,在故障分析中较为常用。

故障识别模型主要分为基于经验模型的方法,基于物理模型的方法和基于数据驱动模型的方法[4]。相比于前两种方法,基于数据驱动模型的方法是研究和应用的热点,主要有基于统计分析的数据驱动模型方法和基于非统计分析的数据驱动模型方法。前者需要大量的训练数据,才能通过统计分析捕捉故障的关键特征。后者具有自适应学习能力,理论上能以任意精度逼近高维非线性函数。目前,基于非统计分析的数据驱动模型方法是故障识别模型研究的主流方向之一,其中神经网络是较成熟的故障识别工具。

针对故障特征提取和故障识别模型的问题,提出了基于VMD-GRU 的电子系统健康状态识别方法。该方法能有效去除故障信号的冗余成分,并反映出故障信号的时频特征,且模型结构较为简单,计算复杂度低且故障识别准确率高。同时,基于Linux 系统设计了电子系统健康状态识别平台,该平台可以为视情维护提供更多有效的信息,降低维护设备的经济成本及避免发生故障带来的安全影响。

1 基于VMD-GRU 的电子系统健康状态识别方法

1.1 VMD 基本理论

在VMD 算法理论[5]中,固有模式函数(Intrinsic Mode Function, IMF)被重新定义为幅度调制和频率调制信号,记为:

其中,uk(t)表示定义的IMF 分量,相位φk(t)是非递减的时间函数,振幅Ak(t)≥0 是非负的时间函数。瞬时频率wk(t)= (t)≥0,且Ak(t)和wk(t)变化φk(t)比慢得多。因此,在时间范围内[t-δ,t+δ],δ≈2π/ (t),可被看为振幅和瞬时频率不变的纯谐波信号,即VMD 算法可以将信号分解为一系列中心频率不同、带宽有限的IMF。

基于维纳滤波、希尔伯特变换与解析信号和混频与外差解调原理,建立VMD 的模型。各IMF 之和应与原始信号相等,为VMD 模型的约束条件。最终构建的模型如下所示:

式中,x(t)表示目标信号,K表示VMD 将目标信号分解成IMF 的个数,δ(t)为狄利克雷函数,*为卷积符号。{uk}={u1,u2,……,uK}表示分解得到的各个IMF,{wk}={w1,w2,……,wK}表示各个IMF 的中心频率。利用交替方向乘子法[5]通过迭代的方式求解上述模型结果,得到最优解。

获得VMD 的最优参数后,可将故障信号准确地分解为一系列IMF。但在实际数据采集过程中,故障信号容易受到环境噪声干扰,导致VMD 分解出的IMF 中包含冗余信息。提出利用相似度分析从信号分解出的一系列IMF 中筛选出与故障原始信号相似程度最大的分量,作为故障信号的主要成分,再从主要成分中构建电子系统健康状态因子。同一水平的故障信号,其幅值大小略有不同。为避免信号幅值大小对故障主要成分筛选产生不利影响,不宜选用基于距离的相似度指标。采取余弦相似度指标来计算各IMF 与原始故障信号之间的相似程度。假定故障信号为x1=(x1(1),x1(2),……,x1(n))和该故障信号通过VMD 方法分解出来的一个IMF 为x2=(x2(1),x2(2),……,x2(n))。余弦相似度指标C计算公式如下所示:

C越接近于1,则表示二者之间越相似,选取C最大值对应的IMF 作为故障信号的主要成分。在得到故障信号的主要成分之后,利用微分增强型能量算子来提取主要成分的瞬时能量,以此构建电子系统健康状态因子作为反映电子系统健康状态水平的有效特征。电子系统健康状态因子定义如下:

式(3)中,x1(i)表示主要成分的第i个元素,Ei表示主要成分的第i个点的瞬时能量。式(4)中,S表示电子系统健康状态因子,能有效反映出电子系统健康状态水平(S首尾添加两个0 是为了方便训练GRU 模型)。

1.2 GRU 基本理论

循环神经网络(Recurrent Neural Network, RNN)是一种特殊的循环神经网络模型,对时序信息有着记忆能力。从RNN 结构上来说,隐藏层的输入包括输入层的输出和上一时刻隐藏层的输出,节点之间存在连接关系,用以解决信息保存问题。从RNN 理论上来说,可以处理任意长度的序列数据。然而,面临历史信息与当前处理的信息之间距离较大时,RNN 存在梯度消失或梯度爆炸的问题。GRU 网络是RNN 的另一良好变体,GRU 网络的识别准确性和预测精度与LSTM 网络相似,但其模型结构更为简单,训练收敛速度快,大大降低了计算复杂度[6,7]。GRU 有两个门控结构:复位门zt、更新门rt,用于决定保留多少历史信息和记忆多少输入信息。从而使GRU 可以选择输入序列的有用信息进行学习。GRU 网络的单元结构如图1 所示。

图1 GRU 网络单元结构

图中,ht-1表示t-1 时刻隐藏层的输出数据,ht表示t时刻隐藏层的输出数据,xt表示t时刻输入数据,σ和tanh是激活函数,表示矩阵基本运算。GRU 网络由多个此类单元结构堆叠而成,且每个单元结构的基本参数是相同的,其前向传播计算公式为:

式(6)~(9)中,Wz,Wr,Wh,Uz,Ur,Uh表示权重矩阵,bz,br,bh表示偏置矩阵,表示选择丢弃的无关历史信息。

1.3 基于GRU 网络构建电子系统健康状态识别模型

提出的电子系统健康状态识别模型由三部分组成:输入层,隐藏层和输出层。模型结构如图2 所示。

图2 电子系统健康状态识别模型结构

2 基于Linux 的硬件实现

2.1 Linux 系统开发环境搭建

电子系统健康状态识别平台设计采用的是I.MX6ULL 开发板,用户需借助PC 机对嵌入式设备进行开发。但嵌入式设备与PC 机体系结构不一样,不同体系结构编译出来的可执行文件不能互相使用,因此需要在PC 机上提前搭载好开发环境。开发环境搭建是一个复杂的工程,针对主要步骤进行简单介绍。首先,安装Linux 开发平台。从开发的稳定性考虑,在PC 机上安装了Ubuntu18.04 的虚拟机,Linux 内核版本为4.1.15。其次,安装交叉编译器。交叉编译器的作用是在一个架构上编译另一个架构的代码。最后,搭建网络环境。Linux 内核比较庞大,借助SD 卡烧写代码等方法调试代码比较花费时间,在Linux 开发过程中常通过网络功能做调试。同时,在开发过程中常需要不同系统间进行文件传输。因此,在虚拟机的终端模式下,用户通过执行与网络相关的指令来开启TFTP、NFS 等相关服务。

平台整体实现可划分为两部分:Linux 系统移植和Linux 驱动开发。Linux 系统移植是为了提供驱动开发的编程环境,Linux 系统是管理设备硬件和分配资源的软件。而Linux 驱动开发是连接硬件设备和操作系统的桥梁。与裸机开发不同,程序不是直接运行在硬件之上的。操作系统提供了硬件开发接口,用户只需编写对应的驱动程序,即可对硬件设备进行操作。

2.2 Linux 系统移植

2.2.1 BootLoader 移植

BootLoader 是一个引导程序,是系统上电或复位后执行的第一个程序。它的主要工作为初始化操作系统环境,再将Linux 内核加载到内存中并启动Linux 内核。在嵌入式系统中BootLoader 种类繁多,本文选用了支持ARM 体系的U-boot。

U-boot 移植并不是说完全从零开始编写代码,本文对半导体厂商提供的U-boot 源码进行修改,再移植到平台上。移植U-boot 有以下几点需要注意:

2.2.1.1 添加并修改文件

平台选用的是I.MX6ULL 开发板,从NXP 官网下载芯片对应的U-boot 工程,向U-boot 工程中创建与电子系统健康状态识别平台的相关板级支持包。对官方原厂的配置文件作相应修改,同时添加头文件。

如图3 所示,工程文件仅对官方U-boot 做了简单的复制和修改,由于代码较为庞大,只展示了部分修改内容。接下来需要根据开发板电路进行一些配置修改。

图3 U-boot 移植主要修改的文件

2.2.1.2 LCD 及网络驱动修改

U-boot 的驱动信息基本都在xxx.h 和xxx.c 文件中(xxx是名称),本文用的是mx6ull_test_nand.h 和mx6ull_test_nand.c。修改LCD 驱动的主要步骤如下:

(1)根据开发板硬件原理图,查看LCD 所使用的引脚数目并核对U-boot 中的IO 配置是否设置正确。

(2)修改LCD 背光引脚的配置,有些LCD 没有使用到背光引脚,可在U-boot 中删除或注释掉相关代码。

(3)修改LCD 参数配置,例如行同步脉宽、垂直同步脉宽、像素时钟等,确保LCD 正常工作。

开发板上有两个网络接口ENET1 和ENET2,通过网络芯片LAN8720A 进行控制。这里使用ENET1 接口进行网络通信,修改网络驱动的主要步骤如下:

(1)根据开发板硬件原理图,查看ENET1 机构使用的引脚并在U-boot 中进行初始化配置。

(2)修改LAN8720A 器件地址。

(3)修改LAN8720A 驱动代码,由于开发板使用的网络芯片与官方的不同,需要将对应代码进行修改。

2.2.1.3 编译工程

对修改好的工程进行编译,得到二进制镜像文件,用于嵌入式设备启动U-boot。为方便编译工程,创建一个shell脚本文件,通过执行shell脚本编译U-boot工程得到.bin文件,将.bin 文件烧写进开发板中,即可启动U-boot。

2.2.2 Linux 内核移植

Linux内核是操作系统代码,用于管理应用、内存和设备等。Linux 系统结构如图4 所示。如图4 所示,Linux 内核主要分为:进程管理、内存管理、网络接口、虚拟文件系统和进程通信。进程管理用于控制进程对CPU 的访问,通过调度算法合理分配CPU 资源。内存管理用于管理内存资源,让多个进程安全访问共享资源。网络接口用于实现系统的网络通信,管理系统的网络设备。虚拟文件系统将硬件设备抽象成文件,提供了文件操作接口来访问、配置设备。进程通信为进程之间提供多种通信机制,协助多进程和多资源之间的消息传递。

图4 Linux 系统结构

2.3 Linux 驱动开发

Linux 驱动主要分为:字符设备驱动、块设备驱动和网络设备驱动三大类。LCD 驱动属于字符设备驱动,USB 驱动属于块设备驱动。

2.3.1 LCD 驱动电路

如图5 所示,为一个通用RGB-LCD 模块的电路原理图,主要用于反馈识别结果。LCD 接口驱动程序NXP 官方已经写好,只需按照平台设计需求,修改设备树中LCD 的信息,主要步骤如下。

图5 LCD 电路原理图

2.3.1.1 LCD 屏幕IO 接口配置

子节点pinctrl_lcdif_dat,为LCD 的24 根数据线配置;子节点pinctrl_lcdif_ctrl,为LCD 的4 根控制线配置;子节点pinctrl_pwm1,LCD 背光PWM 引脚配置项。对子节点各项配置,实际上就是配置对应的寄存器,Linux 内核会自动链接这一过程。

2.3.1.2 LCD 屏幕参数节点信息配置

不同型号的LCD 屏幕参数是不同的,需要参考芯片手册进行配置。

2.3.1.3 LCD 背光节点信息配置

根据电路原理图LCD 背光控制IO 连接到了GPIO1_IO08上,通过修改设备树用PWM 信号来控制LCD 屏幕背光亮度。

通过上述设置,LCD 屏可以正常工作。

2.3.2 USB 驱动电路

开发板使用GL850G 芯片扩展了三路HOST 接口,因此可支持键盘和U 盘同时工作,通过键盘输入指令读取U盘中的数据。NXP 官方提供的内核已默认启用了USB 驱动。

3 硬件测试及实验分析

整个电子系统健康识别平台搭建完毕后,利用第2 节的测试集数据测试平台识别性能。测试具体操作如下:

(1)通过USB 驱动连接U 盘和键盘,利用键盘输入指令“mount /dev/sda1 /mnt/usb_disk/ -t vfat”将U 盘挂载在/mnt/usb_disk 目录下。输入ls 命令查看U 盘文件,如图6所示。

图6 读取U 盘故障数据文件

图中,白色字体代表第2 节采集的训练集和测试集数据,以.txt 文件保存。data2_123.txt 表示故障严重程度为2的第123 个样本,data 后面数字代表故障严重程度等级,“_”后面数字代表第几个样本,数字1 ~100 为训练集,101 ~150 位测试集。

(2)基于提出的算法编写C 程序,各故障等级识别结果如图7 所示。

图7 平台识别结果

图中,利用各故障的第123 个样本进行测试,对应故障等级的识别结果都正确。

(3)统计各故障测试集的识别结果,即各故障的第101 个样本到第150 个样本。统计结果如表1 所示。

由表1 的实验结果可知,电子系统健康状态识别平台设计成功,识别结果具有较高的准确率,本文所设计的平台能有效进行电子系统的健康状态识别,能为视情维护提供重要决策信息。

表1 统计的识别结果

4 结 论

以电子系统关键电路的不同严重程度的故障信号作为研究对象,提出了基于VMD 方法从时频域来表征故障信息,基于GRU 网络构建了故障识别模型,并设计实现了电子系统健康状态识别平台。通过实验分析和硬件测试,具有较高的识别准确率和可靠性。提出的方法能有效评估电子系统的健康状态水平,设计的平台可以为视情维修提供重要的决策信息,降低电子系统维修难度及费用,避免电子系统带隐患工作造成的安全事故。

猜你喜欢
开发板驱动状态
数据驱动世界。你得懂它 精读
基于模糊PI控制的驱动防滑仿真系统分析
基于Verilog语言的4位二进制可逆计数器的设计
深入实施创新驱动发展战略
智珠二则
生命的另一种状态
开发板在单片机原理及接口技术课程教学中的应用
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
AMD VS微软 SSD的AHCI驱动选哪家
“牛顿第一定律”练习