Сервоприводы PDM постоянного вращения: особенности применения и примеры кода
Сервоприводы PDM постоянного вращения — это моторы, которые управляются сигналом PDM (Pulse Duration Modulation) и поддерживает скорость вращения вала в любом направлении без ограничений по углу поворота.
Сервоприводы непрерывного вращения используются для моделирования движения различных механизмов. На основе сервопривода можно собрать вращающийся столик для предметной фотосъёмки, мобильного бота или радар кругового обзора.
Список моделей
| Модель | Форм-фактор | Сигнал управления | Обратная связь | Назначение | Внутренний интерфейс | Диапазон вращения |
|---|---|---|---|---|---|---|
| Feetech FS90R / Документация | Микро | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
| Feetech FT90R / Документация | Микро | PDM | Нет | Постоянное вращение | Цифровой | 360° |
| Feetech FS5103R | Стандарт | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
| Feetech FS5113R | Стандарт | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
| Feetech FB5317M-360 / Документация | Стандарт | PDM | Да | Постоянное вращение | Цифровой | 360° |
Интерфейс управления
В сервоприводах PDM постоянного вращения скорость вращения вала зависит от длины импульса. Для управления мотором необходимо подавать особый сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса начинка сервопривода генерирует свой сигнал мотору.
В сигнале PDM частота импульсов постоянна и равна 50 Гц, т. е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит направление и скорость вращения мотора. Принято считать, что рабочая ширина импульса лежит в пределах 544–2400 мкс.
В качестве примера приведём данные для популярного хобби-сервопривода Feetech FS90R.
| Период импульсов | Ширина импульса | Положение сервопривода |
|---|---|---|
| 20 мс | 544 мкс | Вал сервопривода вращается по часовой стрелке (CW) с максимальной скоростью. |
| 20 мс | 1540 мкс | Вал сервопривода стоит на месте. |
| 20 мс | 2400 мкс | Вал сервопривода вращается против часовой стрелки (CWW) с максимальной скоростью. |
На разных приводах диапазон ширины импульсов и скорости поворота вала может отличатся от стандартного. Эти данные можно уточнить в характеристиках.
Даже в рамках одной и той же модели сервопривода существует погрешность, допускаемая при производстве, которая приводит к тому, что рабочий диапазон длин импульсов отличается. Для точной работы каждый конкретный сервопривод должен быть откалиброван: путём экспериментов необходимо подобрать корректный диапазон, характерный именно для него.
Часто способ управления сервоприводами называют PWM (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation) в котором важна длина импульсов, а не частота.
Если ваш сервопривод дребезжит, дёргается или стоит задача управлять несколькими серво, обратите внимание на плату расширения Multiservo Shield.
Сервоприводы с обратной связью
В сервоприводах PDM постоянного вращения также встречаются модели с обратной связью, у которых сигнал внутреннего потенциометра выведен отдельным проводом. Однако обратная связь показывает не скорость вращения вала, а его текущий угол поворота.

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

Схема подключения
| Цвет провода | Контакт | Функция | Подключение |
|---|---|---|---|
| Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода контроллера. |
| Красный | V | Питание | Подключите к питанию контроллера. |
| Коричневый / Чёрный | G | Земля | Подключите к земле контроллера. |
С внешним источником питания
Если сервопривод питается напряжением свыше 5 вольт или потребляет ток более 500 мА, то ему необходим внешний источник питания.

Схема подключения
| Цвет провода | Контакт | Функция | Подключение |
|---|---|---|---|
| Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода контроллера. |
| Красный | V | Питание | Подключите к внешнему источнику питания с подходящим вольтажом. |
| Коричневый / Чёрный | G | Земля | Подключите к земле внешнего источника питания и земле контроллера. |
Примеры работы для Arduino
Возьмём для тестовых проектов популярный сервопривод Feetech FS90R. А мозгом выступит платформа Arduino Uno.
Подключение и настройка
Для наглядности схемы мы используем подключение сервопривода напрямую к контроллеру, без внешнего питания. Если вам нужен дополнительный блок питания, сверьтесь со схемами в разделе про питание сервопривода.
Arduino для начинающих. Урок 4. Управление сервоприводом
Продолжаем серию уроков “Arduino для начинающих”. Сегодня собираем модель с сервоприводом — это также одна из базовых схем. Сервоприводы используются в робототехнике для управления движениями робота. В посте помимо видео-инструкции листинг программы и схема подключения.
Сервопривод — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов.
Видео-инструкция сборки модели:
Для сборки модели с сервоприводом нам потребуется:
- плата Arduino
- 3 провода “папа-папа”
- программа Arduino IDE, которую можно скачать с сайта Arduino.

Компоненты для сборки модели Arduino с сервоприводом
Схема подключения модели Arduino с сервоприводом:

