= 基于 MEMS 和 CNN 的振动筛故障检测设备
// 基于 MEMS 和 CNN 的振动筛故障检测设备
曹王仁博 <cao.wangrenbo@yandex.com>
2024.03.11
:toc: auto
:stem: latexmath

== 摘要

随着物联网 (IoT) 和工业 4.0 的快速发展，对实时监测和分析振动数据的需求不断增长。传统的振动监测系统通常依赖于中心服务器进行数据处理，这会带来延迟和数据传输成本高昂的问题。为了解决这些问题，本文提出了一种基于卷积神经网络 (CNN) 和微机电系统 (MEMS) 的边缘计算振动筛故障检测设备。该设备通过采用 MEMS 技术的加速度传感器和温湿度传感器，采集被测对象的相关振动数据和温度信息，并通过快速傅里叶变换获取振动信号的频域特征。将采集到的三轴加速度计的时域或频域数据通过卷积神经网络获得能检测被测对象工况的分类模型，并通过 cube-ai 工具将模型转化压缩并部署到基于微控制器的边缘计算振动检测节点上。该节点具有自动工况识别，基于工业现场总线和蓝牙数据回传的功能。通过该设备，能够实现简化的工况辨识，无需针对特定设备人工设定辨识特征，并可作为兼容的 Modbus 传感器或者 BLE 节点被动查询或主动上报相关数据。实现低成本、易部署的振动检测。

关键词：振动筛、故障监测、边缘计算、CNN、MEMS

== Abstract

With the rapid development of the Internet of Things (IoT) and Industry 4.0, there is a growing need for real-time monitoring and analysis of vibration data. Traditional vibration monitoring systems typically rely on a central server for data processing, which introduces problems with latency and high data transmission costs. To address these issues, this paper proposes an edge computing vibrating screen fault detection device based on convolutional neural network (CNN) and microelectromechanical systems (MEMS). The device collects relevant vibration data and temperature information of the measured object through acceleration sensors and temperature and humidity sensors using MEMS technology, and obtains the frequency domain characteristics of the vibration signal through fast Fourier transform. Use the collected time domain or frequency domain data of the three-axis accelerometer to obtain a classification model that can detect the working conditions of the measured object through a convolutional neural network, and use the cube-ai tool to convert, compress and deploy the model to a microcontroller-based Edge computing vibration detection node. The node has automatic working condition recognition and is based on industrial fieldbus and Bluetooth data return functions. Through this device, simplified working condition identification can be achieved without the need to manually set identification characteristics for specific equipment, and it can be used as a compatible Modbus sensor or BLE node to passively query or actively report relevant data. Enable low-cost, easy-to-deploy vibration detection.

Keywords: vibrating screen, fault monitoring, edge computing, CNN, MEMS

== 绪论

=== 课题研究背景及其意义

随着工业技术的快速发展，振动筛作为物料分选、过滤和去杂的关键设备，在矿业、化工、食品等多个行业中扮演着至关重要的角色。然而，由于振动筛长时间运行在高强度、高负荷的工况下，其内部零部件容易发生磨损、松动或断裂等故障，这些故障不仅会导致生产效率的降低，还可能引发安全事故，给企业带来不可估量的损失。

传统的振动筛故障检测方法多依赖于人工巡检和经验判断，存在检测效率低下、准确性不高、响应速度慢等问题。近年来，随着微电子机械系统（MEMS）技术的快速发展，微型化、高集成度的传感器被广泛应用于振动监测领域，能够实时、准确地采集振动筛的振动信号。同时，卷积神经网络（CNN）作为深度学习领域的重要分支，以其强大的特征提取和模式识别能力，在故障诊断领域展现出巨大的潜力。

因此，本课题提出“基于 MEMS 和 CNN 的振动筛故障检测设备”的研究，旨在通过 MEMS 传感器实时采集振动筛的振动信号，并利用 CNN 对采集到的信号进行深度学习和处理，实现振动筛故障的自动识别和预警。这不仅能够提高故障检测的准确性和效率，减少人工巡检的工作量和误判率，还能够及时发现潜在的安全隐患，保障生产线的稳定运行，具有较为广泛的应用前景。

==== 振动传感器应用现状

振动传感器通过测量设备的振动加速度或振动速度，将振动信号转换为电信号进行采集和分析。在设备故障诊断中，振动传感器可以实时监测设备的振动情况，并通过算法和数据分析技术提取振动信号的特征参数，如频率、振幅、相位等。这些特征参数可以反映出设备的运行状态和健康情况，为故障诊断提供重要依据。

// T. S. Barbosa, D. D. Ferreira, D. A. Pereira, R. R. Magalhães 和 B. H. G. Barbosa, 《Fault Detection and Classification in Cantilever Beams Through Vibration Signal Analysis and Higher-Order Statistics》, J Control Autom Electr Syst, 卷 27, 期 5, 页 535–541, 10 月 2016, doi: 10.1007/s40313-016-0255-1.
Barbosa 等提出了一种基于振动信号分析和高阶统计的悬臂梁故障检测与分类方法，采用 Fisher 判别比（FDR）进行特征选择，人工神经网络进行故障检测和分类。对悬臂梁施加了三种不同程度的故障（低、中、高），所提出的模式识别系统能够对故障进行分类，性能范围为 88% 至 100%。

// 朱来发，金花雪，范伟和刘斌，《加速度传感器的振动筛螺栓松动故障诊断系统》, 华侨大学学报 (自然科学版), 卷 45, 期 1, 页 10–15, 2024.
朱来发 等提出了一种加速度传感器的振动筛螺栓松动故障诊断系统。该系统针对 GLS10 型直线振动筛弹簧紧固螺栓松动故障，结合 LABVIEW 和 NIUSB-6363 数据采集卡进行故障诊断。指出根据加速度信号图谱，以及振幅的大小分辨振动筛的故障类型的方法。

// [1] J. Kim, K. Kim 和 H. Sohn, 《Autonomous dynamic displacement estimation from data fusion of acceleration and intermittent displacement measurements》, Mechanical Systems and Signal Processing, 卷 42, 期 1, 页 194–205, 1 月 2014, doi: 10.1016/j.ymssp.2013.09.014.
// [2] Y. K. Thong, M. S. Woolfson, J. A. Crowe, B. R. Hayes-Gill 和 D. A. Jones, 《Numerical double integration of acceleration measurements in noise》, Measurement, 卷 36, 期 1, 页 73–92, 7 月 2004, doi: 10.1016/j.measurement.2004.04.005.
Kim 和 Thong 等分别提出了通过加速度和间歇位移测量的数据融合进行自主动态位移估计和噪声加速度测量的数值双积分的方式用于位移测量的方式，该方式可以作为振动筛运行状态的数据来源和评价标准之一。

==== 卷积神经网络在相关方向的研究现状

随着计算机深度学习能力的发展，使用常规人工特征提取和传统时频域分析的方式正逐渐被深度学习方式取代。不同于传统方式，深度学习能够快速从大量数据中学习到人工不易观察到的特征，并具有较强的泛化能力。目前主要的研究都是基于广泛使用的深度学习模型结构，如堆叠 自动编码器 (AE)、深度信念网络 (DBN) 卷积神经网络 (CNN)、残差神经网络 (ResNet) 循环神经网络 (RNN)、长短时记忆网络 (LSTM) 等。
// Y. Lei, B. Yang, X. Jiang, F. Jia, N. Li 和 A. K. Nandi, 《Applications of machine learning to machine fault diagnosis: A review and roadmap》, Mechanical Systems and Signal Processing, 卷 138, 页 106587, 4 月 2020, doi: 10.1016/j.ymssp.2019.106587.

或者使用具有成熟结构的 LeNet、MobileNet 等网络。

就卷积神经网络而言，当 CNN 应用于时间序列分类时，它有两个优点：局部依赖性和尺度不变性。局部依赖意味着邻近信号可能是相关的，而尺度不变性是指不同的空间或频率下的尺度不变性。对于使用 CNN 的架构，主要分为使用 1D CNN 和 2D CNN 的诊断模型。2D CNN 广泛应用于图像处理，而 1D CNN 常见于数据序列的处理。一般来说，故障诊断常使用 1D CNN 进行。

//O. Janssens 等，《Convolutional Neural Network Based Fault Detection for Rotating Machinery》, Journal of Sound and Vibration, 卷 377, 页 331–345, 9 月 2016, doi: 10.1016/j.jsv.2016.05.027.
Janssens 等人提出了一种基于卷积神经网络的旋转机械故障检测方法。该网络使用将加速度计信号缩放至均值和单位方差为零（即使用 z-score 方式标准化）。然从训练集信号中提取包含一秒测量样本的非重叠窗口。对于提取样品的每个窗口，计算 DFT，最后将频域数据用作神经网络模型的训练样本。该网络使用了 2D CNN，输入数据是从正交放置的两个振动传感器得到并处理的，具有一个宽度为 64 的卷积层和一个有 200 个单元的全连接层。

