Использование MPU-6050 без I2C

Моей целью является одновременное использование нескольких MPU-6050. Я провел поиск в Интернете и обнаружил, что их можно очень просто подключить. Просто подключитесь параллельно и используйте сканер I2C. Затем получите эти адреса и используйте их в обычном режиме.

Но я не могу найти другой адрес, там оказывается только один адрес 0x68, поэтому я хочу подключить свой другой MPU-6050 в другие контакты.

Как этого можно добиться?

, 👍0

Обсуждение

MPU-6050 имеет 1 контакт для изменения 1 бита адреса. Это означает, что вы можете подключить 2 MPU-6050 к одной и той же шине I2C., @chrisl

Как, можете описать?? Пожалуйста, @Maifee Ul Asad

из таблицы данных «адрес одного из устройств должен быть b1101000 (вывод AD0 имеет низкий логический уровень), а адрес другого должен быть b1101001 (вывод AD0 имеет высокий логический уровень)», @Juraj


2 ответа


1

Как вы можете прочитать в паспорте MPU-6050, он использует адрес I2C 0b110100X, где X — это состояние контакта AD0. Если вы подключите AD0 к земле, адрес будет 0b1101000, тогда как если вы подключите его к Vcc, это будет 0b1101001. Это эквивалентно адресам 0x68 и 0x69.

Это означает, что в зависимости от того, как вы подключаете AD0, у вас может быть 2 разных MPU-6050 на одной шине I2C (у вас не может быть устройств с одинаковым адресом).

Если вам действительно нужно подключить более двух из них, вы должны использовать мультиплексор I2C, например PCA9544A. , который разделит шину на подшины.


РЕДАКТИРОВАТЬ: Обычно адресные контакты устройств I2C устанавливаются на постоянной основе путем подключения их либо к земле, либо к Vcc. Смысл адресной системы в том, что ведомое устройство будет оставаться на своем адресе, не меняя его. Но, как сообщил Джот в комментариях и как подтверждает сайт Arduino Playground для MPU-6050, вы действительно можете установить контактный адрес MPU-6050 во время работы.

Вам нужен 1 цифровой выходной контакт на Uno для каждого MPU, который затем привязывается к контакту AD0 MPU через делитель напряжения. Последняя часть важна: вам нужен делитель напряжения, потому что MPU — это устройство на 3,3 В, а Uno работает на 5 В. Чтобы не поджарить адресный контакт, необходимо снизить напряжение.

Затем вы должны использовать контакты адреса, чтобы установить для всех MPU один адрес (скажем, 0x69). Когда вам нужно связаться с одним из них, вы переключаете его контактный адрес, который изменит его адрес (в данном случае на 0x68). Затем вы можете использовать обычный рабочий процесс I2C с этим адресом (0x68). Когда вы закончите, вы можете вернуть этот MPU на другой адрес, снова переключив адресный контакт. Вы можете повторить это с любым из подключенных MPU, которых может быть много (я думаю, что пределом здесь является сама шина I2C с пропускной способностью ее проводов).

Это обходной путь, а не то, для чего предназначена шина I2C. Но это кажется правильным решением. Просто убедитесь, что адреса, с которыми вы общаетесь, всегда уникальны. Обращение к адресу, который принадлежит более чем одному устройству, заблокирует вашу шину I2C.

,

Это означает, что, используя значение переключения цикла AD0, я могу получить доступ к обоим ?, @Maifee Ul Asad

Я не думаю, что MPU постоянно проверяет AD0, но проверяет его при включении питания. (Хотя я не нашел этого четко в таблице данных) Это означает, что вы не можете изменить адрес без выключения питания MPU. В любом случае вы не сможете адресовать более 2 MPU на одной шине., @chrisl

@chrisl Я где-то читал, что AD0 используется во время выполнения. Можно иметь много датчиков mpu6050 и выбирать их один за другим через вывод AD0 (оставьте их на 0x69 и используйте один на 0x68). Это невозможно сделать с помощью Arduino Uno, так как контакт с 5 В перебьет mpu6050 через контакт AD0., @Jot

@Jot Может быть, ты помнишь, где ты это прочитал? Хорошо бы иметь ссылку на это., @chrisl

Например здесь: https://forum.arduino.cc/index.php?topic=545257.msg3716437#msg3716437 Сам не проверял., @Jot

Сообщается, что это решение работает на [сайте Arduino Playground MPU-6050](https://playground.arduino.cc/Main/MPU-6050/). Я добавлю это к своему ответу завтра., @chrisl


0

Вы можете подключить более 2 последовательно, используя бит адреса, как выбор микросхемы. Допустим, у вас их было 8. Используйте регистр сдвига с 8 выходами, идущими к 8 микросхемам. Теперь выведите 0b00000001 и используйте адрес I2C 0x69, ответит только одно устройство с 1 в адресной строке. Затем используйте 0b00000010 для 2-го устройства, 0b00000100 для 3-го и т. д. до 0b10000000 для 8-го.

,