欧拉角
四元数,万向节死锁
详解四元数与旋转_零度蛋花粥的博客-CSDN博客_四元数 旋转
寄存器
寄存器地址:0x6B(01101011)
DEVICE_RESE=1,复位MPU6050,复位完成后,自动清零。
SLEEP=1,进入睡眠模式;SLEEP=0,正常工作模式。
TEMP_DIS,用于设置是否使能温度传感器,设置为0,则使能CLKSEL[2:0],用于选择系统时钟源,如下所示:
CLKSEL[2:0] 时钟源
001 内部8M RC晶振
010 PLL,使用X轴陀螺作为参考
011 PLL,使用Y轴陀螺作为参考
100 PLL,使用Z轴陀螺作为参考
101 PLL,使用外部32.768Khz作为参考
110 PLL,使用外部19.2Mhz作为参考
11 保留
001 关闭时钟,保持时序产生电路复位状态
该寄存器用于控制FIFO使能,在简单读取传感器数据的时候,可以不用FIFO,设置对应位为:0,即可禁止FIFO,设置为1,则使能FIFO。加速度传感器的三个轴,全由一个位(ACCEL_FIFO_EN)控制,只要该位为1,则加速度传感器三个通道都开启FIFO;但是陀螺仪传感器的三个轴需要一个一个设置,即XYZ轴分别配置。
该寄存器用于设置MPU6050的陀螺仪采样频率,计算公式为:采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV)。(相当于分频)这里陀螺仪的输出频率,是1Khz或者8Khz,与数字低通滤波器(DLPF)的设置有关,当DLPF_CFG=0或7的时候,频率为8Khz,其他情况是1Khz。而且DLPF滤波频率一般设置为采样率的一半。采样率,我们假定设置为50Hz,那么:SMPLRT_DIV=1000/50-1=19。
总之,陀螺仪采样率分频寄存器就是用于设置陀螺仪的采样频率,如果采样频率为50Hz,那么采样周期就为1/50=20ms,即20ms采集一次陀螺仪的数据。
配置寄存器就是设置数字低通滤波器的DLPF_CFG位来结合陀螺仪采样分频寄存器来共同设置采样周期。
遇到的问题
初始化失败------- 移植官方文件后,ii2没有问题,地址没有问题,延时没问题,最后发现不能用面包板去连线
,直接将引脚连接到芯片上就行了,而且可能初始化前十几次都不成功,一直等个10多秒就成了(痛啊,初始化了快一天)
输出问题------全为0,尽然是延时问题,
while(1)
{
// delay_ms(800);用了延时函数,三个角度全部为0,切记,切记
if(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0)
{
printf("俯仰角:%2d 翻滚角:%2d 偏航角:%2d\r\n",(int)pitch,(int)roll,(int)yaw);
// delay_ms(800);用了延时函数,三个角度全部为0,切记,切记
for( i=0;i<10000;i++)//一重延时数据正常,但数据输出速度几乎没有延时
{
// for( j=1;j<500;j++)
// {}//二重延时也全是0
}
}
}
所以在获取数据时不要延时。
一段时间后后输出数据不变-----引脚电压连接不稳,接外界5V,焊死,焊死
yaw偏航角不准------没办法,硬件问题,结合地磁传感器