// T. Ince, S. Kiranyaz, L. Eren, M. Askar 和 M. Gabbouj, 《Real-Time Motor Fault Detection by 1-D Convolutional Neural Networks》, IEEE Transactions on Industrial Electronics, 卷 63, 期 11, 页 7067–7075, 11 月 2016, doi: 10.1109/TIE.2016.2582729.
Ince 等提出了一种使用一维 CNN 进行实时电机故障检测的方法。该方法使用工业电路监测器采集电机电流数据，通过二阶陷波滤波器对当前数据进行滤波，以抑制用于预处理的基频。通过在抗混叠滤波之前执行抽取，对原始输入电流信号进行 8 倍的下采样。然后进行归一化，作为一维 CNN 网络的输入。该方案实现了大于 97% 的识别准确率，并且具有较高水平的泛化能力。

// 王靖岳，高天，王浩天和王军年，《基于 CNN-LSTM 的齿轮箱复合故障状态监测研究》, 矿山机械，卷 50, 期 5, 页 55–59, 2022, doi: 10.16816/j.cnki.ksjx.2022.05.008.
王靖岳等提出了一种 CNN 内嵌 LSTM 网络的齿轮箱复合故障状态监测方法。该方法使用一维振动信号作为网络输入，该网络先叠加两层卷积层和一层展平层，将特征图转化为一维序列后输入 LSTM 层，再经过一层全连接层得到输出。使用该方法对齿轮箱试验台采集的复合故障数据进行训练与测试，平均准确率达到 86.4%，证明了该模型的有效性与稳定性。

//W. Jiang 和 Z. Yin, 《Human Activity Recognition Using Wearable Sensors by Deep Convolutional Neural Networks》, 收入 Proceedings of the 23rd ACM international conference on Multimedia, 收入 MM’15. New York, NY, USA: Association for Computing Machinery, 10 月 2015, 页 1307–1310. doi: 10.1145/2733373.2806333.
不同于传统使用 1D CNN 进行时间序列分类任务的方法，Jiang 等提出了一种基于深度卷积神经网络的可穿戴传感器进行人体活动识别的方法。该方法使用深度卷积神经网络 (DCNN)，并且将基于陀螺仪、总加速度和线性加速度信号生成的活动图像作为输入。认为通过将各一维信号逐行堆叠形成信号图像中，每个信号序列都有机会与其他序列相邻，这使得 DCNN 能够提取相邻信号之间的隐藏相关性。该论文中将所提方法和 SVM 方法和特征选择方法进行对比，取得了最佳的精度和处理效率。

=== 当前存在的主要问题

==== 加速度传感器问题

当前主要的振动筛故障检测设备从传感器到诊断设备，其设备成本均较高。在传感器选择上，大多数振动检测传感器的加速度传感器方案选择了较为昂贵的压电式单轴或者多轴陶瓷加速度传感器。这种类型的传感器不仅价格高昂，并且体积较大，并且使用模拟量输入，需要接入变送器以及和变送器匹配的主站才才能获取可以处理的数据。并且较多小型化设计中为了匹配模拟量输出的加速度传感器和采集控制器（多为微控制器），使用了高分辨率的模数转换器和较为复杂的外围电路，这进一步地增加了成本。另外，在变送器或转换器的模拟量传输路径上，由于工频干扰和传输损失带来的精度和漂移问题也对系统设计带来了较大的挑战。所以较为昂贵的传感器和较为复杂的设计考量使得目前用于振动筛的故障检测设备难以得到广泛的应用。

==== 计算终端的问题

无论是使用传统人工特征提取方法或是深度学习方式，都需要将采集的数据进行较为复杂的处理。

对于使用远程服务器进行数据处理的方案，其本身最主要的问题在于较大的延迟和负载，以及一些冗余安全性问题。故障检测设备要求具有一定的实时性，虽然某些远程服务器确实性能普遍强于用于边缘计算的数据终端，但是由于复杂的网络结构和请求机制，以及网络设备的转发延迟和性能限制，有较多的传输和转发耗时。而由于实时性的要求会导致传输线路始终保持在较高负载的状态，当需要维护和更换设备时，可能会造成生产效率的损失。此外，对于中心数据处理服务器的依赖导致用户必须同时依赖计算服务提供商，或者自行托管服务器。如果依赖于计算服务提供商，则服务商是否能够长时间的提供支持和维护成为了故障检测设备生命周期的主要影响因素，如果其停止维护，将使得全部检测设备即使完好也无法继续运行。

对于使用传统边缘计算终端进行数据处理的方案而言，传统上为了方便部署，开发者通常偏好于具有成熟开发环境以及完善框架的终端类型以简化开发流程。例如具有 cuda 框架的 jetson 平台、具有 onnx 框架的 Intel 平台或者其他具有专用加速器如 npu、xpu 的 aarch64 平台等。但对于一般的振动筛故障检测场景来说仍然较于昂贵，并且仍然需要搭建采集前端，部署流程本质上并无减少。对于较为小型的农业或者工业振动筛，很可能存在边缘计算终端价格占比较高甚至高于设备成本的情况，也导致了故障检测设备未能得到广泛应用。此外这类边缘计算的开发和维护也较为复杂，采用高级操作系统的边缘计算终端除了需要考虑数据计算流程外，还需要考虑进程保活、故障重启、入侵防护、组件更新等一系列问题，更复杂的功能同时也带来了对于安全和维护的一系列挑战。

=== 本论文主要研究内容

本论文主要针对上述加速度传感器价格昂贵，外围电路复杂以及使用中心服务器进行计算或使用传统边缘计算终端进行计算的种种问题进行改进，提出了一种使用微机电 (MEMS) 传感器进行振动信号采集，使用通用微控制器 (MCU) 部署使用卷积神经网络 (CNN) 的振动筛故障检测设备。并讨论了该设备硬件设计、卷积神经网络的训练和部署以及应用程序的设计等问题。

=== 论文结构

论文主要分为五个部分。

第一个部分介绍基于 MEMS 和 CNN 的振动筛故障检测设备的总体设计方案。主要针对总体技术架构、需求分析、总体方案几个方面进行讨论和设计。确定该设备定位为低成本和易部署，并根据该需求划分软件层次以及选定相关传感器、微控制器等硬件方案。

第二个部分介绍故障检测设备的硬件设计方案。分别对故障检测设备中数据处理主控、蓝牙主控、传感器及外围、电源和保护、通信转换几个部分的硬件方案进行设计和计算。同时设计使用印刷电路板 (PCB) 的故障检测设备原型，以及设计过程中的布局布线问题。

第三个部分介绍基于卷积神经网络的振动筛故障检测分类模型设计，该部分比较常见时间序列分类问题的解决方案，介绍使用卷积神经网络进行故障分类的原因。同时介绍本设计中训练数据的采集、预处理和划分。最后介绍所使用的神经网络主要的结构设计以及相关特点。

第四个部分介绍故障检测设备的程序开发。该部分中先介绍故障检测设备程序的层次分划。然后对于主控程序，主要设计传感器驱动层以及数据预处理部分。然后着重介绍使用 X-CUBE-AI 框架进行分类网络部署的步骤。最后介绍蓝牙主控使用广播模式进行数据传输的程序设计。

第五个部分为总结和展望。总结本设计中所进行的主要工作和相关成果，并对于本设计仍未完成和存在缺陷的地方提出了展望。

== 基于 MEMS 和 CNN 的振动筛故障检测设备总体方案

=== 总体技术架构

基于 MEMS 和 CNN 的振动筛故障检测设备的总体技术架构，主要包括感知层、处理层和传输层三个核心部分。

image::doc_attachments/2024-03-29T09-55-39-990Z.png[总体技术架构] 

==== 感知层

- 主要利用基于 MEMS 技术的加速度计和温湿度计实现被检测对象的振动和环境温湿度感知，实现对工况数据的初步收集。

==== 处理层

- 对感知层采集的到的数据进行预处理。通过滤波去除噪声，尖峰或者平滑数据波形等。根据情况对采样数据进行插值处理，以弥补传感器采样频率不足的缺陷。根据实际特征情况，选择识别频域或者时域信号（由于性能限制，无法同时部署两个推理模型）。

- 将待识别的信号序列送入推理模块中，通过推理得到各个工况的置信度，作为判断当前工况的判据之一。结合温湿度传感器的数据，给出对于当前被测对象工况的检测结果。

- 根据实际场景需求暂存检测结果和中间数据。

- 将需要上报的数据按格式打包，传输到传输层模块或者设备中。

==== 传输层

- Modbus 从设备将数据分类存储并分配寄存器地址，等待主机查询后回报。

- BLE 广播将检测结果和设备 MAC 地址广播，由巡检设备选择记录。

- BLE MESH 下将检测结果和相关数据推送到 BLE MESH 网关，由网关推送到云端。

=== 需求分析

