Как быстро и эффективно считывать большое количество аналоговых входов с помощью Arduino-совместимого оборудования

Мне нужно прочитать аналоговые значения до 50 аналоговых датчиков отражения света, которые используются для определения расстояния до определенного объекта с помощью микроконтроллера, совместимого с Arduino, например:

  • Arduino Due с процессором Atmel SAM3X8E
  • Arduino Zero с ATSAMD21G18, 32-разрядным процессором ARM Cortex M0+

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

Моя первая идея заключалась в том, чтобы использовать несколько ATSAMD21G18 для чтения связки из 6 аналоговых устройств. Но это приведет к тому, что у вас будет как минимум 9 ATSAMD21G18 и их нужно будет подключить с помощью SPI или I2C.

Поэтому я подумал об использовании нескольких аналоговых мультиплексоров/демультиплексоров, таких как 4067. Даже это закончилось бы несколькими модулями 4067, но я мог бы использовать один Arduino Due / Zero.

Однако меня беспокоит то, что 4067 не переключает аналоговые входы достаточно быстро для моих нужд. Я действительно хотел бы прочитать все эти аналоговые значения как можно быстрее. Насколько быстрым будет 4067 в этом приложении?

А также. Используя 4067, я должен использовать цифровые входы/выходы для установки входного канала 4067. Могу ли я соединить их параллельно, чтобы иметь возможность использовать цифровые входы/выходы для каждого отдельного 4067?

А также влияет ли длина схемы на показания при расстоянии между 4067 и Arduino около 50 см?

Какая частота дискретизации?
1 кГц для каждого датчика? Не знаю, может быть, это слишком быстро, так как 1 кГц * 50 датчиков = всего 50 кГц!? Не совсем уверен.
Система, которую я разработал ранее в этом году, одновременно производит выборку 160 аналоговых каналов каждые 5 мкс, так что ваше приложение действительно очень медленное. Будьте реальными и не используйте провокационные термины, такие как «быстро» — указывайте реальные цифры без вопросительного знака.
Вы уверены, что хотите считать эти рефлекторные датчики аналоговыми? Они предназначены для использования в качестве цифровых датчиков (да/нет отражения).
@WoutervanOoijen Да, я сделал это с одним устройством и смог прочитать их аналогово.
Я думаю, что Воутер поднял возможность чтения 8 (или 16, или 32) из ​​них с помощью одной инструкции, что позволит цифровое чтение, и помогает решить предполагаемую «проблему скорости».
Как правильно предположил @Brian, я сомневался в необходимости считывания этих датчиков в аналоговом режиме. Читать их в цифровом виде намного проще. Кроме того, с таким количеством датчиков вы можете захотеть оптимизировать свою физическую компоновку и конструкцию, что также будет проще, когда сигналы цифровые (вы можете использовать несколько регистров сдвига или расширителей ввода-вывода).
@WoutervanOoijen Мне нужно читать аналоговые значения, так как я хочу определить расстояние до объекта. Я успешно использовал для этого ITR, но в целом речь идет об аналоговых значениях. Я редактировал вопрос!

Ответы (1)

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

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

Ваша логика отказа от одного цифрового мультиплексирования не имеет смысла:

Но это приведет к тому, что у вас будет как минимум 9 ATSAMD21G18 и их нужно будет подключить с помощью SPI или I2C.

Хм, хорошо, но в чем проблема? Опять же, у вас где-то будет 50 отдельных контактов. Использование этих входов для группы 8-канальных (или любых других) аналого-цифровых преобразователей звучит как разумный подход. Тогда использование SPI для мультиплексирования данных с этих чипов звучит вполне разумно. Помимо отклонения этого, вы на самом деле не дали никаких причин, почему это не разумный подход.