1. 项目概述
在工业自动化与智能装备领域,电机的预测性维护与运行状态实时监测至关重要。本项目基于 STM32H533RE(Cortex-M33 内核) 高性能微控制器,结合 LIS3DHTR 高精度三轴 MEMS 加速度传感器与 ULN2003 + 28BYJ-48 步进电机,构建了一套端侧边缘 AI 电机状态监测系统。
项目利用 ST 官方的 NanoEdge AI Studio V5.2.0 工具对采集到的电机振动数据进行自动机器学习(AutoML)训练,生成轻量级一维卷积神经网络(CNN)模型并部署至 STM32H533RE 端侧,实现了对电机 停止(STOP) 与 启动运行(RUN) 状态的 100% 准确率 实时分辨。
2. 系统框图
本系统的整体软硬件架构如下图所示,涵盖物理控制层、传感采集层、特征提取与边缘 AI 推理层以及终端状态输出层:
+-------------------------------------------------------------------------+| PC 上位机 (串口终端 921600bps) || 1. 下发电机控制指令 ('0'停止 / '1'正转 / '2'反转 / 'p'暂停) || 2. 接收 CSV 原始训练数据 (阶段一) / 实时显示 AI 识别结果 (阶段二) |+------------------------------------+------------------------------------+ | USART2 (PA2/PA3) v+-------------------------------------------------------------------------+| 主控核心:STM32H533RET6 (NUCLEO-H533RE) || || +------------------------+ +----------------------------+ || | 非阻塞步进电机驱动模块 | | LIS3DHTR 传感器采样模块 | || | (八拍驱动, 3ms/step) | | (200Hz采样, ±2g, 64点/帧) | || +-----------+------------+ +--------------+-------------+ || | | || | GPIO (PA8/PA9/PB5/PB10) | 192维浮点张量 || v v || +------------------------+ +----------------------------+ || | ULN2003 + 28BYJ-48 | 机械振动 | NanoEdge AI V5.2 推理引擎 | || | 步进电机本体 +------------>| (端侧 CNN 模型 libneai.a) | || +------------------------+ 物理传导 +--------------+-------------+ || | || v || 输出类别 (STOP/RUN) 及置信度(%) |+-------------------------------------------------------------------------+3. 电路原理图与硬件连接
系统硬件主要由三部分组成:NUCLEO-H533RE 核心板、LIS3DHTR 三轴加速度计模块和 ULN2003 步进电机驱动电路。
+------------------------+ +-------------------------+ | NUCLEO-H533RE | | LIS3DHTR 加速度计 | | | | (贴装于步进电机表面) | | 3.3V +--------------->+ VCC | | GND +--------------->+ GND | | I2C1_SCL (PB6)+--------------->+ SCL | | I2C1_SDA (PB7)+--------------->+ SDA | | | +-------------------------+ | | | | +-------------------------+ | | | ULN2003 步进驱动模块 | | GPIO (PA8)+--------------->+ IN1 | | GPIO (PA9)+--------------->+ IN2 +-----------+ | | GPIO (PB5)+--------------->+ IN3 ====>| 28BYJ-48 | | | GPIO(PB10)+--------------->+ IN4 | 步进电机 | | | 5V +--------------->+ VCC(+) +-----------+ | | GND +--------------->+ GND(-) | +------------------------+ +-------------------------+
4. 主要参数情况
本项目中传感器采样、电机驱动及 AI 模型的关键技术指标如下表所示:
参数类别参数名称设定数值 / 规格备注说明
| MCU 平台 | 核心芯片与主频 | STM32H533RET6 @ 64MHz | Arm Cortex-M33,开启硬件 FPU |
| 加速度传感器 | 型号与接口 | LIS3DHTR (I2C @ 100kHz) | 量程 ±2g,内部 ODR 400Hz |
| 采样窗口配置 | 采样率与窗口长度 | 采样率 200Hz (5ms),窗口 64 点 | 每帧时长 320ms,输入维度 64×3=192 |
| 步进电机驱动 | 驱动方式与节拍 | ULN2003 四相八拍非阻塞轮询 | 换相周期 3ms,与传感器采样互不抢占 |
| NanoEdge AI 模型 | 算法架构与准确率 | 1D-CNN (卷积神经网络) | 交叉验证准确率 100.0%,置信度高 |
| 模型资源占用 | 端侧存储开销 | RAM: 0.62 KB,Flash: 8.13 KB | 极其轻量,推理耗时仅数毫秒 |
5. 如何开启运行
想要复现或开启本系统运行,只需按照以下步骤操作:
硬件上电:将 LIS3DHTR 紧贴在步进电机外壳上,按照原理图连接好杜邦线,使用 USB Type-C 数据线将 NUCLEO-H533RE 连接至电脑。
模式选择与固件烧录:
在 main.c 中设有宏定义开关 #define ENABLE_NANOEDGE_AI 1(设为 0 为 CSV 数据采集模式,设为 1 为 AI 实时状态监测模式)。
使用 Keil MDK(ArmClang V6 编译器)编译工程并下载至开发板,按黑色复位键启动。
串口交互控制与观察:
打开串口助手,选择 ST-Link 虚拟串口,波特率设置为 921600。
系统默认处于 STOP 状态,串口每 320ms 实时打印一行当前电机的实际状态、AI 预测结果及各个类别的置信度百分比。
在串口发送字符 '1'(或 'r')开启电机正转,发送 '2'(或 'c')开启反转,发送 '0'(或 's')使电机停止,即可实时观察 AI 识别结果的毫秒级切换!
6. 实现步骤(从模型训练到端侧部署)
步骤一:在 NanoEdge AI Studio 中导入信号与基准测试(Benchmark)
打开 NanoEdge AI Studio V5.2.0,创建 n-Class Classification(多分类) 项目,目标平台选择 STM32H533RE(Cortex-M33),传感器类型选择 Accelerometer 3 axes。
在 Signals 页面分别导入采集好的停止状态数据集(标记为类别 0)和运行状态数据集(标记为类别 1),每个数据集包含 200+ 帧长度为 192 的样本。
进入 Benchmark 页面启动自动模型搜索。经过算法寻优,工具筛选出了最优的 CNN(卷积神经网络) 模型,其平衡准确率(Balanced Accuracy)高达 98.9% ~ 100%,混淆矩阵表现极佳。
步骤二:模拟器验证与静态库编译导出(Deployment)
在 Emulator 页面对训练好的模型进行离线验证,测试通过后进入 Deployment 页面。
针对 Keil MDK (ARM Compiler 6) 环境,勾选 mfloat-abi(hard)、fshort-wchar 与 fshort-enums 编译选项,点击 DEPLOY LIBRARY 导出预编译静态库压缩包。
步骤三:Keil 工程集成与代码编写
将导出的 NanoEdgeAI.h 和 libneai.a 复制到 Keil 工程的 Core/Inc 目录下。
在 Keil 工程树中将 libneai.a 添加至 Application/User/Core 分组,并在该文件的 Options 中将 File Type 设置为 Library file。
在 main.c 中调用 neai_classification_init() 完成内置 CNN 模型的初始化,并在主循环中每集满 64 个三维加速度点调用一次 neai_classification() 进行实时推理。
7. 项目核心代码
以下是 main.c 中集成 NanoEdge AI V5.2 实时推理与电机非阻塞控制的核心代码片段:
#if (ENABLE_NANOEDGE_AI == 1)#include "NanoEdgeAI.h"/* NanoEdge AI V5.2 输入与输出缓冲区 */float input_signal[NEAI_INPUT_SIGNAL_LENGTH * NEAI_INPUT_AXIS_NUMBER];float probabilities[NEAI_NUMBER_OF_CLASSES];#endif/* --- 在 main() 初始化阶段加载 AI 模型 --- */#if (ENABLE_NANOEDGE_AI == 1)enum neai_state neai_err = neai_classification_init();if (neai_err != NEAI_OK) { printf(">>> NanoEdge AI Init FAILED! Error Code = %d <<<\r\n", neai_err);} else { printf(">>> NanoEdge AI Init SUCCESS! Model ID: %s <<<\r\n", neai_get_id());}#endif/* --- 在 while(1) 主循环中进行非阻塞控制与 200Hz 实时采样推理 --- */while (1){ uint32_t now = HAL_GetTick(); /* 1. 非阻塞检查串口控制指令 ('0'=停止, '1'=正转, '2'=反转) */ UART2_CheckCommand(); /* 2. 非阻塞轮询驱动步进电机运转 */ Stepper_Poll(&g_motor); /* 3. 每 5ms (200Hz) 读取一次 LIS3DHTR 三轴加速度数据 */ if (g_stream_en && ((now - last_sample_tick) >= SAMPLE_INTERVAL_MS)) { last_sample_tick = now; int16_t mx = 0, my = 0, mz = 0; if (LIS3DH_ReadAccMg(&g_lis3dh, &mx, &my, &mz) == 0) { /* 填入当前采样窗口缓冲区 */ input_signal[g_sample_idx * NEAI_INPUT_AXIS_NUMBER + 0] = (float)mx; input_signal[g_sample_idx * NEAI_INPUT_AXIS_NUMBER + 1] = (float)my; input_signal[g_sample_idx * NEAI_INPUT_AXIS_NUMBER + 2] = (float)mz; g_sample_idx++; /* 集满 64 个采样点 (192维数据,耗时320ms),执行一次 AI 推理 */ if (g_sample_idx >= NEAI_INPUT_SIGNAL_LENGTH) { g_sample_idx = 0; int id_class = 0; enum neai_state state = neai_classification(input_signal, probabilities, &id_class); if (state == NEAI_OK) { const char *pred_name = neai_get_class_name(id_class); printf("[Actual: %s] ---> [AI Predict: %-4s] (Confidence: %5.1f%% | class0:%.1f%%, class1:%.1f%%)\r\n", Stepper_IsRunning(&g_motor) ? "RUN " : "STOP", pred_name ? pred_name : "UNKNOWN", probabilities[id_class] * 100.0f, probabilities[0] * 100.0f, probabilities[1] * 100.0f); } } } }}8. 效果演示与总结
编译并烧录固件后,打开串口助手进行实时测试,实测效果如下图所示:
电机运转状态(Actual: RUN):当电机处于旋转状态时,AI 模型持续稳定输出 AI Predict: 1(代表运行状态),置信度稳定在 100.0%(class0: 0.0%, class1: 100.0%),无任何跳变或误报。
动态切换至停止状态(>>> [CMD] Motor STOP <<<):当通过串口下发停止指令后,电机立即停转。在紧接着的第一个采样周期(320ms 内),AI 预测结果瞬间切换为 AI Predict: 0(代表停止状态),置信度同样高达 100.0%(class0: 100.0%, class1: 0.0%)!
【
项目总结:
通过本次活动,我完整体验了从传感器底层驱动编写、高速非阻塞振动数据采集,到使用 NanoEdge AI Studio 训练 CNN 模型并在 STM32H533RE 上完成端侧部署的全流程。仅需不到 1KB 的 RAM 和 8KB 的 Flash,就能在单片机上实现 100% 准确率的电机状态实时监测,充分展现了边缘 AI 在工业设备故障诊断与状态监控领域的巨大潜力!
视频链接:
bili_29528558947刚刚发布的视频https://b23.tv/F8klgch


步骤三:Keil 工程集成与代码编写
我要赚赏金
