Работаем с сервоприводами
Внешний вид Fritzing Условное обозначение на схеме
Сервопривод — это механизм с электромотором с управлением. Вы можете вращать механический привод на заданный угол с заданной скоростью или усилием.
Наиболее популярны сервоприводы, которые удерживают заданный угол и сервоприводы, поддерживающие заданную скорость вращения.
Сервоприводы имеют несколько составных частей. Привод — электромотор с редуктором. Зачастую скорость вращения мотора бывает слишком большой для практического использования. Для понижения скорости используется редуктор: механизм из шестерней, передающий и преобразующий крутящий момент.
Включая и выключая электромотор, можно вращать выходной вал — конечную шестерню сервопривода, к которой можно прикрепить нечто, чем мы хотим управлять — рычаг в форме круга, крестовины или перекладинки для передачи вращающего движения на рабочий орган. Для контроля положения используется датчик обратной связи — энкодер, который будет преобразовывать угол поворота обратно в электрический сигнал. Для этого часто используется потенциометр. При повороте бегунка потенциометра происходит изменение его сопротивления, пропорциональное углу поворота. Таким образом, с его помощью можно установить текущее положение механизма.
Кроме электромотора, редуктора и потенциометра в сервоприводе имеется электронная начинка, которая отвечает за приём внешнего параметра, считывание значений с потенциометра, их сравнение и включение/выключение мотора. Она-то и отвечает за поддержание отрицательной обратной связи.
К сервоприводу тянется три провода. Два из них отвечают за питание мотора и землю, третий доставляет управляющий сигнал, который используется для выставления положения устройства.
Крутящий момент и скорость поворота
Крутящий момент — векторная физическая величина, равная произведению радиус-вектора, проведённого от оси вращения к точке приложения силы, на вектор этой силы. Характеризует вращательное действие силы на твёрдое тело. Эта характеристика показывает, насколько тяжёлый груз сервопривод способен удержать в покое на рычаге заданной длины. Если крутящий момент сервопривода равен 5 кг×см, то это значит, что сервопривод удержит на весу в горизонтальном положении рычаг длины 1 см, на свободный конец которого подвесили 5 кг. Или, что эквивалентно, рычаг длины 5 см, к которому подвесили 1 кг.
Скорость сервопривода измеряется интервалом времени, который требуется рычагу сервопривода, чтобы повернуться на 60°. Характеристика 0,1 с/60° означает, что сервопривод поворачивается на 60° за 0,1 с. Из неё несложно вычислить скорость в более привычной величине, оборотах в минуту, но так сложилось, что при описании сервоприводов чаще всего используют такую единицу.
Иногда приходится искать компромисс между этими двумя характеристиками, так как если мы хотим надёжный, выдерживающий большой вес сервопривод, то мы должны быть готовы, что эта могучая установка будет медленно поворачиваться. А если мы хотим очень быстрый привод, то его будет относительно легко вывести из положения равновесия. При использовании одного и того же мотора баланс определяет конфигурация шестерней в редукторе.
Виды сервоприводов
Сервоприводы бывают аналоговые и цифровые. Различаются они лишь внутренней управляющей электроникой. Вместо специальной микросхемы аналогового сервопривода у цифрового собрата можно заметить на плате микропроцессор, который принимает импульсы, анализирует их и управляет мотором. Таким образом, в физическом исполнении отличие лишь в способе обработки импульсов и управлении мотором.
Шестерни для сервоприводов бывают из разных материалов: пластиковые, карбоновые, металлические.
Пластиковые, чаще всего нейлоновые, шестерни очень лёгкие, не подвержены износу, более всего распространены в сервоприводах. Они не выдерживают больших нагрузок, однако если нагрузки предполагаются небольшие, то нейлоновые шестерни — лучший выбор.
Карбоновые шестерни более долговечны, практически не изнашиваются, в несколько раз прочнее нейлоновых. Основной недостаток — дороговизна.
Металлические шестерни являются самыми тяжёлыми, однако они выдерживают максимальные нагрузки. Достаточно быстро изнашиваются, так что придётся менять шестерни практически каждый сезон. Шестерни из титана — фавориты среди металлических шестерней, причём как по техническим характеристикам, так и по цене. Они достаточно дорогие.
Существует три типа моторов сервоприводов: обычный мотор с сердечником, мотор без сердечника и бесколлекторный мотор.
Обычный мотор с сердечником (справа) обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника. Мотор с полым ротором (слева) обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.
Сервоприводы с бесколлекторным мотором появились сравнительно недавно. У бесколлекторных моторов нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.
Подключение к Arduino
Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:
- красный — питание; подключается к контакту 3.3/5V или напрямую к источнику питания
- коричневый или чёрный — земля
- жёлтый или белый — сигнал; подключается к цифровому выходу Arduino
Обычный хобби-сервопривод во время работы потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать мощный сервопривод, есть смысл задуматься о выделении его в контур с дополнительным питанием.
На большинстве плат Arduino библиотека Servo поддерживает управление не более 12 сервоприводами, на Arduino Mega — 48. При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию analogWrite() на 9 и 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет. На Arduino Mega можно подключить до 12 сервоприводов без нарушения функционирования ШИМ/PWM, при использовании большего количества сервоприводов мы не сможем использовать analogWrite() на 11 и 12 контактах.
Библиотеки для управления сервоприводами (Servo) и для работы с приёмниками/ передатчиками на 433 МГц VirtualWire используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2.
Сервоприводы обычно имеют ограниченный угол вращения 180 градусов, их так и называют «сервопривод 180°». Но существуют сервоприводы с неограниченным углом поворота оси. Это сервоприводы постоянного вращения или «сервоприводы 360°».
Иногда при подключении серводвигателя не отрабатывают заданные команды или отрабатывают некорректно. Причина в том, что сервомоторы требуют достаточно большую мощность для питания, особенно в начале движения ротора. Эти резкие скачки потребляемой мощности могут сильно «просаживать» напряжение на Arduino. Может произойти даже перезагрузка платы. Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке. Конденсатор выполняет роль своеобразного резервуара для электрического тока. Когда серводвигатель начинает работать, он получает остатки заряда с конденсатора и от источника питания Arduino одновременно. Длинная нога конденсатора — это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом ‘-‘.
Управляем через импульсы
Для начала попробуем управлять вручную без библиотек. Считываем показания из Serial Monitor — нужно ввести число от 0 до 9. Эти значения равномерно распределим на 180 градусов и получим 20 градусов на каждую единицу показаний.
Библиотека Servo
Можно генерировать управляющие импульсы самостоятельно, но это настолько распространённая задача, что для её упрощения существует стандартная библиотека Servo.
Сервопривод постоянного вращения можно управлять с помощью библиотек Servo или Servo2. Отличие заключается в том, что функция Servo.write(angle) задаёт не угол, а скорость вращения привода.
Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:
- attach() — присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin — номер пина, к которому присоединяют сервопривод, min и max — длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.
- write() — отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle — угол, на который должен повернуться сервопривод
- writeMicroseconds() — отдаёт команду послать на сервопривод имульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS — длина импульса в микросекундах. Возвращаемого значения нет.
- read() — читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0 до 180
- attached() — проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае
- detach() — производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()
В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.
Пример подключения двух сервоприводов.
Библиотека Servo не совместима с библиотекой VirtualWire для работы с приёмником и передатчиком на 433 МГц, так как они используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2. Все методы библиотеки Servo2 совпадают с методами Servo.
При работе с сервоприводами на 360 градусов функции работают по другому.
Функция Arduino | Сервопривод 180° | Сервопривод 360° |
---|---|---|
Servo.write(0) | Крайне левое положение | Полный ход в одном направлении |
Servo.write(90) | Среднее положение | Остановка сервопривода |
Servo.write(180) | Крайне правое положение | Полный ход в обратном направлении |
Sweep
Скетч File | Examples | Servo | Sweep постоянно поворачивает насадку на 180 градусов и возвращает её обратно. В примере используется встроенная библиотека Servo.
Общая схема — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9).
Скетч File | Examples | Servo | Knob управляет сервоприводом при помощи потенциометра. В примере используется встроенная библиотека Servo.
Общая схема: у сервопривода — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9). У потенциометра средняя ножка соединяется с аналоговым выходом A0, остальные к питанию и земле.
Случайные повороты
Будем поворачивать серводвигатель на случайную величину. Практического смысла немного, но для демонстрации подойдёт.
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Библиотека для плавного управления сервоприводами
- Дополнение к стандартной библиотеке Servo
- Настройка максимальной скорости сервопривода
- Настройка ускорения (разгон и торможение) сервопривода
- Неблокирующая работа
- Трапецеидальный профиль скорости
- При использовании ESC и БК мотора получаем «плавный пуск» мотора
- Установка целевой позиции серво по углу (0-180) и длине импульса (500-2400)
- Автоматическое отключение (detach) при достижении цели
- Плавный пуск при подключении серво
- Поддержка расширителя PCA9685
Совместима со всеми Arduino платформами (используются Arduino-функции)
- Библиотеку можно найти по названию ServoSmooth и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать «Обновить»
- Вручную: удалить папку со старой версией, а затем положить на её место новую. «Замену» делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
Остальные примеры смотри в examples!
v1.1 — автоматическое отключение (detach) при достижении цели
v1.2 — вкл/выкл автоотключения серво
v1.3 — отдельный метод для установки и чтения текущего положения. Добавлен вариант метода attach
v1.4 — улучшена совместимость
v1.5 — исправлены getCurrent и getCurrentDeg
v1.6 — чуть оптимизирована инициализация
v1.7 — исправлен баг с низкой скоростью/ускорением, код оптимизирован
v1.8 — улучшена стабильность
v1.9 — добавлена настройка макс. угла серво
v1.10 — исправлен баг когда текущая позиция совпадает с позицией таргета
v2.0 — упрощён алгоритм
v2.1 — добавлена смена направления
v2.2 — фикс движения в инверсии (спасибо VICLER) и функций write (спасибо CheDima)
- Добавлен полностью новый, более плавный алгоритм
- Почищен мусор
- Добавлена поддержка PCA9685
- «Плавность» вынесена в базовый класс для упрощения добавления поддержки новых библиотек серво
v3.1 — оптимизирован и облегчён алгоритм, скорость задаётся в градусах/сек
v3.2 — исправлен баг с резким поворотом при первом tick, добавлена smoothStart
v3.3 — исправлен баг, возникающий если не вызывать tick
v3.4 — при установке ускорения в 0 активируется профиль постоянной скорости
- Улучшена/исправлена работа stop
- Поправлены ошибки с округлением
- Исправлена проблема с медленным изменением target
v3.6 — Исправлены мелкие баги, вырезан дебаг с 3.5
v3.7 — Добавлено задание ускорения в градусах/сек/сек
v3.8 — Исправлен невозврат тика при autoDetach(false)
v3.9 — поддержка ESP32
Баги и обратная связь
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request‘ов!При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
Сервоприводы 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.
Подключение и настройка
Для наглядности схемы мы используем подключение сервопривода напрямую к контроллеру, без внешнего питания. Если вам нужен дополнительный блок питания, сверьтесь со схемами в разделе про питание сервопривода.
Подключение и управление сервоприводом на Ардуино
Сервоприводы один из важных исполнительных механизмов умных устройств. Разберемся в некоторых приемах управления ими на базе платформы Ардуино. В статье показаны три типовых подхода: управление по заданной программе, по сигналу внешнего датчика и удаленное управление по цифровому интерфейсу. Показан подход для контроля фактического угла поворота.
Что такое сервопривод?
Вначале определимся, что представляет из себя сервопривод. Это умный двигатель, который может поворачивать свой ротор на заданный угол. Есть правда сервоприводы, вращающиеся непрерывно в разные стороны, с регулируемой скоростью, но сейчас речь не о них.
Структура сервопривода
Т.е. сервопривод — довольно сложная система. Управляется она по одному проводу ШИМ сигналом. Импульсы подаются через 20 мс, длительностью от 1 до 2 мс, соответствующие крайним положениям угла (от 0* до 180*, соответственно). Для Ардуино существует встроенная с среду библиотека Servo.h.
Управление сервоприводом по заданной программе
Когда последовательность действий заранее известна, можно записать её в массив и затем поочередно передавать сервоприводу.
Подключение одного сервопривода к Ардуино
Для программного управления можно использовать следующую программу:
Команды можно легко убирать и добавлять, программа сама рассчитает их число.
Управление несколькими сервоприводами сигналом с датчика
Если сигнал управления зависит от каких-то внешних факторов, то нужно подключать к Ардуино соответствующий датчик. В данном примере — аналоговый датчик угла (потенциометр). Управлять будем независимо двумя сервоприводами. Задача — следить за напряжением на датчике и закрывать один сервопривод в одну строну, а другой — в другую. Как-бы имитируя ворота.
Схема подключения выглядит так:
Подключение двух сервоприводов и датчика к Ардуино
Алгоритм реализован в программе Ардуино:
Поворачивая ручку потенциометра сервоприводы приведутся в движение и станут следить за углом поворота.
Удаленное управление сервоприводом по последовательному порту Ардуино
Иногда нужно удаленно управлять исполнителем, подавая команды по последовательному порту UART Ардуино. Управлять можно с ПК и мобильных телефонов, а также с других устройств по USB, UART или Bluetooth.
Схема не отличается от первой:
Подключение сервопривода к Ардуино для удаленного управления по USB
Программа принимает по последовательному порту строку с числом равным углу требуемого отклонения сервопривода, а затем постепенно переводит рычаг на нужный угол. Затем опять ждет команд.
Благодаря этому, есть возможность определить угол поворота сервопривода.Управление может осуществляться через монитор последовательного порта Ардуино, терминал порта или терминал Bluetooth на мобильном устройстве, если подключить Bluetooth модуль к Ардуино.