Синхронизация нескольких MPU9250
Я заинтересован в сборе данных с 3 MPU9250 по протоколу связи I2C. Как я читал, я могу собирать измерения на одной и той же шине I2C с двух MPU. Однако как я могу собирать синхронизированные данные с более чем 2 микропроцессоров. А если не Ардуино, что посоветуете?
@YvesD, 👍-1
Обсуждение1 ответ
MPU использует буфер FIFO для данных. Таким образом, время измерения не обязательно совпадает со временем общения. Кроме того, есть контакт FSYNC. В технические данные MPU9250 почти ничего не описано об этом контакте, только описание вывода:
11 FSY Цифровой вход кадровой синхронизации. Подключитесь к GND, если он не используется.
Я бы интерпретировал это следующим образом: если вы подадите на этот контакт высокий уровень (активный высокий уровень), запустится измерение. Я не могу гарантировать, что это так работает; Я также могу только посмотреть в таблице данных. Для моего ответа я предположу, что штифт действительно работает таким образом. Вам придется проверить это самостоятельно.
Основываясь на этой информации, я бы предложил следующее решение (не имея возможности попробовать его самостоятельно из-за отсутствия MPU):
Подключите 1 цифровой выходной контакт Arduino к контактам FSYNC всех микропроцессоров. Если вы подадите на этот вывод импульс от НИЗКОГО до ВЫСОКОГО (а затем снова до НИЗКОГО через короткое время, чтобы вернуться в пассивное состояние), микропроцессоры начнут свои измерения. Поскольку все они получают одинаковый стартовый импульс, они будут выполнять измерения одновременно. (Возможно, вам нужно настроить MPU для этого) Когда измерение будет сделано, данные будут помещены в буфер FIFO. Затем вам нужно получить эти данные со всех микропроцессоров по I2C.
Вот вам хитрость, чтобы вы могли эффективно подключаться к большому количеству MPU: контактный адрес MPU также проверяется во время работы. Это означает, что вы можете изменить адрес MPU во время работы, подключив его адресный контакт к цифровому выходному контакту вашего Arduino. Сделайте это с каждым используемым MPU, один выходной контакт для одного адресного контакта MPU. На Arduino вы устанавливаете все контакты в одно и то же состояние вывода (скажем, LOW), чтобы все MPU находились на одном и том же адресе. Вы никогда не должны вызывать этот адрес через I2C. Если вы хотите связаться с одним из MPU, вы выводите HIGH на его контактный адрес. Этот конкретный MPU изменит свой адрес, и теперь вы сможете общаться как обычно. Когда вы закончите общение с ним, просто снова выведите LOW. Теперь вы можете активировать следующий MPU для связи, подав HIGH на соответствующий адресный контакт.
Таким образом, у вас есть 1 неактивный адрес и 1 активный адрес, где MPU меняется в зависимости от ваших цифровых выходов.
- Как очистить буфер FIFO на MPU6050?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Что такое контакты XTAL1 и XTAL2 в Arduino Uno/Nano?
- Объяснение кода MPU6050
- Изменение адреса I2C MPU-6050
- Онлайн-проблема подключения Arduino к базе данных MySQL
- Снять гравитацию с акселерометра MPU-6050
После краткого просмотра таблицы данных кажется, что импульс на выводе FSYNC запускает измерение. Вы можете привязать все контакты MPU FSYNC к одному цифровому выходу Arduino, чтобы измерения запускались одновременно. Затем прочитайте данные из FIFO микропроцессоров, как обычно., @chrisl
Спасибо за ваш ответ @chrisl, не могли бы вы уточнить часть чтения данных?, @YvesD