参加 Let's do 2026 年第 3 期“基于边缘 AI 的电机状态检测” 时,我使用 NUCLEO-C562RE、LIS3DH 三轴加速度计和 ULN2003 + CX28BYJ-48 减速步进电机,完成了“触摸启停—振动采集—数据整理—模型训练—板端识别”的完整流程。触摸模块负责切换电机状态,STM32 在运行时读取振动并输出 AI 判断,板载 LED 和串口提供直观的运行反馈。
一、系统框图

触摸模块的数字输出进入 STM32 外部中断;STM32 通过四路 GPIO 控制 ULN2003,驱动步进电机。固定在电机附近的 LIS3DH 将三轴加速度通过 I²C 送回主控。采集阶段的数据经 ST-LINK 虚拟串口送到 PC 整理和训练;部署后,NanoEdge AI 分类库直接在 STM32 上推理,不依赖电脑完成判断。
二、电路原理与接线

| 加速度计 I²C1 | PB6、PB7、3V3、GND | LIS3DH SCL、SDA、VCC、GND |
| 触摸启停 | PA10、3V3、GND | AT42QT1010 OUT、VDD、GND |
| 电机四路驱动 | PC1、PB4、PB10、PA8 | ULN2003 IN1、IN2、IN3、IN4 |
| 电机供电 | 5V、GND | ULN2003 VCC、GND;电机接驱动板插座 |
| 灯光与串口 | PA5、PA2/PA3 | 板载 LED;USART2 经 ST-LINK VCP 到 PC |
驱动板、电机、传感器和触摸模块与开发板共地。接线完成后,先验证 LED 与串口,再逐个验证电机和传感器,可更快定位问题。
三、主要参数
| 主控与工具链 | STM32C562RET6,Cortex-M33,GNU Arm GCC + CMake |
| 串口 | USART2,经 ST-LINK VCP;115200 baud,8N1 |
| 加速度计 | LIS3DH,I²C1,±2 g,约 100 Hz,输出单位 mg |
| 电机控制 | ULN2003 四路半步序列,半步间隔 10 ms |
| 触摸输入 | PA10 外部中断,30 ms 电平确认 |
| AI 输入 | 三轴交错排列,每轴连续 64 点;每个窗口约 0.64 s |
| AI 输出 | 停止 STOP、运行 RUN 两类 |
四、实现步骤
1. 跑通基础外设。使用 STM32Cube 生成的工程框架和 GCC 构建工程,配置 PA5 板载 LED 闪烁、USART2 串口输出、I²C1 读取 LIS3DH。电机部分按八相半步表依次驱动四个输入,触摸模块通过 PA10 外部中断控制启停。串口发送留在主循环,避免在中断里阻塞。
2. 采集并标记状态。LIS3DH 的三轴样本按 ACC_MG,状态,x,y,z 输出,其中状态 0 表示命令停止、1 表示命令运行。使用 scripts/capture_motor.ps1 保存串口原始记录,并在停止与运行两种状态下各采集足够长的稳定片段。
3. 整理 NanoEdge AI 数据。使用 scripts/prepare_neai.py 按状态切分日志,跳过每次切换后的前约 1 秒,再把每 64 组连续样本写成一行 CSV。每行共 192 个数,排列为 x0,y0,z0,x1,y1,z1,...,没有表头。训练集包含停止 110 个窗口、运行 115 个窗口;另留停止 22 个和运行 20 个窗口独立检查。
4. 训练并部署。在 NanoEdge AI Studio 中新建 Classification 项目,选择时间序列三轴加速度计,分别导入两类 CSV,运行 Benchmark 并导出面向 NUCLEO-C562RE 的 GCC 分类库。工程链接 libneai.a,初始化分类器后,每收满 64 组三轴样本就转换为浮点 mg 数组并调用推理函数。模型输入只有加速度,不读取电机控制状态。采集阶段可以开启原始 ACC_MG 串口输出;板端演示时关闭高频原始数据输出,保留电机状态和 AI 结果。
五、如何开启运行与效果演示
将 LIS3DH 固定在电机附近,检查 3.3 V、5 V 和公共地接线;通过 ST-LINK USB 给开发板上电。
打开 ST-LINK 虚拟串口(本机为 COM14),设置 115200、8N1。上电后可看到 MOTOR,STOP,板载 LED 闪烁。
触摸模块一次,电机启动,串口出现 MOTOR,RUN;再触摸一次,电机停止,出现 MOTOR,STOP。
保持两种状态片刻,观察周期输出的 AI,RUN 和 AI,STOP,即可展示模型在开发板上的启停识别。
导出库附带的 PC 模拟器在未参与训练的 42 个窗口上得到:停止 22/22、运行 20/20 分类正确。板端已完成模型链接、烧录和启停状态识别。这个项目的关键是让数据格式、实际采样顺序和板端推理输入保持一致:三轴按同一顺序交错排列,窗口固定为每轴 64 点。这样,采集到的振动数据才能直接用于训练和部署。

我要赚赏金
