Обзор модуля PCA9685
Управлять сервоприводом с помощью библиотеки Arduino несложно, но если необходимо управлять большим количеством сервоприводами, понадобится больше контактов, не говоря об вычислительной мощности Arduino. И для нашего удобства был разработан модуль PCA9685, который позволяет подключать до 16 сервоприводов по двум канальной шине I2C.
Технические параметры
► Модель: PCA9685;
► Напряжения питания контроллера: 3.3 или 5 В;
► Питание сервоприводов: до 5-6 В;
► Частота ШИМ: 40-1000 Гц;
► Возможность подключения 16 сервоприводов;
► Возможность подключения до 62 устройств к одной шине;
► Размер платы: 66 х 25 мм;
Общие сведения о PCA9685
Модуль построен на микросхеме PCA9685, представляющая собой 16-канальный 12-битный ШИМ с интерфейсом I2C. через которую можно управлять 16 сервоприводами. Если этого будет недостаточно. можно увеличить количество подключенных модулей к шине I2C до 62 шт, в общий сложности до 992 сервопривода.
Смена адреса I2C
Каждая подключенная плата PCA9685, должна иметь уникальный адрес. Адрес по умолчанию установлен 0×40, который можно изменить с помощью перемычки в правом верхнем углу, для этого соедините перемычку припоем, чтобы указать двоичное число «1».
► Плата 0: Адрес = 0×40 Код 00000 (по умолчанию)
► Плата 1: адрес = 0×41 Код 00001 (как указано выше, подключите A0)
► Плата 2: Адрес = 0×42 Код 00010 (подключите А1)
► Плата 3: Адрес = 0×43 Код 00011 (соедините A0 и A1)
► Плата 4: Адрес = 0×44 Код (подключите А2)
И так далее. , ,
Контакты питания:
► GND — Заземляющий контакт питания.
► VCC — Логический вывод питания, необходимо подключить его к используемому логическому уровню питания, для выхода PCA9685 максимальное значение должно быть 3 — 5 В, оно также используется для подтягивания шины I2C через 10 кОм резисторов.
► V+ — Вывод дополнительного питания, для сервоприводов.
Контакты управления:
► SCL — Вывод I2C, подключается к линии I2C микроконтроллера, рабочие напряжение 3 В или 5 В.
► SDA — Вывод данных I2C подключается к линии I2C микроконтроллера, рабочие напряжение 3 В или 5 В.
Силовые контакты:
На плате установлено 16 рядов разъемов, каждый ряд имеет 3 контакта: V +, GND и PWM выход. Каждый вывод PWM работает независимо, но он должен иметь одинаковую частоту.
Подключение PCA9685 к Arduino
Необходимые детали:
► Arduino UNO x 1 шт.
► Контроллер PCA9685 16 каналов x 1 шт.
► Провода DuPont M-F, 20 см x 1 шт.
Описание:
В этом примере покажу управление двумя сервоприводами SC90 с помощью Arduino. В качестве источника питания для сервоприводов используем питание от Arduino, но в готовых проектах рекомендую использовать отдельное питание на 5В.
Подключение.
Сервопривод подключаются с помощью 3-проводного разъема BLS, в гнездо 0 и 4. Далее подключаем линию I2C, SDA к А4 (Arduino) и SCL к A5 (Arduino), затем подключаем питание логической части схемы GND и Vcc и в конце подключаем питание сервоприводов. Для удобства привел схему подключения ниже.
Установка библиотеки:
Для работы скетча необходимо библиотека «Wire» и «Adafruit_PWMServoDriver«, последняя библиотека не входит в среду разработки IDE Arduino необходимо дополнительно скачать с «Менеджера библиотек«.
Далее вводим в поиск «PWM» и устанавливаем указанную библиотеку.
Программа:
Теперь можно приступить к скетчу, скачиваем или копируем его в среду разработки Arduino IDE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#include <Wire.h> // Подключаем библиотеку Wire #include <Adafruit_PWMServoDriver.h> // Подключаем библиотеку Adafruit_PWMServoDriver Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); // Установка адреса I2C 0x40 #define SERVOMIN 150 // Минимальная длительность импульса для сервопривода #define SERVOMAX 600 // Максимальная длина импульса для сервопривода #define SERVO_1 0 // Номер порта (0 - 15) #define SERVO_2 4 // Номер порта (0 - 15) void setup() { pwm.begin(); // Инициализация pwm.setPWMFreq(60); // Частота следования импульсов 60 Гц delay(10); // Пауза } void loop() { // Вращение сервопривода 1 влево for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) { pwm.setPWM(SERVO_1, 0, pulselen); } delay(250); // Вращение сервопривода 1 вправо for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) { pwm.setPWM(SERVO_1, 0, pulselen); } delay(250); // Вращение сервопривода 2 влево for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) { pwm.setPWM(SERVO_2, 0, pulselen); } delay(250); // Вращение сервопривода 2 вправо for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) { pwm.setPWM(SERVO_2, 0, pulselen); } delay(250); } |
Описание скетча:
Скетч начинается с подключаем библиотеки для работы с шиной I2C «Wire» и библиотеку «Adafruit_PWMServoDriver » и указанием адреса модуля.
1 2 3 |
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); |
Далее мы задаем минимальный и максимальный поворот сервопривода, для каждого сервопривода, оно разное в противном случаи можно повредить его. Командой #define SERVO_1 мы указываем какому порту подключен сервопривод, диапазон от 0 до 15.
1 2 3 4 |
#define SERVOMIN 150 #define SERVOMAX 600 #define SERVO_1 0 #define SERVO_2 4 |
В функции setup мы инициализируем библиотеку и задаем частоту повторения ШИМ, у меня это 60 Гц и небольшая пауза.
1 2 3 |
pwm.begin(); pwm.setPWMFreq(60); delay(10); |
В основной части программы мы используем оператор for. Первым делом создаем переменную pulselen и задаем начальное число «SERVOMIN», затем после каждого цикла мы увеличиваем переменную «pulselen» на «1«, пока не получим значение «SERVOMAX» то есть 600. Во второй части программы мы делаем все на оборот.
1 2 3 4 |
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) { pwm.setPWM(SERVO_1, 0, pulselen); } |
Ссылки
Библиотека Adafruit_PWMServoDriver
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
ШИМ контроллер PCA9685 на 16 каналов
Купить в Самаре и области
Контроллер Arduino UNO R3
Провода DuPont, 2,54 мм, 20 см
ШИМ контроллер PCA9685 на 16 каналов