Тарифы        01.08.2019   

Сервопривод постоянного вращения. Простой контроллер управления серводвигателем

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

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

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

. Управляющая плата

. Соединительные провода

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

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

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

Как видно из картинке, импульс шириной в 544мкс выставит выводной вал в положение 0°, 1520мск соответствует углу в 90°, а 2400мкс соответствует 180°.

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

Для подключения к контроллеру от сервопривода тянется 3 провода обжатых стандартным 3 пиновым разъемом с шагом 2.54мм. Цвета проводов могут варьироваться. Коричневый или черный - земля (GND), красный - плюс источника питания (VTG), оранжевый или белый - управляющий сигнал (SIG).

Подключение сервоприводов к Arduino

У старых Ардуин, укомплектованных мегой 8, имеется всего три ШИМ вывода (digital 9,10,11), у Ардуин укомплектованных мегой 168 или 328 их 6 (digital 3,5,6,9,10,11). Семейство Arduino MEGA имеет на своем борту целых 14 ШИМ выводов.

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

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

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

1. Подключение к Ардуино

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

У потенциометра есть всего три вывода. Крайние подключим к +5В и земле, а центральный к аналоговому входу A0.

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

  • коричневый — земля;
  • красный — питание +5В;
  • оранжевый (или желтый) — сигнальный.

Сигнальный провод подключим в цифровому выходу №8. В итоге, получим такую схему:

Подключать оба устройства к Ардуино Уно удобнее через макетную плату:

2. Программа

Теперь напишем несложную программу, которая свяжет все элементы нашего аппарата строгой логикой. Все что нам требуется от контроллера — это:

  • считывать показания с потенциометра в диапазоне от 0 до 1023;
  • преобразовывать полученное число в угол от 0 до 180 градусов;
  • передавать полученный угол на сервопривод.

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

Нажав в конструкторе кнопку «Arduino», откроем страницу с исходным кодом программы для среды Arduino IDE:

#include Servo servos; void setup(){ } void loop(){ servos.attach(8); servos.write((map(analogRead(A0), 0, 1024, 0, 180))); delay(50); }

Как видно из программы, для управления сервоприводом мы использовали библиотеку Servo . В этой библиотеке есть несколько полезных нам функций:

  • attach(номер_вывода) — инициализация сервопривода;
  • write(угол) — поворот сервопривода на заданный угол;
  • read() — получение текущего угла сервопривода.

Для отображения множества чисел 0 — 1023 в множество 0-180, конструктор применил функцию map . Ту же самую операцию, можно было осуществить с помощью выражения:

int angle = (value / 1023.0) * 180;

Загружаем программу на Ардуино Уно, и смотрим что получилось!

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

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

Результат

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

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

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

Начнем знакомство с самым популярным из них, по-другому он еще называется SG90 (Tower Pro Micro Servo 9G). Сервопривод представляет небольшую коробку, в которую запрятан сам механизм. Научившись правильно писать программный код, можно управлять положением вала.

Для подключение сервопривода к Arduino , на плате используется 3 контакта (для подключения используются 3 провода “папа-папа”): питание (5V), заземление и аналоговый выход (расположены на панели digital ). Наглядная схема подключения изображена на рисунке ниже:

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

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

  • attach (номер_вывода) - инициализация сервопривода;
  • write (угол) - поворот сервопривода на заданный угол;
  • read () - получение текущего угла сервопривода.

Теперь рассмотрим первую программу с использованием сервопривода.

Данная программа позволит изменять угол поворота вала на сервоприводе с течением времени:

#include ; //используем библиотеку для работы с сервоприводом Servo servo; //объявляем переменную servo типа Servo void setup() //процедура setup { servo.attach(10); //привязываем привод к порту 10 } void loop() //процедура loop { servo.write(0); //ставим вал под 0 delay(2000); //ждем 2 секунды servo.write(180); //ставим вал под 180 delay(2000); //ждем 2 секунды }

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

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

void setup () //процедура setup

servo . attach (10 ) ; //привязываем привод к порту 10

void loop () //процедура loop

servo . write (0 ) ; //ставим вал под 0

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

servo . write (180 ) ; //ставим вал под 180