Сервоприводы. Виды и устройство. Характеристики и применение. Управление сервоприводом SG90 без микроконтроллера

Для Андроид 03.09.2019
Для Андроид

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

Кому интересно, прошу под кат.

Идея

Надо управлять сервоприводом, но без микроконтроллера.

Знания

Всем известно, что опыт и знания помогают творить и находить решения. На страницах Гиктаймса немало примеров использования сервопривода с применением контроллеров. В них подробно рассказано про систему управления сервоприводом. Примем этот опыт других разработчиков за знания необходимые нам для решения задачи. Сервопривод SG90 управляется ШИМ сигналом, параметры которого определяют положение ротора. Период ШИМ около 20 мС, длительность сигнала управления от 500 до 2100 мкС.

Задача

Идея и знания порождают задачу, которую необходимо решить. Сформулируем задачу для воплощения идеи. Это что-то вроде Технического Задания. Кажется, все просто, надо взять генератор импульсов с изменяемой скважностью, подключить питание к сервоприводу, а с генератора подать управляющий сигнал. Особо отметим, что в требованиях есть изменения скважности - то есть должны быть органы управления или пользовательский интерфейс.

Реализация

Вот тут и начинаются муки творчества: что взять и где взять? Можно найти готовый лабораторный импульсный генератор, например Г5-54 с ручками, кнопками, выставить нужные параметры, подключить генератор к сервоприводу. Однако это громоздко и не все могут позволить себе такую роскошь. Поэтому разработчики, опираясь на свой опыт и знания, пытаются совместить желание (идею-задачу) и возможности (материальные и творческие) для реализации задачи. Материальные возможности - это та “жаба” “А сколько и чего я хочу потратить на реализацию идеи?” Творческие возможности - это, “посмотрю-ка я, что у меня уже есть”. Это не обязательно какие-то материальные ценности, а опыт и знания предыдущих разработок, которые можно приспособить под реализацию. Также не лишним будет поискать (погуглить), что кто-то уже реализовывал что-то подобное. Для сокращения вариантов решения необходимо самому добавлять дополнительные требования, ограничивающие фантазии реализации. Например, добавим к требованиям еще одно условие, пусть это будет материальное ограничение, реализация должна быть недорогой .

Поиск альтернатив

Воспользовавшись интернетом, поищем варианты, которые предлагает СЕТЬ. Зададим в поиске: “генератор прямоугольных импульсов с переменной скважностью”. Получим очень много вариантов, как с применением интегральных таймеров NE555 (отечественный аналог КР1006ВИ1), так и на логических микросхемах. Из всего разнообразия я выбрал вариант генератора на инверторе с триггером Шмитта на входе. Во-первых, он самый простой, во-вторых, требует минимум деталей и самое интересное использует единственный логический элемент из шести, если, например, использовать микросхему 74HC14.

Схема такого генератора выглядит так:

Немного теории

Теория гласит, что частота такого генератора равна f = 1/T = 1/(0.8*R*C). Для получения требуемой частоты требуется выбрать номинал одного из элементов, задающих частоту. Так как логический элемент выполнен по технологии КМОП, то имеет большое входное сопротивление, поэтому можно применять элементы задающие небольшие рабочие токи. Выберем емкость С1 из ряда распространенных номиналов, например 0.47 мкФ. Тогда для получения требуемой частоты (50Гц) резистор должен быть приблизительно 53 кОм, но такого резистора в стандартном ряду нет, поэтому выберем 51 кОм.


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

Тогда схема примет следующий вид:


Казалось бы: все, задача решена, но в крайних положениях переменного резистора поведение сервопривода нестабильно. Это связано с тем, что значение длительности импульсов, в крайних положениях переменного резистора, не соответствует требуемым. Лично мне также не по душе применение переменного резистора, поэтому я хочу изменить интерфейс управления, добавив новую “хотелку” в техническое задание, например чтобы скважность менялась в зависимости от освещенности. Для этого есть простое и недорогое решение: применить в качестве регулирующего элемента фоторезистор GL55xx (используют в проектах Arduino), изменение сопротивления которого лежит в широком диапазоне.

Далее начинается самое интересное. Расчетных формул для получения значений сопротивлений обеспечивающих требуемые длительности импульсов нет, поэтому на уровне интуиции (опытным путем, с помощью переменного резистора) определяем значения сопротивления, при которых устанавливаются требуемые значения длительностей импульсов. Затем изменяем схему так, чтобы при изменении сопротивления фоторезистора общее сопротивление изменялось, устанавливая требуемые значения длительностей импульсов.

