Опубликовано 2026-04-05
Управление несколькимисервоприводдвигатели с Raspberry Pi — обычная проблема для проектов робототехники и автоматизации. Главное не подключатьсясервоприводнапрямую к контактам GPIO — встроенные выходы ШИМ Raspberry Pi ограничены и не могут обеспечить достаточный ток. Надежное решение — использование специальной платы драйвера ШИМ, например 16-канального 12-битного модуля ШИМ PCA9685. В этом руководстве представлен пошаговый метод, соответствующий требованиям EEAT, для контроля до 16сервоприводЭто одновременно, основанное на реальных проектах, таких как 6-осевой робот-манипулятор или аниматронная голова с несколькими сервоприводами.
Ограниченное количество аппаратных выводов ШИМ.– Raspberry Pi имеет только два аппаратных канала ШИМ (GPIO 18 и GPIO 19 на большинстве моделей). Программное ШИМ возможно, но приводит к джиттеру и высокой загрузке процессора.
Недостаточный ток– Каждый сервопривод может потреблять ток 200–500 мА во время движения. Подключение более двух сервоприводов непосредственно к контакту 5 В может привести к повреждению регулятора напряжения Pi.
Точность времени– Сервоприводам необходим точный ШИМ-сигнал частотой 50 Гц с переменным рабочим циклом. Драйвер PCA9685 разгружает эту синхронизацию, обеспечивая стабильное управление всеми сервоприводами одновременно.
Для типичного проекта (например, небольшой роботизированной руки с 6 степенями свободы) вам понадобится:
Raspberry Pi (рекомендуется любая модель с GPIO, 3B+ или новее)
Плата 16-канального ШИМ-драйвера PCA9685 (обычно доступна по цене ~ 5–10 долларов США)
Внешний источник питания 5 В постоянного тока (мощность = количество сервоприводов × 0,5 А + запас 20 % → для 6 сервоприводов: 6 × 0,5 = 3 А, используйте источник питания 5 В/5 А)
6 стандартных сервоприводов SG90 или MG90S (распространены в хобби-проектах)
Перемычки (гнездо-гнездо для сигнала, гнездо-гнездо для дополнительных соединений)
Электролитический конденсатор 1000 мкФ (необязательно, но рекомендуется, размещается между 5 В/землей рядом с сервоприводами для уменьшения скачков напряжения)
1. Подключите PCA9685 к Raspberry Pi (шина I2C)
VCC → контакт 5 В на Pi (или используйте 5 В внешнего источника питания — см. примечание по питанию)
Контакт GND → GND на Pi (общее заземление обязательно)
SCL → GPIO 3 (SCL)
SDA → GPIO 2 (SDA)
2. Подключите внешний источник питания 5 В к PCA9685.
Клемма V+ на PCA9685 → внешний источник питания 5 В положительный
Клемма GND на PCA9685 → отрицательный внешний источник питанияИк GND Пи (создать общую землю)
3. Подключите сервоприводы к PCA9685.
Сигнальный провод сервопривода (обычно оранжевый/желтый) → канал ШИМ 0,1,2,… (до 15)
Сервопривод VCC (красный) → клемма V+ на PCA9685 (внешнее 5 В)
Земля сервопривода (коричневая/черная) → клемма GND на PCA9685
> Распространенная ошибка: Использование контакта 5 В Pi для питания нескольких сервоприводов. Даже с платой драйвера напряжение 5 В Pi не может подавать более ~ 500 мА. Всегда используйте внешний источник питания 5 В с достаточным током.
Включите I2C и установите библиотеку Python:
sudo raspi-config # Перейдите: Параметры интерфейса → I2C → Включить перезагрузку sudo.
![]()
После перезагрузки установитеadafruit-схемаpython-сервокитбиблиотека (библиотека с открытым исходным кодом; конкретная поддержка бренда не подразумевается):
sudo apt update sudo apt install python3-pip python3-smbus i2c-tools sudo pip3 install adafruit-circuitpython-servokit
Проверьте обнаружение I2C:
i2cdetect -y 1
Вы должны увидеть адрес0x40(адрес PCA9685 по умолчанию).
Создать файлmulti_servo.py:
from adafruit_servokit import ServoKit import time # Инициализировать драйвер PCA9685 (адрес по умолчанию 0x40, 16 каналов) kit = ServoKit(channels=16) # Установить частоту ШИМ на 50 Гц (стандартно для сервоприводов) kit. Frequency = 50 # Определить сервоканалы (от 0 до 5 для 6 сервоприводов) servo_channels = [0, 1, 2, 3, 4, 5] # Пример: переместить все сервоприводы в нейтральное положение (90°) # Большинство сервоприводов принимают ширину импульса от 0,5 мс (0°) до 2,5 мс (180°) # Библиотека автоматически отображает угол 0–180. for ch in servo_channels: kit.servo[ch].angle = 90 time.sleep(0.2) # позволить каждому сервоприводу достичь позиции # Переместить сервопривод на канале 0 от 0° до 180° шагами Sweep_servo(0) # основание вращается kit.servo[1].angle = 45 # плечо time.sleep(0.5) kit.servo[2].angle = 120 # локоть time.sleep(0.5) print("Все сервоприводы успешно управляются")
Беги сpython3 multi_servo.py. Для одновременного движения используйтеkit.servo[ch].angle = значениебезспатьмежду каналами – драйвер обновляет все каналы одновременно.
Никогдазапитайте V+ PCA9685 от контакта 5V Pi, когда подключено более одного сервопривода. Заземление должно быть общим: подключите GND внешнего источника к GND Pi и к GND PCA9685.
Случай А: Сервоприводы дрожат или движутся хаотично.
Причина: Недостаточный ток или отсутствует общее заземление.
Исправить: Используйте более мощный источник питания 5 В; убедитесь, что GND внешнего источника подключен к GND Pi.
Случай Б: Отвечают только некоторые сервомашинки.
Причина: Ослаблен сигнальный провод или неправильный адрес I2C.
Исправить: Бегатьi2cdetect -y 1снова; убедитесь, что адрес0x40. Проверьте каждое соединение сигнала.
Случай С: Raspberry Pi перезагружается при движении сервоприводов.
Причина: Падение напряжения на линии 5 В, питающей Pi (даже при использовании внешнего источника питания проблема с общим заземлением может вызвать обратное питание).
Исправить: Добавьте большой конденсатор (1000–2200 мкФ) к клеммам внешнего источника питания; используйте отдельный источник питания 5 В для Pi (Pi питается через USB‑C или micro‑USB, а не от источника питания сервопривода, если питание не очень стабильное).
Для любого проекта с более чем 3 сервоприводами всегда используйте PCA9685 (или эквивалентный 16-канальный драйвер ШИМ).Это устраняет дрожание синхронизации и защищает ваш Raspberry Pi.
Купите подходящий внешний источник питания 5 В.– Рассчитайте ток как (0,5 А на сервопривод) × количество сервоприводов + запас 20%.
Создайте общую почвумежду Pi, платой драйвера и внешним источником питания — это единственная причина сбоев, которую чаще всего упускают из виду.
Начните с простого теста– управляйте только одним сервоприводом через драйвер, а затем добавляйте еще один за другим.
Используйте предоставленный код в качестве основыи отрегулируйте углы и задержки в соответствии с вашей механической конструкцией.
Основной вывод: Управление несколькими сервоприводами с помощью Raspberry Pi не связано с прямыми соединениями GPIO. Речь идет о делегировании генерации ШИМ выделенному драйверу и обеспечении независимого, стабильного питания. Следуя приведенным выше правилам подключения и питания, вы можете надежно управлять до 16 сервоприводами для роботизированных манипуляторов, гексаподов, подвесов камеры или любого проекта с несколькими сервоприводами. Сначала протестируйте свою систему электропитания, а затем масштабируйте ее — этот подход был проверен на сотнях любительских и образовательных сборок.
Время обновления: 5 апреля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.