c++ - 通过 I2C 增加传感器采样率

标签 c++ raspberry-pi sensors gyroscope 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 时钟速率设置。

关于c++ - 通过 I2C 增加传感器采样率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28549001/

相关文章:

python - 如何将CSV文件中的数据加载到Python脚本中进行概率分析?

iphone - 在 Mac 上从 iPhone 获取实时数据

c++ - 堆 block 修改超过请求的大小

c++ - 为什么打印un_ordered map和map(dictionary)的key和value有异常?

python - 文件系统中的 ACID 事务

python - 使用 Python 和 Raspberry Pi 快速捕获和将 2D 图像堆叠为 3D numpy 数组

android - 每秒获取传感器值

c++ - GDI 中的实时绘图

c++ - 隐藏函数的实例化

python - 通过 I2C 将整数数组从 Raspberry Pi 发送到 Arduino