Итоговая схема принимает следующий вид:

Пояснения к итоговой схеме

Конденсатор С1 номиналом 0.47 мкФ, определяет время перезаряда. Резистор R1 номиналом 51 кОм задает основную частоту повторения импульсов в районе 50 Гц. Комбинация резисторов R2-R4 в сумме будет изменяться в диапазоне от 2.5 кОм до 24 кОм в зависимости от освещенности. Вместе с диодом D1 эти резисторы будут влиять на время перезаряда конденсатора С1 при действии положительного импульса на выходе логического элемента, тем самым определять его длительность.

Результат

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

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

Устройство и работа

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

1 — Шестерни редуктора
2 — Выходной вал
3 — Подшипник
4 — Нижняя втулка
5 — Потенциометр
6 — Плата управления
7 — Винт корпуса
8 — Электродвигатель постоянного тока
9 — Шестерня электродвигателя

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

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

Такой датчик получил название энкодера. В качестве энкодера может применяться потенциометр. Если бегунок потенциометра поворачивать, то будет изменяться его сопротивление. Значение этого сопротивления прямо пропорционально зависит от угла поворота потенциометра. Таким образом, есть возможность добиться установки определенного положения механизма.

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

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

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

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

Виды сервоприводов

При необходимости создания управления несколькими группами сервоприводов используют контроллеры с ЧПУ, которые собраны на схемах программируемых логических контроллеров. Такие сервоприводы способны обеспечить крутящий момент 50 Н*м, мощностью до 15 киловатт.

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

Асинхронные способны точно выдерживать скорость даже на очень низких оборотах.

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

Характеристики сервоприводов

Рассмотрим основные параметры, которые характеризуют сервоприводы:

  • Усилие на валу . Этот параметр является крутящим моментом. Это наиболее важный параметр сервопривода. В паспортных данных чаще всего указывается несколько значений момента для разных величин напряжения.
  • Скорость поворота также является важной характеристикой. Она указывается в эквиваленте времени, необходимом для изменения позиции выходного вала привода на 60 градусов. Этот параметр также могут указывать для нескольких значений напряжения.
  • Тип сервоприводов бывает аналоговый или цифровой.
  • Питание . Основная часть сервоприводов функционирует на напряжении 4,8-7,2 вольта. Питание подается чаще всего по трем проводникам: белый – сигнал управления, красный – напряжение работы, черный – общий провод.
  • Угол поворота – это наибольший угол, на который выходной вал способен повернуться. Чаще всего этот параметр равен 180 или 360 градусов.
  • Постоянного вращения . При необходимости обычный сервопривод можно модернизировать для постоянного вращения.
  • Материал изготовления редуктора сервоприводов бывает различным: карбон, металл, пластик, либо комбинированный состав. Шестерни, выполненные из пластика, не выдерживают ударных нагрузок, однако обладают высокой износостойкостью. Карбоновые шестерни намного прочнее пластмассовых, но имеют высокую стоимость. Шестерни из металла способны выдержать значительные нагрузки, падения, но имеют низкую износостойкость. Выходной вал редуктора устанавливают по-разному на разных моделях: на втулках скольжения, либо на шариковых подшипниках.


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

Применение

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

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

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

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

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

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

Сервопривод отопления

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


1 — Блок питания
2 — Комнатные термостаты
3 — Коммутационный блок
4 — Серводвигатели
5 — Подающий коллектор
6 — Обход
7 — Водяной теплый пол
8 — Обратный коллектор
9 — Датчик температуры воды
10 — Циркулярный насос
11 — Шаровый клапан
12 — Регулировочный клапан
13 — Двухходовой термостатический клапан

Привод системы отопления функционирует совместно с термостатом, установленным на стену. Кран с электрическим приводом монтируется на трубе подачи теплоносителя, перед коллектором теплого водяного пола. Далее выполняется подключение питания 220 вольт и настройка терморегулятора рабочего режима.

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

Привод механически соединен с клапаном для его управления. Клапаны могут быть двух- и трехходовыми. Двухходовой клапан может изменять температуру воды в системе. Трехходовой клапан способен поддерживать температуру неизменной, однако изменяет потребление горячей воды, которая подается в контуры. В устройстве трехходового клапана имеется два входа для горячей воды (трубы подачи) и выход обратной воды, через который подается смешанная вода с заданной температурой.

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

Сервоприводы багажника

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

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

