通过 I2C 增加传感器采样率

increasing sensor sampling rate hooked via I2C

我正在使用 Raspberry Pi 通过 I2C 与 MPU6050 传感器通信。 比如说,我有一个代码可以循环读取传感器数据。为了计算循环速度,我这样做了:

伪代码

for (;;) {
    I2CInterface.getSensorData(device address, register address, data);
    oldTime = currentTime;
    clock_gettime(CLOCK_REALTIME, &currentTime);
    dt = currentTime - oldTime;
    some easy calculations envolving dt like multiplying
    fprintf(f, "%7d \n", dt);
}

我得到的 dt 大约是 0.0017-0.0018 秒,大约是 580-550 Hz,这对我来说还不够。

如果我 运行 没有 I2CInterface.getSensorData、乘法和 fprintf 行的相同代码,我得到大约 50MHz。 如此大量的频率去哪里了?通过I2C读取Register需要多少时间?时间已经过去了计算部分? fprintf 导致延迟?

I2C 通常很慢 - 时钟速率从 100kHz 开始,此设备的时钟频率最高可达 400kHz。在 100kHz 下,吞吐量与 RS232 相当。交换 20 个字节足以将您的频率降低到 600Hz。

检查您的开发板和 MPU6050 之间交换了多少数据,并尝试估计在给定时钟速率下您可以进行多快。验证您的 I2C 时钟速率设置。