Опубликовано 2026-04-05
В этом руководстве представлен пошаговый метод управления стандартнымсервоприводдвигатель с платой ESP32 с использованием Python. Независимо от того, создаете ли вы роботизированную руку, наклонно-поворотное крепление для камеры или простую движущуюся опору, вы изучите точную проводку, код Python и этапы калибровки, чтобы сделать вашусервоприводдвигаться точно. Все примеры основаны на типичных реальных ситуациях, поэтому вы можете сразу же применить их в своих проектах.
Одна плата разработки ESP32 (любой распространенный вариант)
Один стандартный 5 Всервоприводдвигатель (например, типа SG90 или MG995)
Внешний источник питания 5 В (при использовании сервопривода с высоким крутящим моментом)
Перемычки (мама-мама)
Компьютер с прошивкой MicroPython, установленной на ESP32.
> Важный: Никогда не подавайте питание на сервопривод напрямую от контакта 3,3 В ESP32. Большинству сервоприводов требуется напряжение 5 В, и они могут потреблять больше тока, чем может безопасно обеспечить плата. Используйте отдельный источник питания 5 В для сервопривода и подключайте к ESP32 только сигнальный провод.
Представьте, что вы строите простую роботизированную клешню, которая открывается и закрывается. У вас обычный сервопривод MG995. Подключите его следующим образом:
Критическая точка: Земля внешнего источника питаниядолженбыть подключен к ESP32 GND. Без этой точки соприкосновения сигнал будет нестабильным, а сервопривод будет дрожать или не двигаться.
ESP32 управляет сервоприводом, генерируя сигнал ШИМ частотой 50 Гц (период = 20 мс). Положение сервопривода определяется шириной импульса: 0,5 мс для 0°, 1,5 мс для 90° и 2,5 мс для 180°.
Ниже приведен полный, протестированный скрипт MicroPython. Сохраните это какmain.pyна вашем ESP32.
из машинного импорта Pin, время импорта PWM # Используйте GPIO15 — вы можете изменить его на любой вывод, поддерживающий PWM SERVO_PIN = 15 # Стандартная частота сервопривода: 50 Гц PWM_FREQ = 50 # Значения рабочего цикла для 0°, 90°, 180° (рассчитано для 50 Гц) # Для 16-битного разрешения ШИМ (0–65535): # Duty = (pulse_width_ms / 20 мс)65535 # 0,5 мс -> 1638 (0°) # 1,5 мс -> 4915 (90°) # 2,5 мс -> 8192 (180°) DUTY_0 = 1638 DUTY_90 = 4915 DUTY_180 = 8192 # Инициализация ШИМ на выводе сервопривода servo = PWM(Pin(SERVO_PIN), freq=PWM_FREQ,duty_u16=DUTY_90) # начало с 90° def set_angle(angle): """ Установите угол сервопривода (от 0° до 180°). Линейно отображает угол в соответствии с рабочим циклом. """ # Угол фиксации до допустимого угла диапазона = max(0, min(180, angular)) # Линейное отображение:duty = DUTY_0 + (угол/180)(DUTY_180 - DUTY_0)duty = int(DUTY_0 + (angle / 180) * (DUTY_180 - DUTY_0)) servo.duty_u16(duty) # Пример: перемещение вперед и назад, пока True: для угла в диапазоне (0, 181, 10): set_angle(angle) time.sleep_ms(50) для угла в диапазоне (180, -1, -10): set_angle(угол) time.sleep_ms(50)
1. Установите прошивку MicroPython на ваш ESP32 (если это еще не сделано).
2. Подключите сервопривод, как описано.
3. Скопируйте сценарий на доску, используя такой инструмент, какмпремотеили Тонни.
4. Запустите скрипт. Сервопривод будет многократно поворачиваться от 0° до 180° и обратно.
Различные модели сервоприводов имеют немного разные диапазоны ширины импульса. Например, дешевый SG90 может работать с временем от 0,5 до 2,4 мс, а MG996R с высоким крутящим моментом — от 0,6 до 2,4 мс. Обычный диапазон 0,5–2,5 мс подходит для большинства, но вам всегда следует выполнять калибровку.
Метод калибровки(реальный случай из проекта роботизированной руки):
Установите рабочий цикл на 1638 и запишите фактический угол.
Если сервопривод не достигает 0°, слегка увеличьте нагрузку (например, 1700), пока он не перестанет двигаться.
Сделайте то же самое для угла 180°, уменьшив значение от 8192.
Используйте измеренные значения DUTY_MIN и DUTY_MAX вset_angle()функция.
Сервопривод управляется шириной импульса, а не процентом рабочего цикла.Частота должна быть ровно 50Гц (период 20мс). Изменение ширины импульса между 0,5 мс и 2,5 мс поворачивает сервопривод от 0° до 180°. В MicroPythonдолг_u16()В этом методе преобразование ширины импульса в значение коэффициента заполнения зависит от разрешения ШИМ (всегда 16 бит на ESP32). Используйте предоставленные формулы или функцию линейного отображения.
1. Всегда начинайте с простого теста развертки– он подтверждает подключение и базовую работу ШИМ.
2. Используйте логический анализатор или осциллограф.чтобы проверить ширину импульса, если сервопривод ведет себя странно.
3. Для проектов с батарейным питанием, добавьте большой конденсатор (470 мкФ или более) к клеммам питания сервопривода, чтобы поглотить падение напряжения.
4. Когда вашему проекту требуется несколько сервоприводов, управляйте каждым на отдельном выводе GPIO, но убедитесь, что общий ток не превышает номинал вашего источника питания.
Управлять сервоприводом с помощью ESP32 и Python очень просто: подключите сигнальный провод к любому GPIO с поддержкой ШИМ, обеспечьте отдельное питание 5 В с общей землей, сгенерируйте сигнал ШИМ частотой 50 Гц и отрегулируйте рабочий цикл, чтобы установить ширину импульса от 0,5 мс до 2,5 мс. Предоставленный код работает «из коробки» для большинства стандартных сервоприводов. Если диапазон перемещения неправильный, откалибруйте минимальное и максимальное значения нагрузки для вашего конкретного сервопривода. Теперь вы готовы интегрировать точное движение в свои собственные проекты на базе ESP32.
Время обновления: 5 апреля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.