Перейти к содержанию

PCA9685 — 16-канальный 12-битный ШИМ-контроллер NXP с шиной I²C

PCA9685 задуман NXP как драйвер светодиодной подсветки, но чаще всего его ставят на платы для сервоприводов: 16 независимых каналов ШИМ по двум проводам I²C, на одной шине — до 62 микросхем. Разбираем по даташиту выводы, адресацию, расчёт частоты, регистры включения и выключения, выходы и тонкости режима сна.

Обновлено Редакция GAW

PCA9685 (NXP) — 16 независимых каналов ШИМ с разрешением 12 бит (4096 шагов) и общей для всех частотой от 24 до 1526 Гц. Каждый канал задаётся двумя 12-битными числами: на каком отсчёте счётчика выход включается и на каком выключается. Микроконтроллер настраивает каналы по I²C один раз, а дальше микросхема сама формирует импульсы от встроенного генератора 25 МГц. NXP разрабатывала её для светодиодной подсветки (RGBA), поэтому выходы называются LED0–LED15 и рассчитаны на прямое подключение светодиодов.

Коротко

  • Каналы — 16, ШИМ 12 бит, частота 24–1526 Гц (по умолчанию 200 Гц), сдвиг фазы каждого канала.
  • Шина — I²C до 1 МГц (Fast-mode Plus), 6 выводов адреса, до 62 микросхем на шине.
  • Выходы — двухтактные (25 мА в нуле, 10 мА в единице при 5 В) или с открытым стоком; суммарно до 400 мА.
  • Питание — 2,3–5,5 В, входы допускают 5,5 В; ток 6 мА тип. в работе, 2,2 мкА в ожидании.
  • Корпуса — TSSOP-28 (ширина 4,4 мм) и HVQFN-28 6 × 6 мм; −40…+85 °C.

Выводы

PCA9685, вид сверху: 1 A0, 2 A1, 3 A2, 4 A3, 5 A4, 6 LED0, 7 LED1, 8 LED2, 9 LED3, 10 LED4, 11 LED5, 12 LED6, 13 LED7, 14 VSS, 15 LED8, 16 LED9, 17 LED10, 18 LED11, 19 LED12, 20 LED13, 21 LED14, 22 LED15, 23 OE, 24 A5, 25 EXTCLK, 26 SCL, 27 SDA, 28 VDDPCA96851A02A13A24A35A46LED07LED18LED29LED310LED411LED512LED613LED714VSS15LED816LED917LED1018LED1119LED1220LED1321LED1422LED1523/OE24A525EXTCLK26SCL27SDA28VDDвид сверху
PCA9685 в корпусе TSSOP-28, вид сверху
Вывод TSSOP-28ОбозначениеНазначение
1–5, 24A0–A4, A5адрес; внутренних подтяжек нет — только на землю или питание
6–13, 15–22LED0–LED15выходы ШИМ
14VSSобщий провод
23OE (инверсный)разрешение выходов: ноль — работают, единица — в состоянии, заданном OUTNE
25EXTCLKвнешний такт до 50 МГц; если не используется — на землю
26, 27SCL, SDAшина I²C
28VDDпитание 2,3–5,5 В

В корпусе HVQFN-28 нумерация сдвинута (A3 — вывод 1, VDD — 25), площадку под корпусом соединяют с землёй.

Адрес

Байт адреса — 1 A5 A4 A3 A2 A1 A0 и бит направления, поэтому семибитный адрес лежит от 0x40 до 0x7F; как переводить семибитную запись в восьмибитную и обратно — на странице «Адрес I²C». После включения в этом диапазоне занят адрес общего вызова LED All Call — 1110 000, то есть 0x70 в семибитной записи. Программный сброс SWRST идёт через общий вызов — адрес 00h и байт 06h — и диапазон 0x40–0x7F не затрагивает. NXP в разд. 7.1 называет итог «до 62 адресов» для PCA9685 на одной шине; в карточке мы приводим это число как данные производителя. Ещё три адреса Sub Call (E2h, E4h, E8h) после включения выключены и могут служить обычными адресами. NXP предупреждает: адрес All Call нельзя назначать отдельной микросхеме, на него ответят все PCA9685 шины.

