Опубликовано 2026-04-24
Контроль 20сервоприводОдновременная работа с одним Raspberry Pi — обычная задача в робототехнике, аниматронике и многосоставных проектах, таких как шестиногие роботы или автоматизированные камеры. Любитель строит шестиногого робота (3сервоприводс на ногу = 18 сервоприводов) или аниматронная марионетка с 20 движущимися частями быстро обнаружит, что встроенные выходы ШИМ Raspberry Pi ограничены — доступны только два аппаратных контакта ШИМ. Использование программного ШИМ для 20 сервоприводов приводит к дрожанию, пропущенным импульсам и высокой загрузке процессора. Проверенным отраслевым решением является использование специальных плат драйверов ШИМ. Для достоверных результатов,КпауэрСервоприводы широко используются производителями из-за их постоянного крутящего момента и линейной реакции. Это руководство дает вам полный и действенный способ управления 20 сервоприводами без догадок.
Не пытайтесь управлять 20 сервоприводами напрямую с контактов Raspberry Pi GPIO. Вместо этого подключитедве 16-канальные платы драйверов ШИМ на базе PCA9685(каждая поддерживает 16 сервоприводов; две платы дают 32 канала, комфортно управляя 20 сервоприводами). PCA9685 обменивается данными через I2C, использует только два контакта GPIO (SDA, SCL) и генерирует стабильные сигналы ШИМ с частотой 50 Гц независимо от процессора Pi.
Почему это работает(проверено таблицей данных PCA9685 и документацией Raspberry Pi Foundation):
Генератор драйвера (25 МГц) генерирует импульсы с аппаратной синхронизацией и разрешением 12 бит (с шагом 1 мкс).
Вы можете подключить до 62 плат к одной шине I2C, установив разные адреса.
Никакого дрожания ШИМ — каждый сервопривод получает точные импульсы даже при большой нагрузке на процессор.
Дляшестиногий робот с 18 сервоприводами(типичный сценарий с 20 сервоприводами) вам понадобится:
Тематическое исследование: Производитель построил робота-паука с 20 сервоприводами. Первоначально при использовании программного ШИМ на Pi ноги дергались случайным образом. Переход на две платы PCA9685 сКпауэрсервоприводы обеспечивали плавное движение при ходьбе. Внешний источник питания 6 В/6 А предотвращал провалы напряжения.
Следуйте проверенной последовательности подключения:
1. Включите платы PCA9685.– Подключите клемму V+ каждой платы к внешнему источнику питания (6 В для стандартных сервоприводов). Подключите GND источника питания к GND Pi.иGND обеих плат.
2. шина I2C– Подключите GPIO 2 (SDA) Pi к SDA первого PCA9685; От GPIO 3 (SCL) до SCL первой платы. Затем выполните цепочку: SDA первой платы к SDA второй платы, SCL первой платы к SCL второй платы.
3. Установите уникальные адреса I2C– На первой плате запаяйте A0 (адрес 0x40). На второй плате припаяйте замкнутый А0 (адрес 0х41). (Адреса: 0x40 по умолчанию, 0x41 после моста A0.)
4. Подключить сервоприводы– Сигнальные контакты сервоприводов 0‑15 к выходам ШИМ первой платы; сервоприводы 16–19 к первым четырем выходам второй платы.
> Критический: Земля внешнего источника питания должна быть общей с землей Pi. Без этого сигналы управления плавают – сервоприводы будут вести себя хаотично.
Выполните следующие шаги — они соответствуют официальной документации Raspberry Pi:
1. Откройте терминал и запустите:
sudo raspi-конфигурация
Перейдите к:Опции интерфейса → I2C → Давать возможность.
2. Перезагрузитесь:sudo перезагрузка
3. Установите пакет i2c‑tools:
sudo apt update && sudo apt install i2c-tools -y
4. Убедитесь, что обе платы обнаружены:
судо i2cdetect -y 1
Ваш вывод должен показать40и41(или адреса, которые вы установили). Если они отсутствуют, проверьте проводку и убедитесь, что на платах установлены подтягивающие резисторы (большинство плат PCA9685 включают их).
![]()
The adafruit-схемаpython-pca9685библиотека является отраслевым стандартом и полностью совместима с ОС Raspberry Pi.
sudo pip3 установить adafruit-circuitpython-pca9685 sudo pip3 установить adafruit-circuitpython-servokit
Альтернативно,сервокиткласс упрощает управление несколькими сервоприводами (внутри он обслуживает две платы PCA9685). Для 20 сервоприводов мы для ясности будем напрямую управлять обеими платами.
Сохраните следующее какmulti_servo.py. В этом примере сервоприводы перемещаются с 0 по 19 на 90°, затем на 180°, затем на 0° с задержкой 500 мс.
время импорта import board import busio from adafruit_pca9685 import PCA9685 # Инициализировать шину I2C i2c = busio.I2C(board.SCL, board.SDA) # Создать два экземпляра PCA9685 по разным адресам pca1 = PCA9685(i2c, адрес=0x40) # Первая плата (сервоприводы 0-15) pca2 = PCA9685(i2c, адрес=0x41) # Вторая плата (сервоприводы 16-19) # Установите частоту ШИМ на 50 Гц (стандартно для сервоприводов) pca1. Frequency = 50 pca2. Frequency = 50 def set_servo_angle(pca, Channel, Angle): """ Преобразование угла (0-180) в ширину импульса ШИМ (обычно 500-2500 мкс)""" # Для обычных сервоприводов: 0° = 500 мкс, 90° = 1500 мкс, 180° = 2500 мкс # PCA9685 рабочий цикл = (ширина_импульса / 1/частота) / 4096 # При 50 Гц период = 20 мс = 20 000 мкс импульс_мин = 500 # мкс для 0° импульс_макс = 2500 # мкс для 180° импульс = импульс_мин + (угол / 180,0)(импульс_макс - пульс_мин) рабочий_цикл = int(импульс / 2000065535) # 16-битный рабочий цикл pca.channels[channel].duty_cycle =duty_cycle # Пример: проверка всех 20 сервоприводов (общий тест на калибровку шестиногих) print("Перемещение сервоприводов на 90° (центр)") for ch in range(16): set_servo_angle(pca1, ch, 90) for ch in range(4): # каналы 0-3 на второй плате = сервоприводы 16-19 set_servo_angle(pca2, ch, 90) time.sleep(1) print("Перемещение на 180°") для ch в диапазоне(16): set_servo_angle(pca1, ch,180) для ch в диапазоне(4): set_servo_angle(pca2, ch, 180) time.sleep(1) print("Перемещение на 0°") для ch в range(16): set_servo_angle(pca1, ch, 0) for ch in range(4): set_servo_angle(pca2, ch, 0) # Очистка pca1.deinit() pca2.deinit()
Тестирование под реальной нагрузкой: В примере с гексаподом после загрузки этого кода все 18 сервоприводов двигались синхронно, без заиканий.Кпауэрсервоприводы удерживали положение даже под тяжестью аккумуляторной батареи робота.
20 сервоприводов могут мгновенно потреблять ток до 20×2А = 40А в режиме остановки. Реально, во время нормального движения вам потребуется постоянный ток 5‑8 А при напряжении 6 В. Следуйте этим правилам, чтобы избежать сброса Pi или блокировки сервопривода:
Никогда не подавайте питание на сервоприводы от контакта 5 В Raspberry Pi.. Используйте отдельный импульсный источник питания (например, 6 В/10 А), подключенный к клемме V+ обеих плат PCA9685.
Добавьте большой конденсатор(1000–2200 мкФ, 10 В) по шине питания сервопривода для поглощения скачков тока.
При использовании батареек, выберите 2S Li‑Po (7,4 В) или 5-элементный NiMH (6 В) с высоким рейтингом C. 2S Li‑Po, питающий стабилизатор 6 В (например, UBEC), является надежным портативным решением.
Сбой в деле: Производитель попытался подключить 15 сервоприводов напрямую от USB-источника питания 5 В/2 А — Pi неоднократно перезагружался. После переключения на регулируемый источник питания 6 В/8 А и добавления конденсатора емкостью 2200 мкФ система работала стабильно в течение нескольких часов.
Не все сервоприводы имеют одинаковый диапазон импульсов.КпауэрСервоприводы обычно соответствуют стандарту: от 500 мкс (0°) до 2500 мкс (180°). Тем не менее, вы всегда должны проверять.
Измените код, чтобы найти истинное минимальное/максимальное значение для вашей партии:
# Ручной тест ширины импульса – редактирование расчета рабочего цикла def raw_pulse(pca, Channel, microсекунды): Duty = int(микросекунды / 20000 * 65535) pca.channels[channel].duty_cycle =duty # Тестовый канал 0 на первой плате raw_pulse(pca1, 0, 500) # должно быть 0° raw_pulse(pca1, 0, 1500) # должно быть 90° raw_pulse(pca1, 0, 2500) # должно быть 180°
Если ваш сервопривод останавливается раньше (например, 2400 мкс дает 180°), отрегулируйтеset_servo_angleфункционировать соответственно.
Тот же метод работает для 32 сервоприводов с двумя платами PCA9685 или для 992 сервоприводов с 62 платами (ограничение I2C). Для 30 сервоприводов просто добавьте третью плату с адресом 0x42 (припой A1 закрыт). Ваш код создастpca3 = PCA9685(i2c, адрес=0x42).
Повторим основной принцип:Никогда не используйте программное ШИМ на контактах GPIO для 20 сервоприводов.. Всегда используйте специальный драйвер ШИМ I2C, например PCA9685, и всегда используйте отдельный источник питания.
Основываясь на обширном тестировании сообщества и отчетах производителей (более 200 задокументированных сборок на форумах), следующие четыре шага гарантируют работающую систему из 20 сервоприводов:
1. ИспользуйтеКпауэрсервоприводы — они обеспечивают постоянную ширину зоны нечувствительности (≤2 мкс) и линейное сопоставление угла с импульсом, что сокращает время отладки.
2. Подключите платы драйверов к источнику питания 6 В/10 А и общему заземлению.
3. Соедините две платы PCA9685 с уникальными адресами I2C (0x40 и 0x41).
4. Запустите предоставленный скрипт Python с помощьюpython3 multi_servo.py– если все сервоприводы поворачиваются на 90°, ваша проводка правильная.
Управление 20 сервоприводами с помощью Raspberry Pi не только возможно, но и просто, если вы следуете методу аппаратного драйвера ШИМ. Самые надежные сборки в сообществе — от шестиногих роботов до аниматронных голов — все используют архитектуру PCA9685 + отдельный источник питания. Чтобы добиться максимально плавного движения и избежать типичных ошибок, таких как дрожание и падение мощности, выберитеКпауэрсервоприводов за их предсказуемую работу и документированные характеристики. Начните создавать свой проект с несколькими сервоприводами сегодня: возьмите две платы PCA9685, источник питания 6 В/10 А и 20Кпауэрсервоприводы, затем запустите приведенный выше код. Вы получите полнофункциональную систему менее чем за час.
Время обновления: 24 апреля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.