我正在使用Raspberry Pi与I2C通信MPU6050传感器。 说,我有一个循环读取传感器数据的代码。要计算循环速度,我这样做:
for (;;) {
I2CInterface.getSensorData(device address, register address, data);
oldTime = currentTime;
clock_gettime(CLOCK_REALTIME, ¤tTime);
dt = currentTime - oldTime;
some easy calculations envolving dt like multiplying
fprintf(f, "%7d \n", dt);
}
我得到的是大约0.0017-0.0018秒,大约是580-550赫兹,这对我来说还不够。
如果我在没有I2CInterface.getSensorData,乘法和fprintf线的情况下运行相同的代码,我会得到50MHz左右。 频率在如此巨大的数量?通过I2C读取寄存器需要很长时间吗?计算部分的时间已经过去了吗? fprintf导致延迟?
答案 0 :(得分:1)
I2C通常很慢 - 时钟速率从100kHz开始,此器件的最大时钟频率为400kHz。在100kHz时,吞吐量与piddly RS232相当。交换20个字节就足以让你降低到600Hz。
检查电路板与MPU6050
之间的数据交换量,并尝试估算给定时钟频率的速度。验证您的I2C时钟速率设置。