CN0549 基于条件的简介 监控平台
在本文中,我们将重点介绍软件生态系统、数据分析工具和 软件集成可用于CN0549的不同组件和 工程师和数据科学家如何利用它们进行应用程序开发。这是关于基于条件的两部分系列文章中的第二篇 使用 CN0549开发平台。新平台旨在加速 定制CbM解决方案的开发流程,从原型到生产。第 1 部分重点介绍 MEMS 振动技术和捕获高质量振动数据 用于 CbM 应用。
生产之旅和操作方法 它更快!
构建状态监测解决方案时,它们必须包含本地传感器 处理、连接以及某种形式的软件或固件来实现这一切 功能。CN0549通过提供可定制的产品来解决所有这些挑战 硬件和软件方面的选项,因此工程师和软件 开发人员可以在使用通用应用程序的同时在其应用程序中进行设计权衡 工具和基础设施。例如,如果您想选择特定的微控制器或FPGA进行处理,则更喜欢使用Python编码,或者具有 您想要重复使用的常用传感器。这使得CN0549成为一个功能强大的平台 对于那些希望构建优化的CbM解决方案的人,其中处理,电源, 性能、软件和数据分析可以根据他们的需求进行定制。
嵌入式系统开发流程
让我们考虑一个嵌入式系统从概念到生产的通用开发流程。图 1 提供了抽象流的顶级概述。
图1.嵌入式系统开发流程。
图 1 所示设计过程的第一步是数据研究 阶段。在此阶段,用户将其需求映射到不同的硬件 以及其应用程序所需的软件要求。从硬件的角度来看,这些可能是冲击容限、模拟信号带宽、 或测量范围。在考虑软件要求时, 采样数、采样率、频谱、过采样和数字 过滤是 CbM 应用的重要参数。该平台非常 有用且灵活,允许研究人员使用不同的传感器组合 并根据自己的应用需求调整数据采集参数。
数据研究阶段之后是算法开发阶段,其中 该系统的应用或使用已得到证明。这通常需要开发 在高级工具中建模或设计算法,最终将移植到 嵌入式系统。但是,在优化设计之前,必须对其进行验证 使用真实数据和硬件在循环中,这确实是CN0549 之所以出色,是因为它不仅提供了与流行的高级的直接集成 分析工具,但它也允许硬件在环验证。
一旦设计得到证明,优化和获得必要的工作 开始嵌入软件组件。在嵌入式设计阐述中 阶段,这可能需要重新实现某些算法或软件层才能在FPGA或资源受限的微控制器中工作。非常小心 在将设计移植到原型上时,必须对其进行持续验证,或者 接近生产硬件进行最终验证。
最后,我们进入生产阶段,这可能与 设计开始使用的原始开发环境,但尽管如此 仍然需要满足相同的要求。由于最终系统可能有 远离原始研究系统迁移,运行相同的代码或 测试可能是不可能的或极其困难的。这可能会导致生产 测试问题和单元故障,可能需要额外的时间和金钱 投资补救。
通过最大化重用来降低风险
在设计过程中降低风险的最简单方法之一是重用 每个阶段都有尽可能多的硬件和软件组件, CN0549提供了许多开箱即用的资源供开发人员利用 直接在开发流程的所有阶段。CN0549解决方案提供 原理图和电路板布局文件,一个开放的软件堆栈,用于优化 和功能齐全的环境,以及更高级别工具的集成选项 比如MATLAB和Python。最终用户可以利用来自 ADI并选择他们想要维护或更改的部分 从研究到生产。这也使最终用户能够专注于算法开发和系统集成,而不是使用ADI器件或接地进行原理图输入。 向上软件开发。利用硬件模块和重用软件 ADI的设备驱动程序、HDL或应用固件等层可降低 构建系统所需的开发时间,可以大大加快时间 到市场。®
软件开发流程和流程
CN0549在开发过程中为工程师提供了无数选择,允许 他们使用通用语言工作,包括 C 或 C++,同时使用数据分析 他们有经验的工具,如MATLAB或Python。这主要是 通过利用和构建开放标准以及现有的 支持来自不同制造商的多个嵌入式平台的解决方案。
CN0549 系统堆栈
图 2 所示的系统堆栈提供了不同 组成CN0549系统的组件。在顶部的深蓝色框中 左边是传感器和数据采集(DAQ)板,而浅蓝色和 紫色框概述了用于数据处理的FPGA分区。该平台直接支持英特尔DE10-Nano和Xilinx CoraZ7-07s,涵盖 两家主要的 FPGA 供应商。绿色框表示连接回 主机电脑。这提供了从硬件到高级的直接数据访问 用于算法开发的数据分析工具。®
图2.CN0549平台的系统堆栈。
所有硬件描述语言(HDL)代码都是开源的,允许 开发人员进行修改以将数字信号处理 (DSP) 插入 可编程逻辑(PL)内的数据流,如图2所示。这 可以是任何东西,从过滤器到状态机,甚至是机器学习,以及 根据您的系统分区,此步骤也可以在用户中完成 空间或应用层。由于代码是公开可用的,因此可能是 移植到来自不同制造商或不同处理器的其他 FPGA 系列取决于您的最终应用需求。
在 Arm 处理器内部有两个软件选项。它们的使用将是 取决于用例,大多数开发人员都可能使用这两种情况:®
Linux:为输入中内置的DAQ扩展板提供内核内驱动程序 内核内的输出工业 (IIO) 框架。这与完整的 嵌入式Linux发行版称为Kuiper Linux,运行在Arm核心中 用户空间,基于树莓派操作系统。®
X No-OS:裸机项目提供的驱动程序与 Linux内核,将与Xilinx或Intel的SDK一起使用。这也可以 在实时操作系统 (RTOS) 环境中实现为 另一种实现。
建议开发人员从Linux开始学习并开始开发 使用他们的系统,因为它提供了最多的工具。Linux也 提供了大量的软件包和驱动程序,从而营造出理想的开发环境。一旦系统设计稳定并准备就绪 优化,通常切换到No-OS并且仅提供以下软件 必要。但是,这高度依赖于应用程序,许多将满载 Linux 系统,因为它们提供了灵活性。
就像用于可编程逻辑的HDL一样,整个内核源代码Kuiper Linux 图像和No-OS项目是完全开源的,允许最终用户 根据需要修改任何组件。这些代码库也可以移植到 如果需要,不同的处理器系统或不同的运行时环境。
图 2 的最后一个组件是与主机 PC 的连接,如 绿色框。运行系统时,可以配置设备,数据 流式传输到主机系统进行分析,开发人员将利用 MATLAB 或 TensorFlow 等标准工具在其主机上创建算法。 然后将这些算法最终转移到嵌入式目标上,允许它们使用 它们的本地处理能力可实现更快的算法开发迭代。
访问 CbM 数据 — 入门
使用 Arm 处理器和 PL 通常发生在更进一步的阶段 针对部署优化系统时的设计流程。因此 开发人员的常见入口点最初将涉及远程连接到 工作站中的嵌入式系统。在嵌入式系统上运行Linux时,在工作站上远程或本地运行代码是相对的 由于基础设施的设计方式,流程透明。这主要是 由于一个名为libIIO的开放库。libIIO 是一个接口库,允许 用于对构建的不同设备驱动程序的简化且一致的访问模型 在内核中的 Linux IIO 框架内。这个库是核心 使CbM平台的使用如此灵活,并提供数据功能 流式传输和设备控制。
libIIO本身分为两个主要部分:
libIIO 库,它是用于访问不同 IIO 驱动程序属性或函数的 C 库。这包括与ADC等设备之间的流数据, DAC和传感器。
称为 iiod 的 IIO 守护进程,负责管理之间的访问 libIIO 库,或使用该库和内核接口的客户端 实际驱动程序。
libIIO 和 iiod 本身是由不同的组件编写的,允许 访问所谓的后端驱动程序的不同方法。后端 允许来自本地和远程用户的libIIO控制和数据流,并且由于它们是 组件化的新后端可以添加到系统中。目前有 libIIO 支持的四个后端:
本地:允许访问本地可访问的硬件驱动程序 到同一台机器上。
USB:利用libusb,该后端允许远程控制驱动程序 通过 USB 链接。
串行:为通过串行连接的电路板提供更通用的接口 连接。UART是最常见的用途。
网络:最常用的远程后端,基于 IP 进行访问 跨网络的驱动程序。
图 3 提供了 libIIO 组件的系统级概述 被使用以及它们如何适应整个系统。在图表的左侧是 嵌入式系统,安装了 libIIO 库并运行 IIOD 守护进程。 从嵌入式系统,用户可以访问本地后端,甚至 网络后端。在他们的代码中,他们可以通过 单行更改以解决任一后端。目标无其他更改 代码是必需的。
图3.libIIO系统概述使用网络后端。
图 3 的左侧表示可能正在运行的远程主机 任何操作系统。有适用于Windows,macOS,Linux的官方软件包, 和 BSD。在图中使用了网络或基于 IP 的后端,但这 也可以是串行、USB 或 PCIe 连接。从用户的角度来看,libIIO 可以从 C 库本身或许多可用的绑定中利用 其他语言包括:Python,C#,Rust,MATLAB和Node.js。提供 对于需要与不同接口的用户来说,这是一个重要的选择 来自其应用程序的驱动程序。
图4.libIIO 远程与本地示例。
应用程序和工具
开始使用新设备时,通常不建议直接使用 libIIO。因此,存在许多构建在 libIIO,通过命令为任何IIO设备提供基本可配置性 行和 GUI 格式。这些分别是IIO工具和IIO示波器。
IIO 工具是一组命令行工具,与 libIIO 一起提供,并且 对于通过脚本编写的低级调试和自动任务非常有用。例如 对于实验室测试,以不同的采样率设置平台可能很有用 模式并收集一些数据。这可以通过几行 bash 或 通过利用IIO工具的批处理脚本。图 5 显示了一个简单的示例 可以在本地或远程运行以修改采样率并更改输入 ADC的共模。该示例使用了一个名为 iio_attr 的 IIO 工具,该工具 允许用户轻松更新设备配置。
图5.IIO工具iio_attr部分的示例用法。
但是,用户最常见的入口点是GUI应用程序IIO 示波器,通常称为 OSC。与IIO工具一样,OSC旨在 是通用的,以允许控制任何IIO驱动程序,并且由于它基于libIIO,因此它可以 可以远程运行或在开发板本身上运行。但是,它还包含一个插件系统 可以为特定驱动程序或组合添加专用选项卡 司机。图 6 显示了基于 CN0540 的插件选项卡自动加载 板,包括控件和监视选项卡。这些选项卡提供了一个简单的 用于访问CN0540的ADC、DAC和控制的低级功能的接口 引脚,以及数据采集板和测试点的基本图 监测。如果您想了解其他可用的默认选项卡和插件,ADI公司Wiki上提供了更多OSC文档。
图6.CN0540 IIO 示波器插件选项卡。
OSC 的最后一个重要方面是捕获窗口。捕获窗口 为从ADC或任何基于libIIO的缓冲器收集的数据提供绘图功能。图7显示了在频域模式下使用的捕获窗口, 其中绘制了数据的光谱信息。其他情节,包括时间 域图、相关性图和星座图可用。这对于 抽查设备、调试或在评估过程中。剧情 包括标记、峰值检测、谐波检测甚至相位估计等常见实用程序。由于 OSC 也是开源的,因此可以通过 任何人都可以添加更多插件或绘图,甚至修改现有功能。
图7.频域模式下的IIO示波器捕获窗口。
算法开发环境集成
到目前为止,我们已经介绍了大多数工程师在以下情况下开始的核心低级工具 首先使用CN0549。首先了解这些很重要,以便开发人员可以了解系统的灵活性和不同的选择或 他们可以使用的接口。但是,在建立基线系统并 运行时,开发人员将希望使用 MATLAB 或 Python 等工具将数据快速移动到算法开发中。这些程序可以导入 来自硬件的数据。必要时可以设计额外的控制逻辑。
在机器学习开发周期的上下文中,通常有一个 开发人员将遵循的通用流程,独立于他们所需的软件 用于处理数据的环境。中概述了此过程的示例 图 8,其中收集数据,分为测试和训练,开发模型或算法,最后部署模型以在现场进行推理。 对于实际服务,此整个过程会不断执行以引入新的 学习生产模型。TensorFlow、PyTorch或MATLAB等工具。 机器学习工具箱在工作时考虑了此过程。这个过程使 感觉,但通常是收集、组织和复杂任务的努力 可以忽略或完全忽略数据的管理。为了简化 这项任务,一个相关的软件生态系统就是用这些工具设计的,并且 牢记包。
图8.机器学习模型开发流程。
Python 集成 — 连接到 Python 分析工具
首先,从 Python 开始,可以使用 CN0549 的设备特定类 通过模块PyADI-IIO。配置设备的简单示例 采样速率和以太网拉取缓冲器如图6所示。有 没有复杂的寄存器序列、模糊的存储器控制调用或随机位 记住。这是由驱动程序,libIIO和PyADI-IIO为您管理的。 电路板本身,远程在工作站上,甚至在云中。
图9.PyADI-IIO示例。
PyADI-IIO可通过pip和conda安装,将控制旋钮公开为: 易于使用和记录的属性。它还提供通常可消化的类型(如 NumPy 数组或本机类型)的数据,并将处理 数据流(如果可用)。这使得PyADI-IIO易于添加到诸如 Jupyter Notebook,并轻松地将数据输入机器学习管道,而无需 不得不求助于不同的工具或复杂的数据转换 - 允许开发人员 专注于他们的算法,而不是一些困难的 API 或数据对话。
MATLAB 集成 — 连接到 MATLAB
在MATLAB方面,提供了对CN0549及其组件的支持 通过ADI公司传感器工具箱。这个工具箱,就像PyADI-IIO一样,有 针对不同部件的设备特定类,并将它们实现为 MATLAB 系统 对象 (MSO)。MSO是MathWorks作者可以交互的标准化方式 到硬件和不同的软件组件,并提供高级功能 协助代码生成、Simulink 支持和常规状态管理。许多 MATLAB 用户可能会利用 MATLAB 的功能,这些功能被实现为 不知情的 MSO,例如示波器或信号发生器。在图 10 中,我们 使用CN0532接口和DSP频谱分析仪示波器,两者都有 作为 MSO 实施。同样,与PyADI-IIO一样,有一个友好的界面用于 传统的 MATLAB 用户。
图 10.带示波器的传感器工具箱流式处理示例。
除了硬件连接之外,传感器工具箱还与 用于 HDL 和 C/C++的代码生成工具。这些是开发的绝佳工具, 模拟和部署 IP,即使对于那些不熟悉 HDL 设计的人也是如此 或工具,但了解 MATLAB 和 Simulink。
使用TensorFlow的分类示例
CN0549套件提供了几个来自基本数据流的示例 到机器学习分类示例。时序机器学习 数据,如来自CN0532的振动数据,可以从几个不同的数据中获取 观点。这可能包括支持向量机 (SVM)、长期短期 存储器 (LSTM) 模型,甚至是自动编码器(如果数据直接解释) 作为时间序列。但是,在许多情况下,转换 时间序列问题转化为图像处理问题并利用丰富的 在该应用领域开发的知识和工具。
让我们看看 Python 中的这种方法。在提供的示例之一中 PyADI-IIO,通过将CN0532安装到一个 摆动风扇。这是在风扇的不同设置下完成的(睡眠、常规、 过敏原),在每种模式下,捕获了 409,600 个样本。检查时 图11中的这些数据,过敏原病例的时域很容易识别 但另外两种情况更难区分。这些可能可以通过检查识别,但让算法识别这些情况可能是错误的 在时域中容易。
图 11.时间序列中的风扇振动数据。
为了帮助更好地区分用例,数据被转换为 频域图和频谱图用于绘制不同频率随时间变化的浓度。图 12 所示的频谱图有很多 数据差异更明显,并且在整个时间维度上保持一致 与图 11 相比。这些频谱图实际上是图像,现在 可以使用传统的图像分类技术进行处理。
图 12.捕获的振动数据的频谱图。
将数据集拆分为训练集和测试集,频谱图为 馈送到具有三个密集层的仅中性网络 (NN) 模型和 较小的卷积神经网络 (CNN) 模型。两者都是在 TensorFlow,能够在100%的测试验证中轻松收敛到接近100% 时代。CNN在大约一半的时间内收敛,大约1%的可调谐 参数,使其成为迄今为止更高效的设计。培训趋同 图 13 提供了精度与纪元的关系图,以概述 CNN 的快速收敛。
图 13.CNN 随时间推移的振动频谱图训练精度。
所有 Python 脚本、笔记本和数据集都可用于此示例 在 GitHub 上的 PyADI-IIO 源代码树下。由于提供了数据集,因此 甚至可以在没有CN0549的情况下使用TensorFlow的示例演示 硬件。但是,使用硬件,训练好的模型可用于 实时推理。
边缘到云:迁移到嵌入式解决方案
创建模型后,可以部署该模型以用于推理目的或决策 制作。使用CN0549,可以将其放置在数据所在的远程PC上 从CN0540流式传输或直接在嵌入式处理器上运行。取决于 在实现中,将模型放置在处理器中将需要更多 工程工作,但能效可以提高一个数量级,并且将 能够实时操作。幸运的是,在过去的几年里,有 用于部署的工具和软件的巨大发展增长 机器学习模型。
利用 FPGA
Xilinx 和英特尔都拥有高级综合 (HLS) 工具来转换高级 语言转换为在 FPGA 上运行的 HDL 代码。这些通常会与 TensorFlow、PyTorch 或 Caffe 等 Python 框架有助于将模型转换为 IP 核,允许工程师将 IP 部署到 DE10-Nano、Cora Z7-07S,或自定义系统。然后,这些IP核将被缝合到开放中 ADI提供的HDL参考设计。图 14 显示了一个带注释的屏幕截图 来自 Vivado 的 Cora Z7-07S CN0540,专注于数据路径。在 设计,来自CN0540的数据通过SPI引脚读取,以及24位样本 由 SPI 引擎解释,并传递到 DMA 控制器到内存中。 任何 DSP 或机器学习模型都可以直接插入到此管道中 在数据路径中。
图 14.Cora Z7-07S HDL 参考设计数据路径显示在 Vivado 2019.1 中。
利用微处理器
而不是将算法转换为HDL层,它们可以是 直接在 Arm 核心中运行。取决于数据速率和复杂性 算法,这是一个合理的开发路径,通常更多 简单。为 Arm 核心开发 C 代码甚至 Python 将比HDL花费更少的开发资源和时间,并且 通常更容易维护。
像 MATLAB Embedded Coder 这样的工具甚至可以简化这个过程,并自动将 MATLAB 转换为 Arm 内核的可嵌入和优化的 C 代码。 或者,TensorFlow具有可嵌入的TensorFlow Lite等工具。 他们的 Python 库的 C 版本,允许向 嵌入式目标。
智能决策拓扑
基于状态的监控不是一刀切的硬件和 软件,这就是CN0549设计灵活的原因。当我们 考虑诸如CbM的异常检测等问题,通常可以解决 从两个时间尺度:一个我们需要立即做出反应,例如在 与安全相关的场景,或长期时间尺度上与维护或设备更换更相关的场景。两者都需要不同的算法,处理 权力和方法。
在理想情况下,作为机器操作员,我们将拥有一个大型数据湖 训练我们的模型,并且两者都处理短期检测而不会造成麻烦 事件,以及从正在运行的设备连续传输数据以备将来使用 维护预测。但是,对于大多数运营商来说,情况可能并非如此。 数据湖更像是干涸的河床。对某些人来说也可能很困难 考虑到安全问题,执行数据收集的现成解决方案, 物理位置、网络或拓扑要求。这些困难 推动对更多定制解决方案的需求。
CN0549是一个具有多种连接选项的独立系统。因为它运行 标准 Linux、以太网和 Wi-Fi 等传统网络堆栈无法正常工作 盒子,如果需要,甚至可以连接蜂窝调制解调器。在实践中 在应用中,有一些典型的拓扑结构非常突出,如图 15 所示。
图 15.CbM 网络拓扑。
图 15 所示的最左侧配置是脱机收集案例, 这可能发生在远程站点或连接到互联网的地方 不可能。在这种情况下,大型存储介质将与平台共存 并按计划手动收集。或者,其他两个选项 将数据流式传输到公共终结点。图 15 的中间配置为 一个隔离的网络,可能只是组织内部的网络,或者只是一个 远程位置中集中收集数据的平台集群。这可能会 出于安全考虑或只是缺乏连接而必需。的设置 CN0549对于任何这些配置都很容易,并且可以针对 终端部署的特定需求。
最终配置是直接云选项,其中每个平台都直接 访问互联网并将测量推送到云端。由于 CN0549 运行 在Linux上,该平台可以利用不同云供应商(如Microsoft)的API。 Azure IoT 或 Amazon IoT Greengrass 从 Python 等语言轻松创建 开始为新连接的设备构建数据湖的简单途径。
当云和本地进程之间存在一致的连接时, 正如我们在需要或可以之间讨论的那样,可以拆分不同的算法 在本地运行以及可以在云中运行的内容。这将有自然的权衡 在对算法复杂性、延迟的处理能力要求之间 事件,以及可发送到云的内容的带宽限制。然而 由于它非常灵活,因此可以轻松探索这些因素。
结论
CN0549 CbM平台提供系统灵活性和多种软件 为设计人员开发应用程序时提供的资源。深入了解 软件堆栈已经提供了关于如何不同的讨论 组件可用于 CbM 和预测性维护 (PdM) 开发。由于软件、HDL、原理图和集成的开放性 借助数据科学工具,设计人员可以利用他们所需的组件 整个堆栈的终端系统。综上所述,此状态监测 Design 提供了一个易于使用的开箱即用解决方案,并配有开源 软件和硬件,提供灵活性并允许设计人员实现 在更短的时间内获得更好的定制结果。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !