Помогите вылечить моргание ленты WS2812

One_Drag

✩✩✩✩✩✩✩
18 Фев 2019
5
0
Доброго времени суток, дорогие специалисты в области программирования

Вот уже неделю пытаюсь реализовать проект англоязычного блогера Nerdforge "Making Wireless MUSIC VISUALIZING Floor Lamps"
Ссылка на проект на ютубе

Использутся беспроводные модули в качестве основного блока "хозяина" взята Node MCU ESP8266
В качестве беспроводного приемника "раба" Wemos D1 Mini

Адресная светодиодная лента WS2812B, блок питания BTF-50-5 5v 10A

На текущий момент я реализовал проект на макетной плате и с одной лампой(1м ленты), разложив все "кишки" на полу.
Собственно проблема у меня заключается в том, что при включении дополнительных режимов, например статичный цвет либо переливающий (скорее всего даже и музыкальный основной режим тоже, просто этого там не видно)
Лента с не определенной переодичностью начинает подглючивать, через раз участками диоды "блыкают", то там 5шт. то там 3ш. что совершенно не допустимо особенно для медленно переливающихся цветов, на первый взгляд кажется словно питание контачит где то плохо, но начал исключать по порядку все, (ну как смог):

Лента/блок исправны: залил светодиодный демо скетч на ардуино нано, подсоеденил ленту - работает идиально
Wemos d1 mini исправен, менял на другой. Также заливал на него демо скеттч ленты, подключил работает идеально.

Собственно, потому и остановился на том, что где то что то коряво прописано в коде, очень прошу с этим помочь я сам с кодом работать практически не умею... максимум смог добавить дополнительных различных режимов подсветки. Руки опускаются.. и вот казалось бы бери и покупай короба ко всему этому но нет.
Заранее очень очень благодарен за ответ Ссылка на используемые мной коды https://github.com/OneDrag/SoundReactive2
 

mechanic

★★★✩✩✩✩
Команда форума
31 Июл 2018
408
130
1) спаяйте усе.
2) поставьте кондер на питание что нибудь от 6 вольт и от 1500 емкостью.
 
  • Лойс +1
Реакции: Xiii

One_Drag

✩✩✩✩✩✩✩
18 Фев 2019
5
0
1) спаяйте усе.
2) поставьте кондер на питание что нибудь от 6 вольт и от 1500 емкостью.
Спасибо большое за совет. Всё спаял. Поставил конденсатор 10вотльт на 1500 к сожалению не помогло
Попробовал установить понижающий диод между 5v блока и питанием ленты, чтобы понизить до 4,5в и тоже не помогло
 

malec

★★★★✩✩✩
5 Фев 2019
640
214
Там понижать никак нельзя надо стабилизировать и чтоб просадок не было.. иначе лента сама себе сигналы шлёт))))) (из за скачков данные пропадают по дороге и из за скачков у меня диоды вылетали)... и провода по питанию ленты не витая пара... замечал глюки на 4,6 вольта...на метр ленты току надо около 1,5а у тебя блок на 10 а ,за глаза , попробуй питалово развязать... отдельно арду и ленту (ленту не менее 1кв.мм проводом если длиньше 5м делать не будеш) , наводки по сигналу...(убираются частичным экранированием, т.е скрути в косичку землю и сигнал... скорее всего где-то здесь "собака порылась" ))).
Node MCU ESP8266 я даже не видел , по этому не знаю как там и чего... но на ардуине у меня все какие-либо косяки на ленте вылазили только из за питалова... а заметил косяки на пяти метровой ленте с плотностью 60х1м, она в конце где-то с пол метра, своей жизнью живёт когда какойнибудь мощьный эфект проходит (типа вспышка белого)...
 

One_Drag

