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

Вопрос кажется простым, но это еще не все:

Я подключаю 4 сдвиговых регистра 74HC595 к Arduino Pro Micro. 28 из 32 выходов будут использоваться для управления светодиодными сегментами цифр. В каждом сегменте используется 14–20 светодиодов, поэтому я буду использовать транзистор для каждого сегмента. Теперь вот моя проблема: при активированном максимальном количестве светодиодов (в момент 08:08) светодиоды будут потреблять около 10 А. Как я могу использовать другой транзистор, чтобы заставить сдвиговые регистры работать с Arduino, даже если он должен получать весь ток не от Arduino, а от внешнего источника питания. Нашёл подходящий переходник с 230В на 5В 12А. 12А нужен только для того, чтобы гарантировать, что все пойдет не так. Одни только светодиоды потребляют ток 9,76 А.

Я знаю, как подключить Arduino к источнику питания, но как мне проложить дополнительные провода от источника питания вокруг Arduino, чтобы обеспечить питание светодиодов?

, 👍3

Обсуждение

Рассмотрите возможность использования MOSFET в качестве транзистора типа TTL., @MatsK

Не знаю, но я бы ничего не поддержал. Даже не догадаюсь, @Xxx


2 ответа


Лучший ответ:

5

Сначала вам следует подумать об изменении всей вашей идеи, чтобы ваши светодиоды не потребляли ток почти 10 А.

Я предполагаю, что на каждый сегмент у вас есть 14-20 светодиодов, подключенных параллельно, каждый со своим токоограничивающим резистором. Это очень расточительно.

Вместо этого вам следует сгруппировать светодиоды в цепочки последовательных светодиодов, которые затем разместить параллельно.

Предполагая, что у вас есть обычные красные светодиоды с прямым напряжением около 2 В и типичным потреблением тока при максимальной яркости 20 мА, вы можете соединить их в цепочки, скажем, из 5 светодиодов с одним токоограничивающим резистором и запитать их от 12 В, а не 5 В.

3 цепочки по 5 светодиодов (15 светодиодов) будут 3x20мА = 60мА на сегмент. 4 цепочки по 5 светодиодов (20 светодиодов) будут 4x20мА = 80мА.

При отображении 08:08 это 26 сегментов плюс точки. Предположим, что каждый сегмент имеет 20 светодиодов, что в общей сложности составляет 26x4 = 104 цепочки по 5 светодиодов, общий ток 520 мА.

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

Если вы не хотите этого делать, тогда потребуется больше транзисторов:

schematic

Я показал только 2 цифры, 2 сегмента, 2 цепочки на сегмент и 2 светодиода на цепочку для экономии места.

Для его управления вам понадобится 1 GPIO на сегмент в одной цифре и 1 GPIO на цифру. Таким образом, для 4 цифр в 7 сегментах это 11 GPIO.

,

Это очень хорошая идея! На самом деле я не думал о сложности программирования. Каждую минуту мне нужно изменить одну цифру, и поэтому Arduino каким-то образом нужно знать, какой биткод записать для получения нового результата времени. Эти сдвиговые регистры забавны, но не просты. Вместо этого я мог бы рассмотреть возможность использования Arduino MEGA, чтобы у меня было достаточно портов для управления каждым сегментом без сложного кода., @Hendriks3D


1

schematic

Замените 74HC595 на TPIC6B595. Каждый выход может потреблять ток 150 мА от источника до 50 В. Цепочки из трех светодиодов, параллельно питаемых от источника 12 В (с токоограничивающим резистором на цепочку), легко обрабатываются, дополнительные транзисторы не требуются. Плюс 12 В идет на + каждой струны (верхний анод), минус (нижний катод) идет на выход TPIC6B595. Вот видео, на котором 8 работающих дисплеев TPIC6B595 сделаны из двух цепочек по 3 светодиода параллельно для больших цифр и одной цепочки из 3 светодиодов для маленькой цифры. https://www.youtube.com/watch?v=6HZ0Mr51jUY Каждая струна потребляет около 25 мА. Плата, управляющая дисплеем, содержит до 12 микросхем сдвигового регистра и управляется микросхемой Atmega328P, настроенной как Arduino.

Сдвиговые регистры также просты в использовании. Я использую SPI.transfer для отправки им данных. Создайте массив для сопоставления выходов сдвигового регистра с сегментами:

byte fontArray[] = {
    0b00111111, // 0 с битами, сопоставленными с сегментами DP-gfedcba
    0b00000110, // 1 0 = сегмент выключен, 1 = сегмент включен
    etc.
}

Расположение цифр:

    a
f       b
    g
e       c
    d       and DP if used.

Затем, чтобы обновить отображение, предположим, что у вас есть 4 сдвиговых регистра, подключенных последовательно:

digitalWrite (ssPin, LOW);
SPI.transfter(fontArray[digit0]);
SPI.transfter(fontArray[digit1]);
SPI.transfter(fontArray[digit2]);
SPI.transfter(fontArray[digit3]);
digitalWrite (ssPin, HIGH); // все выходные данные обновляются по этому нарастающему фронту

На самом деле очень просто. Мега не нужна.

,

Хм, пробел не включал режим просмотра кода. Это поддерживается на этом форуме?, @CrossRoads

Просто вставьте код с правильным отступом, выделите его все и щелкните символ «{}» на панели инструментов окна выхода. Это заставит редактора уважать ваше форматирование и выделить раздел светло-серым цветом., @JRobert