Сервопри́вод (от лат. — слуга, помощник, раб), или следя́щий при́вод — механический привод с автоматической коррекцией состояния через внутреннюю отрицательную обратную связь, в соответствии с параметрами, заданными извне.
Сервоприводом является любой тип механического привода (устройства, рабочего органа), имеющий в составе датчик (положения, скорости, усилия и т. п.) и блок управления приводом (электронную схему или механическую систему тяг), автоматически поддерживающий необходимые параметры на датчике (и, соответственно, на устройстве) согласно заданному внешнему значению (положению ручки управления или численному значению от других систем).
Проще говоря, сервопривод является «автоматическим точным исполнителем» — получая на вход значение управляющего параметра (в режиме реального времени), он «своими силами» (основываясь на показаниях датчика) стремится создать и поддерживать это значение на выходе исполнительного элемента.
К сервоприводам, как к категории приводов, относится множество различных регуляторов и усилителей с отрицательной обратной связью, например, гидро-, электро-, пневмоусилители ручного привода управляющих элементов (в частности, рулевое управление и тормозная система на тракторах и автомобилях), однако термин «сервопривод» чаще всего (и в данной статье) используется для обозначения электрического привода с обратной связью по положению, применяемого в автоматических системах для привода управляющих элементов и рабочих органов.
Простейший блок управления электрического сервопривода может быть построен на схеме сравнения значений датчика обратной связи и задаваемого значения, с подачей напряжения соответствующей полярности (через реле) на электродвигатель. Более сложные схемы (на микропроцессорах) могут учитывать инерцию приводимого элемента и реализовывать плавный разгон и торможение электродвигателем для уменьшения динамических нагрузок и более точного позиционирования (например, привод головок в современных жёстких дисках).
Для управления сервоприводами или группами сервоприводов можно использовать специальные ЧПУ-контроллеры, которые можно построить на базе программируемых логических контроллеров (ПЛК).
Мощность двигателей: от 0,05 до 15 кВт.
Крутящие моменты (номинальные): от 0,15 до 50 Н·м.
- Сравнение с шаговым двигателем
- Список моделей
- Сервоприводы с обратной связью
- Питание сервопривода
- Без внешнего источника питания
- Схема подключения
- Подключение и настройка
- Что понадобится
- Программная настройка
- Код для Arduino IDE
- Вращение вала с плавным разгоном
- Считывание угла сервопривода
- Схема устройства
- Примеры работы для Espruino
- Код для Espruino IDE
- Примеры работы для Raspberry Pi
- Код для Python
Сравнение с шаговым двигателем
Другим вариантом точного позиционирования приводимых элементов без датчика обратной связи является применение шагового двигателя. В этом случае схема управления отсчитывает необходимое количество импульсов (шагов) от положения репера (этой особенности обязан характерный шум шагового двигателя в дисководах 3,5″ и CD/DVD при попытках повторного чтения). При этом точное позиционирование обеспечивается параметрическими системами с отрицательной обратной связью, которые образуются взаимодействующими между собой соответствующими полюсами статора и ротора шагового двигателя. Cистема управления шаговым двигателем, активизирующая соответствующий полюс статора, формирует cигнал задания для соответствующей параметрической системы.
Так как датчик обычно контролирует приводимый элемент, электрический сервопривод имеет следующие преимущества перед шаговым двигателем:
Недостатки в сравнении с шаговым двигателем
Сервопривод, однако, возможно использовать и на базе шагового двигателя или в дополнение к нему до некоторой степени совместив их достоинства и устранив конкуренцию между ними (сервопривод осуществляет грубое позиционирование в зону действия соответствующей параметрической системы шагового двигателя, а последняя осуществляет окончательное позиционирование при относительно большом моменте и фиксации положения).
Проблемы фиксирования никакой нет в сервоприводе в отличие от шагового. Высокоточное позиционирование и удержание в заданной позиции обеспечивается работой электрической машины в вентильном режиме, суть которого сводится к её работе в качестве источника силы. В зависимости от рассогласования положения (и других координат электропривода) формируется задание на силу. При этом несомненным преимуществом сервопривода является энергоэффективность: ток подается только в том необходимом для того объеме, чтобы удержать рабочий орган в заданном положении. В противоположность шаговому режиму, когда подается максимальное значение тока, определяющее угловую характеристику машины. Угловая характеристика машины аналогична при малых отклонениях механической пружине, которая пытается «притянуть» рабочий орган в нужную точку. В шаговом приводе чем больше рассогласование положения, тем больше сила при неизменном токе.
1. Сервопривод вращательного движения
2. Сервопривод линейного движения
Синхронный сервопривод — позволяет точно задавать угол поворота (с точностью до угловых минут), скорость вращения, ускорение. Разгоняется быстрее асинхронного, но во много раз дороже.
Асинхронный сервопривод (Асинхронная машина с датчиком скорости) — позволяет точно задавать скорость, даже на низких оборотах.
Линейные двигатели — могут развивать огромные ускорения (до 70 м/с²).
3. По принципу действия
У электромеханического сервопривода движение формируется электродвигателем и редуктором.
У электрогидромеханического сервопривода движение формируется системой поршень-цилиндр. У данных сервоприводов быстродействие на порядок выше в сравнении с электромеханическими.
Сервоприводы применяются для точного (по датчику) позиционирования (чаще всего) приводимого элемента в автоматических системах:
Сервоприводы вращательного движения используются для:
Сервоприводы линейного движения используются, например, в автоматах установки электронных компонентов на печатную плату.
Сервомотор для авиамоделизма
Серводвигатель — сервопривод с мотором, предназначенный для перемещения выходного вала в нужное положение (в соответствии с управляющим сигналом) и автоматического активного удержания этого положения.
Серводвигатели применяются для приведения в движение устройств управляемых поворотом вала — как открытие и закрытие клапанов, переключатели и так далее.
Важными характеристиками сервомотора являются динамика двигателя, равномерность движения, энергоэффективность.
Серводвигатели широко применяются в промышленности, например, в металлургии, в станках с ЧПУ, прессо-штамповочном оборудовании, автомобильной промышленности, тяговом подвижном составе железных дорог.
В основном в сервоприводах использовались 3-полюсные коллекторные двигатели, в которых тяжелый ротор с обмотками вращается внутри магнитов.
Первое усовершенствование, которое было применено — увеличение количества обмоток до 5. Таким образом, вырос вращающий момент и скорость разгона. Второе усовершенствование — это изменение конструкции мотора. Стальной сердечник с обмотками очень сложно раскрутить быстро. Поэтому конструкцию изменили — обмотки находятся снаружи магнитов и исключено вращение стального сердечника. Таким образом, уменьшился вес двигателя, уменьшилось время разгона и возросла стоимость.
Ну и наконец, третий шаг — применение бесколлекторных двигателей. У бесколлекторных двигателей выше КПД, так как нет щёток и скользящих контактов. Они более эффективны, обеспечивают большую мощность, скорость, ускорение, вращающий момент.
Сервоприводы PDM постоянного вращения — это моторы, которые управляются сигналом PDM (Pulse Duration Modulation) и поддерживает скорость вращения вала в любом направлении без ограничений по углу поворота.
Сервоприводы непрерывного вращения используются для моделирования движения различных механизмов. На основе сервопривода можно собрать вращающийся столик для предметной фотосъёмки, мобильного бота или радар кругового обзора.
Список моделей
В сервоприводах PDM постоянного вращения скорость вращения вала зависит от длины импульса. Для управления мотором необходимо подавать особый сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса начинка сервопривода генерирует свой сигнал мотору.
В сигнале PDM частота импульсов постоянна и равна 50 Гц, т. е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит направление и скорость вращения мотора. Принято считать, что рабочая ширина импульса лежит в пределах 544–2400 мкс.
В качестве примера приведём данные для популярного хобби-сервопривода Feetech FS90R.
На разных приводах диапазон ширины импульсов и скорости поворота вала может отличатся от стандартного. Эти данные можно уточнить в характеристиках.
Даже в рамках одной и той же модели сервопривода существует погрешность, допускаемая при производстве, которая приводит к тому, что рабочий диапазон длин импульсов отличается. Для точной работы каждый конкретный сервопривод должен быть откалиброван: путём экспериментов необходимо подобрать корректный диапазон, характерный именно для него.
Часто способ управления сервоприводами называют PWM (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation) в котором важна длина импульсов, а не частота.
Если ваш сервопривод дребезжит, дёргается или стоит задача управлять несколькими серво, обратите внимание на плату расширения Multiservo Shield.
Сервоприводы с обратной связью
В сервоприводах PDM постоянного вращения также встречаются модели с обратной связью, у которых сигнал внутреннего потенциометра выведен отдельным проводом. Однако обратная связь показывает не скорость вращения вала, а его текущий угол поворота.
Обычно наличие сигнала обратной связи явно указывается в характеристиках сервопривода.
Питание сервопривода
Сервопривод можно запитать двумя способами: напрямую от контроллера (если позволяют характеристики) или же от внешнего источника питания.
Без внешнего источника питания
Если сервопривод питается напряжением 5 вольт и потребляет ток менее 500 мА, есть возможность запитать сервомотор непосредственно от контроллера.

