Управление 500 светодиодами с помощью ШИМ


26

Я подумываю взять на себя проект, который будет включать в себя индивидуальную адресацию 500 светодиодов, оптимально с поддержкой ШИМ для каждого.

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

Сдвиговые регистры должны быть использованы. Что такое хороший сдвиговый регистр для использования в этой ситуации? Если PWM сделает этот проект намного дороже, я вполне могу обойтись без него. Я хочу попытаться потратить менее 100 долларов. Я бы купил 500 светодиодов на Ebay.

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

Ответы:


14

Я являюсь автором библиотеки ShiftPWM, и я только что обновил документацию, включив схемы и намного более общую информацию для обычных светодиодов, светодиодных лент и мощных светодиодов.

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

Если вы хотите управлять 500 светодиодами с помощью ShiftPWM, вы можете получить около 64 уровней яркости на светодиод при 60 Гц. Вы бы использовали 64 регистра сдвига. Выделенные аппаратные драйверы ШИМ дадут вам больше уровней яркости, но будут немного дороже. Я думаю, что основным преимуществом моей библиотеки является простота использования, поскольку она включает функции RGB и HSV и множество примеров.

Лично я бы пошел на TLC5916 TLC5917 вместо обычных сдвиговых регистров, потому что они имеют встроенный светодиодный драйвер постоянного тока. Это сэкономит вам массу пайки, потому что вам не нужны резисторы.

На моем веб-сайте ( http://www.elcojacobs.com/shiftpwm ) у меня есть больше информации о том, как подключить светодиоды и как справиться с подключением длинных сигнальных проводов к Arduino на высоких скоростях.

Если у вас есть еще вопросы, пожалуйста, задавайте.


Вы смотрели на мой ответ ниже? Хотя в описываемой мной технологии используется дополнительное оборудование, этот же подход, вероятно, можно использовать для значительного повышения скорости работы вашей библиотеки. Я не программировал Arduino, поэтому я не знаком с временами его инструкций, но в простейшей форме вы можете уменьшить загрузку вашего процессора до того, что потребуется, чтобы просто взорвать SPI (если у вас сейчас 5 циклов) на бит, и ваш SPI занимает 16 циклов на байт, это было бы в 2,5 раза быстрее). Вы могли бы даже сделать некоторые более сложные вещи, продолжая работать на такой скорости.
Суперкат

Например, предположим, что вы хотите иметь восемь уровней яркости, представляющих полный, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 и 1/128. Если Arduino может выполнить операцию «И» или «ИЛИ» над значением, извлеченным из указателя, и увеличить этот указатель менее чем за четыре цикла, вы, вероятно, могли бы использовать три бита на пиксель для хранения информации о яркости и при этом достичь скорости передачи. 16 циклов на 8 светодиодов.
суперкат

Вычисление значений ШИМ перекрывает выход SPI в моей библиотеке. Я запускаю SPI на частоте 4 МГц, и вычисления занимают немного больше времени, чем выход SPI. Требуется 43 такта на байт, поэтому на 8 выходов. Это достаточно быстро для большинства настроек. Вы можете получить большую скорость, используя модуляцию битового кода, где у вас есть 8 периодов обновления, каждый следующий период вдвое меньше предыдущего. Я написал версию BCM, но она более чувствительна к моменту обновления настроек яркости. Это может вызвать мерцание при неправильном выравнивании. Я, вероятно, буду использовать его в матричной версии, хотя.
ElcoJacobs

Преимущество вашего подхода в BCM состоит в том, что вы можете использовать синхронизацию 1 / 2,1 / 4 ..., но при этом требуется только один вывод на светодиод. Если у вас есть опыт работы в области компьютерных наук, вам может быть интересно узнать, как вычисляются байты SPI. Я получаю рабочий цикл из памяти (2 такта) и сравниваю (1 такт). Результат сравнения сохраняется в переносе, поэтому я могу сдвинуть его в байт с поворотом за переносом (1 такт). Выполнение этого 8 раз помещает все результаты сравнения в один байт, который готов отправить в SPI.
ElcoJacobs

13

Просто скопируйте :-)

http://www.evilmadscientist.com/article.php/peggy2

