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

Управление 32 сервомоторами с помощью модуля PCA9685 и ESP32 V4

Управление 32 сервомоторами с помощью модуля PCA9685 и ESP32 V4

В этом учебном пособии вы научитесь управлять до 32 сервомоторами, используя микроконтроллер ESP32, подключенный к модулю PCA9685. Это особенно полезно для проектов, которые требуют одновременной работы нескольких сервомоторов без использования Wi-Fi. Результатом станет полностью функциональная установка, где вы сможете управлять положением каждого сервомотора индивидуально.

PCA9685 module-0

ЭтотTutorial проведет вас через необходимые аппаратные компоненты, инструкции по проводке и обзор кода, необходимого для достижения этого управления. Для подробной демонстрации рассмотрите возможность просмотра связанного видео (в видео на 00:00).

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

Основные компоненты, используемые в этом проекте, это микроконтроллер ESP32 и модуль драйвера ШИМ PCA9685. ESP32 выполняет роль основного контроллера, который отправляет сигналы на модуль PCA9685, который, в свою очередь, управляет сервомоторами. PCA9685 может контролировать до 16 сервомоторов на модуль, что позволяет подключить два модуля для управления в общей сложности 32 сервомоторами.

Модуль PCA9685 работает с использованием I2C-связи, что означает, что у него есть два основных провода для передачи данных: SDA (линия данных) и SCL (тактовая линия). Также требуется источник питания для работы сервоприводов, обычно на 5 В. ESP32 выполняет функции главного устройства, предоставляя необходимые управляющие сигналы подчинённым модулям PCA9685.

Техническое описание

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

  • Используйте внешний источник питания для серводвигателей (рекомендуется 5 В, 2 А).
  • Обеспечьте правильное заземление между ESP32 и PCA9685.
  • Проверьте настройки частоты ШИМ для оптимальной работы сервопривода.
  • Настройте пределы ширины импульса в зависимости от характеристик сервопривода.
  • Будьте осторожны с потреблением тока, когда несколько сервоприводов активны.

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

ESP32 wiring for PCA99685 for 32 sevo motors

Чтобы подключить PCA9685 к ESP32, начните с подключения питания и земли. Подключите VCCподсоедините вывод на PCA9685 к источнику питания 5В, а вывод GND подключите к одному из выводов GND на ESP32. Это гарантирует, что модуль и ESP32 имеют общий ноль.

Далее, для I2C-стойкого соединения подключите контакт SDA на PCA9685 к GPIO 21 на ESP32, а SCL к GPIO 22. Эта схема позволяет ESP32 правильно взаимодействовать с модулем PCA9685. Убедитесь, что используете короткие провода, чтобы избежать помех в линиях связи, особенно если вы работаете с несколькими сервоприводами.

Соединение двух плат PCA9685

Как показано на изображении выше, для платы PCA9685 2 (слева) убедитесь, что вы припаиваете этот путь, чтобы установить адрес I2C так, чтобы он отличался от платы 1 (справа).

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

Код инициализирует модули PCA9685 и устанавливает частоту ШИМ. Ключевые идентификаторы в коде включаютboard1иboard2, которые представляют собой два модуля PCA9685, подключенных к ESP32.setup()функция инициализирует последовательный монитор и устанавливает частоту ШИМ для обеих плат.

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

Этот фрагмент демонстрирует процесс настройки, в котором инициализируется последовательная связь и устанавливается частота ШИМ для сервоприводов.setPWMFreq(60)функция обеспечивает, чтобы сервоприводы получали правильную частоту для плавной работы.

В цикле for происходит итерация по углам от 0 до 180 градусов, отправляя команды ширины импульса на сервоприводы, подключенные к обеим платам PCA9685. ФункцияangleToPulseпревращает угол в соответствующую ширину импульса.

void loop() {
    for(int angle = 0; angle < 181; angle += 10) {
        for(int i = 0; i < 16; i++) {      
            board2.setPWM(i, 0, angleToPulse(angle));
            board1.setPWM(i, 0, angleToPulse(angle));
        }
    }
    delay(100);
}

Этот фрагмент кода демонстрирует, как серводвигатели управляются в цикле. Угол сервопривода увеличивается на 10 градусов, иsetPWMфункция вызывается для обеих плат, чтобы переместить сервоприводы в заданный угол. Задержка позволяет сделать короткую паузу между движениями.

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

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

модуль PCA9685
Модуль PCA9685

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

  • 00:00 Начало
  • 00:36 Введение
  • 04:01 Объяснение проводки (только ESP32)
  • 06:26 Подготовка Arduino IDE для ESP32
  • 08:34 Код объяснен
  • 13:40 Демонстрация работы 32 сервомоторов

Изображения

PCA9685 module-0
PCA9685 module-0
PCA9685 module-2
PCA9685 module-2
PCA9685 module-3
PCA9685 module-3
PCA9685 module
PCA9685 module
Connecting two PCA9685 board
Connecting two PCA9685 board
ESP32 wiring for PCA99685 for 32 sevo motors
ESP32 wiring for PCA99685 for 32 sevo motors
880-new- PCA9685 Video V4, Arduino ESP32 Code : Controlling all 32 servo motor wihtout WiFi
Язык: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

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

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

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

Файлы📁

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