Схема подключения
Если сервопривод питается напряжением свыше 5 вольт или потребляет ток более 500 мА, то ему необходим внешний источник питания.

Возьмём для тестовых проектов популярный сервопривод Feetech FS90R. А мозгом выступит платформа Arduino Uno.
Подключение и настройка
Для наглядности схемы мы используем подключение сервопривода напрямую к контроллеру, без внешнего питания. Если вам нужен дополнительный блок питания, сверьтесь со схемами в разделе про питание сервопривода.
Что понадобится

Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая надевается сверху на Uno R3 методом бутерброда.

Программная настройка
Для старта протестируем мотор в трёх режимах вращения:
Код для Arduino IDE
После прошивки устройства вал сервопривода будет сначала вращаться с максимальной скоростью по часовой стрелке, сделает паузу, а затем начнёт вращение против часовой стрелки.
Вращение вала с плавным разгоном
Усложним задачу. Сделаем плавный разгон вала по очереди в каждую сторону:
// Библиотека с расширенными функциями для работы с Servo
// Создаём объект для работы с сервомоторами
AmperkaServo servo
// Задаём имя пина, к которому подключён сервопривод
constexpr SERVO_PIN
setup
// Подключаем сервомотор
// Подключаем сервомотор с расширенными параметрами
// Советуем использовать именно этот вариант для точной настройки мотора
// servo.attach(pin, minPulseWidth, maxPulseWidth);
// — pin: номер пина, к которому подключён сервопривод
// — minPulseWidth: ширина импульса,
// соответствующая максимальной скорости по часовой стрелке CW.
// Опциональный и по умолчанию стоит 544 мкс.
// — maxPulseWidth: ширина импульса,
// соответствующая максимальной скорости против часовой стрелки CW.
// Опциональный и по умолчанию стоит 2400 мкс.
// Данные возьмите из технических характеристик мотора
servo. SERVO_PIN
loop
// Перебираем значения скорости вала сервы
// от нуля до максимальной по часовой стрелке CW
speed speed speed
// Отправляем текущую скорость на серво
servo.speed
// Ждём 10 мс
delay
// Останавливаем сервопривод
servo.
// Ждём 1 секунду
delay
// Перебираем значения скорости вала сервы
// от нуля до максимальной против часовой стрелке CCW
speed speed speed
// Отправляем текущую скорость на серво
servo.speed
// Ждём 10 мс
delay
// Останавливаем сервопривод
servo.
// Ждём 1 секунду
delay
После прошивки устройства вал сервопривода будет плавно разгоняться то в одну сторону, то в другую.
Считывание угла сервопривода
В продолжении считаем текущее положение вала мотора. Важно отметить, что лишь малая часть сервоприводов позволяет считывать данные обратной связи через отдельный провод.
Для теста сыграем в игру «Угадай угол». Будем включать сервопривод на максимальной скорости на случайный промежуток времени и после остановки измерять текущий угол вала.
Схема устройства

