Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Библиотеки/TLC5940

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Библиотека TLC5940[1]

Чип TLC5940 – это 16-канальное ШИМ - устройство, способное управлять коэффициентом заполнения (12 бит; доступны значения от 0 до 4095), ограничением тока (6 бит; доступны значения от 0 до 63) и имеющее гирляндный последовательный интерфейс. Этот девайс очень удобен для увеличения количества каналов для выходных данных, использующих ШИМ. Даташит чипа TLC5940 можно почитать по этой ссылке.

О проблемах, обнаруженных при использовании чипа и корпуса (посадочного места) из Eagle для TLC5940 можно прочесть тут.

Загрузка

Новые версии исходного кода можно найти тут.

Старый исходник можно найти на Google Code. Зайдите сюда, а потом нажмите кнопку «Download».

Установка

Чтобы использовать библиотеку, скачайте ZIP-файл, распакуйте его, а затем поместите в папку для библиотек IDE Arduino.

Чтобы узнать, где находится эта папка на PC, откройте IDE Arduino, кликните на Файл > Настройки (File > Preferences) – адрес папки будет указан в самом верху, в поле «Размещение папки скетчей» (Sketchbook location). Затем перезапустите IDE Arduino. Если папки «libraries» нет, ее нужно создать.

Начало работы

Откройте в IDE Arduino пример, который называется «BasicUse». Чтобы сделать это, кликните на Файл > Примеры > Tlc5940 > BasicUse (File > Examples > Tlc5940 > BasicUse).

Настройка оборудования

Схему подключения можно посмотреть на картинках по этой ссылке.

Обратите внимание:

  • Контакт DCPRG на TLC5940 должен быть подключен к GND (т.е. к «земле»), а не к Vcc, как показано на картинке по ссылке выше. Более подробно об этом читайте ниже.
  • На контакт BLANK можно повесить подтягивающий резистор номиналом 10 кОм. Это будет стирать выходные данные на всех светодиодах, пока Arduino будет загружаться.

Чтобы повысить силу тока в цепи с чипами TLC5940, можно добавить в нее транзисторы TIP122. Соответствующее руководство можно найти тут.

Сервомоторы (1)

Начиная с r8, библиотека может управлять сервомоторами. Максимальное количество сервомоторов, которыми можно управлять, составляет «16» (по количеству каналов), однако если сервомоторов будет меньше, то оставшиеся каналы можно спокойно использовать для других ШИМ-нужд. Более подробно смотрите в примере «Сервомоторы» (Servos).

RGB-светодиоды

Вместе с этой библиотекой необходимо использовать RGB-светодиоды с общим анодом, потому что RGB-светодиоды с общим катодом работают некорректно.

Функции

  • Функция init() инициализирует библиотеку.
  • Функция clear() выключает сразу все светодиоды. Другими словами, она сбрасывает значения, отвечающие за оттенки черного и белого, на ноль, но не отсылает их на TLC.
  • Функция update() обновляет значения для всех контактов. Она, собственно, и отсылает значения на TLC после работы, выполненной функцией clear().
  • Функция set(channel, brightness) задает определенную яркость (уровень ШИМ) для заданного контакта. Собственно, первый аргумент – это канал, для которого нужно задать яркость, а второй – это яркость, которую нужно задать. По состоянию на 7 декабря 2011 года нумерация каналов увеличивается с каждым новым TLC5940, подключенным к цепи. То есть, если вы захотите «поговорить» с последним каналом второго чипа, то это будет 32-ой канал. Значение во втором аргументе (для яркости) может варьироваться от 0 до 4095.

Самую последнюю информацию читайте в этом посте на форумах Arduino.

Устаревшая информация

Информация ниже уже не релевантна, но все же может оказаться полезной.

