Управление сервомотором: Полное руководство
Основные понятия:
Определение управления сервомотором: Управление сервомотором позволяет точно управлять положением, скоростью и ускорением двигателя с помощью электронных сигналов.
Механизм обратной связи: Система обратной связи, обычно потенциометр или энкодер, обеспечивает точное соответствие выхода двигателя управляющему входу.
Сигнал ШИМ: Широтно-импульсная модуляция (ШИМ) является критически важной для установки позиции сервопривода путем изменения длительности электрических импульсов.
Arduino и сервомоторы: Использование платы Arduino — популярный и эффективный способ программирования и управления сервомоторами с минимальным количеством аппаратного обеспечения.
Применение сервомоторов: Сервомоторы необходимы для проектов, требующих точного позиционного контроля, таких как робототехника и автоматизированные системы.
Сервомотор — это двигатель, предназначенный для высокой точности и точности вращения. Он отличается от обычного ДПМ тем, что может удерживать конкретную позицию, а не вращаться непрерывно. Эта особенность делает сервомоторы идеальными для робототехники, автоматизации и хобби-проектов.
В этой статье объясняется, как функционирует управление сервомотором, рассматриваются различные типы сервомоторов, методы и устройства управления. Также приведены примеры применения сервомоторов и проектов.
Что такое сервомотор?
Сервомотор определяется как исполнительный механизм, который позволяет точно управлять положением (углом), скоростью и ускорением. Типичный сервомотор состоит из трех основных компонентов: ДПМ, управляющей схемы и устройства обратной связи.
ДПМ питает сервомотор и соединяется с передачами, которые снижают скорость и увеличивают крутящий момент на выходном валу.

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

Устройство обратной связи передает данные о положении обратно в управляющую схему, которая затем корректирует мощность ДПМ, чтобы выровнять фактическое положение с желаемым положением, заданным входным сигналом.
Обратная связь между управляющей схемой и устройством обратной связи обеспечивает, что сервомотор может точно перемещаться и удерживать любую позицию в пределах своего диапазона движения.
Как управлять сервомотором?
Сервомоторы управляются путем отправки сигнала широтно-импульсной модуляции (ШИМ) на сигнальную линию сервомотора. ШИМ — это техника, при которой сигнал быстро включается и выключается, создавая импульсы различной ширины. Ширина импульсов определяет положение выходного вала.
Например, когда вы отправляете сигнал ШИМ с шириной импульса 1,5 миллисекунды (мс), сервомотор переместится в нейтральное положение (90 градусов).