Сегодня мы выпускаем обновление для нашего проекта Peggy с открытым исходным кодом LED Pegboard. Пегги версия 2 была переработана с нуля. И это выглядит ... почти точно так же. Однако изменения под капотом существенны, и мы считаем, что это значительное улучшение во многих отношениях.

Прежде всего, Peggy 2.0 все еще делает то же самое: она обеспечивает эффективное питание для 25х25 массивов светодиодов. Пегги разработана для того, чтобы избавиться от укусов, сложности и путаницы в игре со светодиодами. Это универсальная и мощная светоизлучающая перемычка, которая позволяет эффективно управлять сотнями светодиодов в любой конфигурации, без необходимости расчета одного нагрузочного резистора. Вы можете установить в любом месте от одного до 625 светодиодов, и Пегги загорит их за вас.


Peggy 2.0 теперь также совместим с Arduino: он поддерживает программирование через кабель USB-TTL с использованием популярной программной среды Arduino.


Замечательная ссылка! Отмеченный. Я не планировал работать над таким проектом, но я должен сделать это сейчас, я видел это маленькое видео :-)
Wouter Simons

@NicolaeSurdu Не сломан. Я открыл это только сейчас.
Axeman

3
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.

6

В каком макете вы хотите светодиоды? Вы можете сэкономить много работы, если купите несколько светодиодных матриц, вы можете получить одноцветные 8x8 светодиодные матрицы (64 светодиода) за один или два доллара .

Вы не сможете получить настоящий ШИМ с AVR и сдвиговыми регистрами на этом количестве светодиодов, но вы можете быть в состоянии сжать 2-4 уровня яркости. Вы должны были бы запустить числа и посмотреть, что возможно.

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


все очень хорошие моменты!
Джейсон С

5

Я не знаю, какой диапазон ШИМ вам нужен для светодиода, но я работал над 64-канальным ШИМ-контроллером для сервоуправления, который может выдавать импульсы от 600 мс до 2,4 мс. Он использует CD74HCT238E (демультиплексоры на 3-8 линий) для генерации 64 каналов из 8 выводов ввода / вывода на ATMega168 и управляется с помощью простых последовательных команд. Я предполагаю, что вы могли бы соединить несколько версий модифицированной версии этого контроллера вместе в последовательную линию и адресовать все 500 светодиодов ... Вы, вероятно, могли бы использовать версию контроллера ATTiny2313, так как ваши требования к прошивке были бы проще.

Мой блог содержит источник сборки и схемы, а также детали процесса проектирования.


5

Проверьте "светодиодный драйвер" ИС на mouser / digikey. TI, например, делает кучу драйверов с различными интерфейсами (I2C, SPI), которые наверняка будут соответствовать вашим потребностям. Большинство из этих драйверов предназначены для последовательного подключения, поэтому последовательный выход из одного подается в последовательный вход другого.

Например, что-то вроде TLC5940 предлагает 16-канальное ШИМ-управление. Итак, в основном это 16-битный сдвиговый регистр с постоянным током и 12-битным ШИМ-управлением. Я могу порекомендовать именно эту микросхему, так как я помог с ней спроектировать дисплей 80x16


4

Mondomatrix выпускает несколько последовательных (rs-485) адресных плат светодиодных драйверов и базируется на платформе Arduino: http://www.displayduino.com/ Возможно, вы сможете собрать систему, используя это оборудование, довольно легко


4

Если вам не нужно слишком много битов управления ШИМ для каждого светодиода, и вы не хотите, чтобы процессор шел с 500 светодиодами в каждом цикле ШИМ, вы можете управлять 8 светодиодами с N битами яркости, используя N 74HC595 или эквивалентные микросхемы. , Соедините выходы всех N микросхем вместе, и соедините разрешения с некоторыми схемами, которые будут активировать только по одной за раз с подходящей синхронизацией. Сделайте так, чтобы первый чип был включен наполовину, второй - для половины, и т. Д.

Любая перезагрузка сдвиговых регистров должна быть синхронизирована со скоростью ШИМ, чтобы минимизировать эффекты наложения (например, если уровень яркости быстро переключался между 0111 и 1000, точка в цикле ШИМ, когда произошло переключение, может на мгновение изменить видимую яркость ).

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


