PCA9685

Adafruit (плата), NXP (PCA9685) · Adafruit 16-Channel 12-bit PWM/Servo Driver PID 815

Формирование шестнадцати PWM-сигналов для сервоприводов и внешних драйверов.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает Adafruit 16-Channel 12-bit PWM/Servo Driver PID 815

PCA9685 самостоятельно формирует PWM после настройки по I²C, освобождая таймеры микроконтроллера. У каналов независимая длительность импульса, но общая частота. Плата Adafruit PID 815 выводит три контакта на канал: сигнал, V+ и GND.

Это генератор управляющего сигнала. Он не питает мотор через сигнальный вывод и не является силовым драйвером двигателя. VCC питает логику и подтяжки I²C; V+ распределяет отдельное питание сервоприводов. Ток источника, проводов и разъёмов рассчитывают по пусковым и стопорным токам, а не по числу каналов. Не подавайте ток всех сервоприводов через 5V Arduino или USB.

Перед установкой сервопривода проверьте на осциллографе частоту, уровни и длительность импульса. Первый пример выдаёт приблизительно 1,5 мс при 50 Гц на канале 0 с отключённым V+. У реального сервопривода допустимый диапазон и направление движения берутся из его документации; универсальных значений «0–180°» нет. Разброс внутреннего генератора требует калибровки для точных импульсов.

Adafruit PCA9685, изделие 815, пример платы после пайки разъёмов. Конденсатор C2 на снимке не установлен.

PCA9685. Фото: Bill Earl / Adafruit. Оригинал: https://learn.adafruit.com/assets/2290 . Лицензия фотографии: CC BY-SA 3.0, https://creativecommons.org/licenses/by-sa/3.0/ . Изменения: Удалён исходный фон вокруг платы и внешних контактов; очищены видимые просветы монтажных отверстий. Все припаянные разъёмы и клеммник сохранены. Пропорциональное масштабирование, размещение на предоставленном фоне и JPEG-сжатие. Геометрия, маркировка и видимые детали не перерисовывались. Цветокоррекция и повышение детализации не применялись. Адаптация фотографии распространяется по той же лицензии. Adafruit PCA9685, изделие 815, пример платы после пайки разъёмов. Конденсатор C2 на снимке не установлен.

Схема распиновки

Авторская распиновка SLDV LAB: Adafruit 815, ранняя плата PCA9685. Сторона компонентов; клеммник сверху; выходы 0–15 слева направо. Оба боковых ряда сверху вниз. Для других ревизий и плат требуется отдельная проверка.

Относительно обложки схема повёрнута на 180°: ориентируйтесь по клеммнику сверху и нумерации каналов. Фото показывает раннюю плату с незаполненной позицией C2.

Источники: 1, 2. Авторская схема SLDV LAB по фактам документации.

Характеристики

PWM-каналов
16
Разрешение счётчика PWM
12 бит
Частота каналов
Одна общая частота для всех 16 выходов
Адрес платы по умолчанию
0x40
Интерфейс
I²C
Питание модуля
VCC и I²C платы Adafruit PID 815: 3–5 В, в примере 5 В; V+ — отдельная шина питания сервоприводов по их паспорту, она не питает сам PCA9685.

ПРАКТИКА

Подключение

Контакт модуляКонтакт платыНазначение
VCC5VЛогическое питание Adafruit PID 815; не путать с V+.
GNDGNDОбщая земля.
SDAA4 / SDAОдин и тот же сигнал Uno R3; подтяжки к питанию модуля.
SCLA5 / SCLПорядок контактов на модуле определять по маркировке, не по положению.
OED7HIGH отключает выходы; на плате есть штатная подтяжка вниз, поэтому до запуска скетча отключение не гарантировано.
V+Не подключать для тестаДля сервоприводов нужен отдельный источник подходящего напряжения с общей землёй.
PWM0 / канал 0 signalВход осциллографа; земля к GNDПрибор должен допускать сигнал 5 В; сервопривод пока не подключён.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги интегрировать PCA9685 Adafruit PID 815. Сначала уточни точную плату модуля, контроллер, среду, питание и задачу. Проверь схему, логические уровни и маркировку контактов; затем дай согласованные подключение, зависимости и полный минимальный пример с обработкой ошибок. Объясни безопасную первичную проверку и ожидаемый результат. Уточни тип сервопривода, его допустимые импульсы и пиковый ток; рассчитай отдельное питание V+ и общую землю. Не запускай sweep до проверки механических ограничителей.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Плата и ядро
Arduino Uno R3; Arduino AVR Boards 1.8.6

Распиновка относится к ATmega328P Uno R3; не Uno R4 и не ESP32.

Адрес
0x40

Заводской адрес при незамкнутых перемычках A0–A5.

Библиотека
Adafruit PWM Servo Driver Library 3.0.3

Установить с Adafruit BusIO; #include <Adafruit_PWMServoDriver.h>.

Тестовый PWM
50 Гц; setPWM(0, 0, 307)

307/4096 периода примерно 1,5 мс; реальная длительность зависит от генератора.

OE
D7; HIGH = выходы отключены

До запуска скетча OE штатно LOW. Для этого теста нет сервопривода и питания V+; в конечной системе требуется отдельное безопасное удержание OE.

Arduino: полный тест импульса без сервопривода

cpp
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm(0x40);
const uint8_t OE_PIN = 7;
bool active = false;
void setup() {
  digitalWrite(OE_PIN, HIGH);
  pinMode(OE_PIN, OUTPUT);
  Serial.begin(115200);
  Wire.begin();
  Wire.setWireTimeout(25000, true);
  if (!pwm.begin()) { Serial.println("PCA9685 not found"); return; }
  pwm.setPWMFreq(50);
  for (uint8_t channel = 0; channel < 16; ++channel) {
    if (pwm.setPWM(channel, 0, 4096) != 0) {
      Serial.println("Cannot disable channel"); return;
    }
  }
  if (pwm.setPWM(0, 0, 307) != 0) { Serial.println("PWM write failed"); return; }
  digitalWrite(OE_PIN, LOW);
  active = true;
  Serial.println("Check channel 0 on scope: about 50 Hz / 1.5 ms");
}
void loop() {
  if (active) {
    Wire.beginTransmission(0x40);
    if (Wire.endTransmission() != 0) {
      digitalWrite(OE_PIN, HIGH);
      active = false;
      Serial.println("I2C failed; outputs disabled");
    }
  }
  delay(500);
}

Полный скетч для Uno R3, Arduino AVR Boards 1.8.6 и Adafruit PWM Servo Driver 3.0.3. API и результат setPWM сверены с исходниками. Не компилировалось и не проверялось на аппаратуре. Проверка ACK не контролирует точность частоты: её измеряют осциллографом.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты