Подключаем сервопривод к Arduino. Сервопривод - что это такое? Устройство, подключение, принцип работы, назначение

Для Windows 03.09.2019
Для Windows

В данной статье рассмотрим устройство, принцип работы, характеристики и габаритные размеры сервоприводов.

Определение понятия сервопривод

Сервопривод (следящий привод) — привод с управлением через отрицательную обратную связь, позволяющую точно управлять параметрами движения.
Сервоприводом является любой тип механического привода (устройства, рабочего органа), имеющий в составе датчик (положения, скорости, усилия и т. п.) и блок управления приводом (электронную схему или механическую систему тяг), автоматически поддерживающий необходимые параметры на датчике (и, соответственно, на устройстве) согласно заданному внешнему значению (положению ручки управления или численному значению от других систем).
Проще говоря, сервопривод является «автоматическим точным исполнителем» — получая на вход значение управляющего параметра (в режиме реального времени), он «своими силами» (основываясь на показаниях датчика) стремится создать и поддерживать это значение на выходе исполнительного элемента.

Используемые компоненты (купить в Китае):

Полезная вещь для проверки сервориводов

Разобравшись с определением перейдем к непосредственному разбору принципа работы сервопривода
Для большей наглядности сразу приведу схематичную картинку внутренностей сервопривода.

Приступим к разбору.
Для подключения к контроллеру от сервопривода тянется 3 провода обжатых чаще всего стандартным 3 пиновым разъемом с шагом 2.54мм (1). Цвета проводов могут варьироваться. Коричневый или черный - земля (минус), красный - плюс источника питания, оранжевый или белый - управляющий сигнал. Об управляющих сигналах расскажу чуть позже.
Итак, сигнал приходит на плату которая и будет данный сигнал преобразовывать в импульсы посылаемые непосредственно на двигатель (2). К ней мы вернемся чуть позже.
Наконец-то мы дошли до той детали, благодаря которой мы и можем считывать и задавать угол поворота сервопривода (3). В интернете нашел отличную GIFку демонстрирующую принцип работы потенциометра.

Принцип работы потенциометра прост. Потенциометр имеет 3 вывода. На крайние выводы подается плюс и минус питания (полярность не имеет значения), между выводами имеется резистивное вещество, по которому и движется ползунок соединенный со средним выводом. В нашем случае договоримся что на крайнем левом у нас плюс, на крайнем правом минус. Вращая крутилку из левого крайнего положения в крайнее правое положение мы увеличиваем сопротивление, а вместе с тем и уменьшаем напряжение от входного до условно минимального, которое будем снимать со среднего вывода. Значение минимального напряжения будет зависеть от величины максимального сопротивления у конкретно взятого потенциометра. В рассматриваемых нами сервоприводах чаще всего устанавливают потенциометры на 5 килоОм.
С устройством мы разобрались, теперь вернемся к сервоприводу. Крутилка сервопривода у нас состыкована с выходным валом сервопривода, следовательно при повороте выходного вала мы меняем значение на потенциометре. Условно примем входное напряжение (ручка потенциометра в крайнем правом положении) равное пяти вольтам, пускай при крайнем левом положении потенциометр погасит все напряжение и минимальное напряжение будет равным нулю, а в средней точке тогда у нас будет два с половиной вольта. Из данных условий у нас получается что при угле в 180° на выходе потенциометра у нас 5 вольт, при 90° 2,5 вольта, а при 0° 0 вольт. Для чего я это так подробно рассказываю? Возвращаемся снова к управляющей плате.
Сервопривод находится в положении 0°. На вход платы управления мы подаем управляющий сигнал который несет в себе информацию о повороте сервопривода на 90°. Электронная начинка платы считывает показания потенциометра, на потенциометре видит 0 вольт, а в программе забито что должно быть 2,5. Вот и весь смысл. Плата анализирует разницу, затем выбирает направление вращения мотора и будет вращать его до тех пор пока напряжение на выходе потенциометра не станет равным двум с половиной вольтам.
Едем дальше. Чтоб не листать страницу снова вверх, в поисках картинки, приведу её ещё раз.

