【问题标题】:Relationship between I2C operating frequency and sample rate setting in MPU6050MPU6050中I2C工作频率与采样率设置的关系
【发布时间】:2014-11-04 14:50:45
【问题描述】:

我对通过 RaspberryPi 和 Python 读取陀螺仪数据感兴趣,但我对如何根据 I2C 时钟频率设置 MPU6050(加速度计、陀螺仪;datasheet MPU6050)的采样率以避免错误读取数据(对于例如在缓冲区中没有数据时读取或读取比写入更快,等等),因为每个度量都是一个 16 位字。

这两个时钟之间有关系吗?

【问题讨论】:

  • 我未能在该数据表中找到实际的数据寄存器。我瞎了吗?
  • 对不起,忘记the Register Map的链接

标签: python raspberry-pi gyroscope i2c


【解决方案1】:

大约 18 个月前,我用同样的芯片做了一个项目。从那以后我就没有碰过 PI,所以我不知道在此期间事情可能发生了怎样的变化。无论如何,我使用 smbus 来读取芯片。我发现了一些困难的事情,与 i2c 块读取相比,读取单个寄存器非常慢。此外,您必须关闭睡眠模式。抱歉,我没有关于时钟计时的任何信息,但如果您只是想获得一个良好的读取循环,这可能会有所帮助。您不必使用 numpy,但如果您打算操作您的样本,它会很有帮助。 GL/HF。

import smbus
import numpy
# initialize
bus = smbus.SMBus(1)
# turn off sleep mode
bus.write_byte_data(0x68,0x6B,0x00)

# reading in data (this can be in a loop or function call)
sample = numpy.empty(7)
r = bus.read_i2c_block_data(0x68, 0x3B, 14)
sample[0] = (r[0]<<8)+r[1]
sample[1] = (r[2]<<8)+r[3]
sample[2] = (r[4]<<8)+r[5]
sample[3] = (r[6]<<8)+r[7]
sample[4] = (r[8]<<8)+r[9]
sample[5] = (r[10]<<8)+r[11]
sample[6] = (r[12]<<8)+r[13]

【讨论】:

  • 会不会是这样的:r_H = bus.read_byte_data(0x68, 0x3B)r_L = read_byte_data(0x68, 0x3C),然后是sample = (r_H&lt;&lt;8) + r_L
  • 是的..如果这是您唯一需要的。但是如果你需要获取其他值,你应该坚持使用块读取。它的速度非常快。只比单次读取 IIRC 慢一点点。
  • 让我们看看我是否理解:使用bus.read_i2c_block_data(0x68, 0x3B, 14),我读取了单次加速计、温度和陀螺仪,对吗?
  • 没错。您可能不需要温度,但它在中间,并且只需执行单个块调用就更快。
  • 好吧,就像C++函数getMotion6()。只是一个问题:如果我可能需要以相同的写入数据采样率(例如:8kHz)读取,我可以设置time.sleep(1/8000.0) 还是必须将其设置为较小的值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
相关资源
最近更新 更多