Схема подключения сервопривода на Arduino
Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):
#include <Servo.h> //используем библиотеку для работы с сервоприводом
Servo servo; //объявляем переменную servo типа Servo
void setup() //процедура setup
<
servo.attach(10); //привязываем привод к порту 10
>
void loop() //процедура loop
<
servo.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(180); //ставим вал под 180
delay(2000); //ждем 2 секунды
>
Последние четыре команды программы задают угол поворота вала сервопривода и время ожидания (в миллисекундах) до следующего поворота. Эти цифры можно поменять — в видео во втором варианте мы поставили 0-1000-90-1000, что означает поворот на 90 градусов с ожиданием в 1 секунду (1000 миллисекунд), возврат обратно и т.д. (процедура loop повторяется циклично).
Кроме того, в этом уроке мы впервые используем библиотеки.
Библиотека — это набор дополнительных команд, который позволяет вводить программу в упрощенном формате. Здесь мы используем библиотеку для работы с сервоприводами Servo.h.
Так выглядит собранная модель Arduino с сервоприводом:

Собранная модель Arduino с сервоприводом
Смотрите также:
Посты по урокам:
- Первый урок: Светодиод
- Второй урок: Кнопка
- Третий урок: Потенциометр
- Четвертый урок: Сервопривод
- Пятый урок: Трехцветный светодиод
- Шестой урок: Пьезоэлемент
- Седьмой урок: Фоторезистор
- Восьмой урок: Датчика движения (PIR) и E-mail
- Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22
Все посты сайта «Занимательная робототехника» по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Arduino.ru

Если привод вращается без остановки, то он постоянного вращения.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Если привод вращается без остановки, то он постоянного вращения.
логично, но он вроде бы на 60 градусов должен только двигаться. судя по описанию.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Его могли переделать.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Разве в описании не сказано, что параметр должен быть от 0 до 180?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Это не важно, серва должна занять крайнее положение.
так что если значение будет больше 544 то функция будет задавать длинну импульса в микросекундах, а не угол.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

пойду достану хрустальный шар 🙂
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
maksim! После того, как я закинул на ардуино прогу от пользователя ich, (если зайти в Форум, потом в Аппаратные вопросы, там будет «Прежде чем спросить про Сервомашинку / Servo, посмотри тут.») серва вращается нормально — поворачивается на опред. градус и ОСТАНАВЛИВАЕТСЯ! Так что, дело не в этом.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
И никто ничего не переделывал!!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Это не важно, серва должна занять крайнее положение.
так что если значение будет больше 544 то функция будет задавать длинну импульса в микросекундах, а не угол.
maksim, а можно поподробнее о программе и о синтаксисе.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Какая разница между строками
<myservo.write(500); // устанавливаем сервопривод в серединное положение>
< myservo.write(500); // устанавливаем сервопривод в крайнее левое положение>
Может быть дело в этом?
Нет, не в этом! Я там все эти значения как мог менял, все равно, с этой прогой он без остановки крутится.
Кстати прогу не я писал, если чего, брал на http://wiki.amperka.ru/робототехника:сервоприводы. Сам в этом пока не очень разобрался.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
хммм, интересно, почему же вы не можете заметить визуально паузу в 45 ms .. странно все это. болеете может? 🙂
с нетерпением жду еще одного поста от вашего сервопривода «Хозяин тупит, помогите»
Шутки-шутками, а прога все равно тупит))
delay(45) менял и на delay(450) и на delay(4500) — все одно и то же — так что ничего удивительног, что я не вижу несуществующую остановку сервопривода!))
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
поворачивается на опред. градус и ОСТАНАВЛИВАЕТСЯ!
Так не бывает на одной серве — либо она вращается, либо поворачивается на определенный угол. Так что что у вас там происходит так и остается загадкой.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Проверь, точно ли на девятый пин подключена серва.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Моя серва тупила так:
Так работает, а вот так нет:
в явном задании углов не двигается.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Моя серва тупила так:
Так работает, а вот так нет:
в явном задании углов не двигается.
Я думаю имеет смысл проверить вообще серву, т.е. может ли она управляться ШИМ. Для этого нужно управляющий вход подключить к выходу ШИМ и попробовать погенерить там разный сигнал, хоть с тем же «for». Если все будет хорошо, то будем разбираться дальше.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
такое подозрение или она сломаная пришла, или у нее нестандартный шим, т.е она поворачивается не на все значения угла,
в цикле, задавая углы она поворачивается, значит на шим реагирует..
но тут кажется она пропускает некоторые значения между ушей.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Моя серва тупила так:
Так работает, а вот так нет:
в явном задании углов не двигается.
Geronimo, я так и не понял, в сообщении присутствует рабочая программа, или обе неправильные?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
первая пашет вторая нет
в первой серва едет в одну строну затем в другую
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

На сколько градусов едет? на 180? В спецификации она ездиет вроде бы на 60.
вы ее вообще вначале пытались на 500 прокрутить.
Есть вариант другого предположенья, что это не градусы совсем.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Давайте вообще расуждать логически,
Серва поворачивается на 60 градусов в одну сторону и 60 в другую. тоесть общий ход 120 градусов
тоесть грубо говоря управляется через ШИМ. в цикле она работает, без цикла нет.
может взять библиотеку где нибуть не там где вы уже брали.
и забавно что в инете эту серву только продают. но никто чего то особо с ее использованием не засветился.. вы видимо первый покупатель 🙂