✩✩✩✩✩✩✩
18 Фев 2019
5
0
Там понижать никак нельзя надо стабилизировать и чтоб просадок не было.. иначе лента сама себе сигналы шлёт))))) (из за скачков данные пропадают по дороге и из за скачков у меня диоды вылетали)... и провода по питанию ленты не витая пара... замечал глюки на 4,6 вольта...на метр ленты току надо около 1,5а у тебя блок на 10 а ,за глаза , попробуй питалово развязать... отдельно арду и ленту (ленту не менее 1кв.мм проводом если длиньше 5м делать не будеш) , наводки по сигналу...(убираются частичным экранированием, т.е скрути в косичку землю и сигнал... скорее всего где-то здесь "собака порылась" ))).
Node MCU ESP8266 я даже не видел , по этому не знаю как там и чего... но на ардуине у меня все какие-либо косяки на ленте вылазили только из за питалова... а заметил косяки на пяти метровой ленте с плотностью 60х1м, она в конце где-то с пол метра, своей жизнью живёт когда какойнибудь мощьный эфект проходит (типа вспышка белого)...
Сейчас все спаяно вот так(во вложении) Везде провода используются вроде не менее 1кв. мм. Попробую частично экранировать как ты говоришь, а то и вовсе пару витков пропущу через ферритовый фильтр, посмотрю как поможет
Спасибо за совет)
 

Вложения

malec

★★★★✩✩✩
5 Фев 2019
640
214
ферит тут не помощь, как-бы паразиты не полезли... надо экранировать сигнал от ВЧ наводок , чтоб помехи исключить , но на полуметре или метре я таких проблем с лентой не наблюдал... если только у тебя нет "генератора" помех под столом...
ДИОД , это шотки? ( убрать, чтоб исключить просадки) , арду работает и от 3,5в и ток не потребляет , а лента жрёт на каждый диод 20мА , а дальше закон Ома ))) Ленту на свой толстый провод, а арду хоть на сопли)))) и если хочеш влепить куда нибудь диод, влепи его в..........
цепь питания арду( хотя он и там на*** не нужен.) Да и судя по фоткам расстояние от МК до ленты мало чтоб ловить помехи и то что у тебя всего 1м ленты, просадок больших быть не должно (провода тонкие на питание ленты, но короткие.... диод в ж***..... и крайний вариант... попробуй другой блок питания, может у него по выходу есть колебания похожие на шим сигнал....да и на сигнальный ленты поставь резик ом так на 200....
 

Вложения

Последнее редактирование:

One_Drag

✩✩✩✩✩✩✩
18 Фев 2019
5
0
Ленту на свой толстый провод, а арду хоть на сопли)))) и если хочеш влепить куда нибудь диод, влепи его в..........
цепь питания арду( хотя он и там на*** не нужен.) Да и судя по фоткам расстояние от МК до ленты мало чтоб ловить помехи и то что у тебя всего 1м ленты, просадок больших быть не должно (провода тонкие на питание ленты, но короткие.... диод в ж***..... и крайний вариант... попробуй другой блок питания, может у него по выходу есть колебания похожие на шим сигнал....да и на сигнальный ленты поставь резик ом так на 200....
Сейчас попробую твой вариант.
А на диод я такие надежды возволял)) пока вот есть видео мои с диодом и без него:
Без диода:

С диодом:
 

malec

★★★★✩✩✩
5 Фев 2019
640
214
проверь питание на самой ленте в работе, сколько просадка... попробуй, в скетче ограничить яркость процентов до 50 если проблема уйдёт заморачивайся с питаловом, т.е. исключи потери (увеличь сечение провода и на ленту подпояй кандёр , как тебе писали) , если нет попробуй другой блок...(может плохая стабилизация или какие-то импульсы паразиты вылазят), просто я по видосу плохо понял визуально в чём проблема....
 

malec

★★★★✩✩✩
5 Фев 2019
640
214
залей простой скетч с плавной сменой цветов, с полной разноцветной заливкой, проверь на что такая реакция... может не там собака порылась, и ты не там копаеш)))
схема на микрофоне, а ты исключил самовозбуждение, шумы всевозможные от усилителя микрофона? или эта схема проверенна и доработана, на этом микрофоне?
Ты-же не слышиш , что он там СЛЫШИТ... попробуй как-нибудь (если нет осцилографа) с уселителя микрафона сигнал проверить и отреж не нужные шумы... можно и программным методом пойти , но это такие дебри....короче мне не позубам)))
 