Микромоторчик (4) не в состоянии развить мощное усилие на валу (момент), однако обладает высокой скоростью вращения. Для преобразования высокой угловой скорости с малым моментом в низкую с высоким, которая нам как раз и нужна, следует использовать редуктор. Редуктор представлен шестернями соединяющими вал моторчика и выходной вал (5). Шестерня с меньшим количеством зубцов ведет шестерню с большим. от этого снижается скорость но повышается момент, Более наглядно понять принцип работы редуктора можно взяв в руки сервопривод и попытаться повернуть качалку сервопривода. Сложно? Конечно, ведь с обратной стороны редуктор превращается в мультипликатор, механическое устройство которое наоборот преобразует низкооборотный мощный момент в высокооборотный слабый.


Основные характеристики сервоприводов:

. Усилие на валу

Усилие на валу, он же момент это один из самых важных показателей сервопривода и измеряется в кг/см. В характеристиках обычно указывается для двух вариантов напряжения питания, чаще всего для 4.8В и 6.0В.
Момент в 15 кг/см означает что сервопривод способен удержать неподвижно в горизонтальном положении качалку с плечом в 1 см и подвешенным к ней грузом массой 15 кг либо же удержать груз в 1 кг на качалке с плечом в 15 см.
Длина плеча качалки обратно пропорциональна массе удерживаемого груза. Для данного привода при длине в 2 см мы получим 7.5 кг, а уменьшив длину рычага до 0,5 см получим уже целых 30кг

. Скорость поворота

Скорость поворота также является одной из самых важных характеристик. Ее принято указывать во временном эквиваленте требуемом для изменения положения выводного вала сервопривода на 60°. Данную характеристику также чаще всего указывают для 4.8В и 6.0В.
Например характеристика 0.13сек/60° означает что поворот данной сервы на 60° может быть совершен минимум за 0.13 секунды.

. Тип сервоприводов

Цифровые либо аналоговые

. Напряжение питания

Для большинства хоббийных сервоприводов колеблется в диапазоне от 4.8 до 7.2В

. Угол поворота

Это максимальный угол на который может повернуть выходной вал. Сервоприводы по углам поворота в основном бывают на 180° и 360°.

. Сервопривод постоянного вращения

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

. Тип редуктора

Редукторы сервопривода выполняют из металла, карбона, пластика либо компонуют из металлических и пластиковых шестерней.

Пластиковые шестерни слабо выдерживают нагрузки и удары, зато обладают очень малым износом. Карбоновые прочнее пластиковых, но намного дороже. Металлические выдерживают большие нагрузки, удары, падения, однако износ у этого типа шестерней самый большой.
Также хочется отметить что и выходной вал на различных сервоприводах устанавливается по разному. На большинстве вал скользит на втулках скольжения, на более мощных сервоприводах уже используются шариковые подшипники.

Типоразмеры сервоприводов:

Сервоприводы делятся на 4 основных типоразмера. Далее приводятся типы сервоприводов с указанием веса и размеров. Размеры различных сервоприводов могут незначительно откланяться от приведенных ниже.

Микро: 24мм x 12мм x 24мм, вес: 8-10 г.

Мини: 30мм x 15мм x 35мм, вес 23-25 г.

Стандарт: 40мм x 20мм x 37мм, вес: 50-80 г.

Гигант: 49x25x40 мм, вес 50-90 г.

Цикл статей о сервоприводах:

Купить в России

Сервопривод – это привод с управлением через негативную обратную связь, позволяющий точно управлять параметрами движения. Сервоприводом является любой тип механического привода, имеющий в составе датчик (положения, скорости, усилия и т.п.) и блок управления приводом, автоматически поддерживает необходимые параметры на датчике и устройстве согласно заданному внешнему значению.

Многие сервоприводы могут быть подключены к Arduino напрямую. Для этого от них идет шлейф из трех проводов:

красный – питание подключается к контакту 5V или непосредственно к источнику питания
коричневый или черный земля (GND контакт Arduino)
желтый или белый сигнал; подключается к цифровому выходу Arduino.

Можно генерировать управляющие импульсы самостоятельно, но это настолько распространенная задача, что для ее упрощения существует стандартная библиотека Servo ( ).
Детальнее о библиотеке
Сама библиотека также

Ограничения по питанию

Обычный хобби-сервопривод при работе потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать несколько сервоприводов, есть смысл задуматься о выделении сервоприводов в контур с дополнительным питанием.

Ограничения по количеству подключенных сервоприводов

