Open-Source,ReusableSoftwareStackEnablesReal-TimeProcessingand
AlgorithmDevelopmentforCbM
开源、可重复使用的软件堆栈助力实现实时处理和CbM算法开发
CN状态监控平台简介
在本文中,我们将重点介绍CN的不同组件可用的软件生态系统、数据分析工具和软件集成,以及工程师和数据专家如何使用它们进行应用开发。我们分两部分来介绍使用CN开发平台进行状态监控(CbM)和预测性维护(PdM)应用,这是该系列文章的第二篇。新平台旨在加快定制CbM解决方案从原型制作到生产的整个开发流程。第一部分主要介绍MEMS振动技术,以及为CbM应用捕捉高质量的振动数据。
从概念到生产的整个过程,以及如何加快这个过程!
在构建状态监控解决方案时,它们必须包含传感器、本地处理、连接、某些形式的软件或硬件,使其能够正常运行。CN提供可自定义的硬件和软件选项,让工程师和软件开发人员能够使用常用的工具和基础设施,并根据应用设计做出权衡取舍,以解决所有这些挑战。例如,如果您想选择特定的微控制器或FPGA进行处理,想要使用Python进行编码,或有喜欢的、想要重复使用的传感器。这让CN成为一个强大的平台,让希望构建优化CbM解决方案的人员能够根据自己的需求来自定义处理、功率、性能、软件和数据分析。
嵌入式系统的开发流程
我们来看看嵌入式系统从生成概念到生产的整个开发流程。图1概要描述这个抽象化的过程。
在图1所示的设计流程中,第1步是“数据研究”阶段。在这个阶段,用户将他们的要求转化到应用对硬件和软件的不同要求。从硬件的角度来看,可能涉及抗冲击性、模拟信号带宽或测量范围等参数。在考虑对软件的要求时,样本数量、采样速率、频谱、过采样和数字滤波都是CbM应用的重要参数。该平台非常实用灵活,允许研究人员使用不同的传感器组合,并调节数据采集参数,以满足其应用需求。
“数据研究”阶段之后是“算法开发”阶段,这个阶段主要是验证系统的应用或使用。这通常需要在高级工具中开发模型或设计算法,并最终移植到嵌入式系统中。但是,在优化设计之前,必须使用真实数据和硬件环路进行验证,这正是CN的优势所在,因为它不仅能与热门的高级分析工具直接集成,还支持硬件环路验证。
设计得到验证之后,就开始进行优化和嵌入所需软件组件的工作。在“嵌入式设计细化”阶段,可能需要重新实施某些算法或软件层,以便在FPGA或资源有限的微控制器中使用。必须小心谨慎地不断验证设计,因为我们会将它移植到原型或将要投入生产的硬件中进行最后验证。
图1.嵌入式系统的开发流程
最后是到达“生产”阶段,这个阶段可能与设计开始使用的原始开发环境没有什么相似之处,但仍然要满足同样的要求。由于最终的系统可能与原始的研究系统相去甚远,所以可能无法或很难运行相同的代码或测试。这可能导致产生生产测试问题和设备故障,很可能需要花费额外的时间和资金投入来进行补救。
通过最大程度的重复使用来降低风险
在设计过程中,降低风险最简单的方法之一是尽可能在每个阶段重复使用更多的硬件和软件组件,CN为开发人员提供许多开箱即用的资源,可以在开发流程的每个阶段直接使用。CN解决方案提供原理图和电路板布局文件,提供一个适用于优化和全功能环境的开源软件堆栈,以及更高等级工具(例如MATLAB和Python)可用的集成选项。最终用户可以使用ADI经过验证的组件,并在研究阶段到生产阶段期间选择想要维护或更改的组件。这样最终用户就能集中精力进行软件开发和系统集成,不必去绘制ADI组件的原理图或进行基础的软件开发。利用硬件模块和重复使用软件层,例如ADI提供的设备驱动程序、HDL或应用固件,可以减少构建系统所需的开发时间,并大大加快上市时间。
软件开发流程和过程
在开发期间,CN为工程师们提供多种选项,允许他们使用通用语言,包括C或C++,同时使用他们熟悉的数据分析工具,例如MATLAB或Python。这主要是通过利用和基于开源标准,以及支持不同制造商的多种嵌入式平台的现有解决方案进行构建而实现。
CN系统堆栈
图2所示的系统堆栈概述了构成CN系统的不同组件。左上角的深蓝色方框表示传感器和数据采集(DAQ)电路板,浅蓝色和紫色方框表示用于数据处理的FPGA分区。该平台直接支持IntelDE10-Nano和XilinxCoraZ7-07s,涵盖两大FPGA供应商。绿色方框表示与主机PC的连接。这为算法开发提供了从硬件到高级数据分析工具的直接数据访问。
所有硬件描述语言(HDL)代码都是开源的,允许开发人员进行修改,将数字信号处理(DSP)插入可编程逻辑(PL)的数据流中,如图2所示。这可以是从滤波器到状态机甚至机器学习等任何内容,具体由您的系统分区决定,这一步也可以在用户空间或应用层完成。由于代码是公开提供的,它可以移植到不同制造商的其他FPGA,或不同处理器系列中,具体取决于终端应用的需求。
图2.CN平台的系统堆栈
Arm处理器内部提供两种软件选项。具体使用哪种,由具体的用例决定,大多数开发人员可能会使用:
u Linux:内核驱动程序,可用于在内核中的输入输出工业(IIO)框架中构建的DAQ屏蔽。它与一个名为KuiperLinux的完全嵌入式Linux发行版相结合,这个版本在Arm内核用户空间中运行,基于树莓派OS。
u 无操作系统(No-OS):裸机项目,使用与Linux内核中同样的驱动程序,可以在Xilinx或Intel的SDK中使用。它也可以作为替代方案,在实时操作系统(RTOS)环境中实现。
建议开发人员从Linux开始学习并使用其系统进行开发,因为Linux提供的工具最多。Linux还提供大量开发包和驱动程序,构成了所需的开发环境。在系统设计稳定并准备进行优化时,通常会转向无操作系统环境,只提供必要的软件。但是,这主要取决于应用,许多制造商会交付完整的Linux系统,以保持他们要提供的灵活性。
与用于可编程逻辑的HDL一样,整个内核源代码、KuiperLinux镜像和No-OS项目都是完全开源的,让最终用户能够按照自己的意愿更改组件。如果需要,还可以将这些代码库移植到不同的处理器系统或不同的运行时环境中。
图2所示的最后一个组件是与主机PC的连接,如绿色方框所示。在运行该系统时,可以对设备进行配置,并将数据流备份到主机系统进行分析,开发人员将利用MATLAB或TensorFlow等标准工具在主机上创建算法。最终将这些算法转移到嵌入目标中,让他们能够使用本地处理能力来加快算法开发迭代。
访问CbM数据——使用入门
使用Arm处理器和PL一般发生在设计流程较为靠后的阶段,也就是要对系统实施优化进行部署时。所以,对于开发人员来说,最开始常用的切入点都是从工作站远程连接至嵌入式系统。在嵌入式系统上运行Linux时,因为基础设施的设计方式,在工作站上远程或本地运行代码是一个相对透明的过程。这主要是因为名为libIIO的开源库。libIIO是一个接口库,允许在内核的LinuxIIO框架内构建适用于不同设备驱动程序的简单、一致的访问模型。这个库是能够灵活使用CbM平台的核心,并提供数据流传输和设备控制功能。
libIIO本身主要分成两个部分:
u libIIO库,这是一个C语言库,用于访问不同的IIO驱动程序属性或函数。这包括向设备(例如ADC、DAC和传感器)传输数据流或从中输出数据流。
u IIOdaemon(iiod)利用实际的驱动程序的库和内核接口来管理libIIO库或客户端之间的访问。
libIIO和iiod本身是从不同的组件写入,可以使用不同的方法来访问驱动程序,即所谓的后端。后端允许本地和远程用户对libII进行控制和提供数据流,而且,由于它们已形成组件,所以可以将新后端添加到系统中。目前,libIIO支持四个后端:
u 本地:允许访问连接至同一设备的硬件的本地可访问驱动程序。
u USB:通过使用libusb,此后端允许通过USB链接远程控制驱动程序。
u 串行:为通过串行连接的电路板提供更通用的接口。UART是最常见的用例。
u 网络:最常用的远程后端,基于IP来访问网络中的驱动程序。
u
图3.使用网络后端的libIIO系统概述
图3从系统层面概述如何使用libIIO组件,以及如何将它们集成到整个系统中。图中左侧是嵌入式系统,它已安装libIIO库,运行iioddaemon。在嵌入式系统中,用户可以访问本地后端,甚至网络后端。他们可以通过更改一行代码来确认任一后端的地址,在两个后端之间切换。无需对目标代码进行其他更改。
图4.libIIO远程与本地示例
图3左侧显示的是远程主机,可以运行任何操作系统。提供Windows、macOS、Linux和BSD等官方软件包。该图显示使用了基于网络或IP的后端,也可能是使用串行、USB或PCIe连接。从用户的角度来看,可以从C语言库本身,或者从其他语言的许多可用绑定来使用libIIO,包括:Python、C#、Rust、MATLAB和Node.js。为需要与应用中的不同驱动程序交互的用户提供多种选择。
应用和工具
当开始使用一个新设备时,通常不建议直接使用libIIO。所以,有很多基于libIIO构建的更高等级的应用,它们通过命令行和GUI格式为IIO设备提供基本的配置能力。它们分别是IIO工具和IIO示波器。
IIO工具是一组与libIIO一起发布的命令行工具,对于通过脚本执行的低等级调试和自动化任务来说非常有用。例如,在执行实验室测试时,它可以在不同的采样率模式下设置平台,以及收集一些数据。利用几行bash,或通过使用IIO工具的批处理脚本可轻松完成这些操作。图5显示了一个简单示例,可以在本地或远程运行,以更改采样速率和ADC的地输入模式。这个示例使用名为iio_attr的IIO工具,让用户能够轻松更新设备的配置。
图5.IIO工具的iio_attr部分的使用示例
但是,对用户来说,最常见的切入点是GUI应用IIO示波器,一般被称为OSC。与IIO工具一样,OSC是通用的,可以管理任意IIO驱动程序,而且,因为它是基于libIIO构建,所以它可以远程运行或在电路板上运行。但是,它也包含一个插件系统,可以为特定的驱动程序或驱动程序组合添加专用选项卡。图6显示自动加载到基于CN的电路板上的插件选项卡,包括控制和监控选项卡。这些选项卡提供了一个简单的界面,可以访问CN的ADC、DAC和控制引脚的低级功能,以及数据采集板和测试点监控的基本示意图。如需了解其他可用的默认选项卡和插件信息,可以访问ADI公司Wiki