Последнее редактирование:

One_Drag

✩✩✩✩✩✩✩
18 Фев 2019
5
0
залей простой скетч с плавной сменой цветов, с полной разноцветной заливкой, проверь на что такая реакция... может не там собака порылась, и ты не там копаеш)))
схема на микрофоне, а ты исключил самовозбуждение, шумы всевозможные от усилителя микрофона? или эта схема проверенна и доработана, на этом микрофоне?
Ты-же не слышиш , что он там СЛЫШИТ... попробуй как-нибудь (если нет осцилографа) с уселителя микрафона сигнал проверить и отреж не нужные шумы... можно и программным методом пойти , но это такие дебри....короче мне не позубам)))
Да на видео красный свет, там спецально я поставил на 50%яркости меньше чтобы в глаза не било пока отслеживаю вспышки, по этому от уменьшение яркости проблемы не уходят... и еще насчет микрофона, он аналоговый и потому спокойно меняется на кабель 3,5мм Jack, таким образом ВСЕ лишние или не запланированные шумы не проходят, это отчетливо видно, (первый режим музыкальной подсветки)лента полностью не горит пока не дотронусь до разъема Джека... и на остальных режимах также глюки не уходят...
 

nlliehu4ka

✩✩✩✩✩✩✩
4 Ноя 2019
1
2
была похожая проблема... и весь прикол заключался в том что nodemcu работает на 3.3v.. лента же работает на 5 вольтах.. решение для меня оказалось в установке преобразователя уровней на дата ножке...
3.3 to 5 level converter вбивайте в ali
можно и на коленке собрать схема простейшая
 
  • Лойс +1
Реакции: t_igr и malec

malec

★★★★✩✩✩
5 Фев 2019
640
214
была похожая проблема... и весь прикол заключался в том что nodemcu работает на 3.3v.. лента же работает на 5 вольтах.. решение для меня оказалось в установке преобразователя уровней на дата ножке...
3.3 to 5 level converter вбивайте в ali
можно и на коленке собрать схема простейшая
Не прошло и пол года как и столкнулся nodemcu точнее с ними обоими и nodemcu и Wemos D1mini -- выясни что все проблемы из за питания матрицы , а вот делитель ставить не пробовал , просто не понимал зачем делитель если выходе меньше чем входе... а ведь преобразователь реальная тема....он же повысит до 5 и не согласования пройдут))) мне удалось добиться стабильного состояния понизив питание до 4,5 в.
 

fsmoke

✩✩✩✩✩✩✩
20 Янв 2020
1
7
Здравствуйте, уважаемые форумчане, только что зарегался, специально, чтобы рассказать про нюансы работы ws2812b с esp8266 и их решения.

Лирическое отступление
Судьба распорядилась так, что я стал с++ разработчиком, но чисто софтверником, электроника для меня остаётся в качестве хобби. Я не являюсь ардуинщиком, т.к. ввиду своего стажа(~17 лет) и опыта мне проще писать на нативном СИ, но это никак не влияет на тот материал, который я собираюсь здесь изложить.

Проблемы:
К сожалению, когда я столкнулся с кристаллом ws2812b я влетел с "шашкой наголо" и думал, что сейчас всё сделаю за пару дней....практически так и случилось, но потом начали возникать проблемы, которые я решал по выходным в течении целого месяца!

1) Питание ленты
2) Падение напряжений
3) Логические уровни
4) Помехи

Решения и "разбор полётов"

1) Первое, что необходимо уяснить это то, что что кристалл ws2812b достаточно прожорливая штука - токи на одном кристалле судя из даташита, могут доходить до 60 мА! Теперь посчитаем на примере моей ленты 96 светодиодов на метр, лента у меня 2.5 м:

60ма * 96 * 2.5 = 14.4 А - вдумайтесь пиковый ток 14 А. Хорошо, что в реальности это вряд ли будет происходить (если только включить полностью белый свет и долго сидеть), да и мои замеры по токам китайских ws2812b говорят, что они не потребляют более 30-40 мА, но к 6-7А вполне нужно быть готовыми.
Соответственно, чем выше ток, тем сечение проводников должно быть толще - для моего случая рекомендую сечение не менее 1 мм2.

