这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【let'sdo|2026年第3期】NanoedgeAIstudio参数配置与模

共1条 1/1 1 跳转至页

【let'sdo|2026年第3期】NanoedgeAIstudio参数配置与模型训练----成果贴

菜鸟
2026-11-12 13:41:52     打赏

Nanoedge AI studio参数配置与模型训练

接续过程贴的硬件连接、步进电机、按键、OLED、 加速度计与振动数据采集等内容。

本贴介绍 NanoEdge AI 模型集成、串口输出、 工程编译与问题排查。


1. NanoEdge AI Studio的使用流程

1.1 NanoEgde AI Studio的下载安装

直接在st公司官网下载即可,www.st.com,在官网进行登录注册,安装之后st会通过账户邮箱发送一段KEY作为激活码,第一次进入软件需要进行激活。

1.2 工程创建

进入NanoEdge之后点击右上角的new project进行工程创建,然后选择项目类型

AD:detect anomalies异常检测,在进阶任务中检查电机堵转建议选择

C:classify variation of your signal分类识别。本次我们检测电机的运行状态--静止与转动即可选择。

O:detect outliers离群点/单类检测

E:extrapolate unknown data外推/回归。用于预测连续数值,例如温度预测。屏幕截图 2026-11-12 120952.png

1.3 数据集获取与模型训练

后选择自己的开发板与sensor,RAM选择128kb,Flash选择512kb

屏幕截图 2026-11-12 123720.png

选择之后在Signal页面中新建class类,因其datalogger中没有适配c562re开发板,我们选择通用的log signal from serial USB进行数据的采集

选在COM3端口,因数据量较大,选择921600的波特率,数量选择200--500均可,训练参数决定了模型训练时间

而后数据采集结束之后在benchmark中进行模型训练,会自动得出最优的一个模型

最后在deployment页面进行文件下载,建议勾选mfloat-abi,启用硬件FPU浮点指令,使得模型推理速度更快。如果在mx2配置中,你工程默认选择的软件推理,则无需勾选。可以在工程中的cmake/gcc.14.3.1.cmake中查看是否启动硬件FPU。

2. NanoEdge AI 模型集成与推理

2.1 文件与 CMake 配置

NanoEdge AI Studio 生成的库放在:

nanoedge/
├── NanoEdgeAI.h
└── libneai.a

CMakeLists.txt 用户段落需要加入:

target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
  app
  nanoedge
)

target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC
  -fshort-enums
)


target_link_libraries(${CMAKE_PROJECT_NAME}
  ${CMAKE_SOURCE_DIR}/nanoedge/libneai.a
)

2.2 模型信息

项目值

类型分类(CNN)
输入256 点 × 3 轴
类别数2
类别名…Running / …Stop(按类名自动映射为 RUN / STOP)
输出每类概率(0~1),取最大者为预测类别

2.3 推理流程

#include "NanoEdgeAI.h"

static float input[NEAI_INPUT_SIGNAL_LENGTH * NEAI_INPUT_AXIS_NUMBER];
static float probabilities[NEAI_NUMBER_OF_CLASSES];

/* 上电初始化 */
s_ai_ready = (neai_classification_init() == NEAI_OK);

/* 每个窗口完成时调用 */
static void ai_window_handler(const int16_t *window)
{
    int id_class = -1;

    for (int i = 0; i < NEAI_INPUT_SIGNAL_LENGTH * NEAI_INPUT_AXIS_NUMBER; i++) {
        input[i] = (float)window[i];   /* 保持 x1 y1 z1 ... 顺序 */
    }

    if (neai_classification(input, probabilities, &id_class) == NEAI_OK) {
        /* id_class 为 0 或 1,probabilities[id_class] 为置信度 */
    }
}

推理结果写入 OLED 第 6 页:

AI  : RUN 99.985%

2.4 为什么置信度经常是 100%

这是二分类 CNN 在两类特征差异明显时的正常现象。用同一份 libneai 的 PC 仿真库 测试可以观察到:

  • 明显振动信号:输出 [1.0, 0.0]

  • 安静静止信号:输出约 [0.00015, 0.99985]

