基于Nano edge ai的异常检测小项目
本文介绍了一个基于STM32的异常检测振动控制系统,通过MPU6050传感器采集加速度数据,利用NanoEdge AI进行异常检测,并通过TB6612电机驱动实现振动控制。系统硬件连接包括STM32与MPU6050的I2C通信、电机驱动电路等核心模块。软件架构采用模块化设计,包含传感器驱动、电机控制和AI异常检测等功能。项目提供了完整的初始化、学习阶段和实时检测流程,并配套开发了上位机程序用于数据
·
基于 STM32 的异常检测振动控制系统
完整项目工程代码:https://github.com/Feng2004124/edge_ai_abnormal_detect.git
软件配置:https://blog.csdn.net/qq_39172792/category_12587841.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12587841&sharerefer=PC&sharesource=2303_80296946&sharefrom=from_link
1. 项目概述
- 目标:基于 STM32 的异常检测振动控制系统
- 核心功能:
- MPU6050 传感器数据采集(加速度计)
- NanoEdge AI 异常检测
- TB6612 电机驱动控制
- F103C8T6单片机
- 实时相似度反馈与电机响应
2. 硬件连接说明
2.1 STM32 与 MPU6050 连接
| MPU6050 引脚 | STM32 引脚 | 功能 |
|---|---|---|
| VCC | 3.3V | 电源 |
| GND | GND | 地 |
| SCL | PB6 | I2C 时钟 |
| SDA | PB7 | I2C 数据 |
| AD0 | GND | I2C 地址选择 (0x68) |
2.2 STM32 与 TB6612 连接
| TB6612 引脚 | STM32 引脚 | 功能 |
|---|---|---|
| AIN1 | PA1 | 电机方向控制 |
| AIN2 | PA2 | 电机方向控制 |
| PWMA | PA8 (TIM1_CH1) | PWM 速度控制 |
| VM | 外部电源 | 电机电源 |
| GND | GND | 共地 |
2.3 其他连接
| 组件 | STM32 引脚 | 功能 |
|---|---|---|
| LED | PC13 | 状态指示 |
| UART | PA9/PA10 | 调试串口输出 |
3. 软件架构
3.1 文件结构

3.2 核心模块说明
- main.c: 主程序逻辑,包含初始化、学习、检测循环
- mpu6050.c/h: MPU6050 驱动,数据读取和卡尔曼滤波
- motor.c/h: TB6612 电机控制,包含振动算法(模拟机电系统转动的实际振动)
- NanoEdgeAI.h: AI 异常检测库接口
- libneai.a:使用NanoEdge AI Studio软件训练得到的动态编译链接库
4. 关键代码配置说明
4.1 电机控制参数 (motor.h / motor.c)
// 振动参数配置位置
#define VIBRATION_FREQ 25.0f // 振动频率 (Hz)
#define VIBRATION_AMPLITUDE 200.0f // 振动幅度 (0-200)
#define DUTY_CYCLE 500.0f // 中心占空比 (50%)
// GPIO 引脚定义位置
// AIN1 = PA1, AIN2 = PA2, PWMA = TIM1_CH1 (PA8)
4.2 传感器配置 (mpu6050.c)
// MPU6050 配置位置
#define MPU6050_ADDR 0xD0 // I2C 地址
// 加速度计量程: ±2g (16384 LSB/g)
// 陀螺仪量程: ±250°/s (131 LSB/°/s)
4.3 AI 参数配置 (main.c)
// 学习参数位置
#define LEARNING_ITERATIONS 400 // 学习迭代次数
// 相似度阈值位置
if (similarity > 30) { // 正常状态阈值
StartVibration();
} else {
Motor_Stop();
}
# Add linked libraries
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE hardware/Src) # 指定库目录
target_link_libraries(${CMAKE_PROJECT_NAME}
stm32cubemx
neai # 动态编译链接库,即libneai.a
m #
)
其中的#define LEARNING_ITERATIONS 400 可以通过“Nano Edge AI”软件当中的训练完成之后的valid进行验证,验证之后会得到最少学习迭代次数。
5. 系统搭建完整流程流程
5.1 初始化阶段
-
MPU6050 初始化验证
- 串口输出:
MPU6050 Init...→MPU6050 OK! - LED 状态: 初始化失败时闪烁
- 串口输出:
-
NanoEdge AI 初始化
- 串口输出:
NanoEdge AI Init...→Learning...
- 串口输出:
-
电机初始化
- 串口输出:
电机正在运行 - 电机状态: 学习期间保持 50% 占空比正转
- 串口输出:
5.2 学习阶段
- 学习过程: 400 次迭代
- 进度反馈: 每 50 次输出
Learning: X/400 - 完成标志:
Learning Done!
5.3 实时检测阶段(发送给串口调试助手的数据格式)
- 数据格式:
X.XXX Y.YYY Z.ZZZ | Sim: XX% - 电机响应:
Sim > 30%: 启动振动模式Sim ≤ 30%: 电机停止
- 调试输出: 振动时额外输出
Duty: XXX
5.4 实时检测阶段(发送给上位机用于显示)
- 数据格式:
X.XXX Y.YYY Z.ZZZ%不发送后面的相似度,因为上位机的UI界面只接收三个维度的数据
整个上位机的程序已经打包为.exe程序放在项目当中,自行拿去。
同时,这个程序是自动检测串口,上下位机的通信已经使用握手命令进行验证,自动检测串口并且连接。
5.5 显示界面介绍
- 主要的功能为加载我原来的数据集,格式如下。分别为x,y,z轴的数据。同时,在.exe文件夹里面需要放置accel_data.txt的文件,当时代码加载原始数据留下来的遗留,之后优化的代码没有优化这个。

- 显示界面包含的功能
使用正弦信号模拟采集的信息
点击“启用串口数据”,自动连接串口,再界面显示实时数据。
记录数据,开始记录数据;点击“停止实时模式”之后,绘制记录的图像。
注: 请将对应的代码文件放置到上述指定的目录位置,并根据实际硬件连接调整 GPIO 引脚定义。
更多推荐

所有评论(0)