我想检测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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
初始化是没有问题的,陀螺仪可以正常工作
一周热门 更多>