Если выбрать маленькое сечение - у Вас будут греться питающие провода - и возникнет вероятность ВОЗГОРАНИЯ!

2) Вторая ситуация, которую хотелось бы рассмотреть это падение напряжений! При таких токах дай бог, если у Вас на "хвосте" ленты останется 4.5 вольта, при питании "головы" от 5.5 вольт. Поэтому решение поставить стабилитрон и понизить питание до 4.5в дабы согласовать логические уровни - неприемлемо! Да... на коротких обрезках ленты это будет работать, но когда у Вас появится желание сделать реальный проект с длинной лентой Вам придётся питать ленту максимально возможным напряжением. Максимальное напряжение для кристалла ws2812b - это 5.5 в - я питаю 5.4в.
Второй вариант - это проложить провода питания достаточного сечения - и паять на ленте через каждый, допустим, метр. Второе решение мне не очень нравится из-за дополнительной проводки, но на совсем длинных лентах оно будет, фактически, единственным выходом.

3) Вот это самая интересная тема - дело в том, что esp8266 питается от 3.3 вольт - и логическую единицу она физически не сможет выдавать выше этого значения. Сама лента питается от 5 вольт и на вход логические уровни принимает в рамках 5 вольт.
Как можно заметить во многих других проектах согласование в таких случаях, обычно не требуется. Т.е. например если Вы возьмёте esp8266 с её 3.3 вольтами и atmega328(Arduino UNO) c 5 вольтами, то согласование не потребуется, т.к. atmega328 толерантна по своим входам и её логическая единица начинается от 2-2.5 вольт, поэтому 3.3 вполне хватает.

НО! У нас кристалл ws2812b - соответственно, открыв даташит - мы с удивление узнаём, что границы лог. нуля и лог. единицы - достаточно разнесены друг от друга. Более того они ещё и зависят от опорного напряжения, которым является напряжение питания.

Исходя из даташита - максимальный уровень лог. нуля 0.3vdd, а минимальный уровень лог. единицы 0.7vdd.
Считаем самое интересное уровень лог. единицы:
0.7 * 5.5 вольт = 3.85 вольт - а это значит, что лог. единица должна лежать в диапазоне от 3.85в до 5.5в, естественно esp8266 с её 3.3в ну никак не подходит.

Собственно поэтому решение со стабилитроном понижающим питание и помогает, потому что опорное напряжение тоже снижается(0.7 * 4.5 в = 3.15 в) - но оно неверное(см. пункт 2.). да и к тому же мы получаем предельные 3.15 в - т.е. любая помеха и единица НЕ ПРОЙДЁТ(3.15 очень близко к 3.3в), как результат вы получите те самые мерцания

Как же быть?

В интернете полным полно различных схем согласования уровней, например такая классическая схема на мосфете
Level-shifter.jpg
Но она работать не будет.

И вот мы подходим к ещё одной большой проблеме с ws2812b - шина данных очень скоростная, например, время трансляции единицы всего 200 наносекунд!! Транзистор просто не будет успевать открыться. Либо нужно искать очень быстрый транзистор, но собрав такую схему на разных мосфетах, доступных для обычного потребителя(встречающихся на материнских платах) изучав их даташиты и засев с осциллографом, я так и не нашёл подходящего... нужно покупать, либо найти другой способ.

Классический подход к решению данных проблем использовать специализированные микросхемы, например SN74LVC1T45 (1-битный шинный приемопередатчик с двуполярным питанием)
DOC004015501.jpg
как раз должен подойти для этого - но я нашёл более простое, доступное и дешевое решение.

Есть такие микросхемы, как микросхемы логических операций например 74ACT04SC, которая является инвертором, её без проблем можно найти на видеокарточках, материнских платах и пр. она достаточно быстра, дешёва(8 российских рублей если покупать) - и прекрасно справляется с шиной данных ws2812b.

Но Вы спросите как же быть - ведь 74ACT04SC инвертор и уровни получатся перевернутыми - здесь можно поступить очень просто. т.к 74ACT04SC имеет 6 каналов - мы будем инвертировать сигнал 2 раза.

