Контрольная сумма выходного сигнала светодиодной ленты FastLed

arduino-due led-strip ws2812

Мне интересно, подключал ли кто-нибудь выход своей светодиодной ленты обратно к Arduino, чтобы считать данные и убедиться, что лента работает правильно, что-то вроде функции контрольной суммы.

Я использую библиотеку FastLed, и, похоже, это не было сделано.

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

Я использую Arduino Due со светодиодной лентой WS2812B.

, 👍4

Обсуждение

вот технический паспорт .... http://www.seeedstudio.com/document/pdf/WS2812B%20Datasheet.pdf .... если у вас есть 20 светодиодов, вам придется начать загружать 21-й светодиод до того, как вы увидите выходной сигнал от последнего (20-го) .... я не думаю, что вам на самом деле нужно отправлять 24 бита на несуществующий 21-й светодиод, @jsotola

тайминги очень быстрые и их может быть трудно считать для проверки на наличие ошибок. CDS на последнем светодиоде может обнаружить нерегулярное мигание и его легко потреблять с помощью микроконтроллеров или, может быть, даже с помощью ИС, например, детектора пропущенных фронтов 555., @dandavis

еще одна мысль .... возможно, использовать это для 21-го светодиода (см. мой предыдущий пост).... https://cdn-shop.adafruit.com/datasheets/WS2811.pdf ..... использовать три оптопары вместо светодиодов .... всегда посылать black на 21-й светодиод ... если получены какие-либо другие значения, отличные от нуля, то одна или несколько оптопар проведут и вызовут сброс ............. вы также можете использовать микроконтроллер для контроля выхода светодиодной цепочки, @jsotola

Возможно, самым простым решением было бы всегда чёрным светодиодом и ставить на него фоторезистор. Если он хоть немного загорится, я буду знать, что светодиодная лента неисправна., @Jorb


2 ответа


0

Я не думаю, что светодиодные ленты поддерживают эту функцию, однако, вероятно, есть снижение напряжения в зависимости от того, сколько светодиодов включено. Так что вы можете проверить напряжение на конце ленты, основываясь на светодиодах, которые включены (предполагая, что вы это сохранили), и сравнить значения.

,

Ленты WS2812 имеют вывод _data out_, который выводит копию каждого входного бита после (24×n)-го, где n — количество светодиодов в ленте., @Edgar Bonet


1

Посмотрите на время на листе 4 паспорта и на время на листе 3

Низкий бит имеет ширину 400 +/- 150 нс, за которым следует высокий бит шириной 800 +/- 150 нс

Высокий бит имеет ширину 850 +/- 150 нс, за которым следует низкий бит шириной 450 нс.

Чтобы сделать то, что вы предлагаете с контрольной суммой, вам придется сначала отправить контрольную сумму (минимум 3 байта, чтобы подделать данные для дополнительного WS2812B, например) и посмотреть, были ли правильно получены 24 бита, пока в это же время отправляются последние 3 байта.

Due может быть достаточно быстрым для этого. Я не думаю, что 16 МГц Arduino сможет.

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

,