Электрический привод выполняется с разными способами управления:

  • Рукояткой на крышке багажника.
  • Кнопкой на панели двери водителя.
  • С пульта сигнализации.

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

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

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

Наиболее приемлемыми по цене являются сервоприводы багажника, которые выполняют только открывание. Функция закрывания для них недоступна. Также можно выбрать конструкцию модели привода, имеющего инерционный механизм. Он играет роль блокировки при появлении препятствия при движении багажника.

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

Для самых начинающих. Проверенный код в статье. Подключим, повернем, разберемся с питанием.
В руки прибыл сервопривод SD90 с диагнозом неправильной работы и практически с полным отказом (По словам). Надо разобраться.
Общая информация нужна, информация важна
SD-90 - практически самый дешевый сервопривод на рынке электроники.
Вес всего 15 грамм, а крутящий момент 2кг/см. Работает данный сервопривод SD90 в температурах от -30 до +60 градусов.
Рабочее напряжение от 4В до 8В.
Потребление в движении 70 мА, а в удержании 15 мА.
Угол поворота составляет всего 180 градусов.
Сервопривод SD90 идеально подходит для установки на авиамодели.

Для управления сервоприводами с помощью Ардуин есть стандартная библиотека в IDE Arduino Servo.h , которая включает в себя функции для установки настроек сервопривода, необходимого угла, считывания состояния. Некоторые методы являются перегруженными.

Обращаемся к китайским друзьям за мануалами и судя по рисунку ниже подключение сервопривода SG90 не составляет труда.

Два провода отвечают за питание и один провод для управления. Ниже приведен код программы для ардуино который даст некоторые пояснения.

    * Специально для сайта сайт

    * Сервопривод SG90 + Arduino. Подключение

    //Библиотека для работы с сервоприводом

    #include ‹Servo.h›

    //Обьявление переменной - объекта

    Servo servo;

  1. void setup()

    //К пину №7 подключен управляющий вывод сервопривода

    //Данный метод библиотеки указывает пин через который происходит управление

    servo.attach (7 ) ;

    //servo.detach(7); - этот метод отключит управление от указанного пина.

  2. void loop()

    //Установка вала в 0 градусов

    servo.write (0 ) ;

    delay(2000 ) ; //ждем 2 секунды. Необходимо как минимум 30 микросекунд для установки.

  3. servo.write (90 ) ; //ставим вал под 90 градусов

  4. // В библиотеке есть функция для чтения текущего положения (угла) сервопривода.

    // Будет считано последнее установленное значение в сервоприводе.

    // int AngleServo=servo.read();

    // От 0 до 180 градусов.

  5. servo.write (180 ) ; //ставим вал под 190 градусов

    delay(2000 ) ; //ждем 2 секунды.

  6. //Медленно возвращаемся обратно с интервалом в 1 градус

    for (int p= 179 ; p>= 1 ; p-- )

    servo.write (p) ;

    delay(20 ) ;

    //Угол (Установить) можно задать во времени от нуля.

    //Так как у сервопривода есть характеристика скорости поворота 0.12 сек/60 град

    1 - Коннектор для подключения
    2 - Схема управления сервоприводом, обработки сигналов
    3 - Потенциометр
    4 - Двигатель
    5 - Вал

    Так вот, в самом начале я говорил что в руки попал почти не рабочий сервопривод (По словам). После разбирательств стало понятно что Ардуина имела питание от USB компьютера, а сам сервопривод от Arduino.
    Если углубится в подробности то в экспериментах с было установлено то что китайская версия MEGA не вытягивает нагрузку 150 мА. Сервопривод SG90 в момент движения вала создает нагрузку 75-90 мА в зависимости от нагрузки вала. В итоге при старте Ардуины у человека который попросил разобраться в данной проблеме происходил сброс самой ардуины от повышенной нагрузки и соответственно сервопривод не подавал никаких признаков.

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

    В итоге что бы предотвратить нагрузку на Arduino необходимо между питанием и землей установить поддерживающий конденсатор емкостью 1000мФ 10V. И керамический конденсатор любой емкости для предотвращения дребезга от сервопривода (при нагрузке) на Ардуину. Это решение нельзя использовать для постоянного использования, но в экстренных случаях этот вариант вполне подойдет.

    Обратите внимание что данный вариант подойдет для сервоприводов типа "микро". Для больших сервоприводов данный метод для питания все равно даст просадку напряжения, это будет заметно по LED индикаторам ардуины, но все же предотвратит полный сброс.