На большинстве плат Arduino библиотека Servo поддерживает управление не более 12 сервоприводами, на Arduino Mega это число возрастает до значения 48. При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию analogWrite () на 9 і 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет. На Arduino Mega можно подключить до 12 сервоприводов без нарушения функционирования ШИМ/PWM, при использовании большего количества сервоприводов мы не сможем использовать analogWrite () на 11 и 12 контактах.

Функции библиотеки Servo

Библиотека Servo позволяет осуществлять программное управление сервоприводами. Для этого создается обьект servo класса 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 () .

Для управления изменением положения сервопривода можно использовать потенциометр. Он имеет три контакта подключаемые следующим образом:
Два крайних контакты (как правило) это питание и земля, а средний – информационный. Подсоединяем питания потенциометра –> 5 V Arduino, земля –> GND Arduino, информационный –> аналоговый пин Arduino.
Вот так может выглядеть схема:

А так примитивная программа:

#include Servo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there }

#include

Servo myservo ; // create servo object to control a servo

int potpin = 0 ; // analog pin used to connect the potentiometer

int val ; // variable to read the value from the analog pin

Servoдвигатели - это тип электромеханических приводов, которые не вращаются постоянно,как DC / AC или шаговый двигателей, а перемещаются в определенное положение исохраняют его. Они применяются там, где не требуется непрерывное вращение. Серво приводы применяют там, где необходимоперейти к конкретной позиции,а затем остановиться и сохранять положение .Наиболеечасто серво двигатели используются для управлением положением руля воздушныхсудов и лодок т.д. Сервоприводы эффективно используются в этих областях, потомучто руль не нужно перемещать на 360 градусов и не требуют непрерывного вращениякак например колеса. В с ервоприводахтакже используется механизм обратной связи, поэтому он может обрабатыватьошибки и при позиционировании их исправить. Такая система называется следящей . Такимобразом, если поток воздуха оказывает давление на руль и отклоняет его, тосервопривод будет применять силу в противоположном направлении и попытаетсяисправить ошибку.Например, есливы скажете серво пойти и заблокироваться на 30 градусах, а затем попытаетесь повернутьего рукой, серво будут стараться, чтобы преодолеть силу и сохранить заданныйугол.

Сервоприводыприменяются также для контроля руля RC- автомобилей, робототехники и т.д. Существует много видов сервоприводов, но здесь мы сосредоточимсяна малых сервоприводы так называемых hobby . H obb y двигатель и его механизм управления встроен в один блок. Подключение осуществляеться спомощью трех присоединительных проводов . Мы будем использовать сервопривод FutabaS3003 .

FutabaS3003 проводки.

1.RED -> Управление позицией,питание +4.8В до 6В

2.BLACK-> Земля

3.WHITE -> Сигнал управления.

Управление Сервоприводом.

Управлятьсервоприводом легко с помощью микроконтроллера,не нужно никаких внешнихдрайверов.Просто подаваяуправляющий сигнал сервопривод будет позиционировать на любойзаданный угол.Частота управляющего сигнала обычно 50hz (т.е.период 20 мс), а длительность импульса задает величину угла.

Для FutabaS3003 яузнал следующие синхронизацию .Соотношение между шириной импульса иуглом поворота сервопривода, приводится ниже.Заметим,что этот сервопривод способен вращаться только между 0 и 180 градусов.

  • 0.388ms= 0 градусов.
  • 1.264ms= 90 градусов.
  • (Нейтральнаяпозиция) 2.14ms= 180 градусов.

Управление Серво двигателем.

Вы можете использовать микроконтроллер AVR с функцией PWM дляуправления сервомоторов. Таким образом, PWM автоматически сгенерирует сигналыблокировки сервопривода и центральный процессор контролера освободится длядругих задач. Чтобы понять, как можно настроить и использовать PWM необходимоиметь базовые знания аппаратных таймеров и PWM модулей в AVR.

Здесь мы будемиспользовать AVR Timer модуль, который является 16bit таймером и имеет два канала PWM (А и B).

Частота центрального процессора составляет 16 МГц,эта частота - максимальная частота,на которой большинство AVR способны работать.Так же будем использовать делитель частоты на 64. Так таймера получат 16MHz/64 =250khz (4 мкс).Таймер установим в режим 14.

Функциитаймера в режими 14

  • РежимFAST PWM
  • T T OP Значение = ICR1