振动筛故障检测设备对于掌握设备运行状态和保障设备稳定安全运行具有重要意义。本设计中“基于 MEMS 和 CNN 的振动筛故障检测设备”总体技术需求如下：

(1) 针对现阶段基于振动和温湿度的工况识别的采样需求、快速处理需求、低功耗和低成本需求，主要完成元器件选型。基于选定传感器、主控等主要元器件设计集采集，数据处理和边缘计算、数据暂存和交换一体的振动检测电路，并根据电路和结构要求设计电路板。

(2) 能够运行实现原始数据采集、数据处理和边缘计算、数据暂存和交换功能的程序。并能够实现稳定长久的运作和后期可维护的需求。

为了满足对于一般工业设备、家用和商用场景下振动筛故障检测的需求，结合边缘计算的运算能力要求以及部署和维护成本考量，得到本文振动筛故障检测设备的设计基本性能指标如表所示。

.振动筛故障检测设备性能指标
[%autowidth]
|===
| 性能 | 参数 
| 输入电压
| 6.5-24V
| 主控主频
| 168MHz
| 采样频率（加速度计）
| 1kHZ
| 采样精度（加速度计）
| 12bits - ±4G
| 采样频率（温湿度计）
| 50Hz
| 采样精度（温度计）
| 0.01℃
| 采样精度（湿度计）
| 0.024%RH
| 通信速率（Modbus）
| 115200bps
| 单板温度范围（理论极限值）
| -40-85℃
| 物料成本
| 50 元
|===


=== 总体方案

本文设计的基于 MEMS 和 CNN 的振动筛故障检测设备主要由基于 MEMS 的传感器模块，基于 CNN 的数据处理模块、数据传输模块和电源模块四部分组成。根据振动筛故障检测设备的基本性能指标要求，确定设备的硬件结构如图所示。

image::doc_attachments/2024-03-30T01-28-57-237Z.png[设备硬件结构框图] 

为了满足低功耗、低成本和平衡性能的要求，做出的硬件选型方案如下。

- 振动传感器选择了意法半导体的 LIS3DH 型三轴加速度传感器，该型传感器具有数字接口，不需要外置 AD 转换器和恒流源等复杂电路，可以方便地通过 SPI 或 I2C 接口读取转换后的采样数据，并且可以设置采样精度，采样速率和传感器量程，具有较强的环境适应能力，可应对具有不同振动特性的场景。

- 温湿度采用 AHT20 型温湿度传感器，作为辅助检测。该型传感器价格低廉，采样精度高和漂移较小，符合设计需要。

- 基于 CNN 的数据处理模块采用兆易创新的 GD32F405RGT6 型微处理器或者意法半导体的 STM32F405RGT6 型微控制器。该型控制器具有较高的主频和较大的随机存储器 (RAM) 和闪存 (flash)，能够存储和加载推理模型的权重数据，并且有内置的数字信号处理器 (DSP) 可以进行硬件快速傅里叶变换 (FFT)，满足对于采样数据进行预处理和推理的需求。

- 蓝牙芯片采用沁恒微电子的 CH582F 型处理器。该处理器集成 BLE 无线通信模块，可以实现自定义广播和蓝牙 MESH 功能，以及将主控数据解包处理等功能，满足无线数据回传的需求。

- RS-485 收发器采用常见的 SP3485 型收发器，配合主控 UART 外设实现基于 Modbus 协议的总线从设备功能，满足基于现场总线的数据回报功能需求。

- 电源模块采用常见的开关电源和低压差线性稳压器的组合方式，满足宽电压输入和高效率转换的需求，结合防反接，防过压保护和 ESD 防护电路，能够有效的满足稳定、安全、低成本的电源供应需求。

== 基于 MEMS 和 CNN 的振动筛故障检测设备的硬件设计

=== LIS3DH 型加速度传感器单元及其电路设计

本设计主要应用场景为简单工业环境和家用或者商业场景，考虑到被测量对分辨率要求普遍不高，以及消费电子对成本控制的要求。选定 LIS3DH 型低功耗高性能三轴加速度传感器。

该传感器基于 MEMS 技术，具有 SPI/I2C 数字接口。可设置 ±2g/±4g/±8g/±16g 的量程和 1Hz 到 5.3kHz 的数据输出速率。

image::doc_attachments/2024-03-26T10-18-47-607Z.png[LIS3DH 电路原理图] 

为保证较高的通信速率，选用了 SPI 通信方式，需连接 SCK、MOSI、MISO、CS 四线。两中断引脚连接到主控 IO 上作为可拓展的 6D 识别或事件输出。

由于总线上仅挂载了一个传感器，所以不用考虑传感器掉电后拉挂总线电平的情况，可将 VDD_IO 和 VDD 同时连接到 3.3V 电源上。

=== AHT20 型温度传感器单元及其电路设计

本设计考虑的场景中，温度湿度值可能会作为评价工作情况的标准。所以选用了 AHT20 型温度传感器作为辅助的数据来源。

该传感器配有一个全新设计的 ASIC 专用芯片、一个经过改进的 MEMS 半导体电容式湿度传感元件和一个标准的片上温度传感元件，湿度分辨率可达到 0.024%RH(Typ.)，温度分辨率可达 0.01℃(Typ.)，具有 I2C 通信接口。

image::doc_attachments/2024-03-26T10-19-10-824Z.png[AHT20 电路原理图] 

根据该型传感器数据手册要求，在 VDD 上增加 RC 滤波电路，选取器件典型值 390Ω 和 10uF。

=== GD32F405RGT6 微控制器及其电路设计

设计要求能够运行裁剪后的卷积神经网络 (CNN)，对于处理器的存储和运算处理能力有一定要求。此外，还要求有一定的耐候性要求，以应对家用或者环境较为恶劣的工业场景。同时考虑作为消费级设备的成本问题，本文设计的振动检测设备的主控核心选用意法半导体的 STM32F405RGT6。另外考虑国产化要求，同时选用可 Pin to Pin 替代的 GD32F405RGT6 进行替换测试，该芯片对于本设计所需性能参数要优于 STM32F405RGT6。对于 STM32F405RGT6，其架构如图所示。

image:doc_attachments/2024-03-11T03-02-23-728Z.png[STM32F405RG 系统框图]

STM32F405RGT6 基于高性能 Arm® Cortex®-M4 32 位 RISC 内核，运行频率可达 168 MHz。Cortex-M4 内核具有浮点单元（FPU）单精度，支持所有 Arm 单精度数据处理指令和数据类型。它还实现了完整的 DSP 指令和内存保护单元 (MPU)，可增强应用程序安全性。

STM32F405RGT6 采用高速嵌入式存储器（1 Mbyte 闪存和 192 KB SRAM）、4 KB 备份 SRAM，以及广泛的增强型 I/O 和外设，连接到两个 APB 总线、3 条 AHB 总线和 1 个 32 位多 AHB 总线矩阵。提供三个 12 位 ADC、两个 DAC、一个低功耗 RTC、多个定时器以及标准和高级功能通讯接口。

工作温度范围为 –40 至 +105 °C

image:doc_attachments/2024-03-11T03-29-49-397Z.png[主控电路原理图]

主控部分的电路由电源、复位电路、启动选择电路、外部高速时钟、外部低速时钟组成。

其中电源部分结合本设计中不考虑器件低功耗运行的情况，使用一个 3.3V 为多个供电域直接供电，并外接退耦和滤波电容，降低开关噪声和电压跌落对主控造成的影响。

复位部分由于芯片内部有一个 40K 的上拉电阻，所以仅需外接一个 0.1uF 的陶瓷电容和一个按键，该电路在上电和按键按下时，可以将 NRST 引脚电平拉低到 
[stem]
++++
V_{IL(NRST)}=0.3V_{DD}\approx0.99V
++++ 
以下，并持续超过
[stem]
++++
T_{NRST} = 20us
++++
的时间

=== CH582F 微控制器及其电路设计

考虑到本设计的场景不仅有传统的工业环境，还可能存在家庭或者商业环境。在家庭和商业中，供电问题比较容易解决，但是通信条件不同于工业中广泛部署有各种现场总线，而且需要考虑美观性，较多的线缆连接会增加布线和维护难度。考虑到这些因素，再结合家庭中比较常见的物联网解决方案，拟采用蓝牙广播或者蓝牙 mesh 的方式作为传感器节点接入。

CH582F 是一款国产的集成 BLE 无线通讯的 RISC-V MCU 微控制器。片上集成 2Mbps 低功耗蓝牙 BLE 通讯模块、2 个全速 USB 主机和设备控制器及收发器、2 个 SPI、4 个串口、14 路 ADC、触摸按键检测模块、RTC 等丰富的外设资源。

在本设计中，CH582F 主要负责和 GD32F405RGT6 主控通过 I2C 接口和专有协议通信，并将数据通过 BLE 广播 或者 作为 MESH 节点的方式传出。

image::doc_attachments/2024-03-27T03-35-37-029Z.png[CH582F 原理图]

