Модуль Контролер PCA9685 для Arduino та інших платформах є широко використовуваним рішенням, коли потрібно керувати декількома пристроями, які працюють за допомогою сигналів ШІМ. Хоча спочатку він був розроблений для керування світлодіодами, його універсальність дозволила йому також бути частим варіантом керування сервоприводами. Ця мікросхема надзвичайно популярна в проектах робототехніки та автоматизації завдяки своїй здатності керувати декількома пристроями з точністю та простотою.
Ця стаття не тільки покаже вам, як використовувати PCA9685 у поєднанні з Arduino та іншими мікроконтролерами, але також докладно розповість про кожен із технічних аспектів, які вам потрібно знати, щоб отримати максимальну віддачу від цього компонента. Ми збираємося пояснити все, від того, як його підключити до того, як керувати бібліотеками коду, щоб ви могли з повною легкістю керувати своїми двигунами та сервоприводами.
Що таке PCA9685 і для чого він використовується?

El PCA9685 це контролер ШІМ (широтно-імпульсна модуляція), призначений для керування до 16 виходами, ідеально підходить для керування світлодіодними лампами та серводвигунами. Він спілкується через шину I2C, що означає, що йому потрібні лише два контакти для підключення до мікроконтролера, такого як Arduino або Raspberry Pi. Використовуючи певні адреси, ви навіть можете підключити до 62 таких модулів до однієї шини I2C, керуючи приблизно 992 виходами ШІМ. Це робить його дуже потужним варіантом для проектів, які потребують узгодженого керування багатьма пристроями.
Найбільш поширене використання PCA9685 Саме в проектах потрібен сигнал ШІМ. Яскравим прикладом є управління сервоприводами, які управляються від сигналів ШІМ. Крім того, контролер має точність 12 біти, що дозволяє генерувати дуже тонкі сигнали з регульованою частотою максимум до 1600 Гц.
[amazon box=”B07RG9ZTMD” image_size=”large” description_items=”0″ template=”widget”]
Особливості та переваги PCA9685
Одна з головних переваг PCA9685 полягає в тому, що він знімає навантаження з мікроконтролера щодо постійної генерації сигналів ШІМ. Це особливо корисно в проектах, які передбачають керування багатьма пристроями, оскільки це дозволяє головному процесору зосередитися на інших завданнях.
- 16 незалежних каналів: Кожен із 16 каналів може виводити незалежний ШІМ-сигнал, що дозволяє вам керувати такими пристроями, як сервоприводи, двигуни та світлодіодні лампи.
- Контроль I2C: PCA9685 використовує інтерфейс I2C для зв’язку з головним контролером (Arduino, Raspberry Pi тощо), і для зв’язку потрібні лише два кабелі (SDA та SCL).
- Кілька модулів на одній шині: до однієї шини I62C можна підключити до 9685 модулів PCA2, керуючи до 992 виходами ШІМ.
- Регульована частота: підтримує частоти до 1600 Гц, хоча для типового сервокерування використовується частота 50-60 Гц.
З’єднання між Arduino та PCA9685

Зв'язок між Модуль PCA9685 і Arduino простий і виконується за допомогою контактів I2C (SCL і SDA) і контактів живлення. У наступній таблиці наведено типові підключення для різних моделей Arduino:
| Pin PCA9685 | Arduino Uno/Старший брат | arduino мега | Ардуїно Леонардо |
|---|---|---|---|
| GND | GND | GND | GND |
| 5V | 5V | 5V | 5V |
| SCL | A5 | 21 | 3 |
| ПДР | A4 | 20 | 2 |
У цій конфігурації штифти А4 і А5 або їхні еквіваленти на відповідній платформі, підключіть до контактів SDA (дані) і SCL (годинник) модуля PCA9685. Крім того, важливо мати відповідне зовнішнє джерело живлення для серводвигунів, особливо якщо ви підключаєте кілька сервоприводів, оскільки Arduino не забезпечує достатнього струму для належного приводу.
Рекомендується використовувати a Живлення 5В для живлення сервоприводів і переконайтеся, що ви правильно підключили контакти живлення. Якщо ви використовуєте більше 16 сервоприводів, також рекомендується припаяти на плату конденсатор 1000 мкФ для стабілізації живлення.
Конфігурація в коді
Щоб керувати виходами ШІМ PCA9685, використовується бібліотека, розроблена Adafruit. Ви можете завантажити його з на вашій сторінці GitHub. Тут ми покажемо вам базовий приклад налаштування модуля та переміщення сервоприводу:
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(); void setup() { servos.begin(); servos.setPWMFreq(60); // Configura la frecuencia PWM a 60Hz } void loop() { servos.setPWM(0, 0, 172); // Mueve el servo del canal 0 a la posición 0 grados delay(1000); servos.setPWM(0, 0, 565); // Mueve el servo a la posición 180 grados delay(1000); }
Цей простий код виконує розгортковий рух на сервоприводі, підключеному до каналу 0, повільно змінюючи його від 0 градусів до 180 градусів. Ви можете використовувати функцію setPWM() для незалежного керування кожним із виходів PCA9685.
Переміщення кількох сервоприводів одночасно
Одна з великих переваг PCA9685 полягає в тому, що він дозволяє керувати декількома сервоприводами одночасно. Ось як ви можете перемістити кілька серводвигунів у різні позиції в межах одного кодового циклу:
void loop() { setServo(0, 30); setServo(2, 90); setServo(4, 180); delay(1000); } void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, 172, 565); servos.setPWM(n_servo, 0, duty); }
У цьому випадку ми визначаємо функцію, яка називається setServo який отримує число сервоприводу та його кут як параметри, обчислює відповідну ширину імпульсу та переміщує його в потрібне положення. Таким чином ви можете легко контролювати кілька каналів.
Як встановити обмеження для різних сервоприводів
Не всі сервоприводи мають однаковий діапазон значень для кутів від 0° до 180°. У деяких випадках вам доведеться налаштувати ці значення на замовлення. Ось як ви можете зробити ці налаштування для різних сервоприводів:
unsigned int pos0[16]= {172, 256, 246, 246, 246, 172, 246, 200}; unsigned int pos180[16]= {565, 492, 492, 492, 492, 565, 492, 550}; void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, pos0[n_servo], pos180[n_servo]); servos.setPWM(n_servo, 0, duty); }
Цей код дозволяє регулювати мінімальні та максимальні значення для кожного сервоприводу, підключеного до PCA9685, що буде надзвичайно корисно, якщо ви використовуєте сервоприводи з різними діапазонами сигналу.
Маючи все це на увазі, тепер у вас є все необхідне для налаштування, підключення та кодування вашого першого проекту за допомогою PCA9685. Незалежно від того, чи працюєте ви над роботом із декількома ступенями свободи, чи вам потрібно керувати багатьма пристроями паралельно, цей модуль дозволить вам робити це ефективно й точно.
Незалежно від того, чи працюєте ви з сервоприводами чи виходами ШІМ, PCA9685 дозволяє надзвичайно легко контролювати до 16 каналів за допомогою лише двох контактів мікроконтролера. Маючи невеликий досвід і хороший код, ви можете створювати дуже потужні програми, не перевантажуючи основний процесор.