Подключение сервопривода к ардуино. Подключаем сервопривод к Arduino

21.07.2019

Учимся управлять сервомотором с использованием Arduino.

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

Необходимые узлы

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

1 переменный резистор (потенциометр) на 10 кОм



1 микроконтроллер Arduino Uno



1 конденсатор на 100 мкФ (не обязательно)


Схема подключения для "Sweep" (автоматическое вращение)

Для этого эксперимента вам надо подключить к Arduino только сервомотор.


На сервомоторе 3 контакта. Цвет контактов может отличаться в зависимости от фирмы производителя, но красный - это всегда контакт 5 В. Контакт GND (земля) может быть черным или коричневым. Оставшийся третий контакт - это сигнал, который используется для управления положением ротора сервы. Обычно он желтого или желтого цветов. Этот контакт мы подключаем к цифровому пину 9 на Arduino.

На контактах сервы предусмотрены разъемы, в которые можно установить коннекторы (провода) и соединить из макетной платой, а потом с Arduino.


Серводвигатель дергается

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

Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке.


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

Длинная нога конденсатора - это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом "-".

Скетч Arduino "Sweep" (автоматическое вращение)

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

Программа основана на стандартном скетче "sweep", который вы можете найти в меню Arduino Examples в папке "servo".

#include <Servo.h>

int servoPin = 9;

int angle = 0; // угол сервы в градусах

servo.attach(servoPin);

// инкремент от 0 до 180 градусов

for(angle = 0; angle < 180; angle++)

servo.write(angle);

// теперь в обратном направлении от 180 до 0 градусов

for(angle = 180; angle > 0; angle--)

servo.write(angle);

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

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

#include <Servo.h>

Используем переменную "servoPin" для определения порта, который управляет сервой.

Следующая строка:

инициализирует новую переменную "servo" типа "Servo". Библиотека предоставляет нам новый тип данных наподобие "int" или "float", который отвечает за серву. Таким образом вы можете инициализировать восемь серводвигателей. Например, если у нас две сервы, можно записать следующее:

В теле функции "setup" мы должны согласовать переменную "servo" с пином, который будет управлять серводвигателем, используя команду:

servo.attach(servoPin);

Переменная "angle" используется для указания текущего угла поворота сервы в градусах. В теле функции "loop" мы используем используем два цикла "for". Один - для увеличения угла поворота в одном направлении и второй - для возврата, когда мы совершили поворот на 180 градусов.

servo.write(angle);

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

Схема подключения сервы с потенциометром ("Knob")

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

Надо просто добавить на макетную плату потенциометр и проводник от контакта сигнала с потенциометра на пин A0 на Arduino.


Скетч Arduino "Knob" (управление сервой с помошью потенциометра)

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

#include <Servo.h>

int servoPin = 9;

servo.attach(servoPin);

int reading = analogRead(potPin); // от 0 до 1023

int angle = reading / 6; // от 0 до 180

servo.write(angle);

В скетче добавлена переменная с именем "potPin".

Для того, чтобы вывести вал сервы в положение, мы считываем значение с контакта Arduino A0. Значение с этого контакта будет находится в диапазоне между 0 и 1023. Так как серва может поворачиваться только на 180 градусов, нам надо масштабировать полученные значения. Разделив значения с контакта A0 на 6 мы получаем угол в диапазоне от 0 до 170, что нас вполне устраивает.

Сервомоторы - общая информация

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

Положение выходного вала сервомотора определяется длиной импульса. Серва может получать импульсы каждые 20 миллисекунд. Если импульс high длится 1 миллисекунду, угол поворота сервы будет равен нулю. Если 1.5 миллисекунды, тогда серва выйдет в свое центральное положение, а если 2 миллисекунды - выйдет в положение, которое соответствует 180 градусам.


Крайние положения сервомоторов могут отличаться. Кроме того, многие сервы могут поворачиваться на 170 градусов. Есть и "continuous" сервы, которые совершают оборот на полные 360 градусов.

Внутри сервы

На видео, которое приведено ниже, показано, что происходит внутри сервомотора.

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

Дальнейшие эксперименты с сервой и Arduino

Откройте скетч "sweep" и попробуйте сократить задержки с 15 миллисекунд до, скажем, 5 миллисекунд. Обратите внимание, насколько быстрее начали вращаться сервы.

Попробуйте изменить скетч "knob". Вместо того, чтобы ориентироваться на значения с потенциометра, реализуйте управление сервой с помощью значений, которые вы указываете в окне серийного моитора Arduino IDE.

Небольшая подсказка: для того, чтоьы скетч считывал значения угла с серийного монитора, вы можете использовать функцию Serial.parseInt(). Эта функция парсит (считывает) числовые значения с серийного монитора.

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

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

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

Но если мы хотим управлять серводвигателем «вручную», например, с помощью потенциометра, нам необходим генератор импульсного управления. Ниже представлена достаточно простая схема генератора на основе интегральной микросхемы 74HC00.

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

Управления серводвигателем. Описание контроллера

Основой схемы является микросхема 74HC00 (IC1) представляющая собой 4 логических элемента И-НЕ. На элементах IC1A и IC1B создан генератор, на выходе которого образуются импульсы с частотой 50 Гц. Эти импульсы активируют RS-триггер, состоящий из логических элементов IC1C и IC1D.

С каждым импульсом идущим с генератора выход IC1D устанавливается в «0» и конденсатор С2 разряжается через резистор R2 и потенциометр P1. Если напряжение на конденсаторе С2 снижается до определенного уровня, то RC-цепь переводит элемент в противоположное состояние. Таким образом, мы на выходе получаем прямоугольные импульсы с периодом 20 мс. Ширина импульсов устанавливается потенциометром P1.

Например, сервопривод Futaba S3003 изменяет угол вращения вала на 90 градусов за счет управляющих импульсов продолжительностью от 1 до 2 мс. Если мы изменим ширину импульса от 0,6 до 2 мс, то угол поворота составит до 120 °. Компоненты в схеме подобраны таким образом, что выходной импульс находится в диапазоне от 0,6 до 2 мс, и поэтому угол установки составляет 120 °. Серводвигатель S3003 от Futaby имеет достаточно большой крутящий момент, и ток потребления может составлять от десятков до сотен мА в зависимости от механической нагрузки.

Конструкция

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

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

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

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

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

Подключение к 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 Пульт. Включение выключение светодиода.

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

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

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

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

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

    Привод;

    Датчик;

    Блок управления;

    Конвертер.

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


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

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

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

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

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

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

Область применения сервоприводов сегодня весьма широка, благодаря возможности исключительно точного позиционирования рабочего органа.

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

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

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

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

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

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

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