Модуль Контроллер PCA9685 для Arduino и других платформах — широко используемое решение, когда необходимо управлять несколькими устройствами, работающими с ШИМ-сигналами. Хотя изначально он был разработан для управления светодиодами, его универсальность позволила ему также часто использоваться для управления сервоприводами. Этот чип чрезвычайно популярен в проектах робототехники и автоматизации благодаря своей способности точно и просто управлять несколькими устройствами.
В этой статье не только показано, как использовать PCA9685 в сочетании с Arduino и другими микроконтроллерами, но также подробно описаны все технические аспекты, которые вам необходимо знать, чтобы максимально эффективно использовать этот компонент. Мы собираемся объяснить все, от того, как его подключить, до того, как управлять библиотеками кода, чтобы вы могли с легкостью управлять своими двигателями и сервоприводами.
Что такое PCA9685 и для чего он используется?
El ПСА9685 представляет собой контроллер ШИМ (широтно-импульсной модуляции), предназначенный для управления до 16 выходами, идеально подходящий для управления светодиодными светильниками и серводвигателями. Он обменивается данными через шину I2C, а это означает, что для подключения к микроконтроллеру, такому как Arduino или Raspberry Pi, требуется всего два контакта. Благодаря использованию определенных адресов вы даже можете подключить до 62 таких модулей к одной шине I2C, управляя примерно 992 выходами ШИМ. Это делает его очень мощным вариантом для проектов, требующих скоординированного управления множеством устройств.
Наиболее широкое использование ПСА9685 Это в проектах, где нужен ШИМ-сигнал. Яркий пример — управление сервоприводами, которые управляются ШИМ-сигналами. Кроме того, контроллер имеет точность 12 биты, что позволяет ему генерировать очень тонкие сигналы с регулируемой частотой до 1600 Гц.
Особенности и преимущества PCA9685
Одно из главных преимуществ ПСА9685 заключается в том, что он снимает с микроконтроллера нагрузку, связанную с постоянной генерацией сигналов ШИМ. Это особенно полезно в проектах, предполагающих управление множеством устройств, поскольку позволяет основному процессору сосредоточиться на других задачах.
- 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:
Вывод PCA9685 | Arduino Uno/Старший брат | Arduino Mega | Arduino Leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
В этой конфигурации контакты A4 и A5 или их эквиваленты на соответствующей платформе, подключайте к контактам SDA (данные) и SCL (тактовые часы) модуля PCA9685. Кроме того, важно иметь подходящий внешний источник питания для серводвигателей, особенно если вы подключаете несколько сервоприводов, поскольку Arduino не обеспечивает достаточный ток для их правильного управления.
Рекомендуется использовать питание 5 В для питания сервоприводов и убедитесь, что вы правильно подключили контакты питания. Если вы используете более 16 сервоприводов, также рекомендуется припаять к плате конденсатор емкостью 1000 мкФ для стабилизации питания.
Конфигурация в коде
Для управления выходами ШИМ ПСА9685, используется библиотека, разработанная 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 градусов. Вы можете использовать функцию установитьШИМ() для независимого управления каждым из выходов PCA9685.
Перемещение нескольких сервоприводов одновременно
Одно из больших преимуществ ПСА9685 заключается в том, что он позволяет управлять несколькими сервоприводами одновременно. Вот как вы можете переместить несколько серводвигателей в разные позиции в одном кодовом цикле:
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 каналами, используя всего два контакта вашего микроконтроллера. Имея небольшой опыт и хороший код, вы сможете создавать очень мощные приложения, не перегружая основной процессор.