Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 12:23:52

Приветствую всех.
Сначала коротко о задаче. Нужно опросить множество (около 20 датчиков) MPU-9250. (фото ниже)
Изображение
Казалось бы, что тут сложного? Но проблема в том, что все они сидят на одном адресе - 0x68, который вшит на них еще на заводе. А значит, просто нацеплять их друг за другом не выход. Немного порывшись нашел выход - мультиплексоры.
Доработал модульную схему, теперь она выглядит так.
Изображение
Принцип действия:
  1. Ардуино-мастер "пинает" ардуино-воркеров.
  2. Воркеры "открывая" через мультиплексоры датчики, опрашивают их.
  3. Из полученных данных формируется ответ который отсылается мастеру для дальнейших калдунств.


Групп может от 3 до 5, датчиков в этих группах от 5 до 10 (в среднем), на каждую группу нужно по мультиплексору.

Отсюда вопрос, вернее просьба, посоветовать мультиплексоры подходящие для моих целей, т.к. опыта в этом у меня ноль, нашел только К155КП5, но не уверен подойдет ли, поэтому я и здесь.
Просьба сильно не бомбить, я не тупой, просто дизайнер и студент-веб-разработчик :facepalm:, а тут чет захотелось одну затею проверить.
Но паять по готовым схемам и паяльник в руках держать умею.


Так же буду рад советам по теме и полезной информации в виде статей, схем, видео и т.д..

Заранее благодарен всем, кто откликнется.

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 13:10:18

Приветствую всех.
Сначала коротко о задаче. Нужно опросить множество (около 20 датчиков) MPU-9250. (фото ниже)
Изображение
Казалось бы, что тут сложного? Но проблема в том, что все они сидят на одном адресе - 0x68, который вшит на них еще на заводе. А значит, просто нацеплять их друг за другом не выход.

Так на фотке видно, что там есть некий AD0. Видимо это бит адреса? Если это так, то используя его можно "нацеплять" сколько угодно. Без всяких мультиплексоров. Если это конечно бит адреса (проверьте по даташиту и по схеме платы).
Ещё вариант - программный ногодрыг. Так сможете одновременно опросить хоть все. Для опроса гироскопа на движущемся объекте это может быть важным моментом. Если будете опрашивать последовательно, то на опрос 20 шт. может уйти очень прилично времени даже на SCLK=400кГц.

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 13:18:53

Так на фотке видно, что там есть некий AD0. Видимо это бит адреса? Если это так, то используя его можно "нацеплять" сколько угодно. Без всяких мультиплексоров. Если это конечно бит адреса (проверьте по даташиту и по схеме платы).


Да, так можно делать, но только для 2-х датчиков в линию, во всяком случае, на форумах в темах с аналогичными вопросами так написано.

А про "ногодрыг" можно подробнее? Что под этим подразумевается, не совсем понял.

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 15:19:45

Есть I2C мультиплексор TCA9548A, стоит порядка 1$. Цеплять можно до 8 ведомых. Адрес микросхемы (TCA9548A) можно менять, даташит в помощь. И того: 1 шина I2C с МК -> 3 модуля (TCA9548A) -> 24 ведомых.

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 17:13:25

Есть I2C мультиплексор TCA9548A, стоит порядка 1$. Цеплять можно до 8 ведомых. Адрес микросхемы (TCA9548A) можно менять, даташит в помощь. И того: 1 шина I2C с МК -> 3 модуля (TCA9548A) -> 24 ведомых.

О, благодарю, это то, что нужно!

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 17:25:20

Да, так можно делать, но только для 2-х датчиков в линию, во всяком случае, на форумах в темах с аналогичными вопросами так написано.

