MPU6050 con ejes de lectura STM32 X, Y, Z problemas de valores

0

Tengo un STM32F303 Discovery y quiero usar el bus I2C para recibir los datos x, y, z de un acelerómetro MPU6050. ¿Alguien tiene código fuente para esto? El problema es que la dirección de los buffers (i2cBuff) son 0, y Xaccel, Yaccel, Zaccel también.

Aquí está mi código:

#include "main.h"
#include "stm32f3xx_hal.h"

/* Private variables-----*/
I2C_HandleTypeDef hi2c1;
uint8_t i;
uint8_t i2cBuff[8];
uint16_t ax,ay,az;
float Xaccel,Yaccel,Zaccel;

#define mpu6050Address 0xD0


int main(void)
{
   HAL_Init();
   /* Configure the system clock */

   /* USER CODE BEGIN 2 */
   for(uint8_t i=0 ; i <255;i++)
   {
       if(HAL_I2C_IsDeviceReady(&hi2c1,i,1 ,10) == HAL_OK )
       {
          HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
          break;
       }
    }


    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {

       HAL_I2C_Mem_Read(&hi2c1, mpu6050Address, 0x3B, I2C_MEMADD_SIZE_8BIT, &i2cBuff[1], 6, 10);



       ax = -(i2cBuff[1]<<8 | i2cBuff[2]);
       ay = -(i2cBuff[3]<<8 | i2cBuff[4]);
       az = -(i2cBuff[5]<<8 | i2cBuff[6]);

       Xaccel = ax/8192.0;
       Yaccel = ay/8192.0;
       Zaccel = az/8192.0;
      /* USER CODE END WHILE */

      /* USER CODE BEGIN 3 */

      }
      /* USER CODE END 3 */

   }
    
pregunta Abdelkader Ben

2 respuestas

1

Tuve el mismo problema y lo solucioné aumentando el tiempo de espera en las operaciones de Lectura (). Intenta con esto:

HAL_I2C_Mem_Read(&hi2c1, mpu6050Address, 0x3B, I2C_MEMADD_SIZE_8BIT, &i2cBuff[1], 6, 100);
    
respondido por el aangulo
0

Al leer ejemplos en otros lugares, a este programa parece faltarle la señal inicial de "despertarse".

Hay un ejemplo en enlace

Esto comienza configurando el registro 0x6B a cero. Aparentemente, este es el registro de administración de energía, y como el dispositivo se inicia en modo de suspensión, es necesario antes de que el dispositivo devuelva resultados.

    
respondido por el Oliver Broad

Lea otras preguntas en las etiquetas