这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 过程帖|从电机启停到边缘AI状态识别:NUCLEO-C562RE+LIS3DH实

共1条 1/1 1 跳转至页

过程帖|从电机启停到边缘AI状态识别:NUCLEO-C562RE+LIS3DH实践记录

菜鸟
2026-11-03 12:38:31     打赏
过程帖|从电机启停到边缘 AI 状态识别:NUCLEO-C562RE + LIS3DH 实践记录

这次参加 Let's do 2026 年第 3 期:基于边缘 AI 的电机状态检测,我选择 NUCLEO-C562RE 开发板、LIS3DH 三轴加速度计和 ULN2003 + CX28BYJ-48 减速步进电机。目标是先让电机稳定启停,再采集停止与运行时的振动数据,最后用 NanoEdge AI Studio 训练分类模型并部署到 STM32 上。

1. 硬件接线与基础功能

开发板通过板载 ST-LINK V3 连接电脑,虚拟串口使用 USART2(PA2/PA3,115200 baud);板载 LED 在 PA5。LIS3DH 走 I²C1:PB6 接 SCL、PB7 接 SDA,传感器接 3.3 V 和公共地。ULN2003 驱动板的 IN1~IN4 分别接 PC1、PB4、PB10、PA8;驱动板接开发板 5 V 和公共地,电机插在驱动板接口上。触摸模块 AT42QT1010 的 OUT 接 PA10,VDD 接 3.3 V,用它控制电机启停。

先单独验证 LED 闪烁、串口打印,再测试电机。最初电机不转,驱动板红灯会亮;检查供电、公共地和驱动板 SW2 后,四路指示灯开始按步进相序依次变化,电机也实际转动。当前程序以 10 ms 为半步间隔驱动电机,停止时关闭四路驱动输出。

2. 触摸切换:一次消抖问题的定位

触摸模块本身的指示灯会响应,但电机起初没有可靠切换。为了定位问题,我暂时关闭加速度采集,只保留触摸诊断串口信息。一次测试中,触摸后 TOUCH_DIAG 的边沿计数从 0 增加到约 300,有效触发仍为 0。这说明 PA10 和外部中断能够收到信号,问题在软件判定逻辑。

旧实现每收到一个边沿就重新等待 30 ms,连续边沿把确认时间不断往后推,直到松开时才检查,结果又判为无效。修改后只在第一次边沿启动确认计时;30 ms 后若引脚仍为高电平,就切换电机状态。释放也经过确认,随后才允许下一次触发。中断与主循环共享的状态使用 volatile,串口发送放在主循环中,避免在中断里做阻塞输出。这样触摸启停已经可以正常工作。

3. 加速度数据采集与整理

LIS3DH 配置为三轴约 100 Hz 采样、±2 g 量程,串口原始记录格式为 ACC_MG,状态,x,y,z,单位为 mg。采集时电机在停止和运行状态间切换,日志由 scripts/capture_motor.ps1 保存,再由 scripts/prepare_neai.py 转换为 NanoEdge AI Studio 可导入的 CSV。转换时跳过每次切换后的前 100 个采样,避免把启动或停止的过渡段混进稳定状态数据。

每个 CSV 行是一个 64 点的三轴时间窗口,共 192 个数,顺序为 x0,y0,z0,x1,y1,z1,...。现有训练集包含停止 110 个窗口、运行 115 个窗口;另一段独立采集保留停止 22 个、运行 20 个窗口作验证。当前推理固件默认关闭高频 ACC_MG 串口打印,以减少串口负担;需要重新录数时可将源码中的 BOARD_ACCEL_STREAM 设为 1 后重新烧录。

4. 模型训练、接入与演示

在 NanoEdge AI Studio 中建立二分类项目,选择时间序列和三轴加速度计,分别导入停止、运行 CSV。导出的 GCC 库目标为 NUCLEO-C562RE 的 Cortex-M33 硬浮点配置,输入长度为每轴 64 点。固件每收满一个窗口就把 mg 数值转换为浮点数组调用分类库,串口输出 AI,STOP 或 AI,RUN;模型输入只包含加速度,不使用电机控制命令作为分类依据。

导出包的 PC 模拟器对未参与训练的 42 个窗口测试,停止 22/22、运行 20/20 均分类正确。模型已链接到 STM32 工程并通过 ST-LINK 烧录;实际演示时,触摸模块切换电机启停,板载 LED 持续闪烁,串口显示 MOTOR,STOP/MOTOR,RUN,并周期输出 AI,STOP/AI,RUN 识别结果。至此,从传感器采集、数据整理、模型训练到板上状态识别的流程已经跑通。

微信图片_20261103113926_175_2.png



共1条 1/1 1 跳转至页

回复

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