// Библиотека с расширенными функциями для работы с Servo
// Создаём объект для работы с сервомоторами
AmperkaServo servo
// Задаём имя пина, к которому подключён сервопривод
SERVO_PIN
// Задаём имя пина FB, к которому подключён сервопривод
SERVO_PIN_FB A5
setup
// Открываем Serial-порт
Serial.
// Подключаем сервомотор
// Подключаем сервомотор с расширенными параметрами
// Советуем использовать именно этот вариант для точной настройки мотора
// servo.attach(pin, minPulseWidth, maxPulseWidth);
// — pin: номер пина, к которому подключён сервопривод
// — minPulseWidth: минимальная ширина импульса, соответствующая
// максимальной скорости по часовой CW или против часовой CCW стрелки.
// Опциональный и по умолчанию стоит 544 мкс.
// — maxPulseWidth: максимальная ширина импульса, соответствующая
// максимальной скорости по часовой CW или против часовой CCW стрелки.
// Опциональный и по умолчанию стоит 2400 мкс.
// — minAngle: минимальный угол поворота сервопривода.
// Опциональный и по умолчанию стоит 0°.
// Для сервопривода постоянного вращения установите 0°.
// — maxAngle: максимальный угол поворота сервопривода.
// Опциональный и по умолчанию стоит 180°.
// Для сервопривода постоянного вращения установите 360°.
// Данные возьмите из технических характеристик мотора
// Если направление вращения окажется противоположным,
// поменяйте показания импульсов местами
servo. SERVO_PIN, , , ,
// Подключаем обратную связь сервомотора
// servo.attachFB(pinFB, voltageFBCW, voltageFBCCW);
// — pinFB: номер пина, к которому подключён сигнал обратной связи от сервопривода
// — voltageFBCW: напряжение обратной связи в крайнем положении по часовой стрелке CW
// — voltageFBCCW: напряжение обратной связи в крайнем положении против часовой стрелки CCW
// Данные возьмите из технических характеристик мотора
servo. SERVO_PIN_FB, ,
loop
// Задаём максимальную скорость вращения сервопривода по часовой стрелке CW
servo.
// Ждём от 1 до 5 секунд
delayrandom,
// Останавливаем сервопривод
servo.
// Ждём одну секунду для полной остановки мотора
delay
// Считываем и выводим текущий угол сервопривода
Serial.servo.
// Ждём одну секунду для просмотра результата
delay
После прошивки устройства вал сервопривода будет вращаться случайный промежуток времени и выводить в Serial-порт угол после остановки.
Примеры работы для Espruino
Мозгом для проекта выступит платформа из семейства Espruino, например Iskra JS.

Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая надевается сверху на Iskra JS методом бутерброда.

