Сервопривод TowerPro MG995
Сервопривод (сервомотор, серводвигатель, сервомашинка или просто "серво") - часто незаменимый элемент при конструировании всевозможных роботизированных манипуляторов. Например, такие моторы встречаются в моделях с поворачиваемой миниатюрной камерой или служат приводом, создающим движение ноги, руки или головы робота. Аналогичные серводвигатели устанавливаются в игрушечные радиоуправляемые автомобили, где они регулируют поворот передней оси. Способов использования сервомоторов достаточно много.
В своей конструкции, сервомотор сочетает несколько электронных и механических элементов: обычный миниатюрный щеточный двигатель, снижающий скорость и увеличивающий крутящий момент редуктор, датчик положения вала редуктора в виде переменного резистора (потенциометра), и крохотной платы с микросхемой-контроллером. Все его составляющие части размещены в пластиковом корпусе.
Сервопривод отличается от обычных моторов возможностью повернуть вал на определённый заданный угол. Модель MG995 позволяет вращать вал редуктора в двух направлениях - по часовой или против часовой стрелке, в диапазоне от 0 до 170-180°. Точность позиционирования имеет погрешности и зависит от конкретного изделия. Встроенный контроллер на микросхеме AA51880 определяет угол поворота по показаниям потенциометра B5K. В электрической цепи питания серво присутствуют cборки на полевых транзисторах MOSFET - TC4953 и 9926A.
Управление сервомотором MG995
Управление сервомотором осуществляется сигналами широтно-импульсной модуляции (ШИМ). Угол поворота вала редуктора изменяется шириной импульса высокого уровня за каждый промежуток времени. Интервал приёма между импульсами управления у модели MG995 составляет 20 миллисекунд.
У MG995 есть три вывода, два из которых (коричневый "минусовой" и красный "плюсовой") соединяются с внешним источником питания, и третий, оранжевый, подключается к контроллеру, генерирующему импульсы различной продолжительности. В качестве генератора импульсов ШИМ может быть использована любая плата на базе микроконтроллера Arduino или другая аналогичная с 5-вольтовой логикой.
Питание MG995
Рабочий ток сервомотора без нагрузки достаточно мал, примерно 170-200 мА. Однако, с увеличением физической нагрузки на вал вплоть до максимальной, а также в моменты резкой смены направления вращения вала, увеличивается внутренняя нагрузка на электрическую цепь мотора, вследствии чего потребляемый ток может повысится до пикового значения 1200мА. Во избежании поломки микросхемы с функцией ШИМ-генератора (или программируемого микроконтроллера), рекомендуется организовывать питание сервопривода MG995 не от них, а непосредственно от внешнего источника энергии.
Схема рекомендуемого подключения сервопривода MG995 к контроллеру Arduino
Вам потребуются следующие компоненты:
Внешний источник c напряжениеv питания 7-12 вольт постоянного тока может быть подключен к плате Arduino через бочкообразным разъём или выводы "Vin" и "GND" с соблюдением полярности. "Минусовые" выводы мотора и платы-контроллера должны быть скоммутированы в одну общую линию. "Плюсовой" вывод мотора подключается к источнику питания постоянного напряжения 4.8-6.6 вольт.
Понимание того, как же управляется сервомашинка, приходит с опытом. В качестве примера воспользуйтесь простым программным кодом, написанным для интегрированной среды программирования Arduino IDE. Нижеприведённый скетч наглядно демонстрирует перемещение вала редуктора серво MG995 на угол 180° и его последующий возврат в исходное положение (угол 0°). Алгоритм программы зациклен на беспрерывное повторение перемещений. Задействованная в скетче библиотека Servo значительно облегчает процесс программирования. Скетч с кодом можно найти в списке стартовых примеров Arduino IDE "Файл->Примеры->Servo->Sweep".
#include "Servo.h"
Servo myservo; // создаем объект servo для управления сервомотором
// двенадцать объектов servo могут быть создано на большинстве плат
int pos = 0; // переменная, сохраняющая позицию сервомотора
void setup() {
myservo.attach(9); // управляющий вывод сервомотора подключен к 9 контакту платы
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // угол поворота от 0 до 180 градусов
// с шагов в 1 градус
myservo.write(pos); // сообщаем сервомотору новую позицию
// из переменной "pos"
delay(15); // ожидаем синхронизацию положения сервомотора
}
for (pos = 180; pos >= 0; pos -= 1) { // угол поворота от 180 до 0 градусов
// с шагов в 1 градус
myservo.write(pos); // сообщаем сервомотору новую позицию
// из переменной "pos"
delay(15); // ожидаем синхронизацию положения сервомотора
}
}
Поэкспериментируйте с вариантом посложнее, в котором управление поворотом вала редуктора синхронизировано с вращением ручки ручного аналогового потенциометра. Соединение Arduino-контроллера и потенциометра представлено на картинке ниже. Текст этого скетча также можно найти в списке примеров визуальной среды Arduino IDE "Файл->Примеры->Servo->Knob".
#include "Servo.h"
Servo myservo; // создаем объект servo для управления сервомотором
int potpin = 0; // аналоговый контакт подключен к потенциометру
int val; // переменная, считывающая значения из аналогового контакта
void setup() {
myservo.attach(9); // управляющий вывод сервомотора подключен к 9 контакту платы
}
void loop() {
val = analogRead(potpin); // считываем значения потенциометра (значения
// между 0 и 1023)
val = map(val, 0, 1023, 0, 180); // преобразовываем его в угол поворота вала
// мотора (значения между 0 и 180)
myservo.write(val); // передаём на мотор команду перемещения вала
delay(15); // ожидаем синхронизацию сервомотора с новым
// положением
}
Габаритные размеры, мм
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой!
© Все права защищены 2015 - 2025г https://compacttool.ru