Керування 500 світлодіодами з ШІМ


26

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

Я планую використовувати Arduino, оскільки у мене вже є, але я відкритий для пропозицій, якщо хтось думає, що інша платформа була б кращою.

Необхідно використовувати регістри змін. Який гарний реєстр зрушень використовувати в цій ситуації? Якщо ШІМ робить цей проект набагато дорожчим, я без нього обійдуся. Я хочу спробувати витратити менше 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-кратним прискоренням). Можливо, вам навіть вдасться зробити якісь складніші речі, поки ви працюєте з такою швидкістю.
supercat

Наприклад, припустимо, що ви хочете мати вісім рівнів яскравості, що представляють собою повний, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 та 1/128. Якщо Arduino може виконати операцію "І" або "АБО" на значенні, отриманому з вказівника та збільшення цього покажчика менш ніж за чотири цикли, ви, ймовірно, можете використовувати три біти на піксель, щоб зберігати інформацію про яскравість і все-таки досягти швидкості передачі. з 16 циклів на 8 світлодіодів.
supercat

Обчислення значень ШІМ перекриває вихід 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. Peggy версія 2 була перероблена з нуля. І виглядає… майже точно так само. Однак зміни під капотом суттєві, і ми вважаємо, що це багато в чому поліпшення.

Перш за все, Peggy 2.0 все ще робить те ж саме, що забезпечує чорт: він забезпечує ефективну потужність до 25-ти світлодіодних масивів розміром 25 x 25. Peggy створена для того, щоб позбавити частину жалоби, складності та безладу від гри зі світлодіодами. Це універсальний і потужний світлодіодний пегборд, який дозволяє ефективно керувати сотнями світлодіодів у будь-якій конфігурації, яка вам подобається, не так багато, як обчислювати один резистор навантаження. Ви можете встановити будь-де від одного до 625 світлодіодів, і Peggy засвітить їх для вас.


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


Чудове посилання! Закладка. Я не планував працювати над таким проектом, але маю зробити це зараз, я побачив це маленьке відео :-)
Wouter Simons

@NicolaeSurdu Не зламано. Я відкрив його саме зараз.
Axeman

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

6

Який макет ви хочете, щоб світлодіоди? Ви можете заощадити багато роботи, придбавши кілька світлодіодних матриць, ви можете отримати одноколірні світлодіодні матриці 8x8 (64 світлодіоди) за долар чи два .

Ви не отримаєте справжню ШІМ з AVR та зсувними регістрами на цьому безлічі світлодіодів, але ви, можливо, зможете вичавити 2-4 рівні яскравості. Вам доведеться запустити номери і подивитися, що можливо.

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


всі дуже хороші бали!
Jason S

5

Я не маю уявлення про діапазон ШІМ, який вам потрібен для світлодіода, але я працював над 64-канальним ШІМ-контролером для додатка сервоуправління, який може давати мені імпульси між 600us і 2.4ms. Для цього використовується CD74HCT238E (демультиплексори 3-8 рядків) для генерування 64 каналів з 8 штифтів вводу / виводу на ATMega168 і керується ними за допомогою простих послідовних команд. Напевно, ви можете зв'язати декілька версій модифікованої версії цього контролера разом на послідовній лінії та адресувати всі 500 світлодіодів ... Можливо, ви могли б використовувати версію ATTiny2313 контролера, оскільки ваші вимоги до програмного забезпечення будуть простішими.

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


5

Перевірте мікросхеми "світлодіодних драйверів" на mouser / digikey. TI, наприклад, робить купу драйверів з різноманітними інтерфейсами (I2C, SPI), які, безумовно, відповідали б вашим потребам. Більшість цих драйверів розроблені так, щоб вони були приковані до маргариток, тому серія з одного подається в серійний в інший.

Наприклад, щось на зразок TLC5940 пропонує 16-канальне керування ШІМ. Отже, в основному це регістр зсуву 16-бітових змін постійного струму з 12-бітовим контролем ШІМ в сірі. Я можу порекомендувати саме цей ІС, оскільки я допоміг розробити дисплей 80х16.


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

Виділені чіп-драйвери з послідовними інтерфейсами, ймовірно, будуть найкращим маршрутом. Справа з індивідуальними реєстраторами зсуву, ймовірно, означатиме дуже складну схему. Принаймні, Максим і Т.І. Я не пам’ятаю, чи мала яка-небудь модель, яка так сильно підходить.

Ще знадобиться багато обладнання.

Що стосується живлення, програмування та шин, то в таблиці даних для кожного драйвера буде, мабуть, найбільше інформації, яка вам знадобиться.


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; Зберегти отриманий байт (біти встановлені, якщо> = comparand)

