Опубликовано 2026-04-18
В этом руководстве представлено полное практическое руководство по управлению стандартнымсервоприводмотор с помощью одноплатного компьютера Raspberry Pi. Вы узнаете точную проводку, код Python и настройки ШИМ, необходимые для достижения точного углового управления, на основе реальных испытаний и официальной документации по оборудованию.
Raspberry Pi (любая модель с контактами GPIO, например 3B+, 4B или 5)
Карта MicroSD с ОС Raspberry Pi (Bookworm или новее)
Стандартное 5 Всервоприводдвигатель (обычно используется в хобби-робототехнике)
Внешний источник питания 5 В (2 А или более) – большинствосервоприводs потребляет большой ток
Перемычки (мама-мама)
Маленький потенциометр (опция, для примера ручного управления)
> Реальная заметка: В типичной учебной аудитории или в любительской среде пользователи часто повреждают свой Raspberry Pi, подавая питание на сервопривод непосредственно от контакта 5 В. В этом руководстве показан правильный метод изоляции питания.
Стандартный серводвигатель не вращается непрерывно. Вместо этого он перемещается на определенный угол (обычно от 0° до 180°) на основе сигнала ШИМ (широтно-импульсной модуляции). Raspberry Pi генерирует этот сигнал на выводе GPIO.
Критические параметры (из спецификаций сервоприводов и официальной документации Raspberry Pi):
Частота сигнала: 50 Гц (период = 20 мс)
Ширина импульса для 0°: 0,5 мс (скважность = 2,5%)
Ширина импульса для 90°: 1,5 мс (скважность = 7,5%)
Ширина импульса для 180°: 2,5 мс (скважность = 12,5%)
Эти значения являются отраслевыми стандартами для большинства аналоговых и цифровых сервоприводов. Всегда сверяйтесь с техническими данными вашего сервопривода – существуют небольшие различия.
Никогда не подавайте питание на сервопривод напрямую от контакта 5 В Raspberry Pi.Типичный сервопривод во время движения может потреблять ток 200–800 мА, а пиковый ток превышает 1 А. Вывод 5 В Raspberry Pi напрямую подключен к входу USB и может надежно подавать только около 500 мА (меньше на старых моделях). Потребление большего тока может привести к падению напряжения, зависанию системы или необратимому повреждению.
Правильная проводка (проверено на стандартных установках):
Почему общее заземление обязательно:Сигнал управления сервоприводом (0–3,3 В от Pi) и питание сервопривода (5 В от внешнего источника) должны иметь одинаковое опорное напряжение. Без общей земли сигнал становится неопределенным, и сервопривод будет дрожать или не двигаться.
ОС Raspberry Pi поставляется с предустановленным Python. Существуют два надежных метода генерации точных сигналов ШИМ. Рекомендуемый метод для новичков — использованиеRPi.GPIOс аппаратным ШИМ на определенных выводах.
Аппаратные контакты GPIO с поддержкой ШИМ на 40-контактном разъеме Raspberry Pi:
GPIO12 (контакт 32) — канал ШИМ 0
GPIO13 (контакт 33) – канал ШИМ 1
GPIO18 (контакт 12) — канал ШИМ 0 (наиболее часто используемый)
GPIO19 (контакт 35) – канал ШИМ 1
![]()
Включить интерфейс ШИМ (при использовании аппаратного ШИМ):Никаких дополнительных действий не требуется – аппаратный ШИМ всегда доступен. Для программного ШИМ (любой контакт) настройка не требуется, но синхронизация может быть менее стабильной.
Ниже приведен полный, протестированный скрипт Python, который перемещает сервопривод на три угла (0°, 90°, 180°) с двухсекундной паузой между каждым из них. Этот код соответствует официальной документации RPi.GPIO.
import RPi.GPIO в качестве времени импорта GPIO # Использовать нумерацию контактов BCM GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Настроить GPIO18 как выход PWM servo_pin = 18 GPIO.setup(servo_pin, GPIO.OUT) # Создать экземпляр PWM с частотой 50 Гц pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # Начать с коэффициентом заполнения 0% def set_servo_angle(angle): """ Преобразование угла (0-180) в рабочий цикл (2,5-12,5) Формула: коэффициент заполнения = (угол / 180)10 + 2,5 Проверено с помощью нескольких паспортов сервоприводов «»», если угол 180: угол = 180, рабочий режим = (угол / 180,0)10.0 + 2.5 pwm.ChangeDutyCycle(duty) # Разрешить сервоприводу достичь позиции time.sleep(0.5) # Прекратить отправку сигнала для уменьшения джиттера (необязательно) pwm.ChangeDutyCycle(0) time.sleep(0.1) try: while True: print("Moving to 0°") set_servo_angle(0) time.sleep(2) print("Перемещение на 90°") set_servo_angle(90) time.sleep(2) print("Перемещение на 180°") set_servo_angle(180) time.sleep(2) кроме KeyboardInterrupt: print("Остановлено пользователем") pwm.stop() GPIO.cleanup()
Ключевая деталь:После каждой позиции код устанавливает рабочий цикл на 0% и ждет 0,1 секунды. Это предотвращает постоянное потребление энергии и уменьшает джиттер сервопривода. Во многих онлайн-примерах это не учитывается, что приводит к ненужному потреблению тока.
Сохраните скрипт какservo_control.py. В терминале запустите:
python3 servo_control.py
Ожидаемое поведение:Вал сервопривода поворачивается на 0°, делает паузу 2 секунды, перемещается на 90°, останавливается, перемещается на 180°, затем повторяет действия.
Если сервопривод не двигается:
Проверка точек соприкосновения – самая частая ошибка
Убедитесь, что внешний источник питания включен и обеспечивает напряжение не менее 5 В.
Подтвердите номер контакта GPIO (BCM 18 = физический контакт 12)
Сократите время сна послеИзменениеDutyCycle? Нет – сервоприводу требуется ~300-500 мс, чтобы достичь позиции.
Для интерактивных проектов вы можете считать аналоговый потенциометр с помощью АЦП MCP3008 (поскольку у Raspberry Pi нет аналоговых входов). Однако более простой метод тестирования — использование ввода с клавиатуры:
импортировать RPi.GPIO как время импорта GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 50) pwm.start(0) def angular_to_duty(angle): return (angle / 180.0) * 10.0 + 2.5 попробуйте: while True: cmd = input("Введите угол (0-180) или 'q' для выхода: ") if cmd == 'q': перерыв try: angular = float(cmd) if 0
Основная мысль повторена:Чтобы безопасно и точно управлять сервоприводом с помощью Raspberry Pi, вы должны (1) использовать внешний источник питания 5 В для сервопривода, (2) соединить общую землю между Pi, сервоприводом и источником питания, (3) генерировать сигнал ШИМ частотой 50 Гц с коэффициентом заполнения, соответствующим импульсам 0,5–2,5 мс, и (4) останавливать подачу сигнала ШИМ (0% коэффициент заполнения) после каждого движения, чтобы уменьшить джиттер и энергопотребление.
Действия по применению этого руководства:
1. Соберите перечисленные выше компоненты — никаких конкретных марок не требуется, подойдет любой стандартный сервопривод 5 В.
2. Подключите провода точно так, как показано, дважды проверив общее заземление.
3. Скопируйте скрипт Python и запустите его. Наблюдайте за перемещением сервопривода на 0°, 90° и 180°.
4. Измените значения углов в сценарии в соответствии с потребностями вашего проекта.
5. Для любого производственного или долгосрочного проекта всегда используйте аппаратную ШИМ и добавляйте электролитический конденсатор емкостью 100–470 мкФ к линиям питания сервопривода, чтобы сгладить скачки напряжения.
Достоверные источники для дальнейшей проверки:Официальная документация Raspberry Pi (/documentation/computers/os.html#gpio-and-the-40-pin-header) и техническое описание серводвигателя (обычно доступно на веб-сайте производителя). Всегда обращайтесь к диапазону ширины импульса вашего конкретного сервопривода — хотя стандарт 0,5–2,5 мс, некоторые сервоприводы используют 0,7–2,3 мс. Простой сценарий калибровки, который сканирует сервопривод и записывает фактические пределы, обеспечит вам идеальную точность.
Время обновления: 18 апреля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.