由于 CH582F 集成蓝牙射频输出，所以其电路需着重考虑射频部分匹配的问题以及干扰和抗干扰的问题。

本设计中由于设计到蓝牙功能，其对时钟精度要求较高，内部高速时钟受温度影响漂移较大，所以设计了 32MHz 的外部高速时钟。采用无源晶振，按照官方评估板设计，不增加调整电容。

CH582F 内置有电源管理单元 PMU，可以启用内部 DC-DC 以降低运行时内部功耗，故设计了与之匹配的功率电感。

天线设计方面，由于受电路板面积大小限制，以及为了在安装外壳后仍能保证较好的辐射效率以及更好的发射增益，没有使用常规的板上 PCB 天线，而是预留了一代 IPEX 天线座，这样可以按照实际需求选用不同种类的天线，也不用特别关注天线的匹配问题。

=== RS-485 通信接口设计

image::doc_attachments/2024-03-26T09-20-09-142Z.png[RS-485 收发器原理图] 

本设计考虑到设备在工业场景下工作的可能，并考虑到方便接入现有的现场控制总线，所以采用了工业上常用的 RS-485 总线接口。为了简化主控操作，在考虑到通常工业总线通信波特率较低的情况下，设计使用了自动换向电路，不需要主控在操作前对收发器进行读写状态转换。本设计中 RS-485 收发器选用 SP3485 芯片。该芯片内部框图如图所示、

image::doc_attachments/2024-03-26T09-23-22-414Z.png[SP3485 内部框图] 

在主控工作在写状态时，当 TXD 电平下降，NPN 管关闭，此时收发器 2、3 脚经 4.7K 电阻上拉到 3.3V，达到失能接收，使能发送的效果。而当主控工作在读状态时，TXD 上无电平变化，其上拉到 3.3V。此时 NPN 管开启，将收发器 2、3 脚和 GND 导通，达到使能接收，失能发送的效果。

但是由于三极管截止和饱和状态切换速度较慢，输入信号的边沿变化也趋于平缓。所以使用自动换向电路时，设备要求工作在较低的通信速率上。考虑到兼容性，设计通信波特率为 115200 或 9600。

=== 电源设计

image:doc_attachments/2024-03-11T13-29-59-494Z.png[电源电路原理图]

本文设计的设备采用工业上常见的 12-24V 直流电源供电，需要给主控、温度和加速度传感器、485 通信模块等供电。

由于主控和传感器供电电压较小，而输入电压较大，所以设计为两级降压方式。先使用开关电源芯片将电压降至 5V，再使用 LDO 芯片将电压降至 3.3V。这样的设计提高了电源效率，同时降低了输入主控和传感器的开关噪声。

image:doc_attachments/2024-03-12T04-30-03-730Z.png[供电结构] 

==== SGM6132 设计计算

SGM6132 为一款标称 3A，28.5V，1.4MHz 的异步开关电源转换芯片，典型应用电路如图所示。

image:doc_attachments/2024-03-12T08-54-01-296Z.png[SGM6132 典型应用电路]

根据本文应用需求，主要设计的计算有电感 L、反馈分压电阻 R1 R2、续流二极管 D1。

===== 反馈电阻 R1 R2 设计

对于反馈电阻 R1 R2，有

[stem]
++++
V_{FB} = V_{OUT}\frac{R2}{R1+R2}
++++

其中，根据数据手册得

[stem]
++++
V_{FB} = 0.8V
++++

又有要求

[stem]
++++
R2 < 100k\Omega
++++

故选择

[stem]
++++
R2 = 10k\Omega  
R1 = 52.3k\Omega
++++

计算得

[stem]
++++
V_{OUT} = 0.8\times\frac{R1+R2}{R2} = 0.8\times\frac{10+52.3}{10} = 4.984V
++++

该输出电压满足后级 LDO 的最小压降。

===== 电感 L 设计

[stem]
++++
L = \frac{V_{OUT}}{f_{OSC}\times{\Delta}I_L}\times(1-\frac{V_{OUT}}{V_{IN}})
++++

其中
时钟频率 stem:[f_{OSC} = 1.4MHz]  

输入电压 stem:[V_{IN} = 24V]  

峰峰电流值 stem:[{\Delta}I_L = 30\% \times I_L]  

最大峰值电流 stem:[I_L = I_{LOAD} + \frac{V_{OUT}}{2 \times f_{OSC} \times L} \times (1 - \frac{V_{OUT}}{V_{IN}})]  

设计负载电流 1.7A

所以有

[stem]
++++
I_L = 2.000A 
++++

代入得

[stem]
++++
L = 4.712 \times 10^{-6} H = 4.712 uH
++++

就近取标准功率电感值

[stem]
++++
L = 4.7uH
++++

===== 续流二极管 D1 设计

为了减小二极管正向导通损失和恢复时间，续流二极管类型选择肖特基二极管。要求其最大反向电压大于最大输入电压，最大过流能力大于最大负载电流。
按照该需求选择 D1 型号为 SS34。

==== XC6206 设计

XC6206 为一款标称最大输出电流 200mA 最大输入电压 6.0V 的 CMOS 稳压器，典型应用电路如图所示。

image::doc_attachments/2024-03-26T08-58-51-017Z.png[XC6206 典型应用电路]

设计上选用 1uF 的低 ESR 陶瓷电容，尽可能的靠经放置在芯片的输入和输出引脚附近。

=== 基于 MEMS 和 CNN 的振动筛故障检测设备 PCB 设计

为了保证设计对于振动、温度变化等环境的耐受性以及生产时的一致性，整体电路采用印刷电路板（PCB）制作。PCB 的器件布局，功率、信号线的布置对于产品性能有着不可忽视的影响，因此需要对 PCB 进行合理设计。

==== 电源电路布局布线

电源方面，本设计中设备功耗较低，实测运行时功率在 0.5W 以下，负载电流较小。

对于 SGM6132，功率方面较大电流网络 SW 和 VIN 使用较大面积铺铜。但由于 SW 对其他网络存在高频干扰，所以布局时要尽量将电感和续流二极管靠近 SW 引脚附近，并在许可情况下减少该网络铺铜面积和长度。反馈电阻也应靠近 FB 引脚放置，以减少线上电阻带来的损耗。

对于用电器件，滤波和退耦电容应尽量贴近器件供电引脚放置，并且要求路径先通过电容，以保证效果。

==== 通信接口布局布线

本设计中使用的通信接口，除 RS-485 以外都不是差分信号，通信速率都较低且都为串行通信方式，一般情况下不需要考虑线路阻抗和等长需求。对于 RS-485 信号，可以将其作为差分对布线。

==== 射频电路布线

本设计中存在蓝牙射频电路，为了保证射频部分信号损失小，在传输线上要求 stem:[50\varOmega] 特征阻抗。

本设计中 PCB 工艺选择 FR4 板材，层厚 1.6mm，介电常数典型值为 4.25。通过调整线宽匹配阻抗，根据参考设计，选取传输线宽 28.1mil，与 GND 间距 6mil。传输线布置中要求走线转弯半径大于三倍线宽。

布局完成后的顶层视图如图所示。

image::doc_attachments/2024-04-06T06-05-09-730Z.png[PCB 顶层视图]

布局完成后的底层视图如图所示。

image::doc_attachments/2024-04-06T06-05-45-990Z.png[PCB 底层视图] 

实际制作完成后的实验样机如图所示。

// 待插入图片

== 基于 CNN 的振动筛故障检测分类模型设计

//选用 2D-CNN 的原因
=== 神经网络类型的选取

本设计针对的设备振动模型，主要特征为同一工况下振动波形比较稳定，呈现较强的周期性。在功能需求上看，主要需要完成的是三轴加速度计数据到各类工况的置信度的映射，属于较为典型的时间序列分类模型，典型应用为人类活动识别 (HAR)。

传统上，这类时间序列分类任务主要依靠信号处理领域的方法来处理数据，这种方式需要具有该领域较强的专业知识，并且严重依赖于启发式的特征提取（例如传统上电机利用振动数据进行故障辨识的方式）。传统方法只能提取浅层特征，从而导致无人监督和增量任务的性能下降，导致模型的准确性和泛化能力较差。

//Reference: J. Wang, Y. Chen, S. Hao, X. Peng 和 L. Hu, 《Deep learning for sensor-based activity recognition: A survey》, Pattern Recognition Letters, 卷 119, 页 3–11, 3 月 2019, doi: 10.1016/j.patrec.2018.02.010.

当前使用深度学习方法实现时间序列分类的方法中，主要提出了基于循环神经网络 (RNN)、长短期记忆网络 (LSTM)、卷积神经网络 (CNN) 的独立、组合或者变体形式搭建的网络结构。就各网络特征而言，循环神经网络和长短期记忆网络适合识别具有自然顺序的短期活动，而卷积神经网络能够提取数据中的深层特征，更适合具有稳定特征的长期活动。对于本设计而言，考虑到部署设备的计算能力和运行空间有线，仅采用顺序结构的卷积神经网络 (CNN) 进行验证测试。