Можна використовувати різні комбінації IORWF та ANDWF, залежно від значення компаранда. Зауважте, що, використовуючи такий підхід, як показано на малюнку, можна оновити значення яскравості пікселів у будь-якій точці циклу ШІМ без мерехтіння, за умови, що всі чотири біти записуються між викликами до режиму зсуву дисплея або, якщо програма оновлення пікселів визначає, чи наступний зсув виведе "1" або "0" для пікселя, а також встановивши або очистивши всі біти пікселя (залежно від того, яка операція змусить його робити все, що він збирався зробити), а потім записати будь-які біти, значення яких повинно бути бути протилежним. Зауважте також, що можна домогтися довільних масштабів нелінійної яскравості, змінюючи терміни оновлень дисплея або використовуючи деякі порівняльні значення більше ніж один раз у циклі ШІМ.


1

FPGA або CPLD можуть бути корисними для таких завдань, оскільки вони пропонують багато штифтів вводу / виводу. Переходьте до найпростішого і найдешевшого. Якщо одного недостатньо, скористайтеся парою.


Чи можете ви дати нам ще декілька деталей про те, чому це хороший варіант, зараз я знаю про це, але я знаю, які варіанти та які пропоновані вами перелічені технології, оригінальний плакат (ОП), ймовірно, не має такого фон.
Кортук

Я не впевнений, що це найкращий варіант, але хотів, щоб це було зазначено для повноти. Якщо керувати 500 світлодіодами з ШІМ, так чи інакше, врешті-решт потрібно 500 індивідуально керованих проводів. Важко знайти мікроконтролер з такою кількістю вихідних штифтів. Існує багато способів цього, як і раніше, використовуючи мікроконтролери, але один або кілька дешевих CPLD / FPGA можуть легко дати цим вихідним штифтам.
Карл

1

Ви майже точно можете це зробити легко, використовуючи PSoC3 або PSoC5 .

Мікросхеми PSoC - це мікроконтролери, які містять цифровий апарат, який може конфігуруватися, трохи схожий на FPGA або CPLD. Це означає, що ви можете створити складну схему для виконання незвичайних речей, таких як керування 500 світлодіодами з ШІМ. Більше того, ви можете, ймовірно, реалізувати все це за допомогою повторно налаштованих цифрових блоків, це означає, що частину процесора мікросхеми потрібно лише записати потрібні яскравості світлодіодів у масив.

504 світлодіоди вміщуються у прямокутник 21 х 24. Якщо у вас було 24 ШІМ-каналів та 21 GPIO, ви могли б спрацювати з цим. Вгадай що? У PSoC є більше того.

Ви можете легко налаштувати 24 ШІМ-канали на PSoC і налаштувати 21 інший контакт, щоб він був частиною регістра зсуву. Потім налаштуйте деякі канали DMA, щоб перекачувати байти з пам'яті у вихідні ШІМ, і ви смієтеся. Все, що зараз потрібно зробити, це створити графіку. PSoC3 має 8-бітове ядро ​​8051, тоді як PSoC5 має 32-бітну ARM. Візьміть свій вибір. Єдині зовнішні ІМС, які Вам знадобляться, - це деякі ULN2803, щоб забезпечити високий струм приводу для рядків. ШІМ-виходи повинні мати достатню кількість струму для одиночних світлодіодів.


Це загальна надмірна кількість для водіння світлодіодів. Існують спеціалізовані, дешеві, заздалегідь розроблені світлодіодні драйвери, зроблені для прив’язки таких великих розмірів, які постійно використовуються для гігантських дисплеїв. Не потрібно переосмислювати все це і для більшої вартості.
nemik

@nemik - Насправді загальна вартість фішок (від дорогого Farnell) становить лише 6,80 фунта.
Rocketmagnet

0

Скористайтеся економією масштабу. Китайські сайти, такі як Aliexpress, продають світлодіодні пасма на основі WS2811 за ~ 15 доларів за 50 світлодіодів. Вони індивідуально адресовані, яскраві, зазвичай водонепроникні та мають ШІМ для яскравості. Жоден реєстр пайки або зсуву не змішується ні з одним. Здійснюючи все це самостійно, я думаю, обійдеться вам дорожче, забирає набагато більше часу і буде дуже засмучувати. Крім того, ви в Озі, тому доставка з Китаю не буде занадто дорогою.

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

Є також бібліотеки Arduino, щоб зробити їх простими у користуванні.


1
15 доларів за 50 світлодіодів? Тож за 500 світлодіодів це доходить до 150 доларів? А у вас є нерв сказати мені, що моє рішення дороге? -1
Rocketmagnet

Також, будь ласка, можете надати посилання на це. WS801 не відповідає Google, і він також не з'являється при пошуку Aliexpress
Rocketmagnet

Вибачте, я мав на увазі WS2811, як-от ці aliexpress.com/store/product/… або без затемнення PWM, ці aliexpress.com/store/product/…
nemik

Один серійний сигнал для приводу 50 світлодіодів із ШІМ-затемненням. Спасибі, це саме те, що я після цього. Але стандартний регістр зсуву надає шпильку "засувки" для копіювання буферованих даних на виходи після передачі повного кадру. Тут немає засувки, тому я очікую помітного шуму при високій швидкості оновлення. Чіпи підтримують дані 400 Кбіт / с з 15 бітами на піксель, тому на екрані буде відображатися нісенітниця протягом 1,9 мілісекунд, поки кадр оновлюється.
nialsh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.