Частота ШИМ

Частоту всех каналов задаёт регистр PRE_SCALE (FEh):

PRE_SCALE = round(f_osc / (4096 · f)) − 1,

где f_osc — 25 МГц внутреннего генератора или частота на EXTCLK. Наименьшее значение, которое пропустит микросхема, — 3 (1526 Гц), наибольшее — 255 (24 Гц), по умолчанию 1Eh = 30 (200 Гц). Наш расчёт для типичных задач:

ЧастотаPRE_SCALEДлительность одного шага
50 Гц (сервоприводы)121около 4,9 мкс
200 Гц (по умолчанию)30около 1,2 мкс
1 кГц5около 0,24 мкс

Для сервопривода с импульсом 1–2 мс при 50 Гц это примерно 205–410 отсчётов из 4096 — около 200 ступеней на весь ход. Записать PRE_SCALE можно только в режиме сна. Внутренний генератор задан как типичный 25 МГц без допуска в даташите, поэтому для сервоприводов точную частоту лучше проверить или синхронизировать от внешнего такта. Расчёт периода и заполнения — в калькуляторе ШИМ.

Регистры каналов

У каждого канала четыре регистра: LEDn_ON_L, LEDn_ON_H, LEDn_OFF_L, LEDn_OFF_H (LED0 — с 06h, LED15 — до 45h). Счётчик идёт от 0 до 4095; выход включается на отсчёте ON и выключается на отсчёте OFF. Пример NXP: задержка 10 % и заполнение 20 % — ON = 199h (409), OFF = 4CCh (1228). Сдвигая ON у разных каналов, разносят моменты включения и уменьшают броски тока. Бит 4 в LEDn_ON_H — «постоянно включён», в LEDn_OFF_H — «постоянно выключен» (он установлен после сброса и имеет приоритет). Регистры ALL_LED_ON и ALL_LED_OFF (FAh–FDh) пишут во все каналы сразу.

Чтобы писать регистры подряд, включают автоинкремент — бит AI регистра MODE1; после включения питания он выключен. Бит OCH регистра MODE2 выбирает, когда новые значения попадут на выходы: по STOP (по умолчанию, все каналы сразу) или после каждого подтверждения байта.

Режим сна и перезапуск

После включения PCA9685 находится в режиме сна (SLEEP = 1): генератор остановлен, выходы ШИМ не работают. Последовательность запуска по даташиту: записать PRE_SCALE, сбросить SLEEP, выждать 500 мкс, пока запустится генератор, и только потом рассчитывать на точные тайминги выходов. Если микросхему снова усыпить, бит RESTART запомнит, что каналы работали: после пробуждения и 500 мкс запись единицы в RESTART возобновит ШИМ с прежними значениями. Внешний такт подключают так же через сон: SLEEP = 1, затем SLEEP и EXTCLK одновременно; вернуть внутренний генератор можно только сбросом.

Выходы

ПараметрЗначение
Ток в нуле, гарантированноот 12 мА (25 тип.) при 0,5 В, питание 2,3–4,5 В
Ток в нуле, предел на вывод25 мА
Суммарный ток в нуледо 400 мА на корпус
Единица в двухтактном режиме при 10 мАот 1,6 В (2,3 В), 2,3 В (3,0 В), 4,0 В (4,5 В)
Предельное напряжение на выводе5,5 В

Режим выходов — бит OUTDRV регистра MODE2: двухтактный (по умолчанию) или открытый сток; бит INVRT инвертирует логику. NXP советует для светодиода прямо от вывода (катодом к выводу) инверсный режим, а с внешним транзистором — прямой. Вывод OE с единицей отключает все выходы сразу — им удобно гасить нагрузку при запуске микроконтроллера, пока каналы не настроены.

Шина и питание