В этой статье мы поговорим о сервоприводах в проектах Ардуино. Именно благодаря серводвигателям обычные электронные проекты становятся робототехническими. Подключение серво к 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) вы сможете без труда повторить приведенные примеры и создать свои первые проекты, в которых что-то движется и изменяется. Надеемся, эта статья поможет вам в этом.

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

Угол на который поворачивается серва, задается шириной импульса. Стоит уточнить небольшую тонкость, сервоприводы бывают разные. Бывают такие, которые крутятся постоянно в определенную сторону, при этом ширина импульса влияет только на скорость поворота. Бывают многооборотистые. Те о которых речь пойдет дальше, на сайте производителя имеют явную маркировку, в которой указан угол поворота. Поэтому учтите если серва, не имеет явной маркировки, то может оказаться так, что она тупо постоянно вращается. Не путайте, надписи 0.20 sec/60° означают скорость вращения, они никак не связаны с максимальным углом поворота.

Перейдем к теории. Представляем себе микроконтроллер с подключенным к АЦП входу резистором R и некий движок, который крутится по ШИМ сигналу PWM. Допустим уровень сигнала АЦП напрямую связан с ШИМ выходом, тогда когда мы будем крутить резистор, то скорость будет меняться, когда напряжение АЦП станет равным 0, движок остановится.

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

Типовые кишки выглядят так:

На фотке видно что резистор и моторчик соединяется через кучу шестеренок, поэтому если полезете внутрь будьте готовы что на вас высыпется все это добро. Вид снизу

Чаще всего ширина импульса колеблется в диапазоне от 1100мкс до 1900мкс, при периоде 20мс, но цифры могут отличаться, причем достаточно сильно. Пример из даташита:
Control System: +Pulse Width Control 1520usec Neutral
Required Pulse: 3-5 Volt Peak to Peak Square Wave
Operating Voltage: 4.8 Volts
Operating Speed (6V): 0.20sec/60 degrees at no load
Operating Angle: 45 Deg. one side pulse traveling 400usec
Continuous Rotation Modifiable: No
Direction: Counter Clockwise/Pulse Traveling 1520-1900usec

Отсюда четко видно, что средняя точка 1520мкс, чтобы повернуть такую серву на 45градусов, уже нужно подать импульс 1900мкс, соответственно остальные углы рассчитываются пропорцией. Чтобы повернуть на -45 градусов нужно подать импульс 1100мкс. Т.е. диапазон 90град. Еще видно, что под Continuous Rotation сей девайс не заточен, что хорошо.

Перейдем к практике. Есть поциент Futaba S3152, которым нужно покрутить туды — сюды.

Также можно это дело потестить в протеусе. Обычное подключение по трем проводам красный +5В, черный — земля, белый — управляющий.

В последних версиях CAVR, в Codewizard появилось много ништяков, например можно вбить цифры в попугаях и увидеть период и импульс в секундах. Собственно нам важен режим fast pwm top ICR. Примечателен этот режим тем, что ICR задает период, а OCR ширину импульса.

Период вычисляется очень просто:
ICR = (Частота таймера/50Hz)-1

Тогда нужную ширину импульса можно легко вычислить по пропорции:
20ms = ICR
?ms = OCR

В итоге можно переписать так:
OCR = (x*ICR)/20; где x это необходимая длительность импульса. Например, нужна длительность импульса в 1мс, значит OCR= (1*9C3)/20=0x7C.

Собственно и все. Теперь исходим из того, что нейтральная точка = 1524мкс или OCR1 = (1.524*9C3)/20 = 0xBE и зависимости от тогу куда нам нужно повернуть пересчитываем OCR. Простенький пример, поворачиваем на -45, затем 0 и потом +45.

