MPU-6050是一种流行的模块,其中包含温度传感器,加速度计和陀螺仪。用户可以通过I2C或SPI读取传感器信息。公开提供了两个文档,用于从IC寄存器中读取数据。这些是:
由于总线通信等待时间的原因,通过I2C读取IMU的各个寄存器会导致时间跨度偏差。因此,不同步读取传感器的X,Y和Z轴寄存器。为了解决这个问题,设备提供了一个1024字节的内部FIFO队列。配置为推送到队列的数据以采样率一起推送。因此,读取FIFO将产生同步数据。
请参阅(2),第7.17节] ::
MPU-60X0包含一个1024字节的FIFO寄存器,可通过串行接口进行访问。 FIFO配置寄存器确定将哪些数据写入FIFO。可能的选择包括陀螺仪数据,加速度计数据,温度读数,辅助传感器读数和FSYNC输入。 FIFO计数器跟踪FIFO中包含多少字节的有效数据。 FIFO寄存器支持突发读取。中断功能可用于确定何时有新数据可用
问题
数据表指定,为了从FIFO中读取数据,您必须执行以下操作:
0x6A
,文档(1),4.29节)0x23
,文档(1),第4.7节)。我分别通过设置位6、5、4和3来启用XG_FIFO_EN
,YG_FIFO_EN
,ZG_FIFO_EN
和ACCEL_FIFO_EN
。如果执行了这些步骤,则它声明(文档(1),第4.33节):
按照寄存器编号的顺序(从最低到最高)将数据写入FIFO。如果所有FIFO使能标志(见下文)均被使能,并且所有外部传感器数据寄存器(寄存器73至96)都与从设备相关联,则将按采样率顺序写入寄存器59至96的内容。当传感器数据寄存器(寄存器59至96)的相应FIFO使能标志在FIFO_EN(寄存器35)中设置为1时,它们的内容将写入FIFO缓冲区。
但是,我发现这并不成立。给定我已在配置寄存器中启用的标志,我希望以下序列来自FIFO:
。当我加速或旋转IMU时,这似乎也没有多大意义。因此,我不确定如何准确读取FIFO。这是我面临的问题* ----------------------------------------------------------- * * BYTE # | VALUE | Register (dec) * * ----------------------------------------------------------- * * 0 | ACCEL_XOUT[15:8] | 59 * * 1 | ACCEL_XOUT[7:0] | 60 * * ----------------------------------------------------------- * * 2 | ACCEL_YOUT[15:8] | 61 * * 3 | ACCEL_YOUT[7:0] | 62 * * ----------------------------------------------------------- * * 4 | ACCEL_ZOUT[15:8] | 63 * * 5 | ACCEL_ZOUT[7:0] | 64 * * ----------------------------------------------------------- * * 6 | GYRO_XOUT[15:8] | 67 * * 7 | GYRO_XOUT[7:0] | 68 * * ----------------------------------------------------------- * * 8 | GYRO_YOUT[15:8] | 69 * * 9 | GYRO_YOUT[7:0] | 70 * * ----------------------------------------------------------- * * 10 | GYRO_ZOUT[15:8] | 71 * * 11 | GYRO_ZOUT[7:0] | 72 * * ----------------------------------------------------------- *
尚未从FIFO读取12个字节确实读取单个寄存器时不与相同数据对应
简介MPU-6050是一个流行的模块,其中包含温度传感器,加速度计和陀螺仪。用户可以通过I2C或SPI读取传感器信息。两个文件公开...
好的,我已经解决了问题。问题是我在读取FIFO之前未能reset
FIFO-否则一切都差不多。我将向您确切说明我现在如何设置IMU。