С чего бы это только для 2-х? Не верьте форумам, верьте своему здравому смыслу! Подключать так можно столько слэйвов, сколько хватит ног на вашем МК (ну конечно ещё следует учесть ёмкость шины - чтобы не перегрузить шину по ёмкости).
Чтобы опросить одно из устройств, ставите на ноге, идущей на него например "0" на эту линию (AD0), а на остальные = "1". И опрашиваете его с адресом, который подразумевает значение = "0" для этого бита адреса. Потом ставите "0" для следующего слэйва, а на остальные = "1"; и так далее....

А про "ногодрыг" можно подробнее? Что под этим подразумевается, не совсем понял.

Вы сперва определитесь: нужно Вам чтобы показания с датчиков были сняты в моменты времени жёстко определённые друг от друга? Или нет? Потому как такая реализация будет много сложнее последовательного опроса, и начинающему программисту, возможно, будет не по зубам.
Если не нужно - опрашивайте последовательно и не парьтесь. Но времени это займёт в 20 раз больше....

Добавлено after 5 minutes 34 seconds:
Есть I2C мультиплексор TCA9548A, стоит порядка 1$. Цеплять можно до 8 ведомых.

Бессмысленное усложнение схемы. Можно ещё для кучи с десяток корпусов чего угодно впаять, чтоб воздух грели.
Задача решается чисто на одном МК.
Либо (при последовательном опросе) на МК нужны ноги: 1шт. SCL + 1шт. SDA + 20шт. GPIO-линий на AD0 каждого модуля. Итого == 22 ноги. (но нужно проверить - нет ли перегруза SCL/SDA по ёмкости). ПО - простое.
Либо (при параллельном опросе) на МК нужны ноги: 1шт. SCL (параллельно на все модули с МК) + 20шт. SDA (своя персональная на каждый модуль от МК) (SCL нужно проверить на емкостную нагрузку). ПО - будет сложнее.

Добавлено after 5 minutes 2 seconds:
Сначала коротко о задаче. Нужно опросить множество (около 20 датчиков) MPU-9250. (фото ниже)

PS: На фото кста 9265, а не 9250.

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 18:18:37

С чего бы это только для 2-х? Не верьте форумам, верьте своему здравому смыслу! Подключать так можно столько слэйвов, сколько хватит ног на вашем МК (ну конечно ещё следует учесть ёмкость шины - чтобы не перегрузить шину по ёмкости).
Чтобы опросить одно из устройств, ставите на ноге, идущей на него например "0" на эту линию (AD0), а на остальные = "1". И опрашиваете его с адресом, который подразумевает значение = "0" для этого бита адреса. Потом ставите "0" для следующего слэйва, а на остальные = "1"; и так далее....

Ну я не электронщик, прошу на это сделать поправку. Программирование МК для еще новая область, поэтому к ответам на форумах привык прислушиваться.

Вы сперва определитесь: нужно Вам чтобы показания с датчиков были сняты в моменты времени жёстко определённые друг от друга? Или нет? Потому как такая реализация будет много сложнее последовательного опроса, и начинающему программисту, возможно, будет не по зубам.
Если не нужно - опрашивайте последовательно и не парьтесь. Но времени это займёт в 20 раз больше....

В идеале нужно опрашивать датчики в один момент времени. Т.к. в дальнейшем данные идут на компьютер для просчетов, где синхронизация очень важна, т.к. планируется в дальнейшем из этого делать [около]игровую примочку.

Бессмысленное усложнение схемы. Можно ещё для кучи с десяток корпусов чего угодно впаять, чтоб воздух грели.
Задача решается чисто на одном МК.
Либо (при последовательном опросе) на МК нужны ноги: 1шт. SCL + 1шт. SDA + 20шт. GPIO-линий на AD0 каждого модуля. Итого == 22 ноги. (но нужно проверить - нет ли перегруза SCL/SDA по ёмкости). ПО - простое.
Либо (при параллельном опросе) на МК нужны ноги: 1шт. SCL (параллельно на все модули с МК) + 20шт. SDA (своя персональная на каждый модуль от МК) (SCL нужно проверить на емкостную нагрузку). ПО - будет сложнее.

