Какова обычная практика при использовании большего количества компонентов, чем выводов?

У меня есть проект, в котором я хочу использовать несколько двигателей (серво и шаговые), которые активируются с помощью RFID и отображают информацию на дисплее.

Какова обычная практика или разумный способ преодолеть такие ограничения?

, 👍2

Обсуждение

Либо используйте расширители ввода-вывода / регистры сдвига, либо разделите свой проект на более мелкие части, каждая из которых имеет свой собственный контроллер., @Majenko

переключитесь с Uno на Mega, @Juraj

если вам нужно работать одновременно, особенно с сервоприводом, управляемым ШИМ, выберите несколько контроллеров или контроллер с большим количеством аппаратных портов шим., @Abel


2 ответа


7

В принципе, есть 4 способа пойти, если у вас закончились выводы:

  • Переход на плату микроконтроллера с большим количеством контактов
  • Расположите детали разумным образом, чтобы сохранить контакты (например, если у вас много кнопок или светодиодов, вы можете расположить их как матрицу).
  • Используйте дополнительные периферийные устройства, такие как сдвиговые регистры, расширители портов, ШИМ-чипы ... которые нуждаются в меньшем количестве контактов для управления
  • Используйте дополнительные микроконтроллеры, чтобы разгрузить некоторые функции на них, и просто общайтесь по шине данных по вашему выбору (например, I2C или Serial) с меньшим количеством контактов.

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

  • Выбор большего микроконтроллера часто является самым простым решением, хотя вам нужно инвестировать в его покупку и переписать и/или переписать свой проект. Если вы перейдете на другой тип микроконтроллера, это также может потребовать поиска альтернативных библиотек (поскольку часто библиотеки несовместимы между типами микроконтроллеров).
  • Расположение кнопок или светодиодов в матрице сэкономит вам контакты, но вы также создадите дополнительную сложность для программного обеспечения, управляющего ими, поскольку их нужно постоянно активно сканировать. Это потребует новых соображений относительно вашего потока программы (сохранение отзывчивости программы с помощью millis() и неблокирующего стиля кодирования, как в примере BlinkWithoutDelay).
  • С помощью регистров сдвига вам нужно купить фактические регистры сдвига и с помощью этого зафиксировать направление данных (поскольку регистры сдвига бывают как регистры сдвига, так и регистры сдвига) (как заявил @Mat в комментариях, есть регистры сдвига, которые поддерживают оба способа, но они более сложны в использовании, чем регистры сдвига. стандартные). Если вы управляете чем-то с ними, вам также нужно убедиться, что вы остаетесь без особых ограничений этого сдвигового регистра. Вам нужно 3 вывода для них, но вы можете связать их цепочкой. Таким образом, чтобы управлять 4 регистрами сдвига, вы просто связываете их цепью и все еще используете 3 контакта на вашем микроконтроллере. Фреймворк Arduino предоставляет функции shiftIn() и shiftOut() для управления ими.
  • Расширители портов обычно поставляются с интерфейсом I2C или SPI и являются более гибкими, чем сдвиговые регистры (например, различные направления данных для выводов), но также стоят немного дороже и немного сложнее в управлении. Фреймворк Arduino не имеет прямых функций для управления ими. Вы можете либо использовать библиотеку Wire или SPI напрямую (после прочтения и понимания протокола связи в спецификации расширителя портов), либо найти подходящую стороннюю библиотеку для вашего конкретного расширителя портов.
  • Для управления дополнительными двигателями или сервоприводами может быть полезен ШИМ-чип. Они обычно подключаются через I2C или SPI и могут создавать ШИМ/сервосигналы на своих выходах. Например, 16 - канальный ШИМ-драйвер от Adafruit. Существует множество подобных продуктов, и это как раз тот, который приходит мне на ум.
  • Использование дополнительного микроконтроллера может показаться немного расточительным. Но это может сделать вещи проще, особенно если у вас есть несколько вещей для управления, которые перегружают вычислительные возможности вашего микроконтроллера (с Uno вы можете легко попасть в эту местность). Если вы будете заниматься этим хобби какое-то время, то у вас часто будут валяться какие-то микроконтроллеры. Вы можете получить клоны Arduino Nano из Китая примерно за 1 евро за штуку. Другие микроконтроллеры тоже стоят не дорого. Преимущество перед другими методами заключается в том, что вы можете выгрузить часть кода на другой микроконтроллер. В то время как для периферийных устройств, таких как расширители портов, логика все еще происходит на вашем главном контроллере, здесь вы можете написать более сложную логику во второй микроконтроллер. Однажды я использовал это для создания пользовательского интерфейса на TFT - дисплее, чтобы основной микроконтроллер мог свободно выполнять свою работу. Дополнительным преимуществом дополнительных микроконтроллеров является (как писал @Majenko в комментариях) то, что ваш код становится более модульным. Например, давайте представим, что вы пишете код для дополнительного микроконтроллера для управления скоростью вентилятора. Затем вы решаете добавить в проект еще больше кулеров. С модульной конструкцией вы можете просто добавить больше вентиляторов и всегда использовать один и тот же код. Или вы можете добавить кулер в другой проект. Просто возьмите существующий код и интегрируйте интерфейс со вторым микроконтроллером в этом проекте.

Я надеюсь, что это поможет в качестве ориентира. Более окончательные ответы могут быть даны только здесь, когда вы точно опишете свою ситуацию.

,

Еще одним преимуществом нескольких микроконтроллеров является модульность: вместо написания одного фрагмента кода для управления 5 двигателями вы можете написать один фрагмент кода для управления одним двигателем и повторить его 5 раз вместе с точно таким же оборудованием., @Majenko

(Есть регистры сдвига, которые идут в обе стороны, как 74x299. Хотя это немного сложнее, чем 595-й.), @Mat

@Mat Хорошо, я этого не знал. Здорово узнать что-то новое. Спасибо, @chrisl

Отличный, подробный ответ. Молодец!, @Nick Gammon

вы как бы обходите это стороной, но вы действительно должны упомянуть переключение периферии на общую шину, например I2C для управления шим-платой, 4-канальным АЦП и ЖК-дисплеем с 2 контактами. Или WS2812B для привода 5 светодиодов вместо 5 контактов., @dandavis


1

Есть несколько способов, но я рекомендую следующие:

  1. MUXs/DEMUXs для выводов ввода-вывода
  2. Дополнительные периферийные устройства для специальных функций, таких как SPI, USART, ADC и так далее.

1: MUX и DEMUX могут заставить вас использовать больше штифтов с маленькими штифтами. Например, вы можете управлять дополнительными 2^n контактами с помощью n контактов. Преимущество MUX и DEMUX заключается в том, что они реагируют немедленно. Однако вы должны использовать больше штифтов, если хотите контролировать много штифтов, и он может контролировать только один штифт за раз.

2. Вы можете использовать дополнительные периферийные устройства для использования определенных функций, таких как ШИМ, SPI, АЦП и так далее. Преимущество этого метода заключается в том, что вы можете использовать больше функций, а в некоторых случаях управлять большим количеством периферийных устройств с меньшим количеством контактов. Из-за этих хороших характеристик периферийные устройства стоят относительно дорого.

,