Перейти к основному содержимому

Описание устройства

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

Сервоприводы постоянного вращения — это моторы, которые поддерживают скорость вращения вала в любом направлении без ограничений по углу поворота. Для управления мотором необходимо подавать особый сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. Скорость вращения вала определяется шириной импульса. При поступлении с внешнего контроллера управляющего импульса начинка сервопривода генерирует свой сигнал мотору.

Использование ШИМ для вращения сервопривода

This is an image

В сигнале PDM частота импульсов постоянна и равна 50 Гц, т. е. период подачи импульсов равен 20 мс. А вот ширина импульса изменяется, и именно от неё зависит направление и скорость вращения мотора. Принято считать, что рабочая ширина импульса лежит в пределах 544–2400 мкс.

Период импульсовШирина импульсаПоложение сервопривода
20 мс544 мксВал сервопривода вращается по часовой стрелке.
20 мс1540 мксВал сервопривода стоит на месте.
20 мс2400 мксВал сервопривода вращается против часовой стрелки.

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

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

Устройство

Конструкция современных сервоприводов довольно проста, но при этом весьма эффективна, так как позволяет обеспечить максимально точное управление движением. Сервопривод состоит из:

  • двигателя постоянного тока
  • шестерни редуктора
  • выходного вала
  • потенциометра
  • платы управления, на которую подается управляющий сигнал

This is an image

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

Для того, чтобы скорость вращения превратить в электрический сигнал, необходим датчик. Его функции в сервоприводе постоянного тока с успехом выполняет потенциометр. Он выдает аналоговый сигнал (как правило, от 0 до 10 В) с дискретностью, ограниченной АЦП (аналогово-цифровым преобразователем), на который поступает этот сигнал.

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

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

  • Сервопривод получает на вход значение управляющего параметра. В случае сервопривода вращения это направление и скорость вращения.
  • Блок управления сравнивает это значение со значением на своём датчике.
  • На основе результата сравнения привод производит некоторое действие: например, поворот, ускорение или замедление так, чтобы значение с внутреннего датчика стало как можно ближе к значению внешнего управляющего параметра.

Области применения

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

Сервоприводы непрерывного вращения используются для моделирования движения различных механизмов. На основе сервопривода можно собрать

Поддерживаемые модели и их характеристика

Внешний видМодельМинимальный импульс по часовой стрелке, мкс(микросекунды)Максимальный импульс по часовой стрелке, мкс(микросекунды)Размер рабочего диапазона по часовой стрелке, мкс(микросекунды)Минимальный импульс против часовой стрелки, мкс(микросекунды)Максимальный импульс против часовой стрелки, мкс(микросекунды)Размер рабочего диапазона против часовой стрелки, мкс(микросекунды)Скорость поворота на 60° при 4.8 В (сек)Скорость поворота на 60° при 6 В (сек)Максимальная скорость при 4.8.V (градусов в секунду)Максимальная скорость при 6V (градусов в секунду)Рабочее напряжение (вольт)Аналоговый / цифровойСсылки
Imagemg996r400142010201540256010200,170,14352,94857,144,8 / 6 VЦифровойdatasheet

Image

Скорость сервопривода измеряется интервалом времени, который требуется рычагу сервопривода, чтобы повернуться на 60°. Характеристика 0,1 с/60° означает, что сервопривод поворачивается на 60° за 0,1 с. Из неё несложно вычислить скорость в более привычной величине, оборотах в минуту, но так сложилось, что при описании сервоприводов чаще всего используют такую единицу.

Создание и инициализация

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

Для этого необходимо последователь выполнить следующее:

  • Подключить и проинициализировать библиотеку с помощью метода Risdk_InitSDK
  • Создать компонент i2c коннектора с помощью метода Risdk_CreateComponent и проинициализировать его с помощью метода Risdk_connector_i2c_Init
  • Открыть соединения по i2c коннектору с помощью метода Risdk_connector_i2c_Open
  • Создать компонент ШИМ преобразователя методом Risdk_CreateComponent и проинициализировать его методом Risdk_sigmod_PWM_Init
  • Методом Risdk_CreateComponent создать компонент управления сервоприводом вращения. В данный метод перым параметром необходимо указать тип компонента "servodrive_rotate"
  • Проинициализировать компонент управления сервоприводом методом Risdk_exec_RServoDrive_Init

Ниже приведены примеры создания и инициализации компонента по управлнию сервоприводом для Golang и Python

Примеры создания и инициализации

Инициализация компонента управления сервоприводом на Golang

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

    int d_mg996r, errCode;
char errorText[1000];
int pin = 0; //пин к которому будет покдлючен сервопривод

//создание компонета сервопривода вращения
errCode = RI_SDK_CreateModelComponent("executor", "servodrive_rotate", "mg996r", &d_mg996r, errorText);
if (errCode != 0) {
printf("RI_SDK_CreateModelComponent errorText:%s\n", errorText);
return errCode;
}

//подключение сервопривода к контроллеру, d_pca - дескриптор ШИМ
errCode = RI_SDK_LinkRServodriveToController(d_mg996r, d_pca, pin, errorText);
if (errCode) {
printf("RI_SDK_LinkRServodriveToController errorText:%s\n", errorText);
return errCode;
}
Название методаОписание
RI_SDK_exec_RServoDrive_CustomDeviceInitИнициализация кастомного сервопривода вращения
RI_SDK_exec_RServoDrive_StopПрекращает подачу сигнала к сервоприводу вращения
RI_SDK_exec_RServoDrive_GetStateПолучение состояния сервопривода
RI_SDK_exec_RServoDrive_RotateByPulseВыполняет вращение сервопривода, заданное импульсом, до тех пор, пока не будет вызвана метод остановки или иная команда
RI_SDK_exec_RServoDrive_RotateByPulseOverTimeВыполняет вращение сервопривода, заданное импульсом, до тех пор, пока не будет вызвана метод остановки, иная команда или не сработает заданный таймаут
RI_SDK_exec_RServoDrive_RotateWithRelativeSpeedВыполняет вращение сервопривода с заданным процентом от максимальной скорости до тех пор, пока не будет вызвана метод остановки или иная команда
RI_SDK_exec_RServoDrive_RotateWithRelativeSpeedOverTimeВыполняет вращение сервопривода с заданным процентом от максимальной скорости до тех пор, пока не будет вызвана метод остановки, иная команда или не сработает заданный таймаут