Как лучше подключить несколько 3-осевых датчиков гравитации

,

Доброго дня!

Подскажите, пожалуйста, как подключить N датчиков GY-291 ADXL345? Для N предполагается изменения от 2-3 в начальное время с расширением до 10-12 в перспективе.

Нашёл вариант подключения по I2C, описанного так:

In general it is like this:
Connect GND of both ADXL345 to Arduino GND.
Connect VCC of both ADXL345 to Arduino 3.3V.
Connect SDA of both ADXL345 to Arduino SDA (or A4 for an Arduino Uno).
Connect SCL of both ADXL345 to Arduino SCL (or A5 for an Arduino Uno).
Connect CS of both ADXL345 to 3.3V.
One module should have the SDO connect to GND, and the other module should have it connected to 3.3V.

И как я понимаю в этом случае можно использовать только 2 модуля, один из которых будет предоставлять данные по обычному адресу (0x1D), а второй по альтернативному 0x53.

Нашёл так же, что для случая более чем 2-x I2C устройств нужно использовать мультиплексор типа TCA9548A, который даст возможность подключить 8 устройств, и считывать данные путем установки адреса одного из них. Со схемой пока не разбирался.

И вот в чём вопрос, что лучше и надёжней - последовательный доступ к одному из 8-ми устройств через мультиплексор, или соединить устройства по SPI и щёлкать данные последовательно? Тут даже больше 8-ми устройств можно будет подключить. И то, что не будет прямого доступа не важно - мне нужны данные со всех устройств и обрабатывать данные с них буду последовательно.

Где-то на буржуйских форумах прочитал, что I2C медленней. Так ли это в моём случае? Мне нужно измерять вибрацию в диапазоне 30-400 Гц. ODR по спеке 3,2кГц.
У меня расстояние от датчиков до контроллера будет достигать 3-4 метров, I2C вроде не любит длинных хвостов?
SPI проще в настройке и поиске неисправности?

Количество проводов роли не играет, главное помехоустойчивость и надёжность. Провода от датчиков будут все собираться у контроллера, соединять их где-то проводами друг с другом не будет возможности.

Может кто-нибудь добавить аргументов в пользу SPI или I2C для данного случая?

К чему?

Действительно) Хороший вопрос. А так важно? Думал про Arduino Mega 2560.

Залей в бензиновую машину дизель и посмотри что будет :smiley:
А если наоборот - то даже не пытайся смотреть…

Конечно. Вы не поверите, но у некоторых контроллеров более чем одна шина I2C

Я бы подключил по SPI и искал бы себе приключений на то место на котором сижу :slight_smile:

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

2 лайка

Простите, пожалуйста, с данной терминологией не знаком, можно немного по-подробнее?

2 лайка

Выглядит как LCD монитор 4К для микрокалькулятора. В количестве 10-12 штук.

Обработка информации с каждого датчика, по задумке, заключается в измерении частоты и амплитуды основной гармоники. Частота опроса датчиков не чаще раза в секунду, если датчиков 10 штук, то полный сбор информации получится за 10 секунд. Это в общем-то допустимо.

Использовать для этого отдельный контролер стоимостью $4 на каждый датчик - нецелесообразно. Mega 2560 уже есть в наличии и её мощности хватит с лихвой для этой задачи. Иначе ей будет нечего делать, кроме вывода данных на дисплей.

Если вернуться к I2S и SPI, какой вариант более предпочтительный и почему?

Менее $2 вообще-то

Хозяин барин. Но Железо всегда в несколько раз дешевле чем ПО. А интерфейс выбрать любой, потому как скорость готовности данных в десятки раз ниже (в единицу времени) скорости их передачи.

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

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

Я не пытаюсь чем-то блеснуть, или что-то доказать. Нет такой цели. Поскольку не знаю ещё схемы совсем, не нашёл в интернете готовой на более чем 2 датчика, пытаюсь понять что проще делать не в ущерб надёжности передачи данных в конкретно этом случае (3-4 метра проводов, скорости обработки данных и т.д.). Поэтому и прошу помощи на форуме, заметьте, не готового решения, хотя если оно у кого-то есть - буду благодарен.

Оба решения равновероятно удачны (или неудачны).
В одном мультиплексоры, в другом - лишние провода.
Но со SPI, как представляется, проще оперировать на программном уровне.

1 лайк

Вопрос не в мощности Меги, а в необходимости передавать сигнал в разные стороны на расстояние в несколько метров.
Для передачи данных между контроллерами в данной ситуации заведомо можно найти надежное решение, а вот между контроллером и датчиком, когда у последнего есть только единственный протокол, причем предназначенный для работы на расстоянии в сантиметры - десятки сантиметров, такого решения можно и не найти.

Ни то, ни другое не предназначено для работы на расстояниях, измеряемых метрами.

Хотите - пробуйте.
Но гарантий никто не даст.
И даже если у Вас на столе что-то заработает вполне устойчиво, совершенно неочевидно, что устойчивость сохранится при переносе изделия в другое место.

1 лайк

Спасибо, добрый человек, за весомую аргументацию. Это надо обдумать. Хотя всё равно немного звучит как забивать гвозди микроскопом. Возможно, преобразовать I2C в что-то дифференциальное, типа DI2C, да в витую пару? Но да, может выйти существенно дороже.

Иногда китайский микроскоп стоит дешевле европейского молотка.

И пока склоняюсь в сторону I2C - меньше проводов, а мультиплексор нужен для адресации. Но я же могу адресовать 10-12 датчиков мегой, ног должно хватить.

Вам уже многие практики сказали, а вы всё с мультиплексором ни как не расстанитесь. Хотя мы не знаем вашей конечной цели, для чего это всё делается. Может и всё срастётся, и результат превзойдёт ожидание.

На паре метров, в принципе работать может (на форуме писали, что подключали всякие там BMP280 несколькометровыми хвостами). В конце концов частоту тактирования занизить можно до герца ))

Нужно только не забывать о специфических требованиях к линии - емкость, т.п.
Учесть, что большинство датчиков не отдает контрольную сумму. И вот с этим, при наличии помех, такого можно напринимать, что глаза вылезут.

Мочь и уметь это как небо и земля !