stm32cubemx configuración mpu6050 - 10 minutos 0 uso básico a flexible

stm32cubemx configuración mpu6050 - 10 minutos 0 uso básico a flexible

Pase de velocidad de 10 minutos! Leíste bien, son 10 minutos, desde 0 conceptos básicos hasta el uso flexible de mpu6050.

¿No creen? Si miras hacia abajo, dirás: Oh~ Así que eso es todo.

primer paso

Descarga el código fuente abierto de github.

https://github.com/leech001/MPU6050

En primer lugar, declaro que este código no está escrito por mí, sino que lo proporciona cierto jefe ruso.

No te preocupes si no puedes acceder a github, adjunto el archivo descargado al final del artículo

segundo paso

software

De acuerdo con el contenido Léame del proyecto de código abierto de github, realice la configuración del proyecto:

  1. habilitar i2c

  2. Agregue los archivos .c y .h descargados al proyecto. (Los estudiantes que necesitan usar mpu6050 deben saber cómo hacerlo, ¿verdad?

  3. Cuando sea necesario llamar a la interfaz mpu6050, simplemente incluya mpu6050.h. Aquí, como el autor del proyecto, en el "tercer paso", llame a main.c como ejemplo para ilustrar.

hardware

A continuación, tocaré mis manos y te guiaré para conectar el circuito.

clavija MCU 6050 pines
3,3 V CCV fuente de alimentación de 3,3 V
TIERRA TIERRA tierra
B10 SCL Reloj I2C
B11 ASD datos I2C
TIERRA AD0 AD0 es el pin de control de dirección 6050, simplemente conéctelo a tierra

IMG_20230504_131803

tercer paso

configuración de código

Incluir archivo de encabezado mpu6050.h

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

Definir la estructura mpu6050

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

Al comienzo de la función principal, inicialice el mpu6050

/ * USER CODE BEGIN 2 * /

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

/ * USER CODE END 2 * /

Llame a la función MPU6050_Read_All para leer todos los parámetros

/ * 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 * /

Entonces la pregunta es, ¿cómo accedo a estos parámetros? Por ejemplo, lea la aceleración del eje z.

Esto depende de la estructura MPU6050_t en mpu6050.h.

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;

Entonces, ¿cómo accedes a la aceleración del eje z?

a = MPU6050.Az;

Además de la función MPU6050_Read_All que lee todos los parámetros de una sola vez, el autor también proporciona otras funciones, siempre hay una que le conviene. Ver mpu6050.h para más detalles

Nombre de la función efecto
MPU6050_Read_All leer todos los parámetros
MPU6050_Read_Accel Leer parámetros de aceleración
MPU6050_Read_Gyro Leer datos del giroscopio
MPU6050_Read_Temp leer la temperatura

Código de muestra

Antes de la función principal

#include "mpu6050.h"

MPU6050_t MPU6050;

dentro de la función principal

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);

imagen-20230504143901947

El significado del parámetro de aceleración se explica a continuación.

加速度: El acelerómetro puede medir la aceleración de un objeto en un espacio tridimensional, y la unidad suele ser m/s². MPU6050 puede medir la aceleración del objeto en tres ejes respectivamente. Cuando el objeto está en reposo, el acelerómetro se verá afectado por la gravedad y mostrará un valor constante de 9,8 m/s². Cuando un objeto está en movimiento, el acelerómetro muestra el cambio en la aceleración del objeto a lo largo de cada eje.

El mpu6050 se coloca plano sobre la mesa aquí, por lo que la aceleración medida en la dirección xy es casi 0 y hay una aceleración gravitatoria de g en la dirección z, que es 9,8 m/s². (Muestra 1.12 en lugar de 1, porque realmente no puse el nivel)

¿Qué todavía no entiendo? Bueno, realmente no puedo ayudarte, creé un proyecto simple como referencia. Está en el archivo al final del artículo.

Si el pelo se lo lleva el viento

Este artículo tiene como objetivo utilizar el mpu6050 lo más rápido posible, lo cual es muy utilitario. Para ser honesto, no me gusta este tipo de pase de velocidad. Priva el placer y el logro de conquistar el módulo mpu6050 paso a paso, y leer el manual de datos Capacidad para dominar los módulos.

Si el mpu6050 se depura con éxito de acuerdo con este blog, el autor espera que pueda entender que realmente no ha dominado el mpu6050. Su tiempo de comunicación, configuración de registro, etc. son todos desconocidos para usted. Los lectores deben consultar el manual de datos y otros El tutorial se desglosa uno por uno. ¡Guardaos de la arrogancia y la impetuosidad!

Recursos de apoyo, descarga gratuita con 0 puntos

Supongo que te gusta

Origin blog.csdn.net/qq_34022877/article/details/130486840
Recomendado
Clasificación