#include #include void main(void ) { // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=Out Bit2=In Bit1=Out Bit0=In DDRB= (0 << DDB7) | (0 << DDB6) | (0 << DDB5) | (0 << DDB4) | (1 << DDB3) | (0 << DDB2) | (1 << DDB1) | (0 << DDB0) ; // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=0 Bit2=T Bit1=0 Bit0=T PORTB= (0 << PORTB7) | (0 << PORTB6) | (0 << PORTB5) | (0 << PORTB4) | (0 << PORTB3) | (0 << PORTB2) | (0 << PORTB1) | (0 << PORTB0) ; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 125,000 kHz // Mode: Fast PWM top=ICR1 // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 20 ms // Output Pulse(s): // OC1A Period: 20 ms Width: 0,9924 ms // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A= (1 << COM1A1) | (0 << COM1A0) | (0 << COM1B1) | (0 << COM1B0) | (1 << WGM11) | (0 << WGM10) ; TCCR1B= (0 << ICNC1) | (0 << ICES1) | (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10) ; TCNT1H= 0x00 ; TCNT1L= 0x00 ; ICR1H= 0x09 ; ICR1L= 0xC3 ; OCR1AH= 0x00 ; OCR1AL= 0x7C ; OCR1BH= 0x00 ; OCR1BL= 0x00 ; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK= (0 << OCIE2) | (0 << TOIE2) | (0 << TICIE1) | (0 << OCIE1A) | (0 << OCIE1B) | (0 << TOIE1) | (0 << TOIE0) ; while (1 ) { //-45 OCR1A = (1100 * 0x9C3 ) / 20000 ; delay_ms(1000 ) ; //0 OCR1A = (1524 * 0x9C3 ) / 20000 ; delay_ms(1000 ) ; //+45 OCR1A = (1900 * 0x9C3 ) / 20000 ; delay_ms(1000 ) ; } }

#include #include void main(void) { // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=Out Bit2=In Bit1=Out Bit0=In DDRB=(0<

Получилось так:

Для stm32 приведу пример настройки, которая помойму даже проще. Пример для stm32f103, нога PA1, тактовая 72МГц.

//Настройка ножки PA1 на альтернативную функцию GPIO_InitTypeDef PORT_SETUP; PORT_SETUP.GPIO_Mode = GPIO_Mode_AF_PP; PORT_SETUP.GPIO_Pin = GPIO_Pin_1; PORT_SETUP.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, & PORT_SETUP) ; //настройка таймера TIM_TimeBaseInitTypeDef TIM_SETUP; TIM_SETUP.TIM_CounterMode = TIM_CounterMode_Up; TIM_SETUP.TIM_Period = 4096 ; TIM_SETUP.TIM_Prescaler = 351 ; // 72мгц/4096/351=50hz TIM_TimeBaseInit(TIM2, & TIM_SETUP) ; //настройка ШИМ TIM_OCInitTypeDef PWM_SETUP; //PWM_SETUP.TIM_Pulse = 200; //4096 = 20ms 200 ~ 1ms PWM_SETUP.TIM_Pulse = 0 ; PWM_SETUP.TIM_OCMode = TIM_OCMode_PWM2; PWM_SETUP.TIM_OutputState = TIM_OutputState_Enable; PWM_SETUP.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC2Init(TIM2, & PWM_SETUP) ; TIM_Cmd(TIM2, ENABLE) ; while (1 ) { .... //где то внутри основного цикла меняем угол поворота переменной result TIM2-> CCR2 = (4096 * result) / 20000 ; }

//Настройка ножки PA1 на альтернативную функцию GPIO_InitTypeDef PORT_SETUP; PORT_SETUP.GPIO_Mode = GPIO_Mode_AF_PP; PORT_SETUP.GPIO_Pin = GPIO_Pin_1; PORT_SETUP.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &PORT_SETUP); //настройка таймера TIM_TimeBaseInitTypeDef TIM_SETUP; TIM_SETUP.TIM_CounterMode = TIM_CounterMode_Up; TIM_SETUP.TIM_Period = 4096; TIM_SETUP.TIM_Prescaler = 351; // 72мгц/4096/351=50hz TIM_TimeBaseInit(TIM2, &TIM_SETUP); //настройка ШИМ TIM_OCInitTypeDef PWM_SETUP; //PWM_SETUP.TIM_Pulse = 200; //4096 = 20ms 200 ~ 1ms PWM_SETUP.TIM_Pulse = 0; PWM_SETUP.TIM_OCMode = TIM_OCMode_PWM2; PWM_SETUP.TIM_OutputState =TIM_OutputState_Enable; PWM_SETUP.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC2Init(TIM2, &PWM_SETUP); TIM_Cmd(TIM2, ENABLE); while(1) { .... //где то внутри основного цикла меняем угол поворота переменной result TIM2->CCR2 = (4096 * result)/20000; }

И пара бонусных моментов. Особо крутые сервоприводы могут программироваться, качаешь отдельную софтинку, покупаешь спецпрограмматор и втыкаешься в те же 3 провода и можно регулировать параметры. Фактически прошивайка работает по юарту.

Еще один момент, это крепление нагрузки. Пластиковые штуки, которые крепятся на вал называются качалками.



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

Наверх