Такимобразом, мы устанавливаемICR1A = 4999,это дает нам PWM периода 20мс (50 Гц).Убедитесь что в режими выводаустанавленны правильные настройки COM1A1, COM1A0 (для PWM канала) и COM1B1,COM1B0 (для PWM канал B)

COM1A1= 1 и COM1A0 = 0 (PWM Источник)

COM1B1= 1 и COM1B0 = 0 (PWM канал B)

Теперь рабочий цикл может быть установлен путем настройки OCR1A иOCR1B регистров.Эти два регистрауправления PWM периодом Так как период таймера 4мкс (помните 16 МГц разделили на 64), Мы можем вычислить значения, необходимые для поворотасервопривод на определенный угол.

§ Servoугол 0 градусов требуется ширина импульса 0.388ms (388uS), поэтому значениеOCR1A = 388us/4us = 97

§ Servoугол 90 градусов требуется ширина импульса 1.264ms (1264uS), поэтому значениеOCR1A = 1264us/4us = 316

§ Servoугол 180 градусов требуется ширина импульса 2.140ms (2140uS), поэтому значениеOCR1A = 2140us/4us = 535

Такимобразом, мы можете вычислить значение OCR1A (или OCR1B для второгосервопривода) для любого угла.Заметимчтозначение OCR1x колеблются от 97 до535 для углов от 0 до 180 градусов.

Программа управления двигателем.

Демонстрационнаяпрограмма приведена ниже, показано, как использовать сервомоторов смикроконтроллером AVR. Работы программы очень проста, она начинается синициализации таймера и PWM.В начале фиксируеться сервопривод на 0 градусов, азатем перемещается на 90 градусов и подождатв некоторое время перемещается на135 градусов, и наконец, на 180градусов. Этот процесс повторяется до тех пор, пока привод подключен к питанию.

Параметрыдля правильной работы программы .

  • LOW Fuse = 0xFF и HIGH Fuse = 0xC9
  • Частота= 16 МГц.
  • СервомоторклеймоFutaba S3003 .
  • MCUявляется AtMega32 или однокристальный микроконтроллер ATmega16.

Схема

ПРИЛОЖЕНИЯ:

– это привод, вал которого может встать в заданное положение или поддерживать заданную скорость вращения. Другими словами, валом сервопривода можно управлять, например, задавая ему положение в градусах или определенную частоту вращения.

Используются в самых разных областях, например, в робототехнике они помогают моделировать различные движения роботов. Сервоприводы – эффективное решение для перемещения механизмов в пространстве.

В этом уроке мы научимся управлять сервоприводом .

Для урока нам понадобиться:

Подключение к Arduino

Для достижения самых разных целей робототехники к программируемому контроллеру Arduino может быть подключен сервопривод. Подключение осуществляется через кабели, которые выходят из сервопривода. Обычно это три кабеля: красный; коричневый или черный; желтый, оранжевый или белый.

Подключение сервопривода к плате Arduino производится через ШИМ-выводы. Что Такое PWM (ШИМ) мы уже рассматривали в уроке: Плавное включение светодиода на Arduino с помощью ШИМ (PWM)

За основу возьмем урок Подключение кнопки и светодиода плате Arduino к схеме добавим сервопривод и вот что у нас должно получиться.

Изменим код:

#include // подключаем библиотеку для работы с сервоприводом Servo servo; // объявляем переменную servo типа "servo" int led_pin=3; // пин подключения int button_pin = 4; // пин кнопки // переменные int buttonState = 0; // переменная для хранения состояния кнопки void setup() { pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода. pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа. servo.attach(5); // привязываем сервопривод к аналоговому выходу 10 } void loop() { buttonState = digitalRead(button_pin);// считываем значения с входа кнопки if (buttonState == HIGH) { digitalWrite(led_pin, HIGH);// зажигаем светодиод servo.write(0); //ставим вал на 180 delay (1000); // задержка в 1 секунду } else { digitalWrite(led_pin, LOW);// выключаем светодиод servo.write(180); //ставим вал на 0 delay (1000); // задержка в 1 секунду } }

#include // подключаем библиотеку для работы с сервоприводом

Мы еще не работали с библиотеками. Библиотека это класс, содержащий функции которые мы можем использовать в нашей программе. Библиотека позволяет сократить объем написанного кода и скорость разработки приложения.

Ка вы поняли строка выше подключает нашу библиотеку Servo.h, после чего мы можем использовать все функции данной библиотеки.

