Aubrey Kagan
Embedded
После моего предыдущего обзора традиционных способов сокращения количества линий ввода/вывода, необходимых для управления светодиодами/индикаторами и клавиатурами/переключателями, здесь я рассмотрю относительно новый метод, называемый чарлиплексированием
Еще где-то году в 1982 меня попросили спроектировать изделие с 72 отдельными светодиодами (Рисунок 1). Я решил проблему, воспользовавшись микросхемой ICM7218, позволявшей индивидуально управлять восемью 7-сегментными индикаторами, так что я просто работал с одним светодиодом как с одним из сегментов. Восемь оставшихся светодиодов, если я правильно помню, управлялись с помощью микроконтроллера. Для этого потребовалось бы до 24 выводов микросхемы.
![]() |
|
Рисунок 1. | Устройство на основе микроконтроллера 8051 с 72 светодиодами, сгруппированными в матрицу – красное пятно, которое вы видите посередине платы. |
Как назло, решение, которое могло бы мне помочь, появились намного позже того, как я завершил проект. Чарлиплексирование было предложено в 1990-х годах (по-видимому, его корни зародились совсем незадолго до этого) Чарли Алленом (Charlie Allen) из компании Maxim. В то время оно взбудоражило мир электроники, откликнувшийся публикацией множества конструкторских решений, основанных на этой концепции.
![]() |
|
Рисунок 2. | Три линии управляют шестью светодиодами методом чарлиплексирования. |
Идея чарлиплексирования заключалась в использовании на линиях ввода/вывода биполярных драйверов, чтобы каждый вывод мог как отдавать, так и принимать ток. Но линия ввода/вывода может быть еще и «выключена», когда находится в высокоимпедансном состоянии, или в режиме чтения. Проанализировав простую схему на Рисунке 2, мы увидим, что если на линии P0 присутствует высокий логический уровень (ток вытекает), а на линии P1 – низкий (ток втекает), и P2 находится в высокоимпедансном состоянии, светодиод DS1 загорится. Всего здесь возможны шесть вариантов, показанных в Таблице 1.
Таблица 1. | Возможные комбинации. | ||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
*) Z – состояние высокого импеданса |
Ток светодиодов нужно ограничивать, и в случае, когда все они одного типа, будет достаточно трех резисторов, показанных на Рисунке 2. Если же вы используете разные светодиоды, тогда каждому светодиоду будет нужен свой последовательный резистор. Электрические свойства светодиодов гарантируют, что они не выдут из строя, и засветится только один. Обратное напряжение на любом светодиоде ограничено прямым напряжением параллельного светодиода, и не выйдет за пределы максимально допустимого значения. Когда p-n переходы двух последовательно соединенных светодиодов смещены в прямом направлении, напряжение на них ограничивается подключенным параллельно одиночным светодиодом, и для включения пары напряжения будет недостаточно.
Количество светодиодов, которыми позволяет управлять эта технология, рассчитывается как N × (N–1), где N равно числу линий. Но это не совсем то, что нужно, поскольку на самом деле вам интересно знать обратное – сколько линий потребуется для заданного числа светодиодов. Я не стану говорить, что вам придется решать квадратные уравнения, но вместо этого для небольших чисел покажу нужные соотношения в Таблице 2.
Таблица 2. | Соотношение между количеством линий, количеством светодиодов и скважностью для каждого светодиода. |
||||||||||||||||||||||||||||||
|
Я подумал про себя, почему бы не расширить схему на большее количество линий, а затем… засомневался. Как бы вы подошли к решению этой задачи? Я отправился на поиски в Интернет и набрел на этот метод [2], который и реализовал с помощью шести выводов.
Нарисуем сначала линии с резисторами, горизонтально выходящие из микросхемы. Затем к первой линии добавим диодные пары в количестве N–1 (в данном случае пять), как показано на Рисунке 3а.
![]() |
|
Рисунок 3а. | Шесть линий микросхемы и пять светодиодных пар на первой линии. |
Будем копировать светодиодные пары вниз на каждую линию, каждый раз уменьшая количество пар справа, и получим схему, изображенную на Рисунке 3б.
![]() |
|
Рисунок 3б. | Копируя светодиодные пары, сокращаем их количество справа по диагонали. |
Наконец, соединим нижнюю линию со всеми светодиодными парами в левой колонке, затем следующую линию со всеми парами в следующей колонке правее, и так далее, пока у вас не получится то, что можно видеть на Рисунке 3в.
![]() |
|
Рисунок 3в. | Законченное аппаратное решение для чарлиплексирования. |
В руководстве по применению [3] компании Maxim показано, как подключать 7-сегментные индикаторы с общим катодом.
Конечно же, чарлиплексирование – не панацея. Как вы можете видеть в Таблице 2, скважность становится очень маленькой. Само по себе это не страшно, но увеличение импульсного тока, необходимое для того, чтобы сохранить заданный уровень яркости, может загнать вас в угол, когда вы столкнетесь с предельно допустимыми режимами светодиодов, что мы уже обсуждали в предыдущей статье [1]. Однако ограничивающим фактором могут оказаться не характеристики светодиодов, а выводы микроконтроллера, нагрузочной способности которых будет недостаточно, чтобы отдавать и принимать требуемый ток. Улучшить ситуацию можно с помощью дополнительных аппаратных средств, описанных в статьях [4] и [5].
Кроме того, высокая частота обновления и трансляция таблицы перекодировки могут серьезно нагружать микроконтроллер, особенно, если вы используете матричный дисплей. Это побудило Maxim сделать для чарлиплексирования специальные микросхемы, освобождающие микроконтроллер от сканирования и просмотра.
Чарлиплексирование может использоваться и для сканирования клавиатуры, но при этом необходимо учитывать, что в закрытом положении переключатель или клавиша будут пропускать ток в обоих направлениях, поэтому, если вам потребуется максимальное количество переключателей, к каждому из них придется добавить последовательный диод. Рисунок 4 демонстрирует решение с тремя линиями и шестью переключателями.
![]() |
|
Рисунок 4. | Знакомая конфигурация чарлиплексирования для переключателей. |
Все линии должны быть подтянуты к питанию посредством задания соответствующей конфигурации портов или с помощью внешних резисторов. Микроконтроллер поочередно настраивает каждую линию на вывод, в то время как остальные конфигурируются входами. Каждый выход, в свою очередь, опускается в «0», а затем ищутся входы, на которых установился низкий логический уровень. Пара вход/выход позволяет определить позицию нажатой кнопки.
В этой серии статей мы рассмотрели несколько методов сокращения количества выводов при сканировании переключателей и управлении светодиодами. Мир стал более сложным, и сегодня уже есть многоцветные светодиоды. Одно из решений, сокращающих число линий ввода/вывода, основано на использовании сдвигового регистра WS2811 компании Worldsemi и описано в [6]. А можете ли вы предложить другие методы? Будете ли вы использовать чарлиплексирование в будущем?
Ссылки
- «Мультиплексирование сигналов клавиатуры и сегментных индикаторов. Традиционный подход», РадиоЛоцман, 2016, февраль, стр. 54
- Designing a large charlieplex
- Charlieplexing - Reduced Pin-Count LED Display Multiplexing
- “Multiplexing technique yields a reduced-pin-count LED display”
- “Charlieplexing at high duty cycle”
- “Using WS2812-based NeoPixels in embedded systems.”