увеличение частоты дискретизации датчика, подключенного через I2C

Я использую Raspberry Pi для связи с датчиком MPU6050 с I2C.
Скажем, у меня есть код, который читает данные датчика в цикле. Для расчета скорости цикла я делаю так:

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);
}

Я получаю около 0,0017-0,0018 секунд, что составляет около 580-550 Гц, что для меня недостаточно.

Если я запускаю тот же код без I2CInterface.getSensorData, умножения и строк fprintf, я получаю около 50 МГц.
Куда девается частота в таком огромном количестве? Сколько нужно времени, чтобы прочитать реестр через I2C? Время ушло, чтобы сделать расчет части? fprintf вызывает задержку?

0

Решение

I2C, как правило, работает медленно — тактовая частота начинается от 100 кГц, и это устройство может работать на частоте не более 400 кГц. При 100 кГц пропускная способность сравнима с легким RS232. Обмен 20 байтов достаточен для снижения частоты до 600 Гц.

Проверьте, сколько данных обменивается между вашей платой и MPU6050 и попытайтесь оценить, насколько быстро вы можете работать на данной тактовой частоте. Проверьте настройку тактовой частоты I2C.

1

Другие решения


По вопросам рекламы [email protected]