Servo servo; // объявляем переменную servo типа "servo"

Объявлением переменную, она нам понадобиться для работы с библиотекой.

Servo.attach(5); // привязываем сервопривод к аналоговому выходу 5

Функция библиотеки Servo.

Servo.write(180); //ставим вал на 180

С помощью данной функции мы можем повернуть сервопривод на заданный угол.

Следующий урок: IR Пульт. Включение выключение светодиода.

В этой статье мы поговорим о сервоприводах в проектах Ардуино. Именно благодаря серводвигателям обычные электронные проекты становятся робототехническими. Подключение серво к Arduino проекту позволяет реагировать на сигналы датчиков каким-то точным движением, например, открыть дверцу или повернуть в нужную сторону сенсоры. В статье рассмотрены вопросы управления сервоприводами, возможные схемы подключения серво к ардуино, а также примеры скетчей.

Сервопривод – это такой вид привода, который может точно управлять параметрами движения. Другими словами, это двигатель, который может повернуть свой вал на определенный угол или поддерживать непрерывное вращение с точным периодом.

Схема работы сервопривода основана на использовании обратной связи (контура с замкнутой схемой, в котором сигнал на входе и выходе не согласован). В качестве сервопривода может выступать любой тип механического привода, в составе которого есть датчик и блок управления, который автоматически поддерживает все установленные параметры на датчике. Конструкция сервопривода состоит из двигателя, датчика позиционирования и управляющей системы. Основной задачей таких устройств является реализация в области сервомеханизмов. Также сервоприводы нередко используются в таких сферах как обработка материалов, производство транспортного оборудования, обработка древесины, изготовление металлических листов, производство стройматериалов и другие.

В проектах ардуино робототехники серво часто используется для простейших механических действий:

  • Повернуть дальномер или другие датчики на определенный угол, чтобы измерить расстояние в узком секторе обзора робота.
  • Сделать небольшой шаг ногой, движение конечностью или головой.
  • Для создания роботов-манипуляторов.
  • Для реализации механизма рулевого управления.
  • Открыть или закрыть дверку, заслонку или другой предмет.

Конечно, сфера применения серво в реальных проектах гораздо шире, но приведенные примеры являются самыми популярными схемами.

Схема и типы сервоприводов

Принцип работы сервопривода основан на обратной связи с одним или несколькими системными сигналами. Выходной показатель подается на вход, где сравнивается его значение с задающим действием и выполняются необходимые действия – например, выключается двигатель. Самым простым вариантов реализации является переменный резистор, который управляется валом – при изменении параметров резистора меняются параметры питающего двигатель тока.

В реальных сервоприводов механизм управления гораздо сложнее и использует встроенные микросхемы-контроллеры. В зависимости от типа используемого механизма обратной связи выделяют аналоговые и цифровые сервоприводы. Первые используют что-то, похожее на потенциометр, вторые – контроллеры.

Вся схема управления серво находится внутри корпуса, управляющие сигналы и питание подаются, как правило, идут по трем проводам: земля, напряжение питания и управляющий сигнал.

Сервопривод непрерывного вращения 360, 180 и 270 градусов

Выделяют два основных вида серводвигателей – с непрерывным вращением и с фиксированным углом (чаще всего, 180 или 270 градусов). Отличие серво ограниченного вращения заключается в механических элементах конструкции, которые могут блокировать движение вала вне заданных параметрами углов. Достигнув угла 180, вал окажет воздействие на ограничитель, а тот отдаст команду на выключение мотора. У серводвигателей непрерывного вращения таких ограничителей нет.

Материалы шестерней сервопривода

У большинства сервоприводов связующим звеном между валом и внешними элементами является шестеренка, поэтому очень важно, из какого материала она сделана. Наиболее доступных вариантов два: металлические или пластмассовые шестерни. В более дорогих моделях можно найти элементы из карбона и даже титана.


Пластмассовые варианты, естественно, дешевле, проще в производстве и часто используются в недорогих моделях серво. Для учебных проектов, когда сервопривод делает несколько движений, это не страшно. Но в серьезных проектах использование пластмассы невозможно, в виду очень быстрого снашивания таких шестеренок под нагрузкой.

Металлические шестеренки надежнее, но это, безусловно, сказывается как на цене, так и на весе модели. Экономные производители могут сделать часть деталей пластмассовыми, а часть металлическими, это тожно нужно иметь в виду. Ну и, естественно, что в самых дешевых моделях даже наличие металлической шестеренки не является гарантией качества.