Во-первых, последовательный интерфейс на TLC5940 оснащен большим количеством контактов. Но, к счастью, многие из них можно просто проигнорировать.

  • XERR: Выходной контакт с открытым коллектором, который позволяет узнать, не перегрелся ли TLC5940 и не перегорел ли какой-нибудь светодиод. Мы можем его проигнорировать, потому что он всегда будет в состоянии «вкл», за исключением случаев, когда ко всем выходным контактам будут подключены элементы, использующие ток.
  • SOUT: Последовательные данные от TLC5940. Его подключать к Arduino не обязательно, разве что вы не хотите считывать ошибочные биты. Если в вашей цепи более одного TLC5940, то этот контакт нужно гирляндно подключить к контакту SIN на следующем TLC5940.
  • DCPRG: Выбор регистра для ограничителей тока. Этот контакт можно просто подключить к «земле». По умолчанию использует EEPROM-значение, равное «63». Если на контакте DCPRG задано HIGH, все регистры для ограничителей тока, использующие RAM, должны быть выставлены на время загрузки.
  • XLAT: Этот контакт нужен, чтобы «защелкнуть» данные после их передачи.
  • SCLK: Тактовый сигнал для передачи данных.
  • VPRG: При помощи этого контакта осуществляется выбор между записью на регистры, управляющие ограничением тока, и на регистры, управляющие коэффициентом заполнения.
  • GSCLK: Тактовый сигнал для ШИМ. Чтобы генерировать этот сигнал, на Arduino нужно перепрограммировать timer2. Впрочем, из-за этого придется пожертвовать «родной» ШИМ на этом таймере (на mega8 это 11-ый контакт, а на mega168 это 11-ый и 3-ий контакты).
  • BLANK: Стирает данные на всех выходных контактах, а также знаменует конец цикла ШИМ. Чтобы генерировать этот сигнал, на Arduino нужно перепрограммировать timer1. Впрочем, из-за этого придется пожертвовать «родной» ШИМ на 9-ом и 10-ом цифровых контактах. (Чтобы при загрузке Arduino выходные контакты по-прежнему оставались «чистыми», к этой линии нужно подключить настоящий подтягивающий резистор. Может случиться так, что TKC5940 будет идти в конфигурации, расходующей слишком много тока, но это зависит от оборудования.)

Почему приходится жертвовать «родной» ШИМ?

Сигналы на контактах GSCLK и BLANK должны быть точными и аккуратными, т.к. в противном случае сигнал на всех выходных контактах будет нестабильным. При помощи аппаратных таймеров мы можем сделать этот сигнал максимально стабильным – независимо от того, что происходит в скетче. Впрочем, для этого вам придется пожертвовать 3-мя или 4-мя 8-битными ШИМ-каналами, но взаимен вы получаете от 16-ти до 640-ка 12-битных ШИМ-каналов. Хорошая сделка.

Я не ослышался? Вы написали «расходует слишком много тока»?

Да. Если выставить ограничитель тока на максимум, то никаких проблем возникнуть не должно (разве что вы не пытаетесь осветить светодиодами целую комнату, хотя и тут может обойтись). Но если задать значение, при котором TLC5940 будет выдавать слишком много тока, то может случиться перегрев. В даташите на этот счет есть специальный раздел, но если вам не хочется слишком заморачиваться, просто задайте на всех регистрах DC значение «63» и периодически щупайте пальцами TLC5940, проверяя его на перегрев.

Сервомоторы (2)

Любительские сервомоторы управляются короткими импульсами типа HIGH каждые 10-40 миллисекунд. Эти константные значения позволяют управлять не только сервомоторами, но также светодиодами и электродвигателями. Поскольку сервомоторы используют импульсы типа HIGH, а на выходах TLC5940 используется сигнал с активным LOW, все значения, пригодные для управления сервомоторами, находятся в верхней части диапазона.

  • 3993, 0xf99: 500 микросекунд
  • 3584, 0xe00: 1500 микросекунд
  • 3168, 0xc60: 2500 микросекунд

Это заставит, к примеру, дешевый сервомотор HS-311 повернуться примерно на 180 градусов. Если задать неверное значение, то сервомотор может предпринять попытку повернуться слишком сильно. Или, другими словами, сверх заданных пределов. Таких ситуаций лучше избегать. Из-за этого девайс будет тянуть слишком много тока, а если держать его в этом состоянии слишком долго, он может даже перегореть. Помните: эти выходные линии только тянут ток, поэтому лучше повесить на них подтягивающие резисторы.

Моторы

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

Ограничители тока

Чип TLC5940 оснащен EEPROM-памятью для хранения отдельных ограничителей тока. То есть вы можете просто однажды задать эту настройку и больше к ней не возвращаться. По умолчанию там стоит значение «63» – его можно использовать с настройками, которые имеются в TLC5940 и прочем оборудовании по умолчанию.

Если вы хотите программировать их отдельно, то для этого к контакту VPRG нужно подключить 22 вольта. Если вам не нужны отдельные ограничители тока, то можно воспользоваться настройками по умолчанию, а главный ограничитель тока задать, указав правильное количество омов.

Примеры

См.также

Внешние ссылки

  1. playground.arduino.cc - Texas Instruments TLC5940