Перейти к содержанию

Лабораторная работа 15. Сервопривод

Цель работы:

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

Теоретическая часть

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

Рисунок 15.1. Сервопривод

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

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

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

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

Рисунок 15.2. Схема управляющих сигналов

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

Крутящий момент М [Н*м] Скорость вращения T/60o [c] Максимальный прямой ток IF [А] Размер a x b x h [мм]

Вес m [г]

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

По весу различают маленькие, стандартные и большие сервоприводы, которые весят 8-25, 40-80, 50-90 грамм соответственно.

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

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

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

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

Практическая часть

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

Библиотека Servo.

Описание:

Библиотека функций для Arduino-контроллера предоставляет собой набор функций для управления сервоприводами. Стандартные серво- приводы позволяют поворачивать привод на определенный угол, обычно от 0 до 180 градусов. Некоторые из сервоприводов позволяют совершать полные обороты на заданной скорости.

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

Основные функции:

  1. Servo.attach()

Описание:

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

Синтаксис:

servo.attach(pin) servo.attach(pin, min, max)

Параметры:

  • servo: переменная типа Servo.
  • pin: номер выхода, к которому подключаем servo и с которого осуществляется управление приводом.
  • min: ширина импульса в микросекундах, соответствующая минимальному (угол 0 градусов) положению сервопривода (по умолчанию 544).
  • max: ширина импульса в микросекундах, соответствующая максимальному (угол 180 градусов) положению сервопривода.

Servo.write()

Описание:

Передает значения для управления приводом. Для стандартного сервопривода это угол поворота. Для привода постоянного вращения функция задает его скорость вращения (0 - для максимальной скорости вращения в одну сторону, 180 - для максимальной скорости в другую сторону и значение около 90 - для неподвижного состояния).

Синтаксис:

`servo.write(angle)`

Параметры:

servo: переменная типа Servo.

angle: значение, записываемое в servo, от 0 до 180.

Servo.writeMicroseconds()

Описание:

Передает значение для управления сервоприводом в микросекундах (uS), устанавливая угол поворота на это значение. Для стандартного при- вода значение 1 000 - максимальный поворот против часовой стрелки, 2 000 - максимальный поворот по часовой стрелке, 1 500 - посередине.

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

Приводы постоянного вращения реагируют на данную команду, подобно реакции на функцию write().

Синтаксис:

servo.writeMicroseconds(uS)

Параметры:

servo: переменная типа Servo.

uS: значение в микросекундах (int).

  1. Servo.read()

Описание:

Считывает значение текущего положения сервопривода (значение, записанное последним вызовом функции write() ).

Синтаксис:

servo.read()

Параметры:

servo: переменная типа Servo.

Возвращаемое значение:

Положение (угол) сервопривода от 0 до 180.

### Servo.attached()

Описание:

Проверяет, подключена ли переменная Servo к выходу.

Синтаксис:

servo.attached()

Параметры:

servo: переменная типа Servo

Возвращаемое значение:

True («ИСТИНА»), если подключена; false («ЛОЖЬ») - в противном случае.

### Servo.detach()

Описание:

Отсоединяет переменную Servo от указанного выхода.

Синтаксис:

servo.detach()

Параметры:

servo: переменная типа Servo.

Схема подключения:

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

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

Рисунок 15.3. Принципиальная схема подключения сервопривода к контроллеру

После сборки схема имеет следующий вид (Рисунок 15.4):

Рисунок 15.4. Подключение сервопривода к контроллеру КПМИС

Рабочая программа:

// Подключение библиотеки для сервоприводов. 
#include <Servo.h>


// Создание объекта для управления сервоприводом. 
Servo myservo;

void setup()

{

// Подключение сервопривода к 12 пину. 
myservo.attach(12);

}

void loop()

{

// Установка сервопривода в серединное положение.

// Если используется сервопривод постоянного вращения,

// то эта команда остановит вращение привода. 
myservo.write(90);

delay(500);

// Установка сервопривода в крайнее левое положение.

// Если используется привод постоянного вращения, то эта команда

// задаст

// максимальную скорость вращения привода в одну сторону. 
myservo.write(0);

delay(500);

// Установка сервопривода в крайнее левое положение.

// Если используется привод постоянного вращения, то эта команда

// задаст

// максимальную скорость вращения привода в другую сторону 
myservo.write(180);

delay(500);

}

Список дополнительных вопросов:

  1. Что такое сервопривод?
  2. Из чего он состоит?
  3. Что такое энкодер?
  4. Для чего применяют потенциометр в сервоприводах?
  5. Какие основные характеристики имеет сервопривод?
  6. В чём измеряется скорость сервоприводов?
  7. В чём различие между аналоговыми и цифровыми сервоприводами?
  8. Что отличает сервопривод постоянного вращения?
  9. Для чего используется библиотека Servo?
  10. Сколько функций имеет эта библиотека?
  11. Что делает и как работает функция byteRead?
  12. Как работает функция Servo.write()?

Список дополнительных задач:

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

Center-nav

← Назад | Оглавление | Вперёд →