一、项目介绍和创意介绍
本项目参加的是方向三:工业控制的工业传感监测方向。
本项目实现了一套完整的电机振动监测与智能堵转识别系统。系统以STM32F407为主控,通过SPI接口驱动ADI的ADXL357三轴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通过SPI1与STM32连接(PA5-SCK, PA6-MISO, PA7-MOSI,PA4-CS)。电机由TIM8输出PWM经TB6612驱动,TIM2编码器模式采集转速,TIM6以10ms周期运行增量式PID控制。
硬件连接图如下:

三、方案框图和项目设计思路
系统框图:
设计思路:
整个系统遵循"信号→特征→决策"的三层架构。底层是数据采集管道,采用Ping-Pong DMA方案解决4000Hz高速采样与UART低速传输之间的矛盾——CPU填充Buffer A时,DMA在后台发送BufferB,两组缓冲区交替工作,DMA发送时间(178ms)始终短于采集时间(256ms),实现零间隙输出。中层是频域特征提取,CMSIS-DSP的arm_rfft_fast_f32函数在STM32F407上瞬间完成1024点FFT,频率分辨率3.9Hz/bin,511个有效频点覆盖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亮。放开手后电机恢复正常,相似度回升,报警自动解除。
串口输出结果:

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

六、设计中遇到的难题和解决方法
高频采样的数据丢失:
最初采用"采集1024点→printf打印→采集下一批"的方案,发现VOFA+波形出现突变不顺滑。排查后发现根因:1024行ASCII浮点数约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异常检测的完整闭环。
最后感谢贸泽电子和电子森林提供这个平台。