对于进行时间序列分类的卷积神经网络而言，普遍上使用一维卷积神经网络 (1D-CNN)。在同等构型上，一维卷积神经网络的计算复杂度明显低于传统的二位卷积神经网络，并且具有更少的参数，更容易训练和部署推理。所以目前应用上，大多将一维的处理后的时间序列使用一维卷积神经网络处理，如果存在多个输入值（如采用三轴加速度计作为数据源），会将其并行的作为多个通道输入。在卷积过程中，多个通道相互独立，输入卷积层的通道个数也等于卷积层输出的通道个数。

而在一些研究中提出将多个输入值堆叠成信号图像并送入二维卷积神经网络中 (2D-CNN),在信号图像中，每个信号序列都有机会与其他序列相邻，这使得 CNN 能够提取相邻信号之间的隐藏相关性。该方法应用于人类活动识别 (HAR) 中，提出了一种使用陀螺仪、总加速度和线性加速度信号作为输入的 DCNN。footnote:[W. Jiang 和 Z. Yin, 《Human Activity Recognition Using Wearable Sensors by Deep Convolutional Neural Networks》, 收入 Proceedings of the 23rd ACM international conference on Multimedia, 收入 MM’15. New York, NY, USA: Association for Computing Machinery, 10 月 2015, 页 1307–1310. doi: 10.1145/2733373.2806333.] 

在另一些研究中，直接将单轴的原始数据分成相等的长度，并拼合成一幅图像送入卷积神经网络中，该研究认为该方式进行分类效果应好于使用原始的一维信号作为输入。footnote:[W. Zhang, G. Peng 和 C. Li, 《Bearings Fault Diagnosis Based on Convolutional Neural Networks with 2-D Representation of Vibration Signals as Input》, MATEC Web Conf., 卷 95, 页 13001, 2017, doi: 10.1051/matecconf/20179513001.]

// 插图片

考虑到本设计中相邻时间的三轴加速度数据之间的特征可能有助于对于设备工况进行分类任务，故选二维卷积神经网络。本设计中仅有三轴加速度数据，输入网络的张量大小为：stem:[float32[?,W,3,1]]。其中 W 为采样窗口宽度，图像高度为 3，输入通道数为 1。


//训练数据准备
=== 训练数据的采集和标注
本设计中送入 CNN 进行识别的数据主要是由 LIS3DH 加速度传感器获取的 x、y、z 三轴的加速度数据。准备训练数据的主要过程如下。

* 从下位机接收上传的含有三轴加速度数据的数据包。将数据包解包，并转换成 ASCII 编码以供训练和阅读。将三轴加速度数据逐条储存在文本文件中，以逗号分隔，每个时间点一行。该过程中需要令被测设备保持一种工况，数据以数据流的形式上传并保存。上传的数据需要保证采样时间间隔相等，且在时间上连续。三轴加速度数据在时间上对齐。

* 采集到足够多的数据之后，需要对数据进行标注。由于采集过程中令被测设备保持同一类型的工况，因此每次采集的数据为同一类。

=== 训练数据的滤波处理

//滤波器预处理
MEMS 加速度计的测量误差包括确定性误差和随机性误差。由于机械噪声和电子噪声等随机干扰引起的复杂随机干扰无法通过标定消除，是干扰测量数据准确性的主要因素。但是本设计中由于需要针对设备故障进行检测，如果滤波器选择不当，如故障信号频率位于滤波器的阻带区，或者时域上的特征信号被滤波器平滑处理，会导致工况识别的准确性大大下降，因此谨慎选择滤波器类型和参数至关重要。

由于本设计主要针对振动筛故障检测，常见振动筛工作频率普遍在 100Hz 以下，时域波形比较平滑，并且频域上故障信息往往混杂在噪声信号中，所以选取滤波器时主要考虑对于时域滤波整形的性能问题。在时域滤波场景中，通常使用滑动平均或者一阶递归实现。在阶跃响应下，递归滤波器的波形更加平滑，同时由于数据量较少，处理速度要求高，所以选择计算更快的一阶递归滤波器，通频带在低频区域，符合加速度计数据特性。滤波器的算法公式如下。

[stem]
++++
Y(n) = (1-\alpha) * Y(n - 1) + {\alpha}X(n)

++++
其中：

stem:[\alpha] —— 滤波系数  

stem:[X(n)] —— 本次采样值  

stem:[Y(n-1)] —— 上次滤波输出值  

stem:[Y(n)] —— 本次滤波输出值  

根据现场情况调整滤波系数值，保证数据平滑且滞后程度较低。

=== 训练数据的采样
//加窗滑动采样，选择窗口大小和重叠
使用卷积神经网络进行时间序列分类任务需要较多的训练数据以便获得较好的泛化能力。本设计中采样的数据为连续等间隔采样值，为了进行训练和推理，需要将数据划分为指定大小的数据段。本设计中采用滑动窗口采样的方式创建输入数据。

使用滑动窗口采样，需要指定窗口大小和重叠程度。在试验阶段，选取滑动窗口大小为 90 个采样点，重叠度为 50%。

=== 训练数据的标准化
//标准化
标准化 (Normalization) 是深度学习中重要的预处理手段，由于 CNN 中采用了梯度下降算法，为避免梯度爆炸问题，需要进行标准化操作。同时进行标准化操作还能够便于使用他人的超参数进行训练，同时能提高模型的精度和泛化能力。

一般来说，卷积神经网路偏好于标准化到 [-1.0, 1.0] 范围，本文中由于采样加速度数据具有正负方向，故以加速度 0 值作为标准化零点。

标准化有多种策略，常见方法有 min-max 标准化 (Min-max Normalization)、z-score 标准化 (zero-mean Normalization)、atan 反正切函数标准化。

本设计中使用 z-score 标准化方法，这种方法给予原始数据的均值 (mean) 和标准差 (standard deviation) 进行数据的标准化。经过处理的数据符合标准正态分布。其转化函数如下。

[stem]
++++
x^*=(x - \overline{x})/\sigma
++++

=== 训练数据的划分
//划分
处理后的数据需要进行划分，本设计中将处理后的数据划分为训练集和验证集，其中训练集占比 80%，测试集为 20%。划分完成后需要保证每种标签数据占比均匀。

//骨干网络设计
=== 神经网络结构层次

==== 卷积层
在卷积神经网络（CNN）中，卷积层是核心组成部分，它负责从输入数据中提取关键特征。卷积层通过使用一组可学习的卷积核（或称为滤波器）来扫描输入数据（如图像）的局部区域，并在每个位置上执行卷积操作，从而生成特征图（feature maps）。这些特征图捕获了输入数据在不同空间层次上的局部信息，为后续的网络层提供了有用的表示。卷积层中的每个卷积核都具有一定的尺寸和深度，它们沿着输入数据的宽度和高度方向滑动，并在每个位置上与输入数据进行点积运算，然后加上一个偏置项，最后通过激活函数（如 ReLU）得到输出特征图上的一个值。由于卷积核的权值是共享的，这使得卷积层能够学习到输入数据中的平移不变性特征，并且显著减少了网络中的参数数量，降低了过拟合的风险。

//待验证公式
二维卷积的过程为 stem:[Y(i, j) = \sum_{m=0}^{h-1} \sum_{n=0}^{k-1} X(i+m, j+n) \cdot K(m, n)]

其中，stem:[0 \leq i < H-h+1 ] ，stem:[ 0 \leq j < W-k+1 ]。stem:[ X(i+m, j+n) ] 是输入 X 在位置 stem:[(i+m, j+n)] 的值，stem:[K(m, n)] 是卷积核 K 在位置 stem:[(m, n)] 的值。

//选取怎样的卷积核大小和

==== 池化层
池化层（Pooling Layer）的主要作用是对卷积层的输出进行降采样操作，减小输入数据的空间尺寸，降低模型的计算复杂度，减少过拟合，并在一定程度上提取输入数据的重要特征。池化层的操作过程可以看作是卷积操作的一种特殊情况，但通常不使用权重参数，而是使用预定义的池化函数（如最大值、平均值等）来聚合输入数据。常用池化层类型有最大池化层（Max Pooling）、平均池化层（Average Pooling）和自适应池化层（Adaptive Pooling）等。

本设计中，输入为三轴加速度计在时域上平铺的二维单通道图像，存在一定的纹理特征，所以选用最大池化层以保留纹理特征并增强泛化能力。

==== 全连接层
全连接层（Fully Connected Layer），也被称为密集连接层（Dense Layer）或内积层（Inner Product Layer），是神经网络中常见的一种层级结构，尤其在卷积神经网络（Convolutional Neural Networks, CNNs）的尾部经常出现。全连接层的主要作用是对前一层（可能是卷积层、池化层、或其他类型的全连接层）的输出进行加权求和，并通过激活函数产生非线性特性，从而得到网络的最终输出。

