2026 M-Design设计竞赛 -基于ADXL357加速度计和STM32的电机振动监测与AI堵转识别系统
该项目使用了ADXL357加速度计和STM32,实现了电机振动监测与AI堵转识别系统的设计,它的主要功能为:通过ADXL357加速度计输出的数据完成电机振动监测与AI堵转识别。
标签
M-Design
2026 M-Design
ADXL357
电机振动监测
hobo
更新2026-06-09
32

一、项目介绍和创意介绍

本项目参加的是方向三:工业控制的工业传感监测方向。

本项目实现了一套完整的电机振动监测与智能堵转识别系统。系统以STM32F407为主控,通过SPI接口驱动ADIADXL357三轴MEMS加速度计,以4000Hz采样率实时采集电机运行时的振动数据;利用ARM CMSIS-DSP库在MCU上就地执行1024点实数FFT,将时域振动信号转换为频域频谱;最后引入ST NanoEdgeAI异常检测模型,自动学习电机正常运转的频谱特征,并在堵转等异常发生时通过串口和GPIO输出报警信号。

创新点在于:

1)采用Ping-Pong DMA架构解决了高频采样的数据丢失难题,实现了真正的4000Hz无丢帧连续采集;

2)在MCU端完成了从传感器驱动、FFT频域分析到AI推理的完整信号处理链路,无需上位机参与决策;

3)选择频域而非时域数据对接AI模型,降低了模型对训练数据量的需求;

4)使用NanoEdge AI Studio的自动化训练流程,无需机器学习专业知识即可完成模型开发。


二、硬件介绍

器件

型号

用途

主控

STM32F407VET6

系统控制、FFT运算、AI推理

加速度计

ADI ADXL357

三轴振动数据采集

直流减速电机

MG513XL

被测对象

电机驱动

TB6612FNG

PWM驱动+方向控制

报警指示

LED

异常状态指示

  ADXL357通过SPI1STM32连接(PA5-SCK, PA6-MISO, PA7-MOSI,PA4-CS)。电机由TIM8输出PWMTB6612驱动,TIM2编码器模式采集转速,TIM610ms周期运行增量式PID控制。

硬件连接图如下:

{84822F53-CAA3-4A46-A191-3E79F4FF323B}.png

 

三、方案框图和项目设计思路

系统框图:

设计思路:

  整个系统遵循"信号特征决策"的三层架构。底层是数据采集管道,采用Ping-Pong DMA方案解决4000Hz高速采样与UART低速传输之间的矛盾——CPU填充Buffer A时,DMA在后台发送BufferB,两组缓冲区交替工作,DMA发送时间(178ms)始终短于采集时间(256ms),实现零间隙输出。中层是频域特征提取,CMSIS-DSParm_rfft_fast_f32函数在STM32F407上瞬间完成1024FFT,频率分辨率3.9Hz/bin511个有效频点覆盖3.9~1996Hz,该频率范围完整包含了电机1X转频、谐波及齿轮啮合频率等关键诊断信息。顶层是AI决策引擎,NanoEdgeAI异常检测模型学习正常频谱的统计分布,对每一帧新频谱输出0~100的相似度分数,低于阈值即输出报警。


四、软件流程图和关键代码介绍

  主程序流程:

关键代码一:FFT数据预处理与执行

 // 去均值(DC Removal)

  float32_t mean_z = 0.0f;

  for (int i = 0; i < 1024; i++)

      mean_z += ml_data_buffer[i].z_g;

  mean_z /= 1024;

  for (int i = 0; i < 1024; i++)

      fft_input[i] = ml_data_buffer[i].z_g - mean_z;

 

  // 汉宁窗加窗

  arm_mult_f32(fft_input, hanning_window, fft_input, 1024);

 

  // 实数FFT + 幅值计算

  arm_rfft_fast_f32(&fft_handler, fft_input, fft_output, 0);

  arm_cmplx_mag_f32(fft_output, fft_mag, 512);

 

  // 转换为物理幅值并填入AI输入缓冲区

  for (int i = 1; i < 512; i++)

      ai_input_buffer[i-1] = fft_mag[i] * 2.0f / 1024;

 

  关键代码二:NanoEdge AI学习与检测


  if (is_learning_mode) {

      // 学习正常频谱特征

      enum neai_state state = neai_anomalydetection_learn(ai_input_buffer);

      if (state == NEAI_LEARNING_DONE) {

          is_learning_mode = false;  // 学习完成,切换检测模式

      }

  } else {

      // 检测模式:计算当前频谱与正常模式的相似度

      uint8_t similarity = 0;

      neai_anomalydetection_detect(ai_input_buffer, &similarity);

      if (similarity < 70) {

          printf("ALARM! Motor Blocked! Similarity: %d%%\r\n", similarity);

          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);

      }

  }


五、功能展示图及说明

电机正常运转时相似度稳定在90~100%。用手按住输出轴模拟堵转,相似度瞬间跌到70%以下,串口输出ALARM信息,LED亮。放开手后电机恢复正常,相似度回升,报警自动解除。

串口输出结果:

{36927E08-67C6-45A4-9307-D123915FBFEB}.png

正常运转时LED灭;用尺子阻碍电机运行时产生异常,LED亮起:

88

 

六、设计中遇到的难题和解决方法

  高频采样的数据丢失:

  最初采用"采集1024→printf打印采集下一批"的方案,发现VOFA+波形出现突变不顺滑。排查后发现根因:1024ASCII浮点数约32KB,串口921600波特率发送需要356ms,而ADXL357内部96字节FIFO仅够缓冲128ms数据,每次printf期间FIFO溢出2~3次,过渡数据全部丢失。解决方案是重构为Ping-Pong DMA架构——改用VOFA+ JustFloat二进制协议(每float4字节,帧数据量从32KB压至16KB),DMA后台发送仅需178ms,低于采集1024点所需的256ms,实现了零间隙连续采集。 

 

七、对本次竞赛的心得体会

  参加M-Design竞赛的这一个月,最大的收获是完整地走通了嵌入式AI从传感器到决策的整个流程,之前总觉得"单片机跑AI"是很复杂的,实际动手才发现:CMSIS-DSP提供了开箱即用的DSP算力,NanoEdge AI Studio将模型训练降到了"导入数据点开始等结果导出库"的自动化流程,让我这样一个小白也能在一个月内完成从点亮传感器到AI异常检测的完整闭环。

  最后感谢贸泽电子和电子森林提供这个平台。

                                                

附件下载
ADXL357Z_FFT.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号