Светомузыка, мерцание ленты ws2811
- Войдите на сайт для отправки комментариев
Всем привет!
Сделал светомузыку на базе MSGEQ7 и при помощи ардуино уно
Проблема следующая.Есть блок питание на 25А, есть 16 метров ленты, для каждых 4-5 метров отдельное питание (то есть паралельное соеденение к блоку питания), Din и Do соеденены во всех 16 метрах последовательно, решил я добавить еще 6 метров ленты полосками по 1.5м то есть 4 штуки, кинул еще одну паралель от блокапитания и распалелил её раз, и потом еще раз и так повесил на каждою 1.5м полосу, тоже самое я сделал и с дигитальным проводом, распалелил его дважды, и как результат все 4 куска мерцают, пробовал подключить последовательно дигитальный провод, как подключился ко второму куску он так же стал мерцать.... уже и не знаю что сделать... в чем может быть причина ?
Очень извиняюсь если написал не в тот раздел, или если не хватает информации
Заранее благодарю за ответы
Ленты бывают разные: от 30 светодиодов на метр до 144 с/м. Ленты питаются (обычно) от 5 или 12 вольт.
Один светодиод потребляет (по даташиту) 60 мА.
Тут, по-моему, кто-то недавно делал панно из ws2812 и тоже они мерцали на дальних сегментах. Помнится мне, что всё кончилось напайкой массы конденсаторов к светодиодам.
16 метров + 6 метров... 22 метра?
Давайте дальше, 22 метра по:
30 диодов = 660шт
60 диодов = 1320шт
144 диода = 3168шт
Теперь считаем потребление ленты целиком:
30шт\м*22м*0,06А = 39.6А.. Упс, уже даже для самой простой ленты(30шт\м) - у нас почти в 1.5 раза нехватает питания....
Если же у вас лента 144диода\м.... всё еще печальней будет... =)
144*22*0.06 = 190А....
У меня по 60 диодов на метр, и питаю я от 12В
Однажды я замерял ток ленты в 5 метрах, то есть при 300 светодиодах, и вышло около 2,5А при белом цвете.
Если взять 16 метров, которые работают на ура, нет не артефактов, не мерцания, то это получается 16м х 0,06 х 60 = 57,6А , когда мой БП расчитан на 25А, так что у меня есть некое сомнение что дело в БП :)
Нашёл эту тему, ситуации похожи, но в том случае появлялись артефакты при понижении уровня яркости, у меня же они есть на максимальной яркости (приду домой попробую понизить яркость, посмотрю что будет) так же есть еще один слабенький БП, но раньше он все 5м питал, так что попробую запитать 2 полоски из последних 4 и посмотрю что будет. Выложу фото для ясности
"Однажды я замерял ток ленты в 5 метрах, то есть при 300 светодиодах, и вышло около 2,5А при белом цвете."
Мне кажется вы увидели что такое среднее потребление, осталось увидеть мгновенное....
"так что у меня есть некое сомнение что дело в БП :) "
посмотрите осциллографом что творится у вас на линии питания, и тогда уже можно сомневатся =)
Дальше мерцание, есть куча вариантов почему оно есть, например пульсации питания или помехи в линии данных, или просадка линии данных до критичных уровней(длинаа линии данных сколько? емкость?)
дальше схема включения пока что не очень понятна, все 22м включены последовательно(линия данных) ?)
В самом начале стоит токоограничивающий резистор на 180 Ом , после, 16 метров линии данных последовательно подключенной, после чего распаралеливание на 4 части каждая по 1,5 метра.
Что вы подразумеваете под ёмкостью?
К сожалению я тот тип электронщика, который делает все без осциллоскопа :(
"после чего распаралеливание на 4 части каждая по 1,5 метра."
Вот тут ваши части по 1.5м начинают "мерцать" ? или просто выводить абы что =)
попробуйте, теста ради записать 17.5м белого цвета(у вас именно столько ленты видны для МК, те куски которые вы подключили паралельно - считайте как один кусок), но честно сказать не изучал как именно себя поведет лента подключеная паралельно, не было такой необходимости...
и опять таки вопрос, мерцает вся лента? или только часть?
"Что вы подразумеваете под ёмкостью? "
Емкость - как у конденсатора, у любого кусочка провода(дорожки на плате) да и вообще всего что вас окружает - есть емкость.
Так вот если ваши "провода" обладают хоть сколь либо значимой емкостью - ардуина может просто не успевать поднимать напряжение на проводах до нужных логических уровней.
зы. еще стоит попробовать последовательно подключить всю ленту(шину данных) а не паралелить ее.
ТС, почитайте по ссылке, думаю поможет....
"зы. еще стоит попробовать последовательно подключить всю ленту(шину данных) а не паралелить ее."
Сразу решил так сделать, и получилась следующая картина, 16 метров работали отлично, подключил еще 1.5м последовательно, все работало, потом еще 1.5 последовательно, и этот последний кусок стал мерцать, все 16.5 до этого куска при этом обычно себя вели, всё с ними было в порядке.
"Емкость - как у конденсатора, у любого кусочка провода(дорожки на плате) да и вообще всего что вас окружает - есть емкость."
Спасибо за обьяснение), к сожалению не могу замерить ёмкость, так как у тестера нету этого режима.
"и опять таки вопрос, мерцает вся лента? или только часть?"
Мерцают именно эти полосы по 1.5 метра
"Вот тут ваши части по 1.5м начинают "мерцать" ? или просто выводить абы что =)
попробуйте, теста ради записать 17.5м белого цвета(у вас именно столько ленты видны для МК, те куски которые вы подключили паралельно - считайте как один кусок), но честно сказать не изучал как именно себя поведет лента подключеная паралельно, не было такой необходимости... "
Сделал именно как вы сказали, сейчас сниму видео, выложу на ютуб, и ссылку здесь оставлю
А ежели этот кусок мерцающий не к хвосту припаять, а к клюву... Т.е. вначале страйпа поставить - что изменится?
Вы имеете именно питание с другой стороны ? , так как линию данных с другой стороны не подключить (на каждом куске ленты один конечн вход Din другой выход Do)
Хочу попробовать дать питание этим страйпам по 1.5м от другого БП, посмотретть что выйдет.
А вот и видео
https://www.youtube.com/watch?v=z1xEEgVU5eg&feature=youtu.be
Было: МК ---> [resistor] ----> 6 м ---> 1,5м ---> 1,5м (моргает)
Пробовать: МК ---> [resistor] 1,5м (моргает?) ----> 6 м ---> 1,5м
Питание врятли при делах если подключено паралельно(а последовательно - оно самое виновно)
а вот подключить 6м данных отдельно таки стоит, чтобы исключить ошибку в ПО.
"Ежели перестанет моргать ближний и заморгает дальний - по-любому с питанием проблема."
По любому проблема, но с питанием или данными так не выяснить =)
Проблема может быть как в линии питания так и в линии данных, искажения данных на 17+м непонятного провода могут быть очень даже неплохие =)
В статье рассказывыается о том, что надо поставить 2 конденсатора на 1000мкФ и на 0.1мкФ паралельно ленте.
У меня же получается так, все 22 метра подключены паралельно в БП, и им всем паралельно стоит один конденсатор на 1000мкФ и на 0.1мкФ, надо ли было отдельно к кажому питанию ленты, свои конденсаторы на 1000мкФ и на 0.1мкФ?
https://pp.userapi.com/c841338/v841338476/5f4a7/HuRKDzIzBC8.jpg
получается так что у меня отдельное питание для 5.3м еще для 5.3м, еще 5.4, и для тех кусков по 1.5 которые мерцают то есть еще для 6м
для первых 16м у меня стоят оба конденсатора в паралель, для последних 6м у меня стоит только электролит на 1000мкФ
Знаю что немного по китайский всё сделанно, просто керамический не достал между краями питание на БП, но попробую ему щас ножки нарастить и поставить.
Спорить не буду, такие длинные веревки не питаю. Сужу по тому посту с панно - если конденсаторы там все поправили, то всяко питания не хватало на дальнем конце.
найдите еще БП от компьютера и запитайте, все земли (минусы питания) должны быть объединены. Все ленты (для проверки) запитать с 2 сторон.
про ws2811 написано много в инете, конденсаторы ставить обязательно - иначе лента долго не проживет. (самое малое написано по ссылке в посте 9)
Вы имеете ввиду, использовать у ардуино еще один пин для передачи данных, и попробовать передать по нему на последние 6м ?
Можно и так. Питание оставить, как есть, а сигнальный покороче сделать. Если замыргает, то питания не хватат (наверняка).
Именно, причем на вашем месте(видя видео) запитал бы каждые 6м от своих данных.
В идеале - от своих контроллеров, тем более что сейчас цена контроллера - копейки.
1000мкф - сглаживает пульсации питания, на каждые 6м ленты стоит вешать, тем более они копеешные, и можно добыть из любой материнки пачками.
0.1 мкф - фильтр от помех, ставить по питанию - для фильтрации наводок окружающей среды, тоже желательно не сильно редко.
их у меня к счастью пачками, но не хотел замарачиваться, что бы к кажому проводу питания их припаивать, но теперь видимо придётся )
Это не точно, но у меня были мысли о том что если я так сделаю, то больше кэша потрачу, но в любом случае сейчас попробую дать данные с другого пина
Поздно, уже подал питание с другого БП, проблема осталась
Одно решение найдено!!!!
Вот такая вот команда у меня была прописана
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED, PIN, NEO_GRB + NEO_KHZ800);
Когда стал гуглить как управлять лентами с двух пинов, наткнулся на статью о том что если лента типа ws2812 то KHZ800, если же лента типа ws2811 то должно быть установленно значение KHZ400
прописал вот так
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED, PIN, NEO_GRB + NEO_KHZ400);
После чего мерцание и любые артефакты пропали
Незнаю, Ради эксперемента можно попробовать выставить обратно KHZ800 и попробовать дать управление с другого пина, но я думаю, что сработает
Спасибо всем огромное за помощь!
Вот тут я вам точно не помошник =) мне к сожалению библиотеки использовать не выходит, приходится читать даташиты и делать с нуля =) отказ от ардуины влечет последствия, но имеет и плюсы =)
И всё же это оказался не конец, спустя какое то время, заметил что эти мерцания все равно есть, но намного резже чем были, и менее заментные, тем не менее они остались.
Попробовал вариант с тем что бы кинуть провод с данными для последних 6 метров, и настройки выставил такие
Вот вам ответ о причинах:
WS2812:
https://yadi.sk/i/vPsRi3FS3Rw9Fi
WS2811:
https://yadi.sk/i/PONn4VY73Rw9HF
Нарушение таймингов становилось критичным после 17.5м =)
Смотрите на временные рамки передаваемых бит.
Скорей всего не изменится, попробуйте сформировать вручную правильный сигнал(без библиотеки), заодно скил прокачаете и тоже со временем уйдете от ардуинки =)
Охх, честно говоря даже не представляю как это сделать, слышал что про преобразование фурье, и что на основе его делали светомузыку, но я не знаю использовали ли для этого какую то библиотеку :)
"попробуйте сформировать вручную правильный сигнал(без библиотеки), заодно скил прокачаете и тоже со временем уйдете от ардуинки =)"
Если не сложно, можно было бы про это поподробнее, или ссылку какую нибудь на информацию по этому делу)
Всё время не понимал особо тайминги, и биты, можно было бы тоже поподробнее, как вы поняли что нарушение таймингов становится критичным при 17.5м? и как вообще по этой таблица ориентироваться. Извиняюсь за глупый вопрос :)
Если не сложно, можно было бы про это поподробнее, или ссылку какую нибудь на информацию по этому делу)
Что именно подробней? в даташите же написан протокол работы ленты, чтобы запустить начало передачи заземляем линию больше чем на 50мкс, это значит начало передачи...
дальше идут последовательно все биты....
1) чтоб передать еденицу надо сначало подать 1(HIGH) на 1.2мкс потом 0 (LOW) на 1.3мкс
2) чтоб передать ноль надо сначало подать 1(HIGH) на 0.5мкс потом 0 (LOW) на 2.0мкс
Чтобы зажечь 1 диод надо передать все 24бита или 3байта
вот порядок передачи бит:
https://yadi.sk/i/Rnq-Oy8c3Rw9wX
для второго диода не делая паузы шлем сразу его цвет(следующие 24 бита)...
как только отправили все свои диоды(320шт или сколько у вас их...) делаем паузу(подаем LOW) на 50 и более мкс. как только хотим снова изменить цвет идем к пункту 1(50мкс LOW, передача всех бит на все диоды, снова LOW).
Это касаемо вашей ленты, у WS2812 другие тайминги.
p.s. время описано для варианта 400кгц, хотите 800 - делите время передачи данных пополам(т.е. было 0.5мкс, стало 0.25мкс), время паузы не меняется, так же 50мкс
Из вашего видео, судя по всему после 17.5м лента начинает мерцать(неправильно читает данные) =)
Легко, открываем даташит и смотрим просто на картинки =)
1) https://yadi.sk/i/CAeq9IUd3RwATQ
2) https://yadi.sk/i/mPtUdRSW3RwAMU
3) https://yadi.sk/i/csYLXedm3RwAWb
Вот и сам даташит, первое что в гугле попалось по 2811
https://cdn-shop.adafruit.com/datasheets/WS2811.pdf
p.s. когда вы написали про разницу в частоте для 2811и 2812 я просто глянул в даташит и убедился что тайминги у них разные, хоть это и не критично на малых кусках ленты- на больших эта погрешность может вызывать непредсказуемые сбои...
так что предсказать что сбой будет на 10м, 17м или 40м - невозможно, просто нужно его ждать начиная с первого диода и до бесконечности =)
Посчитал я время, необходимое для того что бы засветить все светодиоды в белый например, около 21мс получилось, но что мне это даёт? Если тайминги нарушаются, значит ардуина не справляется? То есть идет разсинхронизация с тем, что данные еще не переданы на все светодиоды, а уэе надо следующий данные отправлять?
Такой вот еще вопрос, если для последних 6 метров, я поставлю отдельную ардуино, то тогда все должно быть в норме?, я имею ввиду мерцание пропадет, а в колонках не будет жужать?
Посчитал я время, необходимое для того что бы засветить все светодиоды в белый например, около 21мс получилось, но что мне это даёт?
Информация выше была не для подсчета на коленке, а для реализации без библиотеки =)
Ардуины с лихвой хватает на передачу с нужными задержками, речь о том что для диода 2811 и для 2812 задержки разные....
Достаточно даже подавать сигнал на последние 6м с другой ноги, но тут таки опять, не могу сказать принцип работы библиотеки, если когдато давно прочитаное ее описание верно, то она не использует прерываний, и вовсе их отключает на время записи, в таком случае - просто подавать данные с отдельного пина - достаточно.
Охх, честно говоря даже не представляю как это сделать, слышал что про преобразование фурье, и что на основе его делали светомузыку, но я не знаю использовали ли для этого какую то библиотеку :)
Вы светомузыку делаете или подсветку просто? фурье нужен для того чтоб звук разложить на составляющие его частоты =)
Светомузыка, но у неё есть режими ожидания, в эти моменты она становится подстветкой, хах)
Упс, не а слона то я и не заметил =) брр, тогда как же вы ее делаете без фурье ?)))))
Да вот решил её сделать на базе MSGEQ7, честно говоря, думал сделать через фурье, но сейчас просто времени нету разбираться с этим )
Афигеть, 3 бакса за..... блин для фурье же кода готового полно, взял и пользуй, тем более под ардуинку.... =) ужс =)
На самом деле, надо бы ознакомиться, возможно я бы нашел решение с мерцанием, кроме как, подключать еще одну ардуино нано ( странно конечно, почему используя два пина, проблема осталась)
странно конечно, почему используя два пина, проблема осталась
Если по питанию точно проверили то проблемы остатся не должно, или что то подключено неверно, или что то с лентами
з.ы. Я же надеюсь тесты проводятся в режиме свечения а не светомузыки?))
Cейчас решил, полностью переписать код, только для этих кусков на шкафу, и проблема осталась, с 3 кусками все впорядке, и последний, просто жуткое мерцание, обрезал везде питание и данные, и оставил только этот последний кусок, и проблема не пропала, щас попробую как кто то советовал дать питание с двух сторон, если проблема не решится, то думаю проблема в ленте (открою диспут, пусть новую высылают)
По поводу тестов, проводил их и так и так, но сейчас последний раз, именно в режиме свечения)
Просмотрите кусок ленты на предмет "поврежденной" дороги данных или диода(если один будет поврежден по линии данных - все что за ним будут мерцать)... это вероятней, еще как вариант зажечь белый и промерять напругу на последнем участке(но врятли...).
О боже свершилось чудо! , все удалось и отлично работае. Решением стало как и советовал фонарик использовать 2 пина для управления, что бы не возникало проблем с таймингами (провод с данными кинул на все полоски по 1,5м паралельно), но и это не все, для каждого шкафа пришлось делать отдпльное питание, почему не работало с магистралью которая потом расходилась на 2 шкафа, не могу сказать, видимо какие то примудрости у этой китайской ленты есть. Спасибо еще раз всем за помощь
Ну так магистраль была тем же сечением, что и отводы, поди, кабелем на 0.05кв.мм.
Ы =) если магистраль это кабель в 5 соток то всё понятно... я как то не подумал когда говорилось про питание что будет речь о таких проводах идти =)
з.ы. Мой ник не переводится =) он как читается так и звучит =)
Провод и отводы действительно такого сечения, сделал расчеты, выдержит ли это кабель ток, вроде как должен был, значит можно его смело ставить.
Загадкой для меня осталось, то, когда я отключил питание и данные от всех лень что есть и оставил только на одном шкафу по 2 линии, и одна из них мерцала , другая нет, менял отводы местами, и провод с данными тоже, но результат был один, одна лента мерцает, другая нет, стал отрезать ее по чуть чуть, надеясь найти битый сегмент, ничего не помогло... но на след день проводя новое питание и перепаяв провода цепляющиеся к лентам на этом шкафу, все заработало.... могло ли быть так, из за того что плохо припаялся к ленте?)
Да всё что угодно может быть, как показывает практика.
Два посетителя arduino.ru даже по простой схеме могут собрать два принципиально разных устройства.