在基于边缘 AI 的电机状态检测项目中,高质量的传感器数据集是训练高准确率模型的基础。本篇过程帖重点记录如何通过 NUCLEO-H533RE 驱动 ULN2003 步进电机 与 LIS3DHTR 三轴加速度计,获取并整理电机在“停止(STOP)”与“启动运转(RUN)”两种状态下的三轴振动加速度数据,并将其格式化为满足 NanoEdge AI Studio 工具要求的标准训练数据集。
二、 硬件连接与传感器安装为了敏锐捕捉步进电机运转时的微弱机械振动,我将 LIS3DHTR 传感器模块紧密贴合固定在 28BYJ-48 步进电机 外壳表面。各模块与 NUCLEO-H533RE 开发板的引脚连接如下:
LIS3DHTR 加速度计(I2C1 接口):
VCC -> 3.3V,GND -> GND
SCL -> PB6(自动兼容切换 PB8),SDA -> PB7(自动兼容切换 PB9)
ULN2003 步进电机驱动板(GPIO 接口):
IN1 -> PA8,IN2 -> PA9,IN3 -> PB5,IN4 -> PB10
供电采用 5V 独立供电,共地连接。
三、 满足 NanoEdge AI Studio 规范的参数设计
NanoEdge AI Studio 对多轴时间序列分类(n-Class Classification)的数据格式有严格要求:
数据排列格式:每一行代表一个完整的时间窗口(Buffer Signal),包含 个采样点,每个采样点按 X0, Y0, Z0, X1, Y1, Z1, ..., X(N-1), Y(N-1), Z(N-1) 交错排列,以逗号分隔(CSV 格式)。
采样参数设定:
量程与输出速率:将 LIS3DHTR 配置为 ±2g 高灵敏度量程(分辨率达 1mg/digit),内部 ODR 设为 400Hz。
采样频率:MCU 每 5ms 读取一次三轴加速度值(即采样频率为 200Hz)。
时间窗口长度:设定每行采集 64 个采样点(耗时 320ms),即每行包含 64 × 3 = 192 个数据列。
非阻塞传输优化:为了防止串口打印阻塞步进电机的 3ms 换相节拍,我们将 USART2 波特率提升至 921600 bps,并采用每 5ms 增量打印 1 个点(耗时仅 0.1ms)、满 64 点输出回车换行 \r\n 的方式,保证了电机运转与采样的绝对平稳。
通过在代码中设计非阻塞串口指令交互(发送 '0' 控制电机停止,发送 '1' 控制电机顺时针运转,发送 'p' 暂停/恢复数据流),无需反复烧录程序即可在同一个工程中完成两类状态的数据采集:
#define NEAI_SAMPLES_PER_LINE 64U /* 每个时间窗口采样点数: 64点 * 3轴 = 192个数据 */#define SAMPLE_INTERVAL_MS 5U /* 采样间隔 5ms (200Hz) *//* 每 5ms (200Hz) 读取一次加速度计数据并按 NanoEdge AI 格式输出 */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) { g_sample_idx++; if (g_sample_idx < NEAI_SAMPLES_PER_LINE) { printf("%d,%d,%d,", mx, my, mz); /* 前63个点以逗号结尾 */ } else { printf("%d,%d,%d\r\n", mx, my, mz); /* 第64个点换行,完成一帧窗口 */ g_sample_idx = 0; } }}五、 数据采集与清洗整理采集停止状态数据(0.txt / stop):上电默认电机停止,打开串口助手(921600 波特率,关闭时间戳),采集超过 200 行平稳静止状态下的加速度数据,剔除首尾不完整行后保存为 0.txt。
采集运行状态数据(1.txt / run):通过串口发送指令 '1' 启动步进电机,待电机平稳旋转后,同样采集超过 200 行振动数据,剔除首尾残缺行后保存为 1.txt。
导入验证:打开 NanoEdge AI Studio V5.2.0,在 Signals 步骤中分别导入两组数据,工具成功识别出 192 columns、无任何 NaN 或格式错误,频域与时域波形特征区分度极佳,完美满足训练要求!


我要赚赏金