//全连接层激活函数 ReLU

本设计中神经网络输出为故障类型分类的置信度，故在最后一层全连接层中使用 softmax 作为激活函数。softmax 函数将神经网络的输出转换为概率分布。给定一个长度为 K 的向量 z（其中 K 是类别的数量），softmax 函数的第 i 个输出是：
//待验证公式
[stem]
++++
\text{softmax}(z)i = \frac{e^{z_i}}{\sum{j=1}^{K} e^{z_j}} 
++++

softmax 确保输出的概率分布在 [0, 1] 之间，并且所有类别的概率之和为 1。

当使用 softmax 作为分类网络的最后一层时，通常会使用交叉熵损失函数（cross-entropy loss）来度量模型预测的概率分布与真实标签之间的差异。交叉熵损失函数能够很好地与 softmax 函数一起工作，因为它直接度量了预测概率分布与真实概率分布之间的“距离”。本设计中也使用该损失函数。

初步设计的神经网络模型结构如下图所示。

image::doc_attachments/2024-05-12T09-19-31-206Z.png[神经网络模型结构] 

==== 超参数设计
//超参数设计，学习率、损失函数
在设计 CNN（卷积神经网络）中的超参数时，需要考虑多个方面以确保模型能够高效、准确地执行特定任务。以下是一些关键的超参数及其设计考虑因素：

1. 学习率（Learning Rate）：
学习率决定了模型在训练过程中权重更新的步长。
如果学习率太高，模型可能无法收敛；如果太低，训练可能会非常慢。
可以使用学习率衰减策略，如轮数减缓（step decay）、指数减缓（exponential decay）或分数减缓（1/t decay），来随着训练的进行逐渐减小学习率。
通常建议从较小的值（如 0.01 或 0.001）开始，并根据训练情况进行调整。

2. 批次大小（Batch Size）：
批次大小决定了在一次权重更新中使用的样本数量。
较大的批次大小可以加速训练，但可能需要更多的内存；较小的批次大小可能会导致训练不稳定，但可能有助于泛化。
通常，批次大小设置为 2 的幂次（如 32、64、128 等）可以提高计算效率。

3. 卷积层参数：
卷积核大小（Kernel Size）：决定了感受野的大小，通常使用 3x3 或 5x5 的小卷积核。
步长（Stride）：决定了卷积核在输入特征图上滑动的步长，默认为 1。
填充（Padding）：用于在输入特征图的边界周围添加额外的像素，以保持输出特征图的空间尺寸。常用的填充方式有'valid'（不填充）和'same'（填充后输出与输入尺寸相同）。
卷积核数量（Number of Filters/Channels）：决定了输出特征图的深度，通常根据任务和数据集的特性进行设置。

4. 池化层参数：
池化类型：常用的有最大池化（Max Pooling）和平均池化（Average Pooling）。最大池化能够提取最显著的特征，而平均池化则能够保留更多全局信息。
池化窗口大小：决定了池化操作的感受野大小，通常为 2x2。
步长：决定了池化窗口在输入特征图上滑动的步长，与池化窗口大小通常设置为相同值。

5. 全连接层参数：
神经元数量：决定了全连接层的宽度，通常根据任务和数据集的特性进行设置。过多的神经元可能导致过拟合，而过少的神经元可能无法充分学习数据的特征。
激活函数：如 ReLU、Sigmoid、Tanh 等，用于引入非线性特性。ReLU 在深度学习中广泛使用，因为它能够有效缓解梯度消失问题。

6. 优化器（Optimizer）：
常用的优化器有 SGD（随机梯度下降）、Adam、RMSprop 等。不同的优化器具有不同的特性和适用场景，需要根据具体情况进行选择。

7. 损失函数（Loss Function）：
对于分类任务，常用的损失函数有交叉熵损失（Cross-Entropy Loss）；对于回归任务，常用的有均方误差（Mean Squared Error, MSE）等。损失函数的选择应基于任务的需求和数据的特点。

8. 正则化（Regularization）：
为了防止过拟合，可以使用正则化技术如 L1 正则化、L2 正则化（也称为权重衰减）、Dropout 等。这些技术可以限制模型的复杂度，提高模型的泛化能力。

9. 迭代次数（Epochs）：
迭代次数决定了模型在训练集上完整的遍历次数。过多的迭代次数可能导致过拟合，而过少的迭代次数可能导致模型未能充分学习数据的特征。通常需要通过验证集的性能来选择合适的迭代次数。

//本设计中

//导出 h5fd

== 基于 MEMS 和 CNN 的振动筛故障检测设备的程序开发

为了实现本设计的设计需求，程序开发主要分为三个部分。分别是基于 GD/STM32F405 的主控程序、基于 CH582F 的蓝牙主控程序、以及简单的上位机数据采集和标注程序。三部分的功能和关系如下图所示。

image::doc_attachments/2024-04-06T03-32-14-767Z.png[] 

由于采用了卷积神经网络 (CNN) 作为工况识别的方式，考虑到控制板运算性能有限，不适合进行模型训练。所以部署该设备需要分两部分完成，即先采集传感器数据并送至上位机处理，在上位机中将数据格式化，并按照对应工况进行数据标注。标注完成后，使用基于 Keras 框架的 卷积神经网络 (CNN) 进行训练，生成权重数据。由于生成的权重数据体积较大，并且主控设备没有直接对应的推理框架，所以需要使用 Cube-AI 工具进行模型的压缩和转换，以部署到边缘计算主控上。对于边缘计算主控，无论是数据采集阶段，还是推理运行阶段，都需要有对应传感器的设备层驱动、数据预处理过程以及通信模块。当处于推理运行阶段时，下位机主控采集并预处理的数据除了在调试模式中继续发往上位机，还会裁切成对应大小和维度的片段送入 CNN 推理模块中，并获得不同工况的置信度输出。主控将数据暂存并按照格式打包，发送给蓝牙主控和供 Modbus 模块调用，以便实现数据的有线/无线被动查询、无线主动上报功能。对于蓝牙主控，需要实现能解析从主控发送的数据包的板内通信模块，以及蓝牙协议栈。对于数据采集上位机，需要实现和下位机串口通、数据解包和格式化、数据加标签等功能。

=== 基于 MEMS 和 CNN 的振动筛故障检测设备主控程序开发

==== 程序整体架构

根据本设计的功能需求，主控主要任务可分解为信号采集层、基于 FFT 的数据预处理层、基于 Cube-AI 的推理层，以及向网关上报数据的数据交换层。

// 补个分层图

==== 信号采集子程序

===== LIS3DH 加速度传感器驱动层设计

LIS3DH 加速度传感器具有 SPI 和 I2C 接口，由于需求的采集频率较高，对于数据传输速率需求也较高，所以选择使用 SPI 作为和传感器的通信方式。

接口设计上，由于使用抽象程度较高的 hal 库，所以可以直接使用 SPI 外设的初始化和字节发送以及读取接口，无需自行实现。根据本设计需求，LIS3DH 传感器驱动层主要需实现设备初始化、参数配置、加速度数据读取、数据转换等接口。

当 LIS3DH 上电后，需要对其进行初始化和参数配置操作。首先发送指令读取 `whoamI` 寄存器，该寄存器是器件 ID 寄存器，该寄存器值恒为 0x33。通过读取该寄存器值，能够判断是否存在总线或者器件故障，避免继续后续操作产生误动作。当确认正确后，将对应场景所需要的配置写入，本设计中对控制寄存器写操作，设置开启数据更新。设置数据更新速率为 1kHZ，加速度传感器量程为 stem:[\pm4g]，并设置输出分辨率为 12bit。

设备集成 32 级 16 位先入先出缓冲区 (fifo)，可以在将采集到的数据先存入，等待主控读取。也可以直接查询读取，通过查询 `STATUS_REG` 寄存器，当存在新数据可用或者溢出事件时，读取数据数据寄存器值即可。本设计中由于在数据采集中没有其他阻塞操作，所以采用在主循环中直接查询的方式拉取数据。

当获取到数据后，需要根据设置的分辨率和量程将获取的数据转换成以 `mg` 为单位的加速度值。

===== AHT20 温湿度传感器驱动层设计

AHT20 温湿度传感器具有 I2C 接口，由于温湿度仅作为辅助判断工况的数据，且一般变化率不大，所以不用考虑较高的采样速率。

接口设计上，同样采用 hal 库，所以可直接使用 I2C 外设的初始化和字节发送/读取接口，无需自行实现。根据本设计需求，AHT20 传感器驱动层主要需实现设备初始化、参数配置、温湿度数据读取、数据转换等接口。

当 AHT20 设备上电后，需等待 100ms，然后发送对应状态字，并确认回报数据是否有效。

AHT20 没有自动测量的配置，需要主控发送指令触发测量过程。主控发送对应的命令，并等待 80ms。主控可尝试发送读指令至从机，读取的第一个字节为状态位，当状态位表示就绪时，可以继续读取六个字节，即温度和湿度的测量值。如果需要校验，可以再接受完数据段后发送一个 ACK 应答，从机会继续发送一个字节的校验位 (CRC-8)。

