Сервопривод: различия между версиями

Материал из MIK32 микроконтроллер
(Новая страница: «справа|230x230пкс|Сервопривод MG995 '''Сервопривод''' — это мотор, положен...»)
 
(У Джека Воробья не было картинки кода)
 
(не показаны 4 промежуточные версии 1 участника)
Строка 1: Строка 1:
[[Файл:Сервопривод.png|справа|230x230пкс|Сервопривод MG995]]
[[Файл:Сервопривод.png|справа|210x210px|Сервопривод MG995|альт=]]'''Сервопривод''' — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов, в том числе сервоприводом может управляться "клешня-захват", с помощью которой робот будет захватывать кубики-грузы и перевозить их по указанным маршрутам.
'''Сервопривод''' — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов, в том числе сервоприводом может управляться "клешня-захват", с помощью которой робот будет захватывать кубики-грузы и перевозить их по указанным маршрутам.


== Виды сервоприводов ==
== Виды сервоприводов ==
Строка 17: Строка 16:
# ''У бесколлекторных моторов'' нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.
# ''У бесколлекторных моторов'' нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.


== Библиотека Servo ==
Можно генерировать управляющие импульсы самостоятельно, для этого существует стандартная библиотека '''Servo'''.
Библиотека 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°.
== Подключение к Arduino ==
== Подключение к Arduino ==
Для сборки модели с сервоприводом нам потребуется:
Для сборки модели с сервоприводом нам потребуется:
Строка 32: Строка 44:
[[Файл:Подключение сервопривода к Arduino.jpg]]
[[Файл:Подключение сервопривода к Arduino.jpg]]


== Библиотека Servo ==
Можно генерировать управляющие импульсы самостоятельно, для этого существует стандартная библиотека '''Servo'''.


Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:
Для работы этой модели подойдет следующая программа:
<syntaxhighlight lang="c">
#include <Servo.h> //библиотека для сервопривода (есть в Ардуино)
Servo servo; // Объявляем переменную servo типа Servo


* '''attach()''' - присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin - номер пина, к которому присоединяют сервопривод, min и max - длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По    умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.
void setup() {
* '''write()''' - отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle - угол, на который должен повернуться сервопривод.
  servo.attach(10); //привязываем привод к порту 10
* '''writeMicroseconds()''' - отдаёт команду послать на сервопривод импульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS - длина импульса в микросекундах. Возвращаемого значения нет.
}
* '''read()''' - читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0° до 180°.
* '''attached()''' - проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае.
* '''detach()''' - производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()


В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс - для 0° и 2400 мкс - для 180°.
void loop() {
  servo.write(0); // ставим вал под 0 градусов
  delay(2000);
  servo.write(180); // вал под 180 градусов
  delay(2000);
}
</syntaxhighlight>
Последние четыре команды программы задают угол поворота вала сервопривода и время ожидания (в миллисекундах) до следующего поворота (эти цифры можно поменять).

Текущая версия от 16:01, 8 июня 2021

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

Виды сервоприводов

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

Шестерни для сервоприводов бывают из разных материалов:

  1. Пластиковые шестерни очень лёгкие, не подвержены износу, более всего распространены в сервоприводах, но их недостаток - это то, что они не выдерживают больших нагрузок.
  2. Карбоновые шестерни более долговечны, практически не изнашиваются, в несколько раз прочнее пластиковых. Основной недостаток - дороговизна.
  3. Металлические шестерни являются самыми тяжёлыми, однако они выдерживают максимальные нагрузки. Недостаток - достаточно быстро изнашиваются.

Существует три типа моторов сервоприводов:

  1. Обычный мотор с сердечником обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому, когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника.
  2. Мотор с полым ротором(без сердечника) обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.
  3. У бесколлекторных моторов нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.

Библиотека Servo

Можно генерировать управляющие импульсы самостоятельно, для этого существует стандартная библиотека Servo.

Библиотека 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°.

Подключение к Arduino

Для сборки модели с сервоприводом нам потребуется:

  • плата Arduino
  • 3 провода “папа-папа”
  • сервопривод

Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:

  • красный - питание; подключается к контакту 3.3/5V или напрямую к источнику питания
  • коричневый или чёрный - земля (GND)
  • жёлтый или белый - сигнал; подключается к цифровому выходу Arduino

Подключение сервопривода к Arduino.jpg


Для работы этой модели подойдет следующая программа:

#include <Servo.h> //библиотека для сервопривода (есть в Ардуино)
Servo servo; // Объявляем переменную servo типа Servo

void setup() {
  servo.attach(10); //привязываем привод к порту 10
}

void loop() {
  servo.write(0); // ставим вал под 0 градусов
  delay(2000);
  servo.write(180); // вал под 180 градусов
  delay(2000);
}

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