• 正文
  • 相关推荐
申请入驻 产业图谱

STM32F1的神经网络应用:陀螺仪异常检测

09/25 10:54
461
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

上一期我们介绍了使用MPU6500替代MPU6050制作了一个陀螺仪,价格便宜、性能强大。

本期我们就使用这个陀螺仪配合NanoEdge AI软件在STM32F103C8T6中做异常检测,目的是检测并识别到我敲击键盘的数据。

1、NanoEdge AI介绍

NanoEdge AI是意法半导体(ST)推出的一款边缘机器学习工具,专门为STM32系列微控制器设计,主打轻量级、低资源消耗的AI模型部署。它的核心优势在于能在极小的Flash和RAM占用下实现高效的异常检测或分类任务,甚至在M0这类低端芯片上也能流畅运行。

NanoEdge AI最强大的优势,就是对性能要求极低!!而且操作非常的简单。

?2、NanoEdge AI使用

首先在NanoEdge中创建一个新项目,项目类型选择异常检测,异常检测可以随着设备学习正常情况来区分正常情况和异常情况。

项目配置中,修改一下项目名称,将传感器类型选择为三轴加速度计

芯片选择中,选择我们要使用的芯片,这里我选择STM32F1系列。

在第二个步骤添加我们要训练的信号,上图导入的是这次作为正常数据的,静止状态下的陀螺仪三轴输出数据。

输入完数据之后,将数据保存导入到NanoEdge中,NanoEdge会分析数据。

同样的方式,导入异常情况下的数据,之后就可以开始进行模型训练了。

在训练任务中,新建训练任务,选择需要参与训练的正常数据和异常数据即可开始进行训练。

训练过程中,NanoEdge AI提供了可视化的训练过程,NanoEdge AI会遍历它的模型库,寻找最适合的模型以调节准确率,RAM和Flash大小。

在使用过程中不一定要等待运行结束,我们可以在验证界面选择模型来进行验证。

在验证界面,我们依旧可以通过串口上传数据来实现模型验证。

训练完成后,我们就可以保存我们的模型,保存的模型为.ZIP格式,里面有静态库.a文件还有.h文件。

3、NanoEdge AI模型部署和使用

在STM32CubeIDE中,将.h文件和.a文件添加到工程目录中,这里只需要这两个文件即可。

在路径设置中,添加libneai.a静态库,这里需要额外注意的是,我们的命名成neai(真实的文件名叫做libneai.a)但是在库文件里面叫做neai。

NanoEdge AI总共有三个接口函数,首先是Neai初始化函数,这个在使用前需要初始化,其次是neai学习函数,用于我们使用中进行动态学习。

最后就是neai预测函数,传入我们的数据,得到预测值。

? staticint datanum =?0;??if?(MPU6500_ReadData(&hmpu, &sensor_data) == HAL_OK)? {? ??if?(MPU6500_ConvertData(&hmpu, &sensor_data) == HAL_OK)? ? {? ? ??Data[datanum*3] = sensor_data.accel_x_g;? ? ??Data[datanum*3+1] = sensor_data.accel_y_g;? ? ??Data[datanum*3+2] = sensor_data.accel_z_g;? ? ? datanum++;? ? }? }??if(datanum ==?128)? {? ? datanum =?0;? ? ? neai_anomalydetection_detect(Data, &predictscore);? ? ??if(predictscore<80)? ? ? {? ? ? ? HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin,?1);? ? ? ? HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin,?0);? ? ? }? ? ??else? ? ? {? ? ? ? HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin,?0);? ? ? ? HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin,?1);? ? ? }? }

定时器中断回调函数中,我们每10ms采集一次数据,当采集满128次(需要和训练的时候保持一致),将其放入预测函数中得到预测值。

之后根据预测值来亮灭对应的LED灯。

 

有一说一,这两年来,NanoEdge AI的变化挺大的,在我印象中就有三次巨大的改动。这次改动之后,发现模型训练时间比以前花的时间变得好长,将近一个小时了,但是效果还挺不错的。

吐槽一嘴,QFN封装真难焊啊,这块MPU6500焊了三遍才焊好TAT,现在快用电烙铁练成焊武帝了。

相关推荐