Использование MPU-6050 без I2C
Моей целью является одновременное использование нескольких MPU-6050. Я провел поиск в Интернете и обнаружил, что их можно очень просто подключить. Просто подключитесь параллельно и используйте сканер I2C. Затем получите эти адреса и используйте их в обычном режиме.
Но я не могу найти другой адрес, там оказывается только один адрес 0x68
, поэтому я хочу подключить свой другой MPU-6050 в другие контакты.
Как этого можно добиться?
@Maifee Ul Asad, 👍0
Обсуждение2 ответа
Как вы можете прочитать в паспорте 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
Вы можете подключить более 2 последовательно, используя бит адреса, как выбор микросхемы. Допустим, у вас их было 8. Используйте регистр сдвига с 8 выходами, идущими к 8 микросхемам. Теперь выведите 0b00000001 и используйте адрес I2C 0x69, ответит только одно устройство с 1 в адресной строке. Затем используйте 0b00000010 для 2-го устройства, 0b00000100 для 3-го и т. д. до 0b10000000 для 8-го.
MPU-6050 имеет 1 контакт для изменения 1 бита адреса. Это означает, что вы можете подключить 2 MPU-6050 к одной и той же шине I2C., @chrisl
Как, можете описать?? Пожалуйста, @Maifee Ul Asad
из таблицы данных «адрес одного из устройств должен быть b1101000 (вывод AD0 имеет низкий логический уровень), а адрес другого должен быть b1101001 (вывод AD0 имеет высокий логический уровень)», @Juraj