Что такое сервопривод на Ардуино

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

Что такое сервопривод на Ардуино

Для чего нужен сервопривод

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

Отличия от других типов двигателей

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

Параметр сравнения Шаговый мотор Мотор с сервоприводом
Наивысшая точность обработки детали, мкм 10 0,002
Стоимость двигателя Фланец до 110 мм Низкая Высокая
Фланец более 110 мм Сопоставимая
Затраты по настройке Низкие Высокие за счет большего числа настраиваемых параметров, что требует участия специалистов высокой квалификации.
Способность к быстрому ускорению Низкая из-за инертности: при быстром ускорении отмечены пропуски шагов или остановка вращения вала. Максимум 120 об/мин за 1 секунду. Высокая благодаря возможности повышения тока через обмотки в 3 или 4 раза от номинального. Максимум 1000 об/мин за 0,2 секунды.
Устойчивость к принудительной остановке Высокая Низкая: необходимо дооборудование системы, в противном случае возможно сгорание обмоток.
Наработка на отказ 20000 часов Бесколлекторные модели — 17000 часов, щеточные — 5000 часов до замены щеток.
Нагрев Сильный: может потребоваться принудительное охлаждение. Слабый
Уровень шума при эксплуатации Высокий Низкий

Отличия от других типов двигателей

Разновидности сервоприводов

Различают следующие виды следящих приводов:

  1. Синхронные. Отличаются высокой точностью вращения вала, угла поворота и ускорения.
  2. Асинхронные. Точно выдерживают заданную скорость на низких оборотах вала.
  3. Электромеханические. Содержат движок и редуктор с шестеренками в качестве передаточного устройства, соединяющего вал мотора с выходным валом рабочего органа.
  4. Электрогидромеханические. Вместо редуктора работает поршень, движущийся в цилиндре, благодаря чему быстродействие гидроприводов по сравнению с электромеханическими существенно выше.
  5. Щеточные. Построены на основе щеточных коллекторных движков с питанием от источника постоянного тока. Отличаются пониженной вибрацией, высокой скоростью работы и прецизионной точностью.
  6. Бесщеточные. Применяется бесколлекторный двигатель постоянного тока, иначе называемый движком с электронным коммутатором.
  7. С ограниченным углом вращения. Угол поворота не превышает 180 или 270°. Для предотвращения выхода вала за пределы 180 или 270° используется блокиратор.
  8. С неограниченным углом вращения, т.е. до 360°, поэтому валы способны функционировать непрерывно.
  9. По типу внутренней электроники различают аналоговые и цифровые устройства. Вторые сервоприводы работают быстрее и точнее, но стоят дороже.

Подключение к «Ардуино»

В стандартную схему подключения сервопривода к Arduino входит плата программируемого контроллера, двигатель и потенциометр, который имеет жесткую связь с рабочим органом мотора и является энкодером. Черный или коричневый провод энкодера соединяется с клеммой GND («земля») на плате контроллера, красный — с клеммой +5 В, желтый или оранжевый — с аналоговой клеммой ШИМ.

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

После включения системы активируется загрузчик контроллера. При отсутствии ошибок на плате начинает мигать светодиод, показывающий, что контроллер готов к загрузке прикладной программы, иначе называемой скетчем. Он загружается в «Ардуино» из ПК через кабель USB.

Управлять схемой допускается также с помощью джойстика, соединенного с платой контроллера «Ардуино Нано» и серводвижком. К плате манипулятор подключается земляным и плюсовым проводами питания, проводом управления и 2 проводами координат по осям X и Y. Еще один провод необходим для работы кнопки в режиме «нажата»/»отжата».

Для полноценной реализации поворотов в режиме 3D плата способна управлять сразу несколькими устройствами.

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

Задача: вал должен занять позицию 15° на 2 секунды, затем перейти в позицию 45° на 3 секунды, совершить оборот на 180° и через 0,5 секунды вернуться в начальную позицию 15°. Соответствующий поставленной задаче скетч показан в таблице 2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include(Servo.h)               // Используется библиотека Servo.h. Она деактивирует PWM-выводы №№9,10 на "Ардуино УНО" и 
                                // аналогичных платах, поэтому команда analogWrite() работать не будет.
 
int servoPin = 3;               // Задание штырькового вывода №3 для сервопривода.
Servo ServoArdn;
 
void setup()
{
    ServoArdn.attach(servoPin); // Объект ServoArdn ассоциирован с выводом №3.
}
 
void loop()
{
    ServoArdn.write(15);        // Установка угла на запись: вал занимает позицию 15°.
    delay(2000);                // Вал удерживается в позиции 15° 2000 мс = 2 секунды.
    ServoArdn.write(45);        // Позиция 45°.
    delay(3000);                // Удержание в позиции 45° 3 секунды.
    ServoArdn.write(180);       // Позиция 180°.
    delay(500);                 // Удержание в позиции 180° 0,5 секунды. После этого начинается новый цикл, вал устанавливается 
	                            // в позицию 15° и т.д.
}

​ Название ​

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

Если используется переменный резистор, то инструкцией int potPin объявляется аналоговый штырек (пин), к которому он будет подключен, а также переменная int val для считывания показаний с этого штырька.

В рабочий программный блок вписываются команды val = analogRead(potPin) (она нужна для чтения показаний потенциометра в диапазоне от 0 до 1023) и val = map(val, 0, 1023, 0, 179) для преобразования данных резистора в позиции вала серводвигателя от 0 до 180° командой myServo.write(val).

Управление устройством

Управление сервоприводом осуществляется при помощи компаратора путем сравнения длины контрольного импульса с длиной импульса, поступившего с энкодера. Частота следования импульсов задается не выше 80-90 Гц. Стандартные значения, принятые на практике, равны 40, 50 или 60 Гц. Возможны 3 ситуации:

  1. Длины равны.
  2. Длина контрольного импульса больше.
  3. Длина контрольного импульса меньше.

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

Ссылка на основную публикацию