= 基于 CNN 和 MEMS 的边缘计算振动检测节点
曹王仁博 <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 vibration detection device based on convolutional neural networks (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 through a convolutional neural network to obtain a classification model that can detect the working conditions of the measured object, 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: vibration monitoring, edge computing, CNN, MEMS

== 绪论

// 和摘要有点冲突，后面再改

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

=== 国内外研究现状

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

==== 振动信号采集监测设备研究现状

==== 边缘计算技术研究现状

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

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

=== 论文结构

== 基于 MEMS 和 CNN 的边缘计算振动监测节点总体方案

=== 总体技术架构

=== 需求分析

=== 总体方案

== 基于 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  
输入电压 V_{IN} = 24V  
峰峰电流值 {\Delta}I_L = 30\% \times I_L
最大峰值电流 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 信号，可以将其作为差分对布线。


== 基于 MEMS 和 CNN 的边缘计算振动监测节点的程序开发

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点主控程序开发

==== 程序整体架构

==== 振动信号采集子程序

==== 基于 FFT 和小波变换的数据预处理

==== 基于 Keras 的 CNN 训练过程

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

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

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

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点蓝牙设备程序开发

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

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

==== BLE MESH 模式程序设计 (optional)

== 基于 MEMS 和 CNN 的边缘计算振动监测节点有效性验证（及工程集成应用）

=== 验证场景

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点工况识别准确性验证

== 总结与展望

=== 总结

=== 展望

