基于 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 初始化阶段

  1. MPU6050 初始化验证

    • 串口输出: MPU6050 Init...MPU6050 OK!
    • LED 状态: 初始化失败时闪烁
  2. NanoEdge AI 初始化

    • 串口输出: NanoEdge AI Init...Learning...
  3. 电机初始化

    • 串口输出: 电机正在运行
    • 电机状态: 学习期间保持 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 引脚定义。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