Files
graduation-project/main.adoc

688 lines
50 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

= 基于 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 的振动筛故障检测设备的总体技术架构,主要包括感知层、处理层和传输层三个核心部分。
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 为一款标称 3A28.5V1.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, 页 311, 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, 收入 MM15. New York, NY, USA: Association for Computing Machinery, 10 月 2015, 页 13071310. 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 函数一起工作,因为它直接度量了预测概率分布与真实概率分布之间的“距离”。本设计中也使用该损失函数。
==== 超参数设计
//超参数设计,学习率、损失函数
在设计 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还是远程终端控制系统RTUModbus 都能够提供高效、可靠的通信解决方案。
本设计中仅使用 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 的振动筛故障检测设备蓝牙设备程序开发
==== BLE 广播模式程序设计
==== BLE MESH 模式程序设计 (optional)
== 基于 MEMS 和 CNN 的振动筛故障检测设备有效性验证(及工程集成应用)
=== 验证场景
=== 基于 MEMS 和 CNN 的振动筛故障检测设备工况识别准确性验证
== 总结与展望
=== 总结
=== 展望