Титановые или карбоновые шестерни – самый предпочтительный вариант, если вы не ограничены бюджетом. Легкие и надежные, такие сервоприводы активно используются для создания моделей автомобилей, дронов и самолетов.

Преимущества серводвигателей

Широкое использование сервоприводов связано с тем, что они обладают стабильной работой, высокой устойчивостью к помехам, малыми габаритами и широким диапазоном контроля скорости. Важными особенностями сервоприводов являются способность увеличивать мощность и обеспечение обратной информационной связи. И этого следует, что при прямом направлении контур является передатчиком энергии, а при обратном – передатчиком информации, которая используется для улучшения точности управления.

Отличия серво и обычного двигателя

Включая или выключая обычный электрический двигатель, мы можем сформировать вращательное движение и заставить двигаться колеса или другие предметы, прикрепленные к валу. Движение это будет непрерывным, но для того, чтобы понять, на какой угол повернулся вал или сколько оборотов он сделал, потребуется устанавливать дополнительные внешние элементы: энкодеры. Сервопривод уже содержит все необходимое для получения информации о текущих параметрах вращения и мжет самостоятельно выключаться, когда вал повернется на необходимый угол.

Отличия серво и шагового мотора

Важным отличием серводвигателя от шагового двигателя является возможность работать с большими ускорениями и при переменной нагрузке. Также серводвигатели обладают более высокой мощностью. Шаговые двигатели не обладают обратной связью, поэтому может наблюдаться эффект потери шагов, в серводвигателях потери шагов исключены – все нарушения будут зафиксированы и исправлены. При всех этих явных преимуществах серводвигатели являются более дорогостоящими приборами, чем шаговые двигатели, обладают более сложной системой подключения и управления и требуют более квалифицированного обслуживания. Важно отметить, что шаговые двигатели и сервоприводами не являются прямыми конкурентами – каждое из этих устройств занимает свою определенную сферу применения.

Решающее значение в управлении сервоприводами выполняет управляющий сигнал, который представляет собой импульсы постоянной частоты и переменной ширины. Длина импульса – это один из важнейших параметров, который определяет положение сервопривода. Эту длину можно задать в программе вручную методом подбора через угол или использовать команды библиотеки. Для каждой марки устройства длина может быть различной.

Когда сигнал попадает в управляющую схему, генератор подает свой импульс, длительность которого определяется с помощью потенциометра. В другой части схемы происходит сравнение длительности поданного сигнала и сигнала с генератора. Если эти сигналы разные по длительности, включается электромотор, направление вращения которого определяется тем, какой из импульсов короче. При равенстве длины импульсов мотор останавливается.

Стандартная частота, с которой подаются импульсы, равна 50 Гц, то есть 1 импульс в 20 миллисекунд. При таких значениях длительность составляет 1520 микросекунд, и сервопривод занимает среднее положение. Изменение длины импульса приводит к повороту сервопривода – при увеличении длительности поворот осуществляется по часовой стрелке, при уменьшении – против часовой стрелки. Имеются границы длительности – в Ардуино в библиотеке Servo для 0° установлено значение импульса в 544 мкс (нижняя граница), для 180° – 2400 мкс (верхняя граница).

(Использовано изображение с сайта amperka.ru)

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

Способ управления приводом часто по ошибке называют PWM/ШИМ, но это не совсем корректно. Управление напрямую зависит именно от длины импульса, частота их появления не так важна. Корректная работа будет обеспечена как при 40 Гц, так и при 60 Гц, вклад внесет только сильное уменьшение или увеличение частоты. При резком спаде сервопривод начнет работать рывками, при завышении частоты выше 100 Гц устройство может перегреться. Поэтому правильнее называть PDM.

По внутреннему интерфейсу можно выделить аналоговые и цифровые сервоприводы. Внешних отличий нет – все различия только во внутренней электронике. Аналоговый сервопривод внутри содержит специальную микросхему, цифровой – микропроцессор, принимающий и анализирующий импульсы.