当接收完数据后，将数据转换成以 ℃ 和 %RH 为单位的数值，便于理解。

==== 基于 FFT 的数据预处理

不同的工况可能存在不同的振动特性。对于振动筛等设备，如果为了检测偏载或者重载，可能由于激振源工作状态比较恒定，其表现出来的特征主要是加速度幅值上的变化，可能时域上的特征更适合作为判断条件。而对于某些在不同状况下可能出现不同频率分量或者卓越频率的漂移的工况，采用频域特征进行判断则更为合适。

本设计中采用快速傅里叶变换的方式，将时域数据变换到频域上。

离散傅里叶变换 (DFT) 的运算公式为：

[stem]
++++
X[k]=\sum_{n=0}^{N-1}x[n]W_{N}^{nk}, 0 \leq k \leq N-1
++++

其中，

[stem]
++++
W_{N}^{nk} = e^{-j\frac{2{\pi}k}{N}n}
++++

将离散傅里叶变换公式拆分成奇偶项，则前 N/2 个点可以表示为：

[stem]
++++
X[k] = \sum_{r=0}^{\frac{N}{2}-1}X[2r]W_{N}^{2rk}+\sum_{r=0}^{\frac{N}{2}-1}X[2r+1]W_{N}{(2r+1)k}
=\sum_{r=0}^{\frac{N}{2}-1}X[2r]W_{\frac{N}{2}}^{rk}+W_{N}^{k}\sum_{r=0}^{\frac{N}{2}-1}X[2r+1]W_{\frac{N}{2}}^{rk}
=A[k]+W_{N}^{k}B[k],k=0,1,\ldots,\frac{N}{2}-1
++++

同理，后 N/2 个点可以表示为：

[stem]
++++
X[k+N/2]=A[k]-W_{N}^{k}B[k],k=0,1,\ldots,\frac{N}{2}-1
++++

由此可知，后 N/2 个点的值完全可以通过计算前 N/2 个点的中间过程值确定，对 A[K] 与 B[K] 继续进行奇偶分解，直至变成两个点的 DFT，这样就可以避免很多的重复计算，实现了快速离散傅里叶变换 (FFT) 的过程。
//Reference: 基于 FPGA 的多普勒信号快速傅里叶变换系统研究

由于采用的主控带有数字信号处理模块 (DSP)，所以程序中不需要自行实现。采集到足够点数的时域数据后传入处理函数即可。

==== 基于 X-Cube-AI 的推理模型转化和部署

由于本设计中采用边缘计算形式，选用的主控受成本和功耗限制，运算能力和存储空间均受较大限制。在本地计算机中使用较小规模的网络所训练的模型，其大小也达到数兆字节 (MByte)，而所选用的 GD32F405RGT6 所采用的高速嵌入式存储器仅有 1 兆字节 (Mbyte) 闪存和 192 千字节 (KB) 随机存储器 (SRAM)，显然难以直接使用原始模型进行推理。

目前的解决方案主要是通过对模型进行量化剪裁等操作，以及根据微控制器进行针对性的加速优化，减少模型尺寸和推理资源占用。由于使用的微控制器为基于 Cortex-M4F 内核的 GD/STM32F405，可以使用 CMSIS-NN 神经网络库。该库/框架优化了各种常见的神经网络层，如卷积层、全连接层等，确保了在微控制器上的运行效率。而基于 CMSIS-NN 框架，又产生了抽象程度更高，直接面向用户的高级应用层框架和辅助工具包，如独立开发者 Jianjia Ma 开发的 NNoM、Google 的用于微控制器的 TensorFlow Lite、意法半导体的 X-CUBE-AI、瑞萨电子的 e-Ai 解决方案等。这些方案普遍支持将使用特定框架训练的模型文件转化为适合部署于单片机上的形式的 c 库，并提供了模型推理的应用层接口，不需要用户手动维护底层结构。

本设计中由于使用意法半导体提供的 hal 库进行编程，并且使用意法半导体的 STM32CubeMX 工具生成项目，为了简化开发流程，直接使用了 STM32CubeMX 可嵌入的 X-CUBE-AI 工具包构建单片机上的推理框架。

===== X-CUBE-AI 简介

// 该段引用自意法半导体 X-CUBE-AI 手册，确认是否需要添加参考
X-CUBE-AI 通过提供在计算和存储器（RAM 和闪存）方面均已优化的自动神经网络库生成器扩展 STM32CubeMX，该生成器将预训练的神经网络从最常用的 DL 框架（如 Caffe、Keras、Lasagne 和 ConvnetJS）转换为自动集成到最终用户项目的库。项目自动完成设置，准备好在 STM32 微控制器上进行编译和执行。

X-CUBE-AI 内核引擎，是 X-CUBE-AI 扩展包的一部分。它提供一个自动且先进的 NN 映射工具，利用有限并受约束的硬件资源为嵌入式系统的预训练神经网络（DL 模型）生成并部署优化且稳定的 C 模型。生成的 STM32 NN 库（专用和通用部分）可直接集成到 IDE 项目或者基于 makefile 的构建系统。还可导出定义明确且特定的推理客户端 API，用于开发客户端基于 AI 的应用程序。支持各种用于深入学习的框架（DL 工具箱）和层。

image::doc_attachments/2024-05-08T03-27-13-238Z.png[x-cube-ai 内核引擎] 

根据官方说明，X-CUBE-AI 主要采用权重/偏差压缩和操作融合的方式进行 flash 和 ram 空间上的优化，通过设置不同的压缩等级和优化参数，可以取得推理精度和空间以及运行速度的均衡。

===== X-CUBE-AI 模型转化和部署流程

由于集成在 STM32CubeMX 中，所以 X-CUBE-AI 的转化和部署流程自动化程度较高。基本步骤如下所述。

1. 导入使用特定框架生成的模型文件。本设计中使用 Keras 框架在 PC 上进行训练，导出格式为 `.h5df`。

2. 选择压缩等级/优化策略。由于采用权重/偏差压缩和操作融合的方式进行压缩，所以选择较大的压缩等级会导致模型精度产生损失。考虑到本设计中其他应用占用 flash 和 ram 空间不大，故选择 `Medium` 压缩等级，优化策略选择 `Balance`。

3. 进行分析作业，进行维度信息报告网络的预分析（系统集成角度）

4. 确认导入的模型结构和转化的 C 模型结构。测试过程中导入的模型结构和转化的 C 模型结构如下图。

5. 执行本地验证。启动所生成的 C 模型的验证过程。验证后生成的静态库参数如图所示。

6. 执行目标上验证。工具箱会生成验证固件并烧录至目标单片机，单片机循环运行推理流程，通过串口返回运行时性能。

image::doc_attachments/2024-05-09T03-00-34-821Z.png[导入的 Keras 模型结构] 

image::doc_attachments/2024-05-09T02-59-50-174Z.png[转化后的 C 模型结构] 

image::doc_attachments/2024-05-09T02-56-47-839Z.png[生成的静态库参数] 

==== 基于 Modbus 总线协议的程序设计

Modbus 是一种广泛使用的串行通信协议，由 Modicon 公司（现为施耐德电气 Schneider Electric）在 1979 年开发，主要用于可编程逻辑控制器（PLC）之间的通信。如今，它已经成为工业电子设备之间连接的标准协议之一。Modbus 协议的主要特点包括免费、易于部署和维护、支持多种电气接口和传输介质，能够在各种环境中实现可靠的通信。Modbus 协议基于主从架构，其中一个设备作为主节点，其他设备作为从节点。主节点负责启动命令，而从节点则响应并执行相应的操作。Modbus 的数据模型基于四个基本表：离散量输入、线圈、输入寄存器和保持寄存器，允许在主从节点之间读写大量的数据项。此外，Modbus 还支持多种功能码，用于执行各种操作，如读取和写入寄存器、读取和写入线圈等。Modbus 协议支持多种传输方式，包括串口传输和以太网传输（如 Modbus TCP）。Modbus 协议凭借其简单性、开放性和易实施性，在工业领域得到了广泛的应用。无论是数据采集与监视控制系统（SCADA）还是远程终端控制系统（RTU），Modbus 都能够提供高效、可靠的通信解决方案。

本设计中仅使用 MODBUS 传输检测的状态结果。状态值均按 16 进制存储，这样协议上只需要实现 03 读指令，对于向本机地址发送的未定义的指令可直接返回错误帧。03 读指令的请求帧格式如图所示。

image::doc_attachments/2024-05-09T08-35-32-683Z.png[03 读寄存器指令 - 主机请求] 

03 读指令的响应帧格式如图所示。

image::doc_attachments/2024-05-09T08-42-58-805Z.png[03 读寄存器指令 - 从机响应] 

