这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【let's do|2026年第3期】过程帖|基于STM32与LIS3DH的电机

共1条 1/1 1 跳转至页

【let's do|2026年第3期】过程帖|基于STM32与LIS3DH的电机运行状态识别:从振动采集到端侧AI

助工
2026-10-30 18:08:22     打赏


一、项目概述

本项目围绕电机运行状态识别展开,使用 NUCLEO-H533RE 开发板、Grove LIS3DH 三轴加速度计扩展板以及 ULN2003 步进电机驱动套装,完成电机启停控制和振动数据采集。后续计划借助 NanoEdge AI Studio,构建能够区分“停止”和“运行”两种状态的分类模型,并部署到 STM32。

项目的核心思路是:通过固定安装的加速度计采集电机振动信号,经串口保存数据,在电脑端完成数据整理和模型开发,再将生成的算法库集成到固件,实现本地状态识别及提示。

开发工作分为五个阶段:

  1. 搭建开发环境,验证程序下载和串口通信。

  2. 驱动电机,实现按钮及串口启停控制。

  3. 调通 LIS3DH,采集三轴加速度。

  4. 整理停止、运行两类数据,完成模型训练与验证。

  5. 部署模型,测试实际识别效果。

目前已完成电机控制、传感器通信和首轮两类数据采集,尚未开展 NanoEdge AI Studio 模型训练与部署。

二、硬件选择与系统框图

器件型号或规格用途
ST 开发板NUCLEO-H533RE,STM32H533RE外设控制、数据采集及后续模型推理
三轴加速度计Grove LIS3DH,114020121采集 X、Y、Z 三轴加速度
电机驱动套装Seeed 105990072,ULN2003 驱动板与步进电机提供可控制的电机振动源
调试与下载接口板载 ST-LINK/V3固件下载、调试及虚拟串口通信
LED板载 LD2预留作状态指示,当前程序未启用
蜂鸣器尚未选型、接入后续用于状态切换或异常提示
电机电源按电机铭牌额定电压配置,实际规格待记录为电机驱动板供电

本阶段 LIS3DH 使用 ±2g 量程。该器件提供三轴加速度数据,不包含陀螺仪。

系统结构如下:

电脑
  │ USB:下载、串口控制、数据保存
  ▼
NUCLEO-H533RE
  ├─ I²C ← LIS3DH 三轴加速度计
  │             ↑
  │         电机机械振动
  ├─ GPIO → ULN2003 → 步进电机
  ├─ GPIO ← 板载 B1 用户按钮
  ├─ GPIO → 板载 LED(预留)
  └─ PWM  → 蜂鸣器(后续接入)

电脑端后续流程:
数据整理 → NanoEdge AI Studio → 算法库 → STM32 固件集成

电机控制指令用于建立采集标签。最终识别结果必须由加速度信号和模型计算得到,不能直接用电机控制变量代替。

三、硬件连接与安装

3.1 LIS3DH 连接

传感器连接到开发板 Arduino 接口中的专用 I²C 引脚。

LIS3DH 接口NUCLEO-H533RE 接口STM32 引脚
SCLArduino D15/SCLPB6
SDAArduino D14/SDAPB7
GNDGND—
VCC按扩展板要求连接兼容电源实际接法待记录

本阶段程序使用 I²C1,配置总线速率为 400 kHz,检测到的传感器地址为 0x19。

这里的 I²C 接口为 D14/D15,不能直接套用其他 Arduino 开发板将 A4/A5 作为 I²C 的接法。I²C 上拉电压需与 STM32 引脚电平兼容。

3.2 电机驱动板连接

ULN2003 驱动板接口NUCLEO-H533RE 接口STM32 引脚
IN1D2PC8
IN2D3PB3
IN3D4PB5
IN4D5PB4
GNDGND—
电源正极电机电源正极—
电源负极电机电源负极,并与开发板共地—
电机插座连接套装步进电机—

3.3 机械安装

传感器应固定在电机外壳或刚性安装支架上,同时固定线缆,减少线缆晃动造成的干扰。训练采集和部署测试期间,应保持安装位置、轴向及紧固方式一致。

本轮已获得能够反映电机启停差异的真实加速度数据,但传感器具体安装位置、固定方式和电源规格尚未记录,需要在正式采集前补充。

硬件实物图、传感器安装特写及接线照片尚待拍摄归档。

四、开发环境搭建及基础功能调试

本项目当前实际采用 Zephyr RTOS 开发,使用本地 Zephyr 工作区和 SDK 编译,通过板载 ST-LINK 下载程序,利用 ST-LINK 虚拟串口进行控制和数据采集。