3

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

Я столкнулся с этой проблемой, когда получил 200 1-миллиметровых красных светодиодов для набора больших 7-сегментных дисплеев, которые я собирал. Мое дешевое решение проблемы заключалось в следующем:

  1. Я построил светодиодный тестер в макете, чтобы классифицировать наборы светодиодов по разным категориям яркости
  2. Я смонтировал каждый сегмент, используя светодиоды в той же категории (в моем дизайне каждый сегмент состоял из 5 светодиодов, установленных последовательно)
  3. Я компенсировал разницу в яркости каждого сегмента, используя разные токоограничивающие резисторы. Например, для сегмента с более яркими светодиодами я бы использовал резистор 100 Ом, а для другого сегмента с диммерными светодиодами я бы использовал резисторы 120 Ом.

1
Действительный пункт, но не отвечает на вопрос.
Мэтт Янг

1
@MattYoung Согласен. На этот вопрос во многом отвечают все остальные ответы. Я просто хотел дополнить эти ответы, обращаясь к дополнительной проблеме, которая может повлиять на дизайн ОП.
Рикардо

2

Я предлагаю использовать метод двоичной угловой модуляции, описанный в этой статье http://www.artisticlicence.com/WebSiteMaster/App%20Notes/appnote011.pdf

Или проверьте библиотеку ShiftPWM http://www.elcojacobs.com/shiftpwm/


1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.

1

XMOS использует Macroblock MBI5026 со своими комплектами светодиодной плитки. Я думаю, что они используются в большинстве других профессиональных систем.

Леон


1

Выделенные микросхемы драйверов с последовательными интерфейсами действительно, вероятно, будут лучшим маршрутом. Работа с отдельными регистрами сдвига, вероятно, будет означать очень сложную схему. По крайней мере, Максим и TI делают некоторые. Я не помню, есть ли модель, которая особенно подходит для этого.

Это все еще займет много оборудования.

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


1

В области программного обеспечения, если количество необходимых настроек яркости не слишком велико, может быть полезно сохранить данные в «битовом» формате (как описано в моем другом аппаратном ответе), а затем иметь В выходных подпрограммах используются логические операторы для одновременной обработки 8 пикселей. Для максимальной эффективности это потребует наличия нескольких отдельных выходных подпрограмм, используемых для разных частей цикла ШИМ; например, если вы хотите использовать 4-битные значения яркости, можно использовать восемь подпрограмм в форме:

  movf bit0Comp, w; Должно быть 00 или FF в зависимости от бита 0 сравнения (FF, если сброшено)
  iorwf POSTINCF, w; Бит 0 данных; всегда используйте IORWF
  andwf POSTINCF, w; Бит 1 данных; используйте IORWF, если установлен бит 1 сравнения; ANDWF, если ясно
  andwf POSTINCF, w; Бит 2 данных; Используйте IORWF, если установлен бит 1 сравнения; ANDWF, если ясно
  andwf POSTINCF, w; Бит 2 данных; Используйте IORWF, если установлен бит 1 сравнения; ANDWF, если ясно
  MOVWF SPIREG; Сохранить результирующий байт (биты установлены, если> = сравнение)

Можно было бы использовать различные комбинации IORWF и ANDWF, в зависимости от значения сопоставимого. Обратите внимание, что используя этот подход, как показано, можно обновлять значения яркости пикселей в любой точке цикла ШИМ без мерцания при условии, что все четыре бита записываются между вызовами в процедуру сдвига отображения, или с помощью процедуры обновления пикселя определить, является ли следующий сдвиг выведет «1» или «0» для пикселя и либо установит, либо очистит все биты пикселя (в зависимости от того, какая операция заставит его делать то, что он собирался делать в любом случае), а затем записывает любые биты, значение которых должно быть противоположным. Отметим также, что можно достичь произвольных нелинейных шкал яркости, изменяя время обновления дисплея или используя несколько сравнительных значений более одного раза в цикле ШИМ.


1

FPGA или CPLD могут быть полезны для таких задач, поскольку они предлагают много выводов ввода / вывода. Перейти на самый простой и дешевый. Если одного недостаточно, используйте пару.