后者按一位小数显示会四舍五入成 100.0%,看起来“不会动”。当前固件用三位小数显示, 可以看到 99.985% 与 100.000% 的区别。置信度稳定不代表模型没工作,类别切换正常 才是关键指标。

如果希望置信度更有梯度,需要让训练数据包含更多难分样本(过渡状态、不同负载、 噪声),或者改用异常检测模型的相似度指标。



3. 工程结构与编译

Demo2_STEPMOTOR_cmake/
├── main.c                 # 应用主流程:初始化、主循环、按键、AI 调度
├── app/
│   ├── stepper.c/.h       # 28BYJ-48 半步驱动
│   ├── ssd1306.c/.h       # OLED 驱动 + 5×7 字库
│   ├── lis3dh.c/.h        # 加速度计驱动 + 窗口采集
│   └── uart_comm.c/.h     # 串口发送(阻塞 + 中断)
├── nanoedge/
│   ├── NanoEdgeAI.h
│   └── libneai.a
├── generated/             # CubeMX2 生成的 HAL 初始化
├── CMakeLists.txt
└── docs/

注意事项:

  • CubeMX2 重新生成工程时可能覆盖 CMakeLists.txt 中的用户段落,需要重新加入app/*.c、nanoedge 头文件路径、-fshort-enums 和静态库;

  • generated/ 下的文件不要手改,改动写在 main.c / app/ 中;

  • 烧录后若 OLED 无显示、电机不转,先确认 mx_system_init() 是否成功 (时钟、I2C、USART2 初始化都在里面)。


4. 常见问题排查

现象可能原因处理

OLED 全黑地址不是 0x3C、SDA/SCL 接反、模块为 SH1106用 I2C 扫描确认地址;检查接线;确认控制器型号
电机只振动不转相序错误、ULN 供电不足、未共地检查 IN1~IN4 顺序;独立 5 V;共地
转向相反线圈接反交换电机任意两根线
PC13 按键无反应按键实际为低有效改上拉 + 下降沿
串口乱码/无数据波特率不匹配、适配器不支持 921600检查终端设置,必要时降到 460800
数据行不足 768 列串口丢字节、终端加了时间戳提高波特率稳定性,关闭接收端附加信息
AI 状态不变化输入顺序/量程与训练不一致检查 100 Hz、±2 g、x1y1z1 顺序
置信度一直是 100%模型输出饱和正常现象;看类别是否变化
链接报错找不到 neai库架构不对或未加 -fshort-enums用 Cortex-M33 hard-float 版本;检查 CMake
CubeMX 重新生成后编译失败用户 CMake 段落被覆盖按第 9.1 节重新加入

5. 参数速查

参数值代码位置

半步周期2 msapp/stepper.h
每圈半步数4096app/stepper.h
按键去抖150 msmain.c
OLED 地址0x3C / 0x3Dapp/ssd1306.h
加速度计地址0x19 / 0x18app/lis3dh.h
采样率100 HzLIS3DH_CTRL_REG1_VALUE
量程±2 gLIS3DH_CTRL_REG4_VALUE
窗口长度256 × 3LIS3DH_WINDOW_SAMPLES
推理输入float[768]main.c
串口波特率921600main.c

6. 小结

这个项目把几个常见模块串成了一条完整的边缘 AI 链路:

  • 步进电机控制与按键交互;

  • 共用 I2C 总线的 OLED 显示与加速度计采集;

  • 固定格式、无冗余的振动数据流;

  • 片上 CNN 分类与状态显示。

最值得注意的有两点:

  1. 采集质量取决于时序设计:把电机步进移到 SysTick、把长数据包改为中断发送、 OLED 只刷新单页,都是为了不让主循环的阻塞影响振动信号;

  2. 训练与推理必须同源:采样率、量程、窗口长度、数值顺序和尺度,任何一项改变 都需要重新采集数据并训练模型。

在此基础上还可以继续扩展,例如增加电机堵转检测,转速档位、加入方向类别、用 INT 引脚触发采样、 改用 DMA 发送串口数据,或者把识别结果通过串口回传给上位机。

自此本期任务基本结束,愿本人经验分享对您有帮助





关键词: Nanoedge     模型     训练    

共1条 1/1 1 跳转至页

回复

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