Код для Espruino IDE
// Подключаем сервопривод к пину 9 через библиотеку Servo
servo require. P9
// Задаём максимальную скорость сервопривода
// По часовой и против часовой стрелки
SPEED_MAX_CW
SPEED_MAX_CCW
SPEED_STOP SPEED_MAX_CW SPEED_MAX_CCW
// Переменная для хранения ID анимации
idAnimServo
// Создаём объект анимация
// для плавного изменения параметров вращения мотора
animServo require
.
// Начальное значение скорости
from SPEED_STOP
// Конечное значение скорости
to SPEED_MAX_CW
// Продолжительность полного перехода
// за 3 секунды мотор пройдёт диапазон значений от 0 до 180
duration
// Шаг обновления: каждые 20 мс
updateInterval
.
// Начальное значение скорости
from SPEED_STOP
// Конечное значение скорости
to SPEED_MAX_CCW
// Продолжительность полного перехода
// за 3 секунды мотор пройдёт диапазон значений от 180 до 0
duration
// Запускаем анимацию
idAnimServo animServo.
// Обработчик анимации
animServo. val
servo.val
// Если анимация закончилась,
// Запускаем её повторно
idAnimServo._intervalID
idAnimServo animServo.
Примеры работы для Raspberry Pi

Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka HAT, которая надевается сверху на Raspberry Pi методом бутерброда.
Имена пинов на Troyka HAT относятся к нумерации Wiring Pi, которая отличается от стандартной нумерации BCM/GPIO одноплатника Raspberry Pi. Подробности смотрите в распиновке Troyka HAT и нумерации в библиотеке.

Код для Python
# Библиотека для работы с сервоприводами
gpiozero Servo
sleep
# Библиотека для расширенных методов обработки чисел
numpy np
# Создаём объект для работы с сервоприводом
# — pin: номер пина, к которому подключён сервопривод
# WPIx, нумерация WiringPi, где x — номер пина
# GPIOx, нумерация GPIO/BCM, где x — номер пина
# — min_pulse_width: ширина импульса, соответствующая
# максимальной скорости по часовой стрелке CW
# Опциональный и по умолчанию стоит: 0.001 c = 1000 мкс
# — max_pulse_width: ширина импульса, соответствующая
# максимальной скорости против часовой стрелки CCW
# Опциональный и по умолчанию стоит: 0.002 c = 2000 мкс
# Подробности нумерации: https://gpiozero.readthedocs.io/en/stable/recipes.html#pin-numbering
# Каждая модель сервопривода имеет свои характеристики
servo Servo min_pulse_width max_pulse_width
# Задаём максимальную скорость вращения сервопривода
# По часовой (CW) и против (CCW) часовой стрелки
SPEED_MAX_CW —
SPEED_MAX_CCW
SPEED_STOP
# Шаг сервопривода
step_angle_servo
:
# Перебираем значения скорости вала сервы от 0 до максимального по часовой стрелке
val np. SPEED_STOP SPEED_MAX_CW -step_angle_servo:
servo. val
sleep
# Останавливаем сервопривод
servo. SPEED_STOP
# Ждём 1 секунду
sleep
# Перебираем значения скорости вала сервы от 0 до максимального против часовой стрелки
val np. SPEED_STOP SPEED_MAX_CCW step_angle_servo:
servo. val
sleep
# Останавливаем сервопривод
servo. SPEED_STOP
# Ждём 1 секунду
sleep




