Из статьи вы узнаете, как подключить ШИМ генератор TLC5940 в качестве драйвера светодиодов к Ардуино, как подключить несколько драйверов в цепочке и как управлять ими с помощью библиотеки tlc5940. Также рассказано, как освободить SPI выводы Arduino, занимаемые микросхемой при стандартном подключении. Для повторения схемы, рассмотренной в статье, вам понадобятся: любой контроллер arduino (в статье используется Nano в качестве примера), макетная плата, соединительные провода, набор перемычек (желательно), как минимум один светодиодный драйвер, на каждый драйвер потребуется 16 светодиодов, резисторы на 2 кОм и на 10 кОм.
Купить микросхему у проверенного мной продавца можно здесь или сразу десяток со скидкой здесь.
Описание микросхемы tlc5940
Микросхема драйвера имеет по 14 выводов с каждой стороны. С одной стороны корпуса можно заметить небольшую выемку. Расположите микросхему этой выемкой вправо и установите на макетной плате. Лучше установить её на краю макетки. Но у нас на макетной плате расположена ещё и Arduino Nano. Если драйвер расположен выемкой вправо, то нумерация выводов начинается с левого нижнего и идет слева-направо, затем наверх и справа налево (против часовой стрелки). То есть левый нижний вывод — первый, левый верхний — двадцать восьмой. Более наглядно на фото:
Подключение микросхемы tlc5940 к arduino
Подключите выводы драйвера к arduino в следующем порядке:
19 и 21 выводы подключаются к рельсе питания +5В (на фото жёлтые перемычки)
22 и 27 выводы подключаются к рельсе земли (белые перемычки)
18 вывод соединяется с 3 цифровым выводом Arduino (белая перемычка)
24 вывод соединяется с 9 цифровым выводом Arduino (белая перемычка)
23 вывод соединяется с 10 цифровым выводом Arduino (зелёный провод)
23 вывод дополнительно соединяется через подтягивающий резистор 10 кОм к рельсе питания, что бы при включении драйвера все светодиоды были погашены.
26 вывод соединяется с 11 цифровым выводом Arduino (оранжевый провод)
25 вывод соединяется с 13 цифровым выводом Arduino (синий провод)
20 вывод нужно через резистор 2 кОм соединить с землёй. Таким способом мы ограничим ток на выводах для подключения светодиодов 20 мА. Рассчитывается этот резистор по формуле: R = 39.06 / I (в Амперах). Максимальный ток составляет 120мА на канал.
Подключение самого драйвера окончено. Соедините перемычками рельсы питания и земли с соответствующими выводами Arduino. Примерно вот так это должно выглядеть:
Рисунок для тех, кому это кажется более наглядным:
Теперь подключаем светодиоды по порядку к управляемым выводам драйвера. 28 вывод — это нулевой светодиод (OUT0), далее с первого по пятнадцатый номер вывода совпадает с номером светодиода (первый вывод — OUT1, второй — OUT2 … пятнадцатый — OUT15). Драйвер управляет землёй, а не питанием. Поэтому, светодиоды подключаются к выводам драйвера катодами.
Устанавливаем на макетку светодиоды. OUT0 и OUT15 соединены с катодами перемычками:
Для работы с драйвером нужно скачать библиотеку Tlc5940. Распакуйте содержимое архива в папку с файлами среды arduino IDE в папку libraries. Загрузите в контроллер следующий код:
#include ; void setup() { //Инициализируем драйвер Tlc.init(); } void loop() { //Устанавливаем нулевую яркость всех светодиодов Tlc.clear(); //Для каждого из 16 каналов: for (int channel = 0; channel < 16; channel += 1) { //Устанавливаем максимальную яркость Tlc.set(channel, 4094); } //Применяем изменения (зажигаем светодиоды) Tlc.update(); }
После загрузки скетча все светодиоды должны засветиться с максимальной яркостью. В этом скетче хорошо виден принцип управления драйвером. Первым делом должна быть вызвана функция Tlc.init(), которая произведёт инициализацию микросхемы или микросхем, если у нас их подключено несколько. Переменная NUM_TLCS, равняется количеству микросхем, подключённых в цепочке (об этом ниже). Обратите внимание, что автоматически количество драйверов в цепочке не определяется и задаётся вручную в файле библиотеки Tlc5940/tlc_config.h в строке 55. Tlc.clear() вызывается для установки яркости всех каналов в ноль (т.е. для выключения всех светодиодов). Tlc.set() устанавливает яркость светодиода. Функция принимает номер канала (нумерация начинается с нуля, как уже упоминалось) и уровень яркости (фактически, скважность ШИМ). Уровни яркости изменяются от 0 до 4095. Наконец, функция Tlc.update() фактически устанавливает яркость. До вызова этой функции изменения не вступят в силу.
Теперь усложним пример. Запустим "бегущий огонь". Загрузите вот этот скетч (он есть в стандартных примерах библиотеки и называется BasicUse):
#include ; void setup() { //Инициализируем драйвер Tlc.init(); } void loop() { int direction = 1; //Обратите внимание, на использование переменной NUM_TLCS. //Если умножить её на 16, то мы получим число выводов //На всех драйверах подключённых цепочкой //Таким образом, OUT0 второго драйвера будет 16 каналом //OUT0 третьего будет 32 каналом и т.д. for (int channel = 0; channel < NUM_TLCS*16; channel += direction) { //Гасим выводы: Tlc.clear(); //Устанавливаем яркость в зависимости от направления волны if (channel == 0) { direction = 1; } else { Tlc.set(channel - 1, 1000); } Tlc.set(channel, 4095); if (channel != NUM_TLCS * 16 - 1) { Tlc.set(channel + 1, 1000); } else { direction = -1; } //Применяем изменения Tlc.update(); delay(75); } }
После загрузки скетча, вы увидите нечто подобное:
Теперь установите второй драйвер рядом с первым. Лучше оставить промежуток между микросхемами. иначе вы намучаетесь потом, снимая их с макетной платы. Все выводы второго драйвера подключаются параллельно выводам первого (просто соедините их проводами или перемычками), кроме 26 вывода. 26 (SIN) вывод второго драйвера должен соединяться с 17 выводом (SOUT) первого. Теперь в папке с библиотекой откройте файл Tlc5940/tlc_config.h, найдите 55 строку и замените
#define NUM_TLCS 1
на
#define NUM_TLCS 2
Это позволит без правки кода скетча адаптировать код программы для разного количества драйверов. Честно говоря, у автора статьи возникают сомнения, что этот подход удобнее правки кода скетча, но оставим всё так, как задумано авторами библиотеки.
После подключения ещё 16 светодиодов ко второму драйверу, перезалейте скетч в контроллер, чтобы изменения, внесённые нами в библиотеку, применились, и наблюдайте:
Решение проблемы с SPI
Вариант подключения по умолчанию, рассмотренный выше - использует интерфейс SPI. Особенности библиотеки Tlc5940 не позволяют подключать к arduino одновременно с драйвером другие модули, использующие интерфейс SPI. Например, беспроводной модуль подключить уже не получится. Авторы библиотеки предлагают в качестве решения проблемы использовать другой интерфейс драйвера "bitbang". Он сравнительно медленнее SPI, но это проявляется только на действительно огромном количестве микросхем, соединённых в цепочку. Для использования интерфейса bitbang нужно в папке с библиотекой открыть файл Tlc5940/tlc_config.h и в строке 45 заменить
#define DATA_TRANSFER_MODE TLC_SPI
на
#define DATA_TRANSFER_MODE TLC_BITBANG
и переключить выводы драйвера:
25 вывод соединить с 4 цифровым выводом Arduino
26 вывод соединить с 7 цифровым выводом Arduino
Теперь библиотека драйвера не занимает SPI интерфейс, а сам драйвер полностью сохранил свою функциональность.
Напоминаю, микросхему у проверенного лично мной продавца можно здесь или сразу десяток со скидкой здесь. Ну а полный список товаров, которые я заказал и убедился в их качестве по ссылке: Где всё это купить?