Интернет - магазин инструкций к конструктору Lego Education

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

19.10.2017, 13:01


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

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


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

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

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

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

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

импульсы приём

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


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

Подключение Серво:

GND на любой из GND пинов ­­­ ардуино.

VTG на + 5 вольт на ардуино.

SIG на PWM(ШИМ) вывод ардуино.

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

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

Servo 9G 1000

Подключение мощных сервоприводов может вызвать большую просадку напряжения, контроллеру может не хватить питания, мега8 очень привередлива и из-за этого контроллер отключится. Так же на плате Arduino установлен маломощный стабилизатор не рассчитанный на потребление большого тока и чрезмерное потребление может перегреть его и повредить плату. Во избежание этого при использовании мощных серв, либо больше одной слабой, рекомендую подавать питание на сервопривод отдельно. Можно приобрести блок питания на 5 или 6 вольт, в зависимости от напряжения питания ваше сервы, либо поставить стабилизатор. В данной статье разберем самый простой на мой взгляд стабилизатор из серии 7800, требующий минимум деталей внешней обвязки.

Servo 7805 1000 setka

Стабилизатор имеет 3 ноги. первая- вход(подаем напряжение от 6 до 12 вольт) вторая- общий минус. третья выход 5 или 6 вольт в зависимости от выбранной модели.

7805 отечественный аналог КР142ЕН5А - выходное напряжение 5 вольт.

7806 отечественный аналог КР142ЕН5Б - выходное напряжение 5 вольт.

Как видно из рисунка необходима установка конденсаторов, можно и без них, но выходное напряжение будет не стабильным. Рекомендуемые номиналы конденсаторов: на входе 0.33 мкФ, на выходе 0.1 мкФ. Я всегда ставлю два по 100мкФ. Чем больше - тем лучше. И последнее и очень важное о чем стоит упомянуть так это то, что необходимо соединить земли источников питания.


Основы разобрали, переходим к примерам скетчей для Arduino.

Вариант 1

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

Пример программного кода

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

#include <Servo.h>

// для дальнейшей работы назовем 9 пин как servoPin

#define servoPin 9

// 544 это стандартная длина импульса при котором сервопривод должен принять положение 0°

#define servoMinImp 544

// 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180°

#define servoMaxImp 2400

Servo myServo;

void setup()

{

myServo.attach(servoPin, servoMinImp, servoMaxImp);

// устанавливаем пин как вывод управления сервоприводом,

// а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов.

// импульсы с большей или меньшей длиной восприниматься не будут.

// для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440.

// поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода.

}

void loop()

{

// устанавливаем качалку сервопривода в положение 0°(т.к.импульс равен 544мкс)

myServo.writeMicroseconds(servoMinImp);

delay(2000);

// в данной функции можно задавать длины импульсов непосредственно числами.

// 90°(т.к.импульс равен 1520мкс)

myServo.writeMicroseconds(1520);

delay(2000);

// 180°(т.к.импульс равен 2400мкс)

myServo.writeMicroseconds(servoMaxImp);

delay(2000);

}

Вариант 2

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

Пример программного кода

#include <Servo.h>

Servo myservo;

void setup()

{

// устанавливаем пин как вывод управления сервой 

myservo.attach(9);

}

void loop()

{

// устанавливаем угол 0° 

myservo.write(0); 

delay(2000);

// устанавливаем угол 90° 

myservo.write(90); 

delay(2000);

// устанавливаем угол 180° 

myservo.write(180); 

delay(2000);

}

Также вам могут понадобиться следующие команды:

myservo.read(); Считывает текущий угол поворота сервопривода, возвращает значение типа int — угол от 0 до 180 градусов.

myservo.attached();
Проверяем, привязан ли сервопривод. Возвращает логическое значение bool.

myservo.detach();
Отключает сервопривод от пина.


Давайте рассмотрим ещё один момент про сервоприводы: как сделать реверс сервопривода своими руками.

Реверс сервопривода


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

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

разбираем сервопривод

Аккуратно разбираем сервопривод и меняем местами провода идущие к электродвигателю.

меняем местами 2 крайних провода идущие к потенциометру

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

серва работает в обратную сторону

И все, серва работает в обратную сторону))). Не забудьте модернизированный сервопривод пометить маркером или наклейкой чтобы не возникло путаницы в будущем.

Дополнительная информация о сервоприводах


У нас есть книги, заметки и учебные материалы. Скачать можно бесплатно по ссылкам ниже:


Ключевые слова:
робототехника
робот
Роботы на платформе Ардуино
реверс сервопривода
Платформа Arduino
плата Ардуино
сервопривод
arduino nano
микросхема
ардуино
arduino



Ардуино Uno R3 распиновка
  • Краткое описание микроконтроллера Ардуино Uno R3 с картинкой распиновки и подробным описанием принципа работы ...
  • Arduino Nano 3.0 распиновка

    Arduino Nano 3.0 распиновка
  • Платформа Ардуино Нано 3.0 построена на микроконтроллере ATmega328, имеет небольшие размеры и может использоваться в разных проектах. Питание ...



  • Если вы хотите получать больше статей, подобно этой, то кликните Поделиться в социальных сетях! Спасибо!

    купи улей ру

    Обратите внимание полезная информация.