项目实际配置
Zephyr 源码版本构建标识 v4.4.0-8295-g0bd807ceeb75
Zephyr SDK1.0.1
west1.5.0
目标板nucleo_h533re/stm32h533xx
下载工具pyOCD,通过板载 ST-LINK
电脑端采集Python、pyserial
串口本次为 /dev/ttyACM0,115200、8N1

工程已配置以下功能:

  • GPIO:四路电机驱动输出及 B1 用户按钮输入。

  • I²C1:读取 LIS3DH。

  • UART:接收启停命令,输出调试信息和加速度数据。

  • 独立线程:读取传感器,主循环处理电机和控制命令。

本阶段未接入蜂鸣器,也未实现 LED 状态提示。

实际启动日志包含:

Commands: 1=on, 0=off (button still works), s=stream, q=quiet
READY,LIS3DH,addr=0x19,200Hz,2g,12bit,units=mg

固件已完成编译、烧录和复位运行。当前版本资源占用如下:

资源使用量
Flash21,364 字节
链接器报告的 RAM 区域7,536 字节

以上为采集与电机控制程序的资源占用,不包含后续模型库。

五、电机控制与加速度采集

5.1 电机控制

电机采用八拍半步相序,四路输入按以下状态循环切换:

IN1 IN2 IN3 IN4
 1   0   0   0
 1   1   0   0
 0   1   0   0
 0   1   1   0
 0   0   1   0
 0   0   1   1
 0   0   0   1
 1   0   0   1

初始换相间隔为 4 ms,随后调整为 2 ms,提高运行速度。当前尚未测量实际输出轴转速。

支持两种控制方式:

控制方式行为
B1 用户按钮按住运行,松开停止
串口发送 1持续运行
串口发送 0取消串口运行请求

按钮与串口运行请求采用“或”逻辑。因此,发送 0 时若仍按住 B1,电机仍会运行。

本项目当前将“停止”定义为:停止换相,并将 IN1~IN4 全部置低,释放线圈。

5.2 LIS3DH 配置

程序检查传感器地址和设备标识后,配置量程、工作模式及输出数据率。通过轮询数据就绪标志读取新样本,避免无条件重复读取输出寄存器。

参数本阶段实际配置
I²C 地址0x19
I²C 总线速率400 kHz
加速度量程±2g
工作模式高分辨率,12 位
配置输出数据率200 Hz
实测数据输出速率约 196.27 Hz
数据单位mg
串口115200、8N1
模型窗口尚未确定,拟从每轴 256 点开始

若采用每轴 256 点的窗口,按本轮实测采样速率,单窗口覆盖时间约为 1.30 秒。

数据包含重力分量,换算关系为:

1000 mg = 1 g
1 mg = 0.00980665 m/s²

5.3 串口协议

发送单个字符即可,无需回车。

命令功能
1启动电机
0取消串口运行请求
s开始输出加速度数据
q停止输出加速度数据

当前使用轮询接收命令,自动采集脚本在命令之间保留至少 150 ms 间隔。

数据输出格式为:

D,timestamp_ms,motor_on,ax_mg,ay_mg,az_mg,overrun

字段说明:

字段含义
timestamp_ms开发板启动后的毫秒时间戳
motor_on固件电机驱动状态,用于采集标签核对
ax_mg、`ay_mg`、`az_mg`三轴加速度
overrun传感器输出数据覆盖标志

motor_on 表示驱动输出状态,不是转速反馈或模型识别结果。

当前通过独立线程及同步串口输出完成初步采集,尚未实现 FIFO、DMA 或批量缓冲传输。本轮未检测到数据覆盖,但仍需在更长时间和更复杂负载下继续验证。

六、采集并整理训练数据

6.1 首轮采集方法

已通过电脑端 Python 脚本自动完成以下流程:

  1. 关闭电机和数据输出。

  2. 等待 2 秒,采集停止状态数据。

  3. 启动电机。

  4. 等待 2 秒,避开启转过渡过程。

  5. 采集稳定运行状态数据。

  6. 关闭电机和数据输出。

采集结束后,重新读取数据核对电机驱动状态,确认输出已关闭。

6.2 首轮采集结果

类别文件有效时间跨度样本数实测速率
STOPstationary.csv30.132 秒5915196.27 Hz
RUNmotor_running.csv30.132 秒5915196.27 Hz

两组数据均未检测到传感器数据覆盖,记录中的电机驱动状态与预期标签一致。

三轴加速度标准差如下:

状态X 轴标准差Y 轴标准差Z 轴标准差
STOP4.35 mg2.91 mg7.43 mg
RUN44.49 mg9.19 mg46.35 mg

