MPU6500 через SPI

imu

Я пытаюсь связаться с датчиком MPU6500 через SPI, так как мне нужна максимально возможная скорость обновления. Мне сложно найти простой для понимания пример кода или, возможно, легкую библиотеку для настройки и инициализации датчика и чтения данных гироскопа/акселерометра через SPI.

На данный момент я начал адаптировать код и информацию, найденную по адресу https://playground.arduino.cc/Main/MPU- 6050 думал, что будет довольно легко использовать SPI вместо I2C «Wire» и адаптировать конфигурацию и регистры на основе таблицы данных, но я понял, что здесь слишком много возможных подводных камней.

Есть рекомендации?

, 👍1

Обсуждение

Какую библиотеку вы уже нашли? А по поводу какой части примера кода у вас есть вопросы?, @Michel Keijzers

@MichelKeijzers добавил информацию., @Z4-

Я убрал флаг закрытия, я никогда не пробовал этот датчик, обычно компоненты предназначены либо для SPI, либо для I2C (или другого средства связи), но не поддерживают оба, поэтому я удивлен, что вы вообще можете перейти с I2C на SPI., @Michel Keijzers

Прочтите техническое описание, и протокол SPI довольно легко реализовать!, @MaNyYaCk

Спасибо, Мишель, да, он определенно поддерживает оба., @Z4-


1 ответ


1

Для тех, кто еще не разобрался, это очень просто.

По сути, для связи SPI с датчиком MPU 6500 это немного отличается от того, что может предложить I2C.

В I2C пакет данных выглядит следующим образом:

(7-битный адрес подчиненного устройства + бит чтения/записи), но в SPI это выглядит следующим образом:

(бит чтения/записи + 7-битный адрес регистра), обратите внимание, что нам даже не нужен адрес подчиненного устройства в SPI, поскольку выбор микросхемы подключен от процессора (главного) к датчику (подчиненному).

Итак, для SPI, допустим, вы хотите записать значение 64 в регистр 0x6B, тогда: Передача_данных[2]; Данные_передачи[0] = 0x6B; Transmission_data[1] = 64;

Предположим, вы хотите прочитать значение из регистра 0x43, которое представляет собой значение GYRO_X_High Byte, тогда: Передача_данных[1]; Данные_передачи[0] = 0x43 | 0x80; // вам нужно или это с помощью 0x80(десятичное число = 128)

Спасибо... Надеюсь, это поможет кому-то, нуждающемуся в помощи по SPI, поскольку мне тоже было трудно найти эту информацию.

,