Рассматриваются схема подключения и принцип работы сервопривода. Собираем схему управления сервоприводом. Изучаем функции библиотеки Servo из IDE Arduino. Пишем программу управления сервоприводом.
Сервопривод рис. 1 — электромеханическое устройство с обратной связью.
К сервоприводу подходит 3 провода. красный и коричневый провода - питание, желтый - управление.
- Красный + 5 В
- Коричневый - общий провод (-5В)
- Жёлтый - управляющие импульсы
Рис. 1. Сервопривод.
Сервопривод, представленный на рис. 1 отрабатывает заданный угол поворота. Внутреннее устройство такого сервопривода представлено на рис. 2.
Рис. 2. Внутреннее устройство сервопривода.
На рис. 2 мы видим, в сервоприводе основной узел - это мотор постоянного тока с редуктором. Внутри сервопривода выходной вал сервопривода соединён с переменным резистором (потенциометром). Выводы потенциометра подключены к электронной схеме управления (печатная плата с управляющей электроникой).
Выходной вал имеет ограниченный угол вращения. Привод изображённый на рис. 1 имеет угол поворота выходного вала 180.
Команда на изменение угла поворота вала сервопривода передаётся по жёлтому проводу в виде непрерывной последовательности импульсов. Для привода изображённого на рис. 1 управляющие импульсы передаются на частоте 50 Гц. Или через каждые 1/50 = 20 мс.
От ширины управляющих импульсов зависит угол поворота выходного вала сервопривода. Для привода изображённого на рис. 1 управляющие импульсы длительностью 544 мкс задают угол поворота 0°. Импульсы длительностью 2400 мкс задают угол поворота 180°. Импульсы длительностью 1520 мкс задают угол поворота 90°. На рис. 3 наглядно изображены управляющие импульсы и реакция сервопривода на них.
Рис. 3. Управляющие импульсы сервопривода
Как работает сервопривод?
Внутренняя электронная схема управления сервоприводом содержит генератор импульсов, ширина которых зависит от положения переменного резистора соединённого с валом сервопривода. На вход схемы управления сервоприводом, по жёлтому проводу, мы подаём управляющие импульсы. Внешние импульсы и импульсы, генерируемые внутренним генератором сервопривода поступают на схему сравнения. Если ширина этих импульсов не совпадает, схема управления сервоприводом включает мотор в том направлении, которое приведет к выравниванию ширины внешних и внутренних импульсов. Когда импульсы совпадают, сервопривод останавливается. Схема управления непрерывно следит за совпадением этих импульсов, поэтому, включённый сервопривод нельзя сместить с заданного угла внешним усилием.
Библиотека Servo из IDE Arduino
Для управления сервоприводом с помощью модуля Ардуино в состав программы Arduino IDE включена библиотека Servo. С помощью библиотеки Servo на большинстве плат Ардуино мы можем управлять до 12 сервоприводами, а на платах Ардуино Мега до 48 сервоприводов.
Библиотека Servo включает в себя ряд функций применимых к объектам типа Servo и предназначенных для написания программ управления сервоприводами:
- attach()
- write()
- writeMicroseconds()
- read()
- attached()
- detach()
attach(pin) указывает к какому выводу Ардуино модуля подключён сервопривод.
write(alpha) указывает на какой угол установить сервопривод
writeMicroseconds(uSec) передаёт значение для управления сервоприводом в микросекундах
read() считывает значение текущего положения сервопривода в градусах
attached() проверяет сопоставлен ли объекту типа Servo выход микроконтроллера с помощью функции attach().
detach() отсоединяет объект типа Servo от выхода, противоположно функции attach().
На рис. 4 изображена принципиальная электрическая схема с Ардуино и сервоприводом.
Рис. 4. Принципиальная электрическая схема с Ардуино и сервоприводом.
Рис. 5. Макет схемы подключения сервопривода к Arduino NANO.
Программу управления сервоприводом для микроконтроллера на плате Arduino удобнее всего написать в среде Arduino на языке Си.
#include <Servo.h>
Servo servo1;
int rotate;
void setup() {
servo1.attach(9);
}
void loop() {
rotate = analogRead(0);
rotate = map(rotate, 0, 1023, 10, 170);
servo1.write(rotate);
delay(15);
}
Рис. 6. Листинг программы для испытаний энкодера.
Выводы:
Анализируя схему управления и принцип работы сервопривода, можно сделать вывод, что плата управления сервоприводом Ардуино не получает сигнал обратной связи от сервопривода. Следовательно функция read() из библиотеки servo возвращает не реальный угол на который повернулся вал сервопривода, а заданное значение.