Принцип работы и внутреннее устройство
Сервопривод Ардуино (англ. - arduino servo) - устройство с электрическим мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время.
Именно устройство, ведь на рисунке выше, в приведенном внутреннем устройстве сервопривода, показаны все механизмы и электронная начинка. В сервоприводе есть даже свой встроенный контроллер.
Сервоприводы имеют несколько составных частей. Привод — электромотор с редуктором. Зачастую скорость вращения мотора бывает слишком большой для практического использования. Для понижения скорости используется редуктор: механизм из шестерней, передающий и преобразующий крутящий момент.
Для контроля положения используется датчик обратной связи — энкодер, который будет преобразовывать угол поворота обратно в электрический сигнал. Для этого часто используется потенциометр. При повороте бегунка потенциометра происходит изменение его сопротивления, пропорциональное углу поворота. Таким образом, с его помощью можно установить текущее положение механизма.
Электронная начинка, которая отвечает за приём внешнего параметра, считывание значений с потенциометра, их сравнение и включение/выключение мотора. Она-то и отвечает за поддержание отрицательной обратной связи.
К сервоприводу тянется три провода. Два из них отвечают за питание мотора (самый КРАСНЫЙ) и землю (самый ЧЕРНЫЙ), третий доставляет управляющий сигнал (самый СВЕТЛЫЙ), который используется для выставления положения устройства.
Основная характеристика сервопривода - крутящий момент. Простыми словами - масса, которую может поднять сервопривод рычагом в 1 см.
Управление сервоприводом
Чтобы указать сервоприводу желаемое положение, по предназначенному для этого проводу необходимо посылать управляющий сигнал. Управляющий сигнал — импульсы постоянной частоты и переменной ширины.
То, какое положение должен занять сервопривод, зависит от длины импульсов. Когда сигнал поступает в управляющую схему, имеющийся в ней генератор импульсов производит свой импульс, длительность которого определяется через потенциометр. Другая часть схемы сравнивает длительность двух импульсов. Если длительность разная, включается электромотор. Направление вращения определяется тем, какой из импульсов короче. Если длины импульсов равны, электромотор останавливается.
В большинстве сервоприводов импульсы производятся с частотой 50 Гц. Это значит, что импульс испускается и принимается раз в 20 мс. Обычно при этом длительность импульса в 1520 мкс означает, что сервопривод должен занять среднее положение. Увеличение или уменьшение длины импульса заставит сервопривод повернуться по часовой или против часовой стрелки соответственно. При этом существуют верхняя и нижняя границы длительности импульса. В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.
Также стоит отметить, что это всего лишь общепринятые длины. Даже в рамках одной и той же модели сервопривода может существовать погрешность, допускаемая при производстве, которая приводит к тому, что рабочий диапазон длин импульсов немного отличается. Для точной работы каждый конкретный сервопривод должен быть откалиброван: путём экспериментов необходимо подобрать корректный диапазон, характерный именно для него.
На что ещё стоит обратить внимание, так это на путаницу в терминологии. Часто способ управления сервоприводами называют PWM/ШИМ (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation). В нём крайне важна длина импульсов и не так важна частота их появления. 50 Гц — это норма, но сервопривод будет работать корректно и при 40, и при 60 Гц. Единственное, что нужно при этом иметь в виду — это то, что при сильном уменьшении частоты он может работать рывками и на пониженной мощности, а при сильном завышении частоты (например, 100 Гц) может перегреться и выйти из строя.
Программа управления сервоприводом
Для управления сервоприводом в Arduino IDE уже есть встроенная библиотека. Все действия по выставлению частоты и других параметров сокрыты от пользователя функциями библиотеки. Такой подход очень удобен, для того что бы сосредоточиться на алгоритмах управления непосредственно сервоприводом, не вдаваясь глубоко в детали.
Пример 1
Напишем простейшую программу для управления сервоприводом:
#include <Servo.h> // подключаем библиотеку для управления сервоприводами
Servo myservo; //создаём объект класса Servo, можно сказать переменную типа Servo
void setup() {
myservo.attach(9); // обязательно указываем, на каком пине подключен сервопривод
}
void loop() {
myservo.write(90); //устанавливаем заданный угол
delay(1000); //ждём 1 секунду
myservo.write(0); //устанавливаем заданный угол
delay(1000);
myservo.write(90); //устанавливаем заданный угол
delay(1000);
myservo.write(180); //устанавливаем заданный угол
delay(1000);
}
Визуализация работы сервопривода:
Данный пример удобен , если сервопривод работает без нагрузки или подключен к очень мощному источнику питания. такие резкие перемещения плохо сказываются на шестернях редуктора, а скачки тока могут привести к перезагрузке платы ардуино (при подключении напрямую). Что бы избежать подобных ситуаций воспользуемся рекомендацией библиотеки Servo.
Пример 2
Откроем стандартный пример Sweep:
Немного перепишем стандартный пример, с комментариями и более корректными инкрементами в циклах for:
Плавно двигаться сервопривод должен вот так:
Правила участия в Сервомарафоне:
Марафон по сервоприводам проводится в инстаграме, полезные материалы и задания будут размещаться в статьях в моём канале zen.yandex и на Youtube.
- Для закрепления материала, изложенного в статье вам необходимо решить задачу в конце статьи.
- Если у вас есть ардуино и сервопривод для тестов, то нужно записать короткую демонстрацию работы программы и механизмов, и выложить на своей страничке в инстаграме, с упоминанием @robot_i_ya, @alexyurichk и хештеги ##сервоМарафон #servoMarafon.
- Если нет ардуино, но вы являетесь учеником робоклуба "Робот и Я", то в чатах групп будут указаны почты. Присланные решения будут выложены отдельным видео, в случае работоспособности кода программы
- Правильно выполнивший наибольшее количество заданий за весь период сервомарафона получит символический приз для усовершенствования своего конструктора HUNA-MRT и создания новых проектов
- В случае равенства лидеров сервомарафона, критериями будут аккуратность кода и первенство выполнения
Задание №1
Доработать последнюю программу так, что бы сервопривод сохраняя плавное вращение задерживался ровно на 1 секунду в положении 0, 90, 180 градусов.
Пример того, как не совсем правильно будет двигаться сервопривод: