STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 1



Уже более полугода назад мы изучили работу интересных умных светодиодов WS2812B, управляемых последовательно по одной шине, а также закрепили полученные знания на практике, подключив ленту на таких светодиодов размером 1 метр и количеством 144 светодиода.

Данный урок снискал немалый интерес среди любителей программирования.

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

Поэтому я взвесил все за и против и решил всё-таки урок данный сделать, да ещё меня на это подтолкнуло приближение праздника Нового Года, а где-то и Рождества.

Ко мне приехали две светодиодные ленты по 5 метров количеством 150 светодиодов каждая. Они могут без проблем соединяться между собой, ибо имеют для этого специальные разъёмы с обеих сторон.

Данные ленты являются также защищёнными от атмосферных воздействий, индекс IP67, что вполне позволит подсоединить их и разместить на улице, что внесёт также определённый эффект и принесёт радость и праздничное настроение проходящим мимо людям.

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

 

 

Вот так выглядит входной край ленты

 

 

А вот так выходной

 

 

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

Да и программировать мы будем сначала одну ленту, так как надо переделать наш проект сначала на 150 светодиодов, потому что в любой момент мы захотим подключить всего одну ленту, например на Новогоднюю Ёлку, где она будет также прекрасно смотреться. А уж потом мы соединим две ленты вместе и переработаем наш проект на количество светодиодов 300 штук.

 

 

Поэтому расположим пока одну ленту на плоской поверхности, по возможности светодиодами вверх, так как мониторинг тестов так производить будет удобнее

 

 

Также нашу светодиодную ленту мы должны чем-то питать. Возможно, на 150 светодиодов хватит и 3-амерного DC-DC преобразователя, но, думаю, что это будет уже как-то на пределе, что недопустимо и может вызвать пробой ключевого транзистора на преобразователе в лучшем случае, а в худшем поведёт за собой также и выход из строя некоторых светодиодов в ленте либо чипов, встроенных в них. Поэтому мы рисковать не будем, да и потом нам ещё и 300 светодиодов придётся подключать одновременно, поэтому для обеспечения запаса возьмём блок питания на 40 ампер, просто меньше 40, но больше 3 ампер у меня блоков питания нет

 

 

Вот так выглядят выводы блока питания

 

 

Слева направо: нулевой провод питания 220 вольт, фаза 220 вольт, заземление, три минуса и три плюса 5 вольт.

Для питания возьмём короткий провод с вилкой, думаю, нам такого будет вполне достаточно

 

 

 

Обожмём на концах провода вот такие клеммы для удобства подключения к блоку питания, и, в том числе, для безопасности

 

 

Получится вот так

 

 

То же самое проделаем и с силовыми контактами лент, причём на одну ленту мы будем подавать питание со входа, а на другую — с выхода. Так как мы будем подключать ленты последовательно и вторая лента вернётся к нам именно выходом. Если питать только одну ленту, то на другом конце через десять метров на ней останется только 2,6 вольта от 5 вольт и поэтому вся эта гинлянда будет гореть в полнакала, нам так не надо. А если мы подадим питание с двух сторон, то в месте встречи двух лент останется где-то 3,65 вольт, это уже не страшно. Я пробовал подавать питание ещё и по центру — особых визуальных изменений я не заметил. Но так как ленты у меня будут встречаться почти у конька крыши, туда не совсем удобно вести 5 вольт, и я решил питать ленты только с краёв. Этого вполне достаточно

 

 

Подключим провод питания 220 вольт к блоку питания (вилку пока не подключаем), а также силовые контакты одной ленты, которая у нас будет первая

 

 

Подключим нашу отладочную плату к входу ленты — одним проводом соединяем общие шины, а другим — ножку PA1 с сигнальным входом ленты. Так как мы питаем нашу ленту от отдельного источника питания, то провод питания мы от платы не ведём

 

 

Подключим также и программатор, который в свою очередь подключим к ПК

 

 

Теперь мы можем программировать наш контроллер, поэтому приступим к проекту.

За основу, конечно же возьмём проект из урока 119 с именем WS2812 и присвоим ему имя WS2812_150, так как для начала мы будем перестраивать код под работу с лентой количеством 150 светодиодов.

Прежде чем открывать проект, удалим из папок Inc и Src все файлы, кроме тех, которые мы делали сами. Там останутся только main.c, main.h, ws2812.c и ws2812.h.

Откроем наш проект в проектогенераторе Cube MX и, ничего ровным счётом там не делая, сгенерируем проект для Keil и откроем его там.

Установим программатор на авторезет, подключим файл ws2812.c к дереву проекта и попробуем собрать проект.

Если всё нормально собралось, то движемся дальше.

Давайте попробуем прошить наш проект в контроллер, пока ничего не меняя.

Только после того, как код прошьётся, включим в сеть наш блок питания, от которого питается лента.

Причём сразу ничего не запустится, надо будет контроллер перезагрузить.

Мы увидим следующую картину

 

 

Мы видим, что последние 6 светодиодов у нас не светятся. Да и если подождать, то вскоре на каком-то тесте у нас вообще мигание светодиодов остановится совсем. Не будем гадать, на каком именно, а займёмся сразу переработкой проекта.

Первая задача — зажечь несветящиеся 6 светодиодов.

Для этого идём сначала в файл main.c и сделаем невозможным запуск наших тестов, вставив ещё один бесконечный цикл перед основным, тогда программа не зайдёт в основной бесконечный цикл

 

 

В файле stm32f1xx_it.c сначала подключим хендл нашего таймера, чтобы вернуть всё, как было

 

 

Также остановим таймер в процедуре обработки прерываний DMA1_Channel7_IRQHandler

 

 

В следующей части урока мы изменим код проекта под использование ленты на 150 светодиодов и проверим его на практике.

 

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Светодиодные ленты 1м-5м 1м-5м 150-300 светодиодов Защита IP60-IP67 можно приобрести здесь WS2812B

Импульсный источник питания 5 В в 40A 200 Вт можно приобрести здесь 5 В в 40A 200 Вт

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM WS2812B. Подключаем ленты количеством 150-300 светодиодов

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*