Как подключить драйвер светодиодов tlc5940 к Arduino

микросхема TLC594

микросхема TLC594

Из статьи вы узнаете, как подключить ШИМ генератор TLC5940 в качестве драйвера светодиодов к Ардуино, как подключить несколько драйверов в цепочке и как управлять ими с помощью библиотеки tlc5940. Также рассказано, как освободить SPI выводы Arduino, занимаемые микросхемой при стандартном подключении. Для повторения схемы, рассмотренной в статье, вам понадобятся: любой контроллер arduino (в статье используется Nano в качестве примера), макетная плата, соединительные провода, набор перемычек (желательно), как минимум один светодиодный драйвер, на каждый драйвер потребуется 16 светодиодов, резисторы на 2 кОм и на 10 кОм.

Купить микросхему у проверенного мной продавца можно здесь или сразу десяток со скидкой здесь.

Описание микросхемы tlc5940

Микросхема драйвера имеет по 14 выводов с каждой стороны. С одной стороны корпуса можно заметить небольшую выемку. Расположите микросхему этой выемкой вправо и установите на макетной плате. Лучше установить её на краю макетки. Но у нас на макетной плате расположена ещё и Arduino Nano. Если драйвер расположен выемкой вправо, то нумерация выводов начинается с левого нижнего и идет слева-направо, затем наверх и справа налево (против часовой стрелки). То есть левый нижний вывод — первый, левый верхний — двадцать восьмой. Более наглядно на фото:

Драйвер светодиодов TLC5940

Драйвер светодиодов TLC5940

Подключение микросхемы 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. Примерно вот так это должно выглядеть:

TLC5940 установлен на макетную плату а подключён к контроллеру

TLC5940 установлен на макетную плату а подключён к контроллеру

Рисунок для тех, кому это кажется более наглядным:

Подключение драйвера светодиодов TLC5940

Подключение драйвера светодиодов TLC5940. Показан только один подключённый светодиод, чтобы не загромождать рисунок.

Теперь подключаем светодиоды по порядку к управляемым выводам драйвера. 28 вывод — это нулевой светодиод (OUT0), далее с первого по пятнадцатый номер вывода совпадает с номером светодиода (первый вывод — OUT1, второй — OUT2 … пятнадцатый — OUT15). Драйвер управляет землёй, а не питанием. Поэтому, светодиоды подключаются к выводам драйвера катодами.

Устанавливаем на макетку светодиоды. OUT0 и OUT15 соединены с катодами перемычками:

TLC5940 и 16 светодиодов

TLC5940 и 16 светодиодов

Для работы с драйвером нужно скачать библиотеку 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);
  }
}

После загрузки скетча, вы увидите нечто подобное:

Драйвер светодиодов TLC5940 с шестнадцатью подключёнными светодиодами.

Драйвер светодиодов TLC5940 с шестнадцатью подключёнными светодиодами.

Теперь установите второй драйвер рядом с первым. Лучше оставить промежуток между микросхемами. иначе вы намучаетесь потом, снимая их с макетной платы. Все выводы второго драйвера подключаются параллельно выводам первого (просто соедините их проводами или перемычками), кроме 26 вывода. 26 (SIN) вывод второго драйвера должен соединяться с 17 выводом (SOUT) первого. Теперь в папке с библиотекой откройте файл Tlc5940/tlc_config.h, найдите 55 строку и замените

#define NUM_TLCS 1

на

#define NUM_TLCS 2

Это позволит без правки кода скетча адаптировать код программы для разного количества драйверов. Честно говоря, у автора статьи возникают сомнения, что этот подход удобнее правки кода скетча, но оставим всё так, как задумано авторами библиотеки.
После подключения ещё 16 светодиодов ко второму драйверу, перезалейте скетч в контроллер, чтобы изменения, внесённые нами в библиотеку, применились, и наблюдайте:

Драйвер светодиодов TLC5940 с тридцатью двумя подключёнными светодиодами.

Драйвер светодиодов TLC5940 с тридцатью двумя подключёнными светодиодами. Светодиоды второго драйвера не удалось выстроить в ряд, и линия светодиодов "завалена".

Решение проблемы с 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 интерфейс, а сам драйвер полностью сохранил свою функциональность.

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