Вход SDA и SCL видит единицу от 0,7 · VDD и допускает 5,5 В, выход SDA в нуле принимает не меньше 30 мА при 0,4 В и питании 5 В (20 мА при 2,3 В) — это свойство Fast-mode Plus. В описании NXP пишет о шине Fm+ «до 4000 пФ», а спецификация шины UM10204 ограничивает ёмкость линии в режиме Fm+ 550 пФ; наш вывод — считать подтяжки по UM10204, например в калькуляторе подтяжки I²C. Полный сброс по питанию требует опустить VDD ниже 0,2 В.

Аналоги

Для простого включения и выключения нагрузок по I²C без ШИМ подходят расширители портов вроде PCF8574. Если нужна только пара каналов ШИМ, проще использовать таймеры самого микроконтроллера. Нагрузку больше 25 мА на канал подключают через транзисторы или сборку ULN2003.

Частые вопросы

Как настроить PCA9685 на 50 Гц для сервоприводов?

Частоту задаёт регистр PRE_SCALE: значение = round(25 МГц / (4096 · f)) − 1. Наш расчёт для 50 Гц: 25 000 000 / (4096 · 50) ≈ 122,07, округляем до 122 и вычитаем единицу — 121. Записать PRE_SCALE можно только в режиме сна (бит SLEEP регистра MODE1 = 1), затем SLEEP сбрасывают и ждут 500 мкс. Внутренний генератор 25 МГц — значение типичное, поэтому точную частоту стоит проверить осциллографом или частотомером.

Какой адрес I²C у PCA9685?

Семибитный адрес — 1 A5 A4 A3 A2 A1 A0, то есть от 0x40 (все выводы адреса на земле) до 0x7F. Подтяжек на выводах адреса внутри нет, их обязательно соединяют с землёй или питанием. Адрес 0x70 (E0h в восьмибитной записи) после включения занят общим вызовом LED All Call, а программный сброс идёт через общий вызов 00h с байтом 06h; NXP указывает до 62 микросхем на одной шине (разд. 7.1).

Сколько тока выдерживает выход PCA9685?

До 25 мА на вывод в нуле (вытекающий из светодиода к выводу) и 10 мА в единице при 5 В, суммарно не больше 400 мА на корпус. Гарантированно вывод принимает от 12 мА при напряжении 0,5 В (питание 2,3–4,5 В). Сервоприводы и мощные нагрузки питаются отдельно — к PCA9685 подключают только их сигнальный вход.

Почему после перезагрузки микроконтроллера PCA9685 продолжает выдавать ШИМ?

Потому что PCA9685 хранит настройки, пока у него есть питание, и сам генерирует импульсы. Сбросить его можно программно — общим вызовом с байтом 06h (SWRST), — снятием питания (до 0,2 В) или временно отключить выходы выводом OE. Если после сна нужно продолжить с прежними значениями, используют бит RESTART регистра MODE1.

Источники

  1. NXP Semiconductors. PCA9685 16-channel, 12-bit PWM Fm+ I2C-bus LED controller, product data sheet (Rev. 4, 16 April 2015) — архивная копия официального файла (Wayback, июль 2017); разд. 1–2 — описание и возможности; табл. 3 — выводы TSSOP28 и HVQFN28; разд. 7.1 — адрес 1 A5…A0, All Call E0h, Sub Call, 62 адреса; табл. 4 — карта регистров; табл. 5 — MODE1 (RESTART, EXTCLK, AI, SLEEP, ALLCALL), 500 мкс после пробуждения; табл. 6 — MODE2 (INVRT, OCH, OUTDRV, OUTNE); разд. 7.3.3 — примеры LEDn_ON и LEDn_OFF; табл. 7 — биты full ON и full OFF; разд. 7.3.5 — формула PRE_SCALE, 24–1526 Гц; табл. 13 — предельные режимы; табл. 14 — статические характеристики; табл. 15 — динамические характеристики шины
  2. NXP Semiconductors. UM10204 I2C-bus specification and user manual (Rev. 7.0, 1 October 2021) — Fast-mode Plus: до 1 Мбит/с, нагрузка на линию до 550 пФ, ток вывода 20 мА — для сравнения с данными PCA9685

Нашли ошибку?