При получении сигнала аналоговый сервопривод принимает решение, менять или нет положение, и по необходимости подает на мотор сигнал с частотой 50 Гц. За время реакции (20 мс) могут произойти внешние воздействия, которые изменят положение сервопривода, и устройство не успеет среагировать. Цифровой сервопривод использует процессор, который подает и обрабатывает сигналы с большей частотой – от 200 Гц, поэтому он может быстрее отреагировать на внешние воздействия, быстрее развивать нужную скорость и крутящий момент. Следовательно, цифровой сервопривод будет лучше удерживать заданное положение. При этом для работы цифрового сервопривода требуется больше электроэнергии, что повышает их стоимость. Большой вклад в цену делает и сложность их производства. Высокая стоимость – единственный недостаток цифровых сервоприводов, в техническом плане они намного лучше аналоговых устройств.

Подключение серводвигателя к ардуино

Сервопривод обладает тремя контактами, которые окрашены в разные цвета. Коричневый провод ведет к земле, красный – к питанию +5В, провод оранжевого или желтого цвета – сигнальный. К Ардуино устройство подключается через макетную указанным на рисунке образом. Оранжевый провод (сигнальный) подключается к цифровому пину, черный и красный – к земле и питанию соответственно. Для управления серводигателем не требуется подключение именно к шим-пинам – принцип управления серво мы уже описывали ранее.

Не рекомендуется подключать мощные серво напрямую к плате, т.к. они создают для схемы питания Arduino ток, не совместимый с жизнью – повезет, если сработает защита. Чаще всего симптомы перегрузки и неправильного питания сервопривода заключаются в “дергании” серво, неприятному звуку и перезагрузке платы. Для питания лучше использовать внешние источники, обязательно объединяя земли двух контуров.

Скетч для управления сервоприводом в Arduino

Управление сервоприводом напрямую через изменение в скетче длительности импульсов – достаточно нетривиальная задача, но у нас, к счастью, есть отличная библиотека Servo, встроенная в среду разработки Arduino. Все нюансы программирования и работы с сервоприводами мы рассмотрим в отдельной статье. Здесь же приведем простейший пример использования Servo.

Алгоритм работы прост:

  • Для начала мы подключаем Servo.h
  • Создаем объект класса Servo
  • В блоке setup указываем, к какому пину подключен серво
  • Используем методы объекта обычным для C++ способом. Самым популярным является метод write, которому мы подаем целочисленное значение в градусах (для сервопривода 360 эти значения будут интерпретироваться по-другому).

Пример простого скетча для работы с сервоприводом

Пример проекта, в котором мы сразу сначала устанавливаем серводвигатель на нулевой угол, а затем поворачиваем на 90 градусов.

#include Servo servo; // Создаем объект void setup() { servo.attach(9); // Указываем объекту класса Servo, что серво присоединен к пину 9 servo1.write(0); // Выставляем начальное положение } void loop() { servo.write(90); // Поворачиваем серво на 90 градусов delay(1000); servo.write(1800); delay(100); servo.write(90); delay(1000); servo.write(0); delay(1000); }

Скетч для двух сервпоприводов

А в этом примере мы работаем сразу с двумя сервоприводами:

#include Servo servo1; // Первый сервопривод Servo servo2; // Второй сервопривод void setup() { servo1.attach(9); // Указваем объекту класса Servo, что серво присоединен к пину 9 servo2.attach(10); // А этот servo присоединен к 10 пину } void loop() { // Выставялем положения servo1.write(0); servo2.write(180); delay(20); // Меняем положения servo2.write(0); servo1.write(180); }

Управление сервоприводом с помощью потенциометра

В этом примере поворачиваем серво в зависимости от значения, полученное от потенциометра. Считываем значение и преобразовываем его в угол с помощи функции map:

//Фрагмент стандартного примера использования библиотеки Servo void loop() { val = analogRead(A0); // Считываем значение с пина, к которому подключен потенциометр val = map(val, 0, 1023, 0, 180); // Преобразуем число в диапазоне от 0 до 1023 в новый диапазон - от 0 до 180. servo.write(val); delay(15); }

Характеристики и подключение SG-90

Если вы собрались купить самый дешевый и простой сервопривод, то SG 90 будет лушим вариантом Этот серво чаще всего используется в управлении небольшими легкими механизмами с углом поворота от 0° до 180°.

Технические характеристики SG90:

  • Скорость отработки команды 0,12с/60 градусов;
  • Питание 4,8В;
  • Рабочие температуры от -30С до 60 С;
  • Размеры 3,2 х 1,2 х 3 см;
  • Вес 9 г.

