电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【let'sdo|2026年第3期】成果帖-用NanoEdgeAIStudio跑

共1条 1/1 1 跳转至页

【let'sdo|2026年第3期】成果帖-用NanoEdgeAIStudio跑通电机状态识别:从采集到STM32部署

菜鸟
2026-11-13 16:04:58     打赏

本项目参加 DigiKey 与 EEPW 联合举办的 2026 年第 3 期活动,主题是“基于边缘 AI 的电机状态检测”。测试的目标不追求复杂模型,而是验证一条完整链路:用三轴加速度传感器采集电机振动数据,在 NanoEdge AI Studio 中完成训练和模型选择,最后把生成的静态库部署到 NUCLEO-C562RE,让单片机直接输出电机当前状态。

需要识别的状态共有四类:停止 STOP、低速 SLOW、中速 MEDIUM、高速 FAST。整个流程分为五步:Project Settings、Signals、Benchmark、Validation 和 Deployment。

一、选定开发板与传感器

NanoEdge AI Studio 5.2.0 的 Project Settings 用来确定目标硬件和传感器类型。

本项目选择的目标板是 NUCLEO-C562RE,MCU 为 STM32C562RET6,Cortex-M33 内核,板载资源为 128 KB RAM 和 512 KB Flash。NanoEdge 会根据目标板自动带出模型体积和 RAM 的上限。

传感器选择 Time Series 下的 Accelerometer,三轴模式,对应实际使用的 LIS3DHTR 三轴加速度传感器。传感器通过 I2C1 与主控连接,SCL 接 PB6,SDA 接 PB7,通信速率为 400 kHz。初始化时会读取 WHO_AM_I 寄存器,确认返回值为 0x33 后,再配置为 1.344 kHz 高分辨率、三轴使能、BDU 和 ±2 g 量程。

image.png

二、按四种状态分别采集数据

Signals 页面将电机状态转换为可训练的数据窗口。NanoEdge 提供文件导入、串口实时采集和创建数据采集器三种方式,本例使用串口实时采集。

采集参数设置为:

串口:COM3
波特率:921600
数据格式:8N1
Buffer size:3 × 256
Number of axes:3
Values separator:space
每类行数:200

每个窗口包含 256 个采样点和 3 个轴,共 768 个数值。每行数据按照采样顺序交错排列:

x1 y1 z1 x2 y2 z2 ... x256 y256 z256

数据采集过程中不能混入启动信息、时间戳或状态文字,否则 NanoEdge 会把文字误当成信号数据。为此,固件在训练模式下只输出 768 列数值,每一行对应一个完整窗口。

四个状态通过开发板 B1 手动切换,状态顺序为:

SLOW → MEDIUM → FAST → STOP → SLOW

每次采集只保持一个状态,录满 200 行后停止并保存;然后按 B1 切换状态,再采集下一组数据。最终得到四个独立文件,每个文件都是 200 行 × 768 列。

数据检查结果显示,四类样本数量平衡,没有 NaN、Inf、全零行或常量行。各状态 X 轴振动标准差中位数约为:

SLOW:   1786
MEDIUM: 1190
FAST:   1062
STOP:   66

从数据可以看出,电机转动和停止之间的差异非常明显,三种转速的振动强度也随着速度提高而发生变化。Signals 页面可以同时查看四个类别的时域波形和 FFT 频谱,方便检查各状态是否具有可区分性。

image.png

三、一键搜索最优模型

进入 Benchmark 后,NanoEdge 会自动搜索整条机器学习流水线,包括是否去趋势、是否归一化、是否使用 STFT、是否提取特征、是否进行 PCA,以及使用 SVM、CNN、LSTM、随机森林等模型。

本项目的初次 Benchmark 最终选中 Library 45,模型类型为 SVM,指标如下:

Quality Index:     99.0 pts
Balanced Accuracy: 100.00%
RAM:               0.9 KB
Flash:             2.6 KB
Execution Time:    0.1 ms

从资源占用来看,这个模型非常适合 STM32C562RE。整个模型只占用不到 1 KB RAM 和约 2.6 KB Flash,单次推理时间约 0.1 ms。

不过,Benchmark 中的 100% 准确率只代表模型能够区分当前训练数据,并不能直接证明实机运行一定会稳定。边缘 AI 项目还需要检查采样窗口与电机换相之间的时序关系。