Можете ли вы дать нам еще несколько подробностей о том, почему это хороший вариант, сейчас я знаю об этом, но я знаю, какие есть варианты и какие предлагаемые вами технологии перечислены, у Origial Poster (OP), вероятно, нет такого задний фон.
Кортук

Я не уверен, что это лучший вариант, но хотел, чтобы это было упомянуто для полноты. Если управление 500 светодиодами с помощью ШИМ, так или иначе, в конце концов, необходимо 500 отдельно управляемых проводов. Трудно найти микроконтроллер с таким количеством выводов. Есть много способов обойти это, все еще используя микроконтроллеры, но один или несколько дешевых CPLD / FPGA могут легко дать эти выходные выводы.
Карл

1

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

Чипы PSoC - это микроконтроллеры, которые содержат перенастраиваемое цифровое оборудование, немного похожее на FPGA или CPLD. Это означает, что вы можете создавать сложные схемы для таких необычных вещей, как управление 500 светодиодами с ШИМ. Более того, вы, вероятно, можете реализовать все это с помощью переконфигурируемых цифровых блоков, а это означает, что процессорной части микросхемы нужно только записать желаемую яркость светодиодов в массив.

504 светодиода помещаются в прямоугольник 21 х 24. Если у вас было 24 канала ШИМ и 21 GPIO, то вы могли бы заставить это работать. Угадай, что? PSoC имеет больше, чем это.

Вы можете легко настроить 24 канала ШИМ на PSoC и настроить еще 21 вывод для включения в регистр сдвига. Затем настройте некоторые каналы DMA для перекачки байтов из памяти на выходы ШИМ, и вы смеетесь. Все, что нужно сейчас CPU - это генерировать графику. PSoC3 имеет 8-битное ядро ​​8051, в то время как PSoC5 имеет 32-битную ARM. Выбирайте. Единственные внешние микросхемы, которые вам понадобятся, - это некоторые ULN2803, которые обеспечивают высокий ток возбуждения для рядов. Выходы ШИМ должны иметь достаточный ток привода для одиночных светодиодов.


Это полное перерасход для вождения светодиодов. Существуют специализированные, недорогие, предварительно разработанные драйверы светодиодов, предназначенные для создания цепочек больших количеств, подобных этим, которые используются для гигантских дисплеев постоянно. Не нужно заново все это изобретать и за большую стоимость.
nemik

@nemik - На самом деле, общая стоимость чипсов (от дорогого Farnell) составляет всего 6,80 фунтов стерлингов.
Ракетный

0

Используйте эффект масштаба. Китайские сайты, такие как Aliexpress, продают светодиодные пряди на основе WS2811 по цене около $ 15 за 50 светодиодов. Они индивидуально адресуемые, яркие, обычно водонепроницаемые и имеют ШИМ для яркости. Нет пайки или сдвиговых регистров, чтобы связываться с ними. Делая все это самостоятельно, держу пари, это обойдется вам дороже, займет гораздо больше времени и будет очень разочаровывать. Кроме того, вы находитесь в Оз, поэтому доставка из Китая не будет слишком дорогой.

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

Существуют также библиотеки Arduino, облегчающие их использование.


1
15 долларов за 50 светодиодов? Таким образом, для 500 светодиодов это будет стоить 150 долларов? И у вас есть смелость сказать мне, что мое решение дорого? -1
Ракетный

Также, пожалуйста, можете ли вы предоставить ссылку на это. WS801 плохо работает с Google, и при этом он не обнаруживает поиск Aliexpress
Rocketmagnet

Извините, я имел в виду WS2811, как эти aliexpress.com/store/product/… или, без ШИМ, эти aliexpress.com/store/product/…
nemik

Один последовательный сигнал для управления 50 светодиодами с ШИМ-регулированием. Спасибо, это именно то, что я после. Но стандартный сдвиговый регистр обеспечивает вывод «защелки» для копирования буферизованных данных на выходы после передачи полного кадра. Здесь нет защелки, поэтому я ожидаю заметного шума при высокой частоте обновления. Микросхемы поддерживают данные 400 Кбит / с с 15 битами на пиксель, поэтому на экране будет отображаться бессмысленность в течение 1,9 миллисекунд при обновлении кадра.
nialsh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.