Сервоприводы PDM постоянного вращения: особенности применения и примеры кода
Сервоприводы PDM постоянного вращения — это моторы, которые управляются сигналом PDM (Pulse Duration Modulation) и поддерживает скорость вращения вала в любом направлении без ограничений по углу поворота.
Сервоприводы непрерывного вращения используются для моделирования движения различных механизмов. На основе сервопривода можно собрать вращающийся столик для предметной фотосъёмки, мобильного бота или радар кругового обзора.
Список моделей
Модель | Форм-фактор | Сигнал управления | Обратная связь | Назначение | Внутренний интерфейс | Диапазон вращения |
---|---|---|---|---|---|---|
Feetech FS90R / Документация | Микро | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
Feetech FT90R / Документация | Микро | PDM | Нет | Постоянное вращение | Цифровой | 360° |
Feetech FS5103R | Стандарт | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
Feetech FS5113R | Стандарт | PDM | Нет | Постоянное вращение | Аналоговый | 360° |
Feetech FB5317M-360 / Документация | Стандарт | PDM | Да | Постоянное вращение | Цифровой | 360° |
Интерфейс управления
В сервоприводах PDM постоянного вращения скорость вращения вала зависит от длины импульса. Для управления мотором необходимо подавать особый сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса начинка сервопривода генерирует свой сигнал мотору.
В сигнале PDM частота импульсов постоянна и равна 50 Гц, т. е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит направление и скорость вращения мотора. Принято считать, что рабочая ширина импульса лежит в пределах 544–2400 мкс.
В качестве примера приведём данные для популярного хобби-сервопривода Feetech FS90R.
Период импульсов | Ширина импульса | Положение сервопривода |
---|---|---|
20 мс | 544 мкс | Вал сервопривода вращается по часовой стрелке (CW) с максимальной скоростью. |
20 мс | 1540 мкс | Вал сервопривода стоит на месте. |
20 мс | 2400 мкс | Вал сервопривода вращается против часовой стрелки (CWW) с максимальной скоростью. |
На разных приводах диапазон ширины импульсов и скорости поворота вала может отличатся от стандартного. Эти данные можно уточнить в характеристиках.
Даже в рамках одной и той же модели сервопривода существует погрешность, допускаемая при производстве, которая приводит к тому, что рабочий диапазон длин импульсов отличается. Для точной работы каждый конкретный сервопривод должен быть откалиброван: путём экспериментов необходимо подобрать корректный диапазон, характерный именно для него.
Часто способ управления сервоприводами называют PWM (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation) в котором важна длина импульсов, а не частота.
Если ваш сервопривод дребезжит, дёргается или стоит задача управлять несколькими серво, обратите внимание на плату расширения Multiservo Shield.
Сервоприводы с обратной связью
В сервоприводах PDM постоянного вращения также встречаются модели с обратной связью, у которых сигнал внутреннего потенциометра выведен отдельным проводом. Однако обратная связь показывает не скорость вращения вала, а его текущий угол поворота.
Обычно наличие сигнала обратной связи явно указывается в характеристиках сервопривода.
Питание сервопривода
Сервопривод можно запитать двумя способами: напрямую от контроллера (если позволяют характеристики) или же от внешнего источника питания.
Без внешнего источника питания
Если сервопривод питается напряжением 5 вольт и потребляет ток менее 500 мА, есть возможность запитать сервомотор непосредственно от контроллера.
Схема подключения
Цвет провода | Контакт | Функция | Подключение |
---|---|---|---|
Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода контроллера. |
Красный | V | Питание | Подключите к питанию контроллера. |
Коричневый / Чёрный | G | Земля | Подключите к земле контроллера. |
С внешним источником питания
Если сервопривод питается напряжением свыше 5 вольт или потребляет ток более 500 мА, то ему необходим внешний источник питания.
Схема подключения
Цвет провода | Контакт | Функция | Подключение |
---|---|---|---|
Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода контроллера. |
Красный | V | Питание | Подключите к внешнему источнику питания с подходящим вольтажом. |
Коричневый / Чёрный | G | Земля | Подключите к земле внешнего источника питания и земле контроллера. |
Примеры работы для Arduino
Возьмём для тестовых проектов популярный сервопривод Feetech FS90R. А мозгом выступит платформа Arduino Uno.
Подключение и настройка
Для наглядности схемы мы используем подключение сервопривода напрямую к контроллеру, без внешнего питания. Если вам нужен дополнительный блок питания, сверьтесь со схемами в разделе про питание сервопривода.
Сервоприводы: руководство по использованию для Arduino
Сервопривод — это электродвигатель с редуктором и блоком управления в одном корпусе.
Сервоприводы используются для открывания/закрывания заслонок, поворота различных механизмов на заданный градус и в качестве суставов при создании разнообразных DIY-роботов.
Элементы сервопривода
Рассмотрим основные элементы сервопривода.
Электромотор
За преобразование электрической энергии в механическую отвечает электромотор. В зависимости от модели, сервопривод может быть наделён одним из трёх видов моторов:
- Коллекторный мотор с сердечником (Brush motor)
- Коллекторный мотор без сердечника (Coreless motor)
- Бесколлекторный мотор (Brushless motor)
Редуктор
На практике, скорость вращения мотора слишком большая, а крутящий момент — наоборот слишком маленький. Для решения двух проблем выходной вал мотора соединён с группой шестеренок, которые позволяют увеличить крутящий момент, но при этом пропорционально снизить скорость вращения выходного вала.
Шестерни редуктора могут быть пластиковые или металлические.
- Пластиковые шестерни изготавливаются из силикона или нейлона, они мало весят и мало стоят, но не способны вытягивать большие нагрузки. Сервоприводы с пластиковым редуктором довольно популярные в любительских проектах.
- Металлические шестерни изготавливаются из латуни или меди, они много весят и много стоят, но зато способны вытягивать большие нагрузки. Сервоприводы с металлическим редуктором применяются в устройствах, где требуется мускулы и сила.
Выходной вал
Выходной вал сервопривода — это последняя шестерёнка редуктора, которая выведена за пределы корпуса. К выходному валу крепится требуемая нагрузка: например качалка, втулка, тянущие или толкающие механизмы. Диаметр выходного вала и количество на нём зубьев отличается между разными моделями сервоприводов.
Схема управления
Для обработки входного сигнала с внешнего контроллера в сервоприводе расположена схема управления.
- В сервоприводе с удержанием угла, блок управления принимает импульсы, сравнивает их с показателем датчика обратной связи и по результату управляет мотором.
- В сервоприводе постоянного вращения, блок управления принимает импульсы и преобразует их в постоянное вращения с заданной скоростью.
Схема управления может быть аналоговой или цифровой.
В аналоговом сервоприводе входные данные c внешнего контроллера анализируются логической микросхемой. Аналоговый чип принимает внешние импульсы с частотой 50 Гц, а значит время реакции мотора составляет около 20 мс.
В цифровом сервоприводе входные данные анализируются собственным микроконтроллером. Контроллер принимает внешние импульсы с частотой 50 Гц, но позволяет увеличить внутреннюю частоту сигнала с 50 Гц до 500 Гц. В итоге время реакции мотора может сократится до 2 мс.
Характеристики сервопривода
Рассмотрим основные характеристики сервопривода.
Крутящий момент
Крутящий момент отвечает за ускорение выходного вала и его способность преодолевать сопротивление вращению. Чем выше крутящий момент, тем больше возможностей у мотора реализовать свой потенциал.
Крутящий момент высчитывается путём произведения максимального веса груза на длину рычага, который способен удержать сервопривод. При увеличении длины рычага, пропорционально уменьшается максимальный вес груза и наоборот. Например, если крутящий момент равен 10 кг·см:
- Сервопривод удержит груз 10 кг на рычаге длиной 1 см.
- Сервопривод удержит груз 5 кг на рычаге длиной 2 см.
- Сервопривод удержит груз 1 кг на рычаге длиной 10 см.
Скорость поворота
Скорость поворота — это время, за которое выходной вал сервопривода успевает повернуться на 60°. Из неё можно вычислить скорость в оборотах в минуту для сервопривода постоянного вращения.
Размеры
Питание сервопривода
Напряжение к серве можно подключать двумя способами: без внешнего источника питания и с внешним источником питания.
Без внешнего источника питания
Если сервопривод питается напряжением 5 вольт и потребляет ток менее 500 мА, можно запитать сервомотор непосредственно от контроллера.
Цвет провода | Контакт | Функция | Подключение |
---|---|---|---|
Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода микроконтроллера. |
Красный | V | Питание | Подключите к питанию микроконтроллера. |
Коричневый / Чёрный | G | Земля | Подключите к земле микроконтроллера. |
С внешним источником питания
Если сервопривод питается напряжением свыше 5 вольт или потребляет ток более 500 мА, то ему необходим внешний источник питания с соответствующими характеристиками.
Цвет провода | Контакт | Функция | Подключение |
---|---|---|---|
Оранжевый / Жёлтый / Белый | S | Пин управления сервоприводом | Подключите к пину ввода-вывода микроконтроллера. |
Красный | V | Питание | Подключите к внешнему источнику питания с подходящим напряжением. |
Коричневый / Чёрный | G | Земля | Подключите к земле внешнего источника питания и земле микроконтроллера. |
Сервоприводы с удержанием угла
Сервоприводы с удержанием угла — это моторы, которые преобразуют управляющие сигналы в установку и удержание заданного угла.
Интерфейс управления
Для управления мотором с удержанием угла необходимо подавать сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса, начинка сервопривода генерирует свой сигнал, длительность которого определяется датчиком обратной связи. Далее схема сравнивает длительность двух импульсов:
- Если длительность разная → электромотор включается. Направление вала зависит от знака разности импульсов.
- Если длины импульсов равны → электромотор останавливается.
В сигнале PDM частота импульсов постоянна и равна 50 Гц, т.е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит выходной угол удержания мотора. Принято считать, что диапазону выходного угла 0–180° соответствует ширина импульса 500–2500 мкс.
Период импульсов | Ширина импульса | Положение сервопривода |
---|---|---|
20 мс | 544 мск | Выходной вал установлен в максимальное положение по часовой стрелке CW — 0°. |
20 мс | 1540 мкс | Выходной вал установлен в условную середину относительно крайних максимальных точек CW и CWW — 90°. |
20 мс | 2400 мкс | Выходной вал установлен в максимальное положение против часовой стрелке CCW — 180°. |
Примеры работы
Сервоприводы постоянного вращения
Сервоприводы постоянного вращения — это моторы, которые преобразуют управляющие сигналы в заданную скорость вращения вала в любом направлении без ограничений по углу поворота.
Интерфейс управления
Для управления мотором постоянного вращения необходимо подавать особый сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. При поступлении с внешнего контроллера управляющего импульса начинка сервопривода генерирует свой сигнал мотору.
В сигнале PDM частота импульсов постоянна и равна 50 Гц, т. е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит направление и скорость вращения мотора. Принято считать, что рабочая ширина импульса лежит в пределах 544–2400 мкс.
Control a Servo Motor with Arduino
A servo motor
Introduction
In a typical robot, there are usually a few movable parts. For example, a robotic arm may need to move in a particular direction and grab something. Such maneuvers require a high degree of precision, and a simple DC motor is not suitable for such tasks. Instead, servo motors are needed. Luckily, hobbyist servo motors are inexpensive and small. Perhaps more importantly, it is very easy to use an Arduino to control these small servo motors.
In this tutorial, we will learn:
- what is servo motor is,
- how to use an Arduino to control a servo motor
To achieve the above learning outcomes, we will build a simple gift box that can be opened an closed by a servo motor.
Open and close the box with a servo
Materials and Tools
- Arduino Uno x 1
- SG90 servo motor x 1
- Jumper wires
- Paper box x 1
Servo Motor
If you look at a servo motor closely, you will find that it actually has a DC motor inside. There is also a gear box attached to the motor.
Closer look of a servo motor
Through gearing, the rotation speed is lowered, and the output torque is increased. Other than the gear box, there is also a controlling circuit inside a servo motor. To understand more about how a servo motor works, you may read this nice article from ScienceBuddies. We will focus on controlling a servo motor instead.
Positional rotation servo
This time, we focus on positional servos. The shaft of this type of servo motors can typically rotate 180 degrees.
The shaft can move from 0 degree to 180 degree.
The angle position is controlled by a pulse-width-modulation (PWM) signal. For instance, to control the servo motor we use in this tutorial, the SG90, we need to use 50 Hz PWM signal (i.e. the period is 20 ms) to control the servo motor. The angle position is controlled by the duty cycle of the PWM signal. The shaft of the SG90 will rotate to the following positions according to different values of duty cycle:
Angle position | Duty cycle (50 Hz PWM) |
---|---|
0 degree | 5% (1 ms “on”) |
90 degree | 7.5% (1.5 ms “on”) |
180 degree | 10% (2 ms “on”) |
This is kind of messy. Luckily, the servo library of Arduino enables us to handle all of these with a few simple function calls.
Control the Servo with Arduino
First, let’s attach a shaft to the servo motor. The SG90 comes with different shafts, so you can choose the most suitable one for your projects.
Different shafts of SG90
Then, we need to connect the servo to the Arduino. The servo motor only has three cables: power (usually in red), ground (usually in brown) and signal (usually in orange). Connect the cables to the Arduino as follows.
Servo motor | Arduino |
---|---|
Power | 5V |
Ground | GND |
Signal | Pin 9 |
Connecting the servo to the Arduino UNO
Then, we write a simple Arduino program to control the servo motor.
Upload the program to the Arduino, and the servo motor should move to the 0 degree and the 90 degree positions repeatedly.
The servo motor is moving!
Let’s look at the codes in details.
To use the servo motor library, we need to import the library with the #include preprocessor macro.
Then, we create an object representing the servo motor. Declaring an object of a class is just like declaring a variable.
An object of the Servo class has the necessary data structures and functions for controlling the servo motor.
NOTE: Object is an important concept of programming. Object oriented programming (OOP) is a paradigm used by many programming languages. You may refer to this W3Schools tutorial about OOP to know more about it.
In the setup function, we assign a pin for sending the PWM signal to the servo motor by calling the attach function of the myservo object.
NOTE: Although we use the PWM-capable pin 9 in the example, the servo library can be used with any digital output pin. That’s because the PWM frequency is just 50 Hz, and the Arduino can create the signal via bit-banging.
In the loop function, we simply call the write function of the myservo object to move the servo motor to a particular angle position.
The parameter of this function is the angle position, ranging from 0 to 180. Feel free to enter other values and see how the shaft moves. If you find any difficulties, you may check out the sample code here.
Attach the Servo to a Box
Let’s use the servo motor to open and close the lid of a paper box. Remove the servo motor from the Arduino, and following the steps below.
First, we make a hole near the hinge of the lid on a face of the box:
Then, put the top gear of the servo motor into the hole, and use glue to fix the servo motor to the box:
Next, we attach the shaft with one arm to the servo motor, and use a screw to fix the shaft.
Finally, we fix the shaft to the lid of the box with tape or glue.
Attach the servo motor to the Arduino again. The box can be opened and closed by the servo motor!
Conclusion and Assignment
Being able to control a servo motor with an Arduino is a huge step towards robotics. You may 3D print/laser cut a robotic arm like this one and use servo motors to drive the arm. With designs like the slider crank mechanism, you may even convert rotational motion into linear motion. There are just endless possibilities of projects based on servo motors.
To consolidate the knowledge, you may try the following assignment:
Use a potentiometer to control a servo that opens and closes the lid of the box.
Here’s the circuit diagram for your reference:
You may look at the sample code here. If you find any difficulties, you may also ask us via our Facebook page.
Работаем с сервоприводами
Внешний вид Fritzing Условное обозначение на схеме
Сервопривод — это механизм с электромотором с управлением. Вы можете вращать механический привод на заданный угол с заданной скоростью или усилием.
Наиболее популярны сервоприводы, которые удерживают заданный угол и сервоприводы, поддерживающие заданную скорость вращения.
Сервоприводы имеют несколько составных частей. Привод — электромотор с редуктором. Зачастую скорость вращения мотора бывает слишком большой для практического использования. Для понижения скорости используется редуктор: механизм из шестерней, передающий и преобразующий крутящий момент.
Включая и выключая электромотор, можно вращать выходной вал — конечную шестерню сервопривода, к которой можно прикрепить нечто, чем мы хотим управлять — рычаг в форме круга, крестовины или перекладинки для передачи вращающего движения на рабочий орган. Для контроля положения используется датчик обратной связи — энкодер, который будет преобразовывать угол поворота обратно в электрический сигнал. Для этого часто используется потенциометр. При повороте бегунка потенциометра происходит изменение его сопротивления, пропорциональное углу поворота. Таким образом, с его помощью можно установить текущее положение механизма.
Кроме электромотора, редуктора и потенциометра в сервоприводе имеется электронная начинка, которая отвечает за приём внешнего параметра, считывание значений с потенциометра, их сравнение и включение/выключение мотора. Она-то и отвечает за поддержание отрицательной обратной связи.
К сервоприводу тянется три провода. Два из них отвечают за питание мотора и землю, третий доставляет управляющий сигнал, который используется для выставления положения устройства.
Крутящий момент и скорость поворота
Крутящий момент — векторная физическая величина, равная произведению радиус-вектора, проведённого от оси вращения к точке приложения силы, на вектор этой силы. Характеризует вращательное действие силы на твёрдое тело. Эта характеристика показывает, насколько тяжёлый груз сервопривод способен удержать в покое на рычаге заданной длины. Если крутящий момент сервопривода равен 5 кг×см, то это значит, что сервопривод удержит на весу в горизонтальном положении рычаг длины 1 см, на свободный конец которого подвесили 5 кг. Или, что эквивалентно, рычаг длины 5 см, к которому подвесили 1 кг.
Скорость сервопривода измеряется интервалом времени, который требуется рычагу сервопривода, чтобы повернуться на 60°. Характеристика 0,1 с/60° означает, что сервопривод поворачивается на 60° за 0,1 с. Из неё несложно вычислить скорость в более привычной величине, оборотах в минуту, но так сложилось, что при описании сервоприводов чаще всего используют такую единицу.
Иногда приходится искать компромисс между этими двумя характеристиками, так как если мы хотим надёжный, выдерживающий большой вес сервопривод, то мы должны быть готовы, что эта могучая установка будет медленно поворачиваться. А если мы хотим очень быстрый привод, то его будет относительно легко вывести из положения равновесия. При использовании одного и того же мотора баланс определяет конфигурация шестерней в редукторе.
Виды сервоприводов
Сервоприводы бывают аналоговые и цифровые. Различаются они лишь внутренней управляющей электроникой. Вместо специальной микросхемы аналогового сервопривода у цифрового собрата можно заметить на плате микропроцессор, который принимает импульсы, анализирует их и управляет мотором. Таким образом, в физическом исполнении отличие лишь в способе обработки импульсов и управлении мотором.
Шестерни для сервоприводов бывают из разных материалов: пластиковые, карбоновые, металлические.
Пластиковые, чаще всего нейлоновые, шестерни очень лёгкие, не подвержены износу, более всего распространены в сервоприводах. Они не выдерживают больших нагрузок, однако если нагрузки предполагаются небольшие, то нейлоновые шестерни — лучший выбор.
Карбоновые шестерни более долговечны, практически не изнашиваются, в несколько раз прочнее нейлоновых. Основной недостаток — дороговизна.
Металлические шестерни являются самыми тяжёлыми, однако они выдерживают максимальные нагрузки. Достаточно быстро изнашиваются, так что придётся менять шестерни практически каждый сезон. Шестерни из титана — фавориты среди металлических шестерней, причём как по техническим характеристикам, так и по цене. Они достаточно дорогие.
Существует три типа моторов сервоприводов: обычный мотор с сердечником, мотор без сердечника и бесколлекторный мотор.
Обычный мотор с сердечником (справа) обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника. Мотор с полым ротором (слева) обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.
Сервоприводы с бесколлекторным мотором появились сравнительно недавно. У бесколлекторных моторов нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.
Подключение к Arduino
Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:
- красный — питание; подключается к контакту 3.3/5V или напрямую к источнику питания
- коричневый или чёрный — земля
- жёлтый или белый — сигнал; подключается к цифровому выходу Arduino
Обычный хобби-сервопривод во время работы потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать мощный сервопривод, есть смысл задуматься о выделении его в контур с дополнительным питанием.
На большинстве плат Arduino библиотека Servo поддерживает управление не более 12 сервоприводами, на Arduino Mega — 48. При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию analogWrite() на 9 и 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет. На Arduino Mega можно подключить до 12 сервоприводов без нарушения функционирования ШИМ/PWM, при использовании большего количества сервоприводов мы не сможем использовать analogWrite() на 11 и 12 контактах.
Библиотеки для управления сервоприводами (Servo) и для работы с приёмниками/ передатчиками на 433 МГц VirtualWire используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2.
Сервоприводы обычно имеют ограниченный угол вращения 180 градусов, их так и называют «сервопривод 180°». Но существуют сервоприводы с неограниченным углом поворота оси. Это сервоприводы постоянного вращения или «сервоприводы 360°».
Иногда при подключении серводвигателя не отрабатывают заданные команды или отрабатывают некорректно. Причина в том, что сервомоторы требуют достаточно большую мощность для питания, особенно в начале движения ротора. Эти резкие скачки потребляемой мощности могут сильно «просаживать» напряжение на Arduino. Может произойти даже перезагрузка платы. Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке. Конденсатор выполняет роль своеобразного резервуара для электрического тока. Когда серводвигатель начинает работать, он получает остатки заряда с конденсатора и от источника питания Arduino одновременно. Длинная нога конденсатора — это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом ‘-‘.
Управляем через импульсы
Для начала попробуем управлять вручную без библиотек. Считываем показания из Serial Monitor — нужно ввести число от 0 до 9. Эти значения равномерно распределим на 180 градусов и получим 20 градусов на каждую единицу показаний.
Библиотека Servo
Можно генерировать управляющие импульсы самостоятельно, но это настолько распространённая задача, что для её упрощения существует стандартная библиотека Servo.
Сервопривод постоянного вращения можно управлять с помощью библиотек Servo или Servo2. Отличие заключается в том, что функция Servo.write(angle) задаёт не угол, а скорость вращения привода.
Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:
- attach() — присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin — номер пина, к которому присоединяют сервопривод, min и max — длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.
- write() — отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle — угол, на который должен повернуться сервопривод
- writeMicroseconds() — отдаёт команду послать на сервопривод имульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS — длина импульса в микросекундах. Возвращаемого значения нет.
- read() — читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0 до 180
- attached() — проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае
- detach() — производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()
В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.
Пример подключения двух сервоприводов.
Библиотека Servo не совместима с библиотекой VirtualWire для работы с приёмником и передатчиком на 433 МГц, так как они используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2. Все методы библиотеки Servo2 совпадают с методами Servo.
При работе с сервоприводами на 360 градусов функции работают по другому.
Функция Arduino | Сервопривод 180° | Сервопривод 360° |
---|---|---|
Servo.write(0) | Крайне левое положение | Полный ход в одном направлении |
Servo.write(90) | Среднее положение | Остановка сервопривода |
Servo.write(180) | Крайне правое положение | Полный ход в обратном направлении |
Sweep
Скетч File | Examples | Servo | Sweep постоянно поворачивает насадку на 180 градусов и возвращает её обратно. В примере используется встроенная библиотека Servo.
Общая схема — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9).
Скетч File | Examples | Servo | Knob управляет сервоприводом при помощи потенциометра. В примере используется встроенная библиотека Servo.
Общая схема: у сервопривода — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9). У потенциометра средняя ножка соединяется с аналоговым выходом A0, остальные к питанию и земле.
Случайные повороты
Будем поворачивать серводвигатель на случайную величину. Практического смысла немного, но для демонстрации подойдёт.