MPU6050 自检

2019-08-14 16:47发布

我想检测MPU6050X轴陀螺仪的误差,于是我用正点原子的初始化程序,然后按照手册先配置陀螺仪的量程为+/-250dps,然后配置地址为0x0d的SELF_TESTX寄存器,写入值为0x0f,再配置地址为0x1B的GYRO_CONFIG寄存器,写入值为0x80,即打开x轴陀螺仪自检功能,手册翻来翻去,好像没其他寄存器需要配置了,然后我读以上两个寄存器的值,发现配置的值正确写进去了,但是我调试的时候发现不管我给SELF_TESTX寄存器写入多少值,都不影响Gyroscope_Measuermentsc x轴寄存器的输出值!!!按手册的理解,我给寄存器SELF_TESTX写入一定的值,并且使能GYRO_CONFIG寄存器的情况下,会在MPU6050内部产生一个作用力产生内部位移偏差,从而影响Gyroscope_Measuermentsc寄存器的输出值才对啊!!!但是值一直是固定值,除非我把寄存器GYRO_CONFIGX轴自检使能位设置为0,即关掉自检功能,x轴输出值才改变。可是这样无法测量STR的值啊!!!#include "mpu6050.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
int main(void)
{       
        short aacx,aacy,aacz;
        short gyrox,gyroy,gyroz;
        float pitch,roll,yaw;
        int a;
        Stm32_Clock_Init(9);
        uart_init(72,9600);
        delay_init(72);
        MPU_Init();
        MPU_Write_Byte(MPU_SELF_TESTX_REG,0X0f);//self-test
        delay_ms(10);
        MPU_Write_Byte(MPU_GYRO_CFG_REG,0X80);
        delay_ms(10);
        while(1)
                {
                        MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
                        MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
                       
                        a=MPU_Read_Byte(MPU_SELF_TESTX_REG);

                        printf("gyrox:%d ",gyrox);
                        printf("a:%d ",a);
                        delay_ms(100);
                       
                }
       
       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。