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:
-
habilitar i2c
-
Agregue los archivos .c y .h descargados al proyecto. (Los estudiantes que necesitan usar mpu6050 deben saber cómo hacerlo, ¿verdad?
-
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 |
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);
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!