Описание SG90

Цвета проводов стандартные. Сервопривод стоит недорого, он не обеспечивает точных настроек начальных и конечных позиций. Для того, чтобы избежать лишних перегрузок и характерного треска в положении 0 и 180 градусов лучше выставлять крайние точки в 10° и 170°. При работе устройства важно следить за напряжением питания. При сильном завышении этого показателя могут повредиться механические элементы зубчатых механизмов.

Сервоприводы MG995 и MG996 tower pro

Серво MG995 является второй по популярности моделью сервоприводов, чаще всего подключаемых к проектам Arduino. Это относительно недорогие сервомоторы, обладающие гораздо лучшими характеристиками по сравнению с SG90.

Характеристики MG995

Выходной вал у MG995 поворачивается на 120 градусов (по 60 в каждом направлении), хотя многие продавцы указывают на 180 градусов. Устройство выполняется в пластиковом корпусе.

  • Вес 55 г;
  • Крутящий момент 8,5 кг х см;
  • Скорость 0,2с/60 градусов (при 4,8В);
  • Рабочее питание 4,8 – 7,2В;
  • Рабочие температуры – от 0С до -55С.

Описание MG995

Подключение к ардуино также происходит по трем проводам. В принципе, для любительских проектов допускается подключение MG995 напрямую к Arduino, но ток двигателя всегда будет создавать опасную нагрузку для входов платы, поэтому рекомендуется все-таки запитывать серво отдельно, не забыв соединить землю обоих контуров питания. Другим упрощающим жизнь вариантом будет использование готовых сервоконтроллеров и шилдов, обзор которых мы подготовим в отдельной статье.

MG996R похож на MG995 по своим характеристикам, только он выполняется в металлическом корпусе.

Переделка сервопривода в серво непрерывного вращения

Как описывалось выше, сервопривод управляется импульсами переменной ширины, которые задают угол поворота. Текущее положение считывается с потенциометра. Если рассоединить вал и потенциометр, серводвигатель будет принимать положение движка потенциометра как в средней точке. Все эти действия приведут к тому, что будет убрана обратная связь. Это позволяет управлять скоростью и направлением вращения по сигнальному проводу, и создать серво непрерывного вращения. При этом важно отметить, что серво постоянного вращения не может поворачиваться на определенный угол и делать строго заданное количество оборотов.

Чтобы произвести вышеописанные действия, придется разобрать устройство и внести изменения в конструкцию.

В Ардуино IDE нужно создать небольшой скетч, который поставит качалку в среднее положение.

#include Servo myservo; void setup(){ myservo.attach(9); myservo.write(90); } void loop(){ }

После этого устройство нужно подключить к Ардуино. При подключении серво начнет вращаться. Нужно добиться ее полной остановки путем регулирования резистора. После того, как вращение прекратится, нужно найти вал, вытащить из него гибкий элемент и установить обратно.

Этот метод имеет несколько недостатков – настройка резистора до полной остановки неустойчива, при малейшем ударе/нагреве/охлаждении настроенная нулевая точка может сбиться. Поэтому лучше использовать способ замены потенциометра подстроечником. Для этого нужно вытащить потенциометр и заменить его на подстроечный резистор с таким же сопротивлением. Нулевую точку нужно настроить калибровочным скетчем.

Любой из методов переделки сервопривода в серво непрерывного вращения имеет свои недостатки. Во-первых, сложно настроить нулевую точку, любое движение может ее сбить. Во-вторых, диапазон регулирования мал – при небольшом изменении ширины импульса скорость может значительно измениться. Расширить диапазон можно программно в Ардуино.

Заключение

Сервоприводы играют очень важную роль для многих проектов Ардуино, от робототехнических до систем умного дома. Все, что связано с движением, традиционно требует особых знаний и создать полноценный правильно работающий привод – непростая задача. Но с помощью серводвигателей можно во многих случаях упростить задачу, поэтому серво постоянно используется даже в проектах начального уровня.

В этой статье мы постарались раскрыть разные аспекты использования сервоприводов в проектах arduino: от подключения до написания скетчей. Выбрав самую простую модель серво (например, sg 90) вы сможете без труда повторить приведенные примеры и создать свои первые проекты, в которых что-то движется и изменяется. Надеемся, эта статья поможет вам в этом.



Рекомендуем почитать

Наверх