Когда вы отправляете сигнал ШИМ с шириной импульса 1 мс, сервомотор переместится в минимальное положение (0 градусов). Когда вы отправляете сигнал ШИМ с шириной импульса 2 мс, сервомотор переместится в максимальное положение (180 градусов).
Частота сигнала ШИМ составляет 50 Гц, что означает, что он повторяется каждые 20 мс. Ширина импульса может изменяться от 1 мс до 2 мс в течение этого периода.
Существует много способов генерации и отправки сигналов ШИМ к сервомоторам. Некоторые из наиболее распространенных методов:
Использование платы Arduino или другого микроконтроллера
Использование потенциометра или другого аналогового датчика
Использование джойстика или другого цифрового входного устройства
Использование специализированного контроллера или драйвера сервомотора
В следующих разделах мы подробнее рассмотрим каждый из этих методов и посмотрим некоторые примеры их работы.
Управление сервомотором с помощью Arduino
Arduino — одна из самых популярных платформ для управления сервомоторами. Платы Arduino имеют встроенные выходы ШИМ, которые можно использовать для отправки сигналов к сервомоторам. В Arduino также есть библиотека Servo, которая упрощает написание кода для управления сервомоторами.
Для управления сервомотором с помощью Arduino вам понадобятся:
Плата Arduino (например, Arduino UNO)
Стандартный сервомотор (например, SG90)
Перемычки
Хлебная плата (необязательно)
Красный провод от сервомотора подключается к 5V на плате Arduino. Черный провод от сервомотора подключается к GND на плате Arduino. Белый провод от сервомотора подключается к пину 9 на плате Arduino.
Для программирования платы Arduino вам нужно будет использовать Arduino IDE (онлайн или офлайн). Вы можете использовать один из примеров из библиотеки Servo или написать свой собственный код.
Следующий код показывает, как сделать сервомотор, чтобы он двигался взад и вперед на 180 градусов, используя цикл for:
#include <Servo.h> // Подключение библиотеки Servo
Servo myservo; // Создание объекта Servo
int pos = 0; // Переменная для позиции
void setup() {
myservo.attach(9); // Привязка объекта Servo к пину 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Цикл от 0 до 180 градусов
myservo.write(pos); // Запись позиции в объект Servo
delay(15); // Ожидание 15 мс
}
for (pos = 180; pos >= 0; pos -= 1) { // Цикл от 180 до 0 градусов
myservo.write(pos); // Запись позиции в объект Servo
delay(15); // Ожидание 15 мс
}
}
Этот код использует два цикла для инкремента и декремента переменной позиции от 0 до 180 градусов и обратно. Затем он записывает это значение в объект Servo с помощью myservo.write(pos). Также добавляется задержка 15 мс между каждым шагом, чтобы замедлить движение.
Загрузите этот код на вашу плату Arduino, используя кнопку загрузки в IDE, и наблюдайте, как ваш сервомотор плавно движется взад и вперед.
Управление сервомотором с помощью потенциометра
Потенциометр — это аналоговый датчик, который может изменять свое сопротивление в зависимости от того, насколько вы повернете его ручку. Вы можете использовать потенциометр в качестве входного устройства для управления сервомотором.
Для управления сервомотором с помощью потенциометра вам понадобятся:
Плата Arduino (например, Arduino UNO)
Стандартный сервомотор (например, SG90)
Потенциометр (10 кОм)
Перемычки
Хлебная плата
Схема подключения потенциометра и сервомотора к плате Arduino показана ниже:
Красный провод от потенциометра подключается к 5V на плате Arduino. Черный провод от потенциометра подключается к GND на плате Arduino. Зеленый провод от потенциометра подключается к пину A0 на плате Arduino.
Красный провод от сервомотора подключается к 5V на другой строке хлебной платы. Черный провод от сервомотора подключается к GND на другой строке хлебной платы. Белый провод от сервомотора подключается к пину D9 на другой строке хлебной платы.
Для программирования вашей платы Arduino вам нужно будет использовать тот же код, что и в предыдущем примере, но изменить несколько строк:
#include <Servo.h> // Подключение библиотеки Servo
Servo myservo; // Создание объекта Servo
int potpin = A0; // Пин, подключенный к потенциометру
int val = 0; // Переменная для чтения значения потенциометра
void setup() {
myservo.attach(9); // Привязка объекта Servo к пину D9
}
void loop() {
val = analogRead(potpin); // Чтение значения с потенциометра (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Преобразование диапазона значений (0 - 180)
myservo.write(val); // Запись преобразованного значения в объект Servo
delay(15); // Ожидание 15 мс
}
Этот код использует функцию analogRead(potpin) для чтения значения с потенциометра, подключенного к пину A0. Затем он использует функцию map(val, 0, 1023, 0, 180) для преобразования диапазона значений от 0 - 1023 до 0 - 180 градусов. Затем он записывает это значение в объект Servo с помощью функции myservo.write(val). Также добавляется задержка 15 мс, как в предыдущем примере.
Вы можете загрузить этот код на вашу плату Arduino, используя кнопку загрузки в IDE. Вы должны увидеть, что ваш сервомотор движется в соответствии с положением ручки потенциометра.
Управление сервомотором с помощью джойстика
Джойстик — это цифровое входное устройство, которое может обнаруживать направление и величину движения по двум осям. Вы можете использовать джойстик для управления сервомотором, сопоставляя ось X джойстика с углом сервомотора.
Для управления сервомотором с помощью джойстика вам понадобятся следующие компоненты:
Плата Arduino (например, Arduino UNO)
Стандартный сервомотор (например, SG90)
Модуль джойстика (например, KY-023)
Перемычки
Хлебная плата
Схема подключения модуля джойстика и сервомотора к плате Arduino показана ниже:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Красный провод от модуля джойстика подключается к 5V на плате Arduino. Черный провод от модуля джойстика подключается к GND на плате Arduino. Зеленый провод от модуля джойстика подключается к пину A0 на плате Arduino.
Красный провод от сервомотора подключается к 5V на другой строке хлебной платы. Черный провод от сервомотора подключается к GND на другой строке хлебной платы. Белый провод от сервомотора подключается к пину D9 на другой строке хлебной платы.
Для программирования вашей платы Arduino вам нужно будет использовать тот же код, что и в предыдущем примере, но изменить несколько строк:
#include <Servo.h> // Подключение библиотеки Servo
Servo myservo; // Создание объекта Servo
int joyX = A0; // Пин, подключенный к оси X джойстика
int val = 0; // Переменная для чтения значения джойстика
void setup() {
myservo.attach(9); // Привязка объекта Servo к пину 9
}