К сожалению я забыл сделать скрин с осциллографа(у меня DS1104Z-S), но опять всё разбирать, чтобы это сделать мне крайне не хочется, поэтому придётся поверить мне на слово.

Схема естественно элементарна :)

hex.png
Схема подключения(для тех кто не умеет читать схемы):
hex2.png

4) Вы думаете в предыдущем пункте, согласовав уровни мы избавились от мерцания - нет Вы ошибаетесь, всё ещё впереди.

Я к сожалению не в курсе тех библиотек, которые используются в Arduino для ws2812b, но на своей esp8266 я использовал i2s(не путать с i2c) линию - чтобы посылать сигнал на ленту. Это аппаратно-ускоренное решение, которое фактически полностью разгрузило процессор esp8266, теперь я могу делать даже различные физические эффекты не беспокоясь, что анимация будет тормозить на любой длине.

К чему я это - те кто знаком с линией i2s сразу представляют данные, которые по ней можно передавать - данные больших объемов. Точно такие-же данные мы шлём на ws2812b. А для этого необходима высокая скорость.

Итак скорость, с которой передаются данные на ленту примерно ~4 мегабита в секунду!! Осциллограф показывает частоту линии в 5 мегагерц!

На таких частотах - Вы не сможете сделать эту линию длинной. Я рекомендую ставить микроконтроллер(причем не важно Arduino Uno или esp8266 или какой либо другой) КАК МОЖНО БЛИЖЕ ко входу ленты!!

Дело всё в том, что на частоте 5 мГц - ваш провод начинает работать как антенна! Т.е. помимо того, что Вы можете ловить помехи по питанию, Вы ещё можете поймать помехи от эфира самой esp8266 - как произошло у меня. Хотя провод был всего 20 сантиметров. Никакого контроля ошибок у кристалла ws2812b нет и в помине...

Выход здесь только один - Вы должны применять экранированный кабель - например я использовал RG-58(50омный высокочастотный), если он толстый - рекомендую посмотреть в сторону RG316(Pigtail) или RG178.

Экран кабеля ОБЯЗАТЕЛЬНО должен быть подключен к минусу питания.

ИТОГО
Если Вы будете следовать указанным выше рекомендациям - всё у Вас получится :)

ПС
Предвосхищая гневные и недовольные возгласы про лишние детали и комменты "да у меня и так всё работает", поздравляю, лично Вам повезло - но всё может круто изменится, через месяц, полгода или год, когда рядом построят очередную вышку сотовой связи, или соседи передвинут свой вайфай роутер или DECT телефон.... и Вам придётся разбирать свой фальш-потолок или расковыривать проводку ws2812b потому, что последняя "внезапно" начнет глючить
 
Последнее редактирование:

Des75

✩✩✩✩✩✩✩
26 Апр 2020
3
0
1. "Сварщик я не настоящий" (с);
2. Глюки ленты в связке с esp8266 (в моём случае WemOS) в той или иной мере проявились на 2х проектах Алекса, которые я повторил (гирлянда на окно и лампа).
Если с гирляндой (лента на 200 диодов) глюки появляются редко, то с лампой постоянно. Это бесит. На просторах "этого вашего инторнета" наткнулся на "решение" этой проблемы. Лично я ещё не пробовал, но утверждают, что работает. Возможно это и есть тот "грязный хак" о котором иногда упоминает сам Алекс, но который я так и не увидел (возможно, плохо искал). Итак, вот ссыль, а вот схема с сайта:
Хак глюков ленты WS.png
 

kostyamat

★★★★★★✩
29 Окт 2019
1,805
938
@Des75, такую схему предлагал Palpalych в свое время, говорит работает. А ещё я в свое время находил расследование одного чудака, который проверил, и доказал, что ESP8266 таки толерантна к 5 вольт на малых токах. Из этого: получается, что пин D4 (по вашей схеме) можно подтянуть к +5в через резистор несколько киллоом (10кОм думаю самое то), и теоретически можно получить меандр размахом в 5в (если там такая же схема выхода, как и в атмегах, пробовать нужно). Сам я не пробовал, у меня матрица работает нормально.
Ещё одно - в D1 mini на пине D4 вроде как светодиод. Он тоже просаживает напряжение, хоть и загораться не успевает.
 
