Код для поиска

Код Arduino и видео для сервоконтроллера PCA9685 на 16 каналов с разрешением 12 бит V1

Код Arduino и видео для сервоконтроллера PCA9685 на 16 каналов с разрешением 12 бит V1

В этом руководстве мы рассмотрим, как использовать 16-канальный 12-разрядный контроллер сервоприводов PCA9685 от NXP Semiconductor. Этот модуль позволяет управлять до 16 сервоприводами или точно регулировать яркость группы светодиодов с помощью широтно-импульсной модуляции (ШИМ). К концу этого руководства у вас будет рабочая настройка, которая сможет управлять несколькими сервоприводами как индивидуально, так и одновременно.

PCA9685 module-0

Чтобы более подробно разъяснить содержание учебного пособия, я рекомендую вам посмотреть прилагаемое видео (в видео на 00:00) для визуальной демонстрации процесса настройки и кодирования.

Аппаратное обеспечение объяснено

Модуль PCA9685 представляет собой компактную плату, которая может управлять несколькими сервоприводами через коммуникацию I2C. Он имеет 16 каналов, что позволяет подключать до 16 сервоприводов, каждый из которых имеет свой собственный управляющий сигнал. Модуль работает от источника питания 5 В и предназначен для обработки PWM-сигналов, которые необходимы для точного управления положением сервоприводов.

Плата включает в себя специальные выводы для питания (VCC), земли (GND) и связи (SDA и SCL). Вывод SDA используется для передачи данных, в то время как вывод SCL является тактовым сигналом, оба из которых подключаются к аналоговым выводам Arduino A4 и A5 соответственно. Эта схема обеспечивает надежную связь между Arduino и модулем PCA9685.

Технические характеристики

ПроизводительNXP Семикондорторы
Номер деталиPCA9685
Логическое/входное напряжение3.3 В до 5.5 В
Напряжение питания2.3 В до 5.5 В
Выходной ток (на канал)25 мА макс
Пиковый ток (на канал)100 мА макс
Руководство по частоте ШИМ24 Гц до 1,6 кГц
Входные логические пороги0.3 В (низкое) / 0.7 В (высокое)
Падение напряжения / RДС(включено)/ насыщение0,5 В макс
Термальные ограничения-40 °C до 125 °C
УпаковкаHTSSOP-28
Заметки / варианты16-канальный PWM контроллер

  • Обеспечьте источник питания 5В с достаточным током (рекомендуется 1А).
  • Не подключайте серво напрямую к Arduino, чтобы избежать повреждений.
  • Используйте правильные выводы I2C: SDA к A4 и SCL к A5.
  • Настройте значения ширины импульса в соответствии с вашими конкретными сервомотором.
  • Проверьте проводку на правильную полярность: GND, VCC и сигнал.
  • Учтите теплоотвод для высокотоковых приложений.

Инструкции по подключению

Arduino wiring for PCA9685 to control 16 servo motors
Arduino wiring for PCA9685 to control 16 servo motors

Чтобы подключить PCA9685 к вашему Arduino, начните с подключения питания и заземления. Подключите вывод VCC на PCA9685 к выходу 5V на Arduino. Затем подключите вывод GND на PCA9685 к GND на Arduino. Далее подключите вывод SDA на PCA9685 к выводу A4 на Arduino, а вывод SCL к выводу A5.

Для сервоприводов подключите сигнальный провод к соответствующему каналу на PCA9685 (например, CH0 для первого сервопривода), провод питания к отдельному источнику питания (поскольку сервоприводы могут требовать больше тока, чем может предоставить Arduino), а провод заземления к общему заземлению, используемому с PCA9685. Убедитесь, что сигнальный, питающий и заземляющий провода правильно выровнены, чтобы избежать повреждения ваших компонентов.

Примеры кода и пошаговое руководство

В разделе настройки кода мы инициализируем модуль PCA9685 сpwm.begin()и установите частоту ШИМ сpwm.setPWMFreq(60);Это устанавливает частоту связи для сервоприводов.

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");
  pwm.begin();
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}

В пределах цикла мы управляем сервоприводами, устанавливая значения ШИМ, соответствующие желаемым углам. ФункцияangleToPulse(int ang)преобразует угол в соответствующую ширину импульса, что важно для точного позиционирования сервопривода.

void loop() {
  for( int angle =0; angle<181; angle +=20){
    delay(500);
    pwm.setPWM(0, 0, angleToPulse(angle) );
  }
}

Наконец, функцияangleToPulse(int ang)преобразует угол в ширину импульса, используя заданные минимальные и максимальные длины импульсов. Это позволяет вам легко контролировать положение сервопривода в зависимости от угла, который вы хотите достичь.

int angleToPulse(int ang){
   int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
   Serial.print("Angle: ");Serial.print(ang);
   Serial.print(" pulse: ");Serial.println(pulse);
   return pulse;
}

Демонстрация / Что ожидать

После того как все провода подключены правильно и код загружен, вы должны увидеть, как сервопривод перемещается под заданными углами с шагом 20 градусов. Если сервопривод не ведет себя так, как ожидалось, проверьте проводку на предмет правильных соединений и убедитесь, что источник питанияAdequate (в видео на 12:30).

Временные метки видео

  • 00:00- Введение в PCA9685
  • 02:30- Инструкции по проводке
  • 05:00- Обзор кода
  • 10:15- Демонстрация управления сервоприводом
  • 12:30- Устранение распространенных проблем

Изображения

PCA9685 module-0
PCA9685 module-0
PCA9685 module-1
PCA9685 module-1
PCA9685 module-2
PCA9685 module-2
PCA9685 module-3
PCA9685 module-3
PCA9685 module
PCA9685 module
Arduino wiring for PCA9685 to control 16 servo motors
Arduino wiring for PCA9685 to control 16 servo motors
36-PCA9685 video V1: Arduino Code to control 16 servo motor, Basic
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.
37-PCA9685 video V1: Arduino Code with mapping PWM
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Вещи, которые могут вам понадобиться

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Библиотеки Arduino (zip)