电机运行时,三个轴的波动均增大,其中 X、Z 轴更明显。这说明当前安装条件下,加速度信号包含可用于区分两种状态的信息;是否能够稳定分类,仍需独立数据和实际模型验证。

6.3 数据整理方案

目前保存的是逐样本原始记录,包含时间戳、驱动状态和覆盖标志。正式导入模型开发工具前,需要生成只包含三轴加速度的窗口文件。

拟采用每轴 256 点、非重叠窗口,按以下顺序排列:

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

每行包含 768 个数值。若采用该方案,本轮每类数据可生成 23 个完整窗口,剩余 27 个样本不纳入完整窗口。

当前原始数据单位为 mg。模型开发可以继续使用 mg,也可统一转换为 g;一旦确定,训练、验证和部署必须保持一致。

本轮仅完成每类一次采集,尚不足以建立可靠的独立训练集和测试集。后续应分别开展多轮采集,记录安装方式、电源、速度及负载,并按采集批次划分训练和测试数据,避免相邻窗口随机拆分造成评估偏高。

七、NanoEdge AI Studio 模型开发与部署

本阶段尚未安装和运行 NanoEdge AI Studio,未生成分类模型或算法库。以下为后续实施方案。

计划采用 N-class classification,建立 STOP、RUN 两个类别,输入为三轴加速度窗口。

主要步骤如下:

  1. 安装 NanoEdge AI Studio,核对其对目标 MCU 和导出库配置的支持。

  2. 设置三轴输入及窗口长度。

  3. 导入整理后的 STOP、RUN 数据。

  4. 执行算法搜索,评估分类效果和资源需求。

  5. 使用独立采集批次进行验证。

  6. 导出算法库、头文件及相关模型资源。

  7. 集成到当前 Zephyr 工程,完成编译和板端测试。

集成时需要核对导出库与工程的处理器架构、编译器 ABI、浮点选项及链接要求。模型接口、输入数组布局和类别编号以实际导出文件为准。

部署后的数据流为:

LIS3DH 新样本
    ↓
收集完整三轴窗口
    ↓
按训练时的单位与顺序整理
    ↓
调用模型推理接口
    ↓
输出 STOP / RUN 及可用的置信信息
    ↓
串口、LED 或蜂鸣器提示

模型推理输入仅使用加速度信号。电机控制状态用于测试时核对真值,不参与模型判断。

部署前后应保持量程、采样率、单位、轴顺序和窗口长度一致。由于本阶段实测速率约为 196 Hz,后续应先确定最终采样方案,再采集正式训练数据,避免更改采样配置后继续沿用不匹配的数据集。

八、本阶段记录与后续安排

8.1 已完成工作

  • 确认 NUCLEO-H533RE 的电机及 I²C 引脚映射。

  • 使用本地 Zephyr 环境完成编译和 ST-LINK 烧录。

  • 实现 B1 按住运行、松开停止。

  • 将电机换相间隔由 4 ms 调整为 2 ms。

  • 增加串口启停及数据输出控制。

  • 检测并配置 LIS3DH。

  • 完成 STOP、RUN 两类各约 30 秒的真实数据采集。

  • 核对样本数量、驱动状态及数据覆盖标志。

  • 确认采集结束后电机输出关闭。

8.2 调试问题及处理

问题定位与处理验证结果
编译缓存目录不可写将 Zephyr 编译缓存改到当前工作区,禁用本次构建的 ccache编译通过
默认工具环境无法访问 USB 调试器及串口使用具备设备访问权限的执行环境成功识别 ST-LINK 和串口
连续发送多个串口字符时接收不完整当前采用轮询接收,采集脚本改为逐字符发送并保留间隔自动采集流程完成
实际采样速率与配置值存在差异根据板端时间戳统计输出间隔和实际速率实测约 196.27 Hz
需要确认两类信号是否存在差异比较三轴加速度标准差运行状态振动明显增大

8.3 后续安排

  1. 补充电机电源规格、传感器安装方式及硬件照片。

  2. 固定安装条件,开展多轮独立采集。

  3. 完成超量程检查、波形分析和模型窗口文件整理。

  4. 安装 NanoEdge AI Studio,完成算法搜索和独立验证。

  5. 将导出算法库集成到 Zephyr 工程。

  6. 接入 LED,按需要增加蜂鸣器。

  7. 开展多轮启停测试,统计误判率、漏判率和状态切换延迟。

  8. 整理最终源码、模型、数据集和演示视频。

当前工程已具备可重复的电机控制和真实振动数据采集能力,模型训练及板端识别仍属于下一阶段工作。



共1条 1/1 1 跳转至页

回复

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