在程序实现上，本设计选择 MODBUS-RTU 的报文格式，即串口模式传输二进制数据，主要需要控制的外设为串口设备。由于前述硬件设计中已采用自动换向电路，所以不需要手动控制 485 收发器的读写方向。

在报文解析上，采用`串口中断 + 环形缓冲区 + 状态机读取` 的方式接收并解析报文。当每接收到一个字节后均会产生中断，在中断中将接收到的数据放入环形缓冲区中。环形缓冲区的大小设置为理论可能最大帧长的 2 倍，确保在从机处理缓慢导致缓冲区溢出后，仍能保证缓冲区存在一帧有效内容，减少通信失败次数。报文的解析过程在主循环中进行。由于直接采用裸机编程，无法像在使用实时操作系统 (RTOS) 中新开阻塞线程等待报文，所以需要使用状态机的方式，如果未接收到的报文程度不足则保存当前状态，等待缓冲区长度足够后再进行解析。其中 CRC 校验使用查表法或者使用硬件 CRC 校验模块，以减少报文完整性校验消耗的时间。

==== 设备间数据交换程序设计

由于本设计中数据处理和蓝牙上传输分别由两个主控完成，所以需要实现一种设备间数据交换协议，实现蓝牙设备从数据处理主控获取数据并发送的功能。根据使用场景，由于主要设计仅传送推理结果（即运行状态信息），总体数据量不大，并且通信间隔可以较高且为点对点传输，对于通信线路负载和速率要求不高。为了提高通信稳定性，选择了可以由主机启动的 IIC 作为数据交换协议的底层实现方式。该方式在通信中由主机时钟线同步，相比异步的串口通信稳定性稍强。

由于 IIC 协议的特殊性，时钟线由主机控制，从机无法产生突发通信。所以程序上采用主机轮询的方式，主机发送查询指令，从机应答，期间均通过主机产生的时钟边沿同步。

该交换协议不封装上层数据格式，直接使用传统的 IIC 读写寄存器格式，写入和读取每次均为 1 字节 (8 bits)。读写协议如下图示意。

image::doc_attachments/2024-05-09T04-59-40-361Z.png[IIC 读写示意] 

其中，第一个字节指定从机地址和读写方向。高七位 (7:1) 为从机地址，低位为数据方向，分别表示读/写。第二个字节为寄存器地址，对于本设计中，为可供读写的变量值的映射，当主机指令读写该寄存器地址时，即在代码逻辑中读取或者写入该寄存器地址所代表的变量值。第三个字节为数据值，长度为固定 1 字节。这样每次指令只读取或者写入 1 字节长度的数据。例如对于温度测量值，在数据处理主控设备中以单精度浮点类型 (float) 存储，读取该值需要发送 4 次指令。

=== 基于 MEMS 和 CNN 的振动筛故障检测设备蓝牙设备程序开发

本设计中采用南京沁恒 (WCH) 公司的 RISC-V 内核的集成蓝牙主控 CH582F 进行开发。该主控开发环境主要为 MounRiver Studio，基于 risc-v-gcc 和 openocd 工具链实现代码编译、调试和下载。

不同于运行一般任务的单片机，因为蓝牙可能会和多个设备连接或者同时运行多个任务，为了解决多任务的调度问题，需要实现基于单片机的实时操作系统或者任务调度程序，能够以类似分时的方式实现多任务的伪并行。在沁恒的蓝牙开发组件 (BLE SDK) 中，提供了操作系统抽象层 TMOS。TMOS 是调度的核心，BLE 协议栈、profile 定义和所有应用都围绕它实现。不同于传统的操作系统，它是一个允许软件建立和执行事件的循环。TMOS 是通过时间片轮询的方式实现多任务调度运行，系统时钟来源于芯片实时时钟 (RTC)。用户通过注册任务（Task）将自定义的事件（Event）添加到 TMOS 的任务链表中，由 TMOS 进行调度运行。Event 事件标志位，为 1 则运行，为 0 则不运行。

在开发过程中，所有的任务都将注册到 TMOS 调度框架中。

==== BLE 广播模式程序设计

本设计中采用 BLE 广播模式进行无线状态下的数据传输。功能上要求当蓝牙主控采集到数据处理主控所反馈的被测设备状态信息后，使用 BLE 广播模式直接将相关的状态信息包含在广播包中。这一设计主要服务对象为人员巡检场景。由于蓝牙单点广播的范围较小，所以需要接收端存在于设备附近进行接受，而每个蓝牙设备的 MAC 地址不同，实际应用中，可以通过接收端设备记录搜索到的广播设备地址，实现数据收集和巡检打卡的功能。

===== 广播包 PDU 内容设计

广播包 PDU 数据是广播模式的核心部分，在仅广播不建立连接的情况下，所有的数据只通过 PDU 负载段 (Payload) 向外传送。本设计中设备处于广播状态，且作为不可连接的信标模式 (Beacon)。该模式主要有 URI Beacons、iBeacons 和 AltBeacons 三种类型，本设计中使用类似 iBeacons 的格式进行 PDU 负载段内容的设计。自定义的数据包格式如下图所示。

image::doc_attachments/2024-05-11T05-02-31-706Z.png[广播数据段设计] 

其中：

* Adv Flags 将广播数据包定义为 BLE 处于普通可发现模式和不兼容经典蓝牙。
* 设备名称为 `{B,L,E,V,A,R}` 作为显示名称
* 厂家 ID 作为设备版本表示，暂时保留 0xEFFF
* UUID 作为设备标志，根据设备 MAC 地址进行散列映射，基本保证不出现重复
* 状态信息作为数据处理主控识别结果的表示，最大可表示 65535 种状态类型
* 温湿度数据从数据处理主控采集，因为其最大可测量到小数点后两位，所以均放大 100 倍，一般使用 16 位整型广播

==== 程序框架设计

程序主要分为三个任务，由 TMOS 进行任务调度。

===== 数据采集任务
该任务定时触发，主要内容是从数据处理主控获取数据。使用前述“设备间数据交换协议”，分批次从数据处理主控读取状态识别结果以及温湿度数据。

===== 广播数据包任务
该任务定时或数据采集任务完成后触发。当产生数据采集任务相关事件产生后，先关闭广播，然后更新需要广播的数据包，再重启广播。定时触发时不关闭广播。

===== 射频校准任务
该任务定时触发，用于定周期校准射频部分，保证蓝牙稳定工作。

// == 基于 MEMS 和 CNN 的振动筛故障检测设备有效性验证

// === 验证场景

// === 准确性验证

== 总结与展望

本课题提出了一种基于 MEMS 和 CNN 的振动筛故障检测设备，该设备通过集成的 MEMS 加速度传感器和卷积神经网络 (CNN) ，实现了对振动筛振动信号的实时采集和分析。

=== 总结

本设计中对于“基于 MEMS 和 CNN 的振动筛故障检测设备”，主要设计了检测终端的硬件部分、使用输入振动信号进行训练和推理的神经网络模型以及实际运行于检测设备上的数据采集、推理和数据传输软件部分。

对于检测终端的硬件部分，设计了电源转换电路、主控外围电路、传感器外围电路以及通信相关电路。本设计中基本实现了振动检测设备从数据采集到进行推理并输出推理结果的功能。

对于使用输入振动信号进行训练和推理的神经网络模型部分，设计了相适应的网络结构，并通过该网络训练得到了相应的推理模型。该网络使用三轴加速度计采集的加速度时域信号叠加形成的单通道二维信号图像作为输入，参考于 LeNet 网络结构，主要由一层卷积层和三层全连接层组成。该模型在本地运行推理取得了较高的识别精度。

对于运行于检测设备上的数据采集、推理和数据传输软件部分，分层次设计了相应的应用部分。使得故障检测终端设备能够使用传感器实时采集被测设备的振动信号，并能够静态地部署在本地训练并转化过的推理模型，且在推理完成后能够使用总线和蓝牙广播方式反馈检测数据。

=== 展望

由于个人水平和时间有限，仅实现了“基于 MEMS 和 CNN 的振动筛故障检测设备”的原型部分。

在硬件设计上，由于理论和经验有限，仅对电源输入部分添加了常用的防过压和防反接保护措施，传感器和主控按照厂家数据手册进行了设计，而没有将其作为可实用的产品进行足够的加工合理性和稳定性论证和试验。

在神经网络部分，由于保守起见，仅搭建了较为简单的的卷积神经网络结构，没有尝试进行更复杂的神经网络推理和部署验证，也许通过调整网络结构、优化数据预处理流程以及调整训练相关参数能够获得更好的模型性能。

在主控程序的程序上也实现的较为简单，比如总线通信部分，没有对极端错误情况进行处理。以及使用蓝牙进行数据回传的部分可以设计使用 BLE MESH 组网进行数据回传，能够很大程度上解决当前使用广播方案通信距离十分有限的问题。

另外仍有很多设想但未作实现的部分。如数据回传后的可视化部分以及使用仿真优化的检测设备壳体设计。