image.png

四、Validation 与模型验证

Validation 页面会把候选模型排成一张成绩单,列出 Library ID、Quality Index、Balanced Accuracy、RAM、Flash、Execution Time 和模型类型。本项目初次尝试的三个候选模型都取得了 100% Balanced Accuracy 和 99.0 分的 Quality Index,因此最终需要根据 RAM、Flash 和推理时间选择。
image.png

在 NanoEdge Emulator 中,可以直接加载生成的 libneai.dll 或 libneai.so,对采集文件进行离线回放,查看预测类别、概率分布和四类占比。训练数据回放时,四个类别可以被正确识别。
image.png

但实机测试时出现了一个值得记录的问题:模型在训练数据上表现很好,实际运行时却出现大量 STOP 误判,有时在不改变电机状态的情况下出现 SLOW 和 STOP 来回跳变。

进一步检查后发现,传感器和串口并没有故障。实时 SLOW 数据的 X 轴标准差约为 1800,与训练 SLOW 数据的约 1779 基本一致。问题来自采样窗口的起始相位:采样周期为 1 ms,而三种电机换相周期分别为 8 ms、4 ms 和 1 ms,256 点的窗口正好是这些周期的整数倍。初次模型直接使用原始波形、Pooling 和 Z-score,没有使用频谱特征,因此把固定相位下的波形当成了状态特征。

这也说明,Benchmark 的高准确率不能替代实机验证。对于周期性振动信号,训练数据必须覆盖不同窗口相位。

五、模型部署与工程集成

在 Deployment 页面选择 GNU Arm Embedded GCC 工具链,并保持与工程一致的编译选项:

Float ABI:     hard
fshort-wchar:  OFF
fshort-enums:  ON

工程实际使用的编译参数包括:

-mcpu=cortex-m33
-mfpu=fpv5-sp-d16
-mfloat-abi=hard
-fshort-enums

NanoEdge 生成的 NanoEdgeAI.h 和 libneai.a 放入工程的 nanoedge 目录,并在 CMake 中加入头文件路径、编译选项和静态库:

target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
  ${CMAKE_SOURCE_DIR}/nanoedge
)

target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC
  -fshort-enums
)

target_link_libraries(${CMAKE_PROJECT_NAME}
  ${CMAKE_SOURCE_DIR}/nanoedge/libneai.a
)

应用代码每采集满 256 个三轴采样点,就把 768 个 int16_t 原始值转换为 float,并调用分类函数:

for (i = 0U; i < NANOEDGE_VALUES_PER_SIGNAL; i++)
{
  nanoedge_input[i] = (float)sensor_window[i];
}

state = neai_classification(
  nanoedge_input,
  nanoedge_probabilities,
  &class_id
);

class_name = neai_get_class_name(class_id);

输入顺序必须保持为:

x0 y0 z0 x1 y1 z1 ... x255 y255 z255

分类成功后通过串口输出:

[AI] state=slow
[AI] state=medium
[AI] state=fast
[AI] state=stop

串口参数为 COM3、921600、8N1。系统上电后默认进入 SLOW,约每 256 ms 输出一次分类结果,按 B1 后可以手动切换电机状态。

da4704a03dca05ba8ca12f283ecd831a.png4ee878799e93a3cd0d920d33e4631be8.png

整个工程代码如下

Edge AI motor status recognition.zip

【let'sdo|2026年第3期】基于边缘AI的电机状态检测_哔哩哔哩_bilibili

七、小结

这次 NanoEdge AI Studio 实践完成了从三轴加速度采集、四分类数据录制、Benchmark、模型部署到 STM32 串口输出的完整流程。

本次评测最大的感受是,NanoEdge 确实降低了机器学习在嵌入式设备上的落地门槛。用户不需要手写模型结构,只需要准备好带标签的数据,便可以让软件自动完成特征提取、模型搜索和压缩。

但实机调试也让我认识到,边缘 AI 项目的关键不只是 Benchmark 中的准确率。窗口划分、采样时序、训练数据覆盖范围和验证数据质量都会影响最终效果。只有把数据采集、模型训练和实机验证连接起来,才能真正完成一个可靠的电机状态识别系统。

感谢 DigiKey 与 EEPW 对本次活动的支持。



共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]