stm32cubemx配置mpu6050——10分钟0基础到灵活使用

stm32cubemx配置mpu6050——10分钟0基础到灵活使用

10分钟速通!你没看错,就是10min,从0基础到灵活运用mpu6050。

不信?往下看看就会:嗷~原来如此

第一步

下载github开源代码。

https://github.com/leech001/MPU6050

首先声明,此代码不是本人所写,为某俄罗斯大佬提供。

如果你访问不了github不用担心,我在文章最后附上下载下来的文件

第二步

软件

根据github开源项目的Readme内容,进行工程配置:

  1. 开启i2c

    stm32cubemx配置mpu6050——10分钟0基础到灵活使用_第1张图片

  2. 将下载下来的.c和.h文件加入到工程内。(有运用mpu6050需求的同学,应该这部都会知道怎么做吧?

  3. 在需要调用mpu6050接口的地方,包含mpu6050.h就可以。此处和项目作者一样,在“第三步”中以在main.c调用为例举例说明。

硬件

接下来我将手摸手带大家连接电路

单片机引脚 6050引脚
3.3V VCC 3.3V供电
GND GND
B10 SCL I2C时钟
B11 SDA I2C数据
GND AD0 AD0为6050地址控制引脚,接地就可以

stm32cubemx配置mpu6050——10分钟0基础到灵活使用_第2张图片

第三步

代码配置

包含mpu6050.h头文件

/ * USER CODE BEGIN Includes * /
#include "mpu6050.h"
/ * USER CODE END Includes * /

定义mpu6050结构体

/ * USER CODE BEGIN PV * /
MPU6050_t MPU6050;
/ * USER CODE END PV * /

在main函数开头,初始化mpu6050

/ * USER CODE BEGIN 2 * /

while (MPU6050_Init(&hi2c1) == 1);

/ * USER CODE END 2 * /

调用MPU6050_Read_All函数,读取所有参数

/ * USER CODE BEGIN WHILE * /
while (1)
{
/ * USER CODE END WHILE * /

/ * USER CODE BEGIN 3 * /
  MPU6050_Read_All(&hi2c1, &MPU6050);
  HAL_Delay (100);
}
/ * USER CODE END 3 * /

那么问题来了,我如何访问这些参数呢?比如读取z轴加速度。

这就要看mpu6050.h里面的MPU6050_t结构体了。

typedef struct
{

    int16_t Accel_X_RAW;	// 原始数值,忽略
    int16_t Accel_Y_RAW;
    int16_t Accel_Z_RAW;
    double Ax;				// x方向加速度,单位为重力加速度g (也就是9.8)
    double Ay;				// y方向加速度
    double Az;				// z方向加速度

    int16_t Gyro_X_RAW;
    int16_t Gyro_Y_RAW;
    int16_t Gyro_Z_RAW;
    double Gx;				// x方向陀螺仪加速度		
    double Gy;				// y方向陀螺仪加速度
    double Gz;				// z方向陀螺仪加速度

    float Temperature;		// 温度

    double KalmanAngleX; 	// 卡尔曼滤波过后的角度
    double KalmanAngleY; 	// 卡尔曼滤波过后的角度
} MPU6050_t;

那么如何访问z轴加速度呢?

a = MPU6050.Az;

除了一口气读取所有参数的MPU6050_Read_All函数,作者还提供了其他的函数,总有一款适合你。详细请参见mpu6050.h

函数名 作用
MPU6050_Read_All 读取所有参数
MPU6050_Read_Accel 读取加速度参数
MPU6050_Read_Gyro 读取陀螺仪数据
MPU6050_Read_Temp 读取温度

示例代码

main函数前

#include "mpu6050.h"

MPU6050_t MPU6050;

main函数内

while (MPU6050_Init(&hi2c2) == 1)
    ;
// 读取所有参数
MPU6050_Read_All(&hi2c2, &MPU6050);
printf("加速度 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Ax,MPU6050.Ay,MPU6050.Az);
printf("陀螺仪 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Gx,MPU6050.Gy,MPU6050.Gz);
printf("温度 %.2f\n",MPU6050.Temperature);

// 读取加速度
MPU6050_Read_Accel(&hi2c2, &MPU6050);
printf("只更新加速度 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Ax,MPU6050.Ay,MPU6050.Az);

// 读取陀螺仪
MPU6050_Read_Gyro(&hi2c2, &MPU6050);
printf("只更新陀螺仪 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Gx,MPU6050.Gy,MPU6050.Gz);

// 读取温度
MPU6050_Read_Temp(&hi2c2, &MPU6050);
printf("只更新温度 %.2f\n",MPU6050.Temperature);

stm32cubemx配置mpu6050——10分钟0基础到灵活使用_第3张图片

下面解读加速度参数含义

加速度:加速度计可以测量物体在三维空间中的加速度,单位通常是m/s²。MPU6050能够在三个轴上分别测量出物体的加速度。当物体处于静止状态时,加速度计会受到重力作用而显示一个9.8m/s²的常数值。当物体发生运动时,加速度计会显示物体在各轴上的加速度变化。

此处桌上平放着mpu6050,因此测出来xy方向加速度几乎为0,z方有一个g的重力加速度,也就是9.8m/s²。(显示1.12而不是1,是因为我没有真正放水平)

什么还是不懂?好吧,真拿你没办法,我建立了一个简单工程,以供参考使用。就在文末的文件里面。

未若头发因风起

此文旨在最快的使用出来mpu6050,极具功利性,说真的我并不喜欢这样的速通,他剥夺了一步步征服mpu6050模块所带来的畅快和成就,以及通过阅读数据手册来掌握模块的能力。

如果根据本博客顺利调试出来mpu6050,笔者希望你能明白自己并没有真正掌握mpu6050,它的通信时许、寄存器配置等对你来说,都是不明所以的,这些都要读者根据数据手册和他人的教程逐个攻破。戒骄戒躁!

配套资源,0积分免费下载

你可能感兴趣的:(其他,电赛模块,stm32,单片机,嵌入式硬件)