Даже если датчики можно повесить гирляндой, то затея упирается в ноги. Как я понял, у ардуины только определенные ноги можно юзать под шину. Или я ошибаюсь?
Изображение

PS: На фото кста 9265, а не 9250.

Ну здесь да, дернул первую попавшуюся картинку из гугла :D

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 19:29:58

В идеале нужно опрашивать датчики в один момент времени. Т.к. в дальнейшем данные идут на компьютер для просчетов, где синхронизация очень важна, т.к. планируется в дальнейшем из этого делать [около]игровую примочку.
...
Даже если датчики можно повесить гирляндой, то затея упирается в ноги. Как я понял, у ардуины только определенные ноги можно юзать под шину. Или я ошибаюсь?

Ну раз нужно все опросить одновременно, то подключать их нужно параллельно и опрашивать программно ногодрыгом (так как не существует в природе МК с 20-ю I2C).
И забудьте об абдурине. Берите любой МК с ядром Cortex-M (хоть тот же STM32) заводите SCL с любой мощной ноги (желательно - выделить под него мощную ногу). Ну а остальные 20шт. SDA (по одному на каждый MPU) - повесьте на какой-нить 32-битный GPIO-порт (хотя у STM32 GPIO объединены в 16-битные порты - значит в 2 16-битных).
Дальше делаете обычный программный I2C, но с учётом что у вас не одна линия SDA, а их 20шт.
Начать нужно с изучения диаграмм работы интерфейса I2C.
Для начинающего будет непросто - много подводных камней....

PS: Ещё можно поискать другой гироскоп. Например - с интерфейсом SPI. SPI-ые гораздо легче объединить параллельно чем I2C-шные.
PPS: А про все эти гирлянды из кучи МК и мультиплексоров - забудьте, их замучаетесь синхронизировать между собой по времени.

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Вт янв 08, 2019 20:22:58

Про диаграммы работы I2C я почитаю.

PS: Ещё можно поискать другой гироскоп. Например - с интерфейсом SPI. SPI-ые гораздо легче объединить параллельно чем I2C-шные.

MPU-9250 могут также работать и по SPI. Как тогда их так подружить?

Re: Помогите подобрать мультиплексор для опроса MPU-9250

Ср янв 09, 2019 09:23:40

MPU-9250 могут также работать и по SPI. Как тогда их так подружить?

Открыть даташит на MPU-9250 с описанием его команд и регистров. Прочитать как работает SPI (он проще чем I2C). ...и подружить. Естественно. 8)
Только при каждом чтении у вас будет читаться не один бит как обычно в SPI, а 20. Которые потом расфасовывать по отдельным 20-и битовым потокам.
Сигналы CS, SCLK и MOSI - завести с мастера на все MPU параллельно. 20 сигналов MISO с каждого MPU - как одно слово на один (или два) параллельных порта МК. Тогда все команды отправляемые к MPU будут параллельно и одновременно уходить на все MPU, а чтение данных - с каждого MPU будет свой битовый поток. Который можно разбить на 20 потоков либо в самом МК либо отдать как есть в комп и там разбить. Кстати - такой алгоритм на SPI потянет даже самый слабый МК, хоть та же абдурина.
Ещё можно внимательнее почитать даташит на MPU-9250 и, если там указано, что после начала CS и до конца приёма команды/аргументов с MOSI MPU свою выходную линию MISO держит в высокоомном состоянии, то можно объединить линии MOSI/MISO для каждого MPU в одну и отправлять команды/данные к MPU параллельно, просто дублируя их на все линии MOSI/MISO. Так экономится одна нога (MOSI), а также появляется возможность при необходимости обращаться индивидуально к каждому MPU (если соединить их по схеме: MOSI - общий на все MPU, то обращаться можно будет только ко всем сразу). Но это может быть и не нужно вам.
Ответить