Синхронизация нескольких MPU9250

Я заинтересован в сборе данных с 3 MPU9250 по протоколу связи I2C. Как я читал, я могу собирать измерения на одной и той же шине I2C с двух MPU. Однако как я могу собирать синхронизированные данные с более чем 2 микропроцессоров. А если не Ардуино, что посоветуете?

, 👍-1

Обсуждение

После краткого просмотра таблицы данных кажется, что импульс на выводе FSYNC запускает измерение. Вы можете привязать все контакты MPU FSYNC к одному цифровому выходу Arduino, чтобы измерения запускались одновременно. Затем прочитайте данные из FIFO микропроцессоров, как обычно., @chrisl

Спасибо за ваш ответ @chrisl, не могли бы вы уточнить часть чтения данных?, @YvesD


1 ответ


0

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 меняется в зависимости от ваших цифровых выходов.

,