Последнее редактирование:

kalobyte

★★★✩✩✩✩
1 Янв 2020
725
145
мелкасхемы с 6 выводами 3.3в не понимают
у которых 4 вывода, те понимают
я использовал линейку на 8 светодиодов на плате в качестве конвертера уровней и спрятал ее в коробку
у меня лента вообще на 2811 мелкасхемах и по 3 диода последовательно с питанием от 12в

есть новая лента и там стоят диоды с 4 выводами и она нормально работает, только 5м ленту надо запитывать с 2х концов 0.75 квадратным кабелем
и бп на 2а минимум
и провода дефолтные у этой ленты выкинуть, не тянут они полный ток без просадки
 

Des75

✩✩✩✩✩✩✩
26 Апр 2020
3
0
Последнее редактирование:

kDn

★★★★★★★
18 Ноя 2019
2,342
1,381
1. "Сварщик я не настоящий" (с);
2. Глюки ленты в связке с esp8266 (в моём случае WemOS) в той или иной мере проявились на 2х проектах Алекса, которые я повторил (гирлянда на окно и лампа).
Если с гирляндой (лента на 200 диодов) глюки появляются редко, то с лампой постоянно. Это бесит. На просторах "этого вашего инторнета" наткнулся на "решение" этой проблемы. Лично я ещё не пробовал, но утверждают, что работает. Возможно это и есть тот "грязный хак" о котором иногда упоминает сам Алекс, но который я так и не увидел (возможно, плохо искал). Итак, вот ссыль, а вот схема с сайта:
Посмотреть вложение 12644
Как по мне - это лучшее решение, но только для тех случаев, когда можно достаточно просто перекоммутировать первые два светодиода, что к сожалению возможно не всегда (на уже спаянных матрицах проблематично). Есть решение влоб - это мощный кремнивый диод (не шотки, а с большим падением) и использовать его как кипятильник :), подключив по питанию всей ленты, тогда вклиниваться не придется, но он на себе будет рассеивать приличную мощность, особенно в режимах типа "белый свет" на высоких яркостях и полной заливке.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,805
938
@kDn, надёжнее тогда поменять резисторы делителя возле TL431 на БП, в сторону уменьшения напряжения питания всей схемы до 4.5в. Куча видео по этому вопросу на Ютубе.

Диод я кстати ставил, греется так, что аж отпаивается. Не думаю что это долго проживет.
 

Des75

✩✩✩✩✩✩✩
26 Апр 2020
3
0
@kDn, надёжнее тогда поменять резисторы делителя возле TL431 на БП, в сторону уменьшения напряжения питания всей схемы до 4.5в.
Это тоже пробовал. Но, т.к. "сварщик я не настоящий" что-то пошло не так и ниже 4,7В понизить не получилось - БП просто не стартовал. И то, через год достал, включаю, а он опять не стартует.... А я уже забыл какие номиналы резисторов там были :)
С матрицей попробовал ограничить напряжение диодом... что-то не получилось, как глючило, так и глючит... и да, диод грелся как печка... Короче, я хз, что я делаю не так...
 

kDn

★★★★★★★
18 Ноя 2019
2,342
1,381
@kDn, надёжнее тогда поменять резисторы делителя возле TL431 на БП, в сторону уменьшения напряжения питания всей схемы до 4.5в. Куча видео по этому вопросу на Ютубе.

Диод я кстати ставил, греется так, что аж отпаивается. Не думаю что это долго проживет.
У меня БП в пластиковом корпусе, клеенном. Я понимаю, что оборачивание тканью, молоток и прицельные удары по шву позволят разобрать, но чота лень этим заниматься :), а диод да - греется весьма качественно. Я взял достаточно мощный, он 10 ампер легко выдержит, но через него тока до 3А бегало... На самом деле у меня проблема проявилась только на ленте с гирляндой, а на матрице работает и без диода.