Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 0

Управление серводвигателем с помощью arduino

Шаговые двигатели

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

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

С другой стороны,
шаговые электродвигатели имеют ограничения по скорости. Они обычно работают с
максимальной  эффективностью всего при
1200 об / мин или ниже. Хотя они генерируют высокий крутящий момент при нулевой
скорости, крутящий момент падает при увеличении скорости (график ниже).
Например, двигатель, создающий момент 3 кгс·м  при
нулевой скорости, может выдать только 1.5 кгс·м при 500 об / мин и всего 0.3 кгс·м при 1000 об / мин.

Теоретически можно
использовать редуктор для увеличения крутящего момента, но именно здесь малая
скорость шаговых двигателей становится проблемой. Добавление редуктора 10: 1 к
шаговому двигателю со скоростью 1200 об / мин может повысить крутящий момент на
порядок, но также снизит скорость до 120 об / мин. Если двигатель используется
для шарико-винтового привода или чего-либо подобного, он, вероятно, не будет
обеспечивать достаточную скорость для удовлетворения потребностей механизма.

Как правило, шаговые двигатели не изготавливаются в типоразмерах, превышающих NEMA 34, при этом большинство применений относятся к размерам двигателей NEMA 17 или NEMA 23. В результате практически невозможно найти шаговые двигатели, способные производить крутящий момент от 28 до 57 кгс·м.

На графике зеленым
показана зависимость момент шагового двигателя от скорости, красным – зависимость
максимального момент серводвигателя от скорости и синим – момент серводвигателя
от скорости.

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

Однако, если система электропривода
дает команду двигателю продвинуться на 200 шагов и он сделает это за несколько
шагов, ошибка составит несколько процентов. Хотя мы используем шаговые
электродвигатели с разрешением от 25 000 до 50 000 шагов на оборот, но поскольку
двигатель представляет собой систему с пружинно-массовой нагрузкой, наш обычный
диапазон составляет от 2000 до 6000 отсчетов за оборот. Тем не менее, при этих
разрешениях даже ошибка в 200 шагов соответствует доле градуса.

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

Схема и типы сервоприводов

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

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

Вся схема управления серво находится внутри корпуса, управляющие сигналы и питание подаются, как правило, идут по трем проводам: земля, напряжение питания и управляющий сигнал.

Сервопривод непрерывного вращения 360, 180 и 270 градусов

Выделяют два основных вида серводвигателей – с непрерывным вращением и с фиксированным углом  (чаще всего, 180 или 270 градусов). Отличие серво ограниченного вращения заключается в механических элементах конструкции, которые могут блокировать движение вала вне заданных параметрами углов. Достигнув угла 180, вал окажет воздействие на ограничитель, а тот отдаст команду на выключение мотора. У серводвигателей непрерывного вращения таких ограничителей нет.

Материалы шестерней сервопривода

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

В более дорогих моделях можно найти элементы из карбона и даже титана.

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

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

Титановые или карбоновые шестерни – самый предпочтительный вариант, если вы не ограничены бюджетом. Легкие и надежные, такие сервоприводы активно используются для создания моделей автомобилей, дронов и самолетов.

Преимущества серводвигателей

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

Отличия серво и обычного двигателя

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

Отличия серво и шагового мотора

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

Важно отметить, что шаговые двигатели и сервоприводами не являются прямыми конкурентами – каждое из этих устройств занимает свою определенную сферу применения

Управление сервоприводом. Интерфейс управляющих сигналов

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

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

Чаще всего в хобби-сервах импульсы производятся с частотой 50 Гц. Это значит, что импульс испускается и принимается раз в 20 мс. Обычно при этом длительность импульса в 1520 мкс означает, что сервопривод должен занять среднее положение. Увеличение или уменьшение длины импульса заставит сервопривод повернуться по часовой или против часовой стрелки соответственно. При этом существуют верхняя и нижняя границы длительности импульса. В библиотеке для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.

Обратите внимание, что на вашем конкретном устройстве заводские настройки могут оказаться отличными от стандартных. Некоторые сервоприводы используют ширину импульса 760 мкс

Среднее положение при этом соответствует 760 мкс, аналогично тому, как в обычных сервоприводах среднему положению соответствует 1520 мкс.

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

На что ещё стоит обратить внимание, так это на путаницу в терминологии. Часто способ управления сервоприводами называют PWM/ШИМ (Pulse Width Modulation) или PPM (Pulse Position Modulation)

Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation). В нём крайне важна длина импульсов и не так важна частота их появления. 50 Гц — это норма, но сервопривод будет работать корректно и при 40, и при 60 Гц. Единственное, что нужно при этом иметь в виду — это то, что при сильном уменьшении частоты он может работать рывками и на пониженной мощности, а при сильном завышении частоты (например, 100 Гц) может перегреться и выйти из строя.

Как подключить моторчик к Arduino

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • мотор постоянного тока (Motor DC);
  • транзистор полевой/биполярный;
  • драйвер двигателей L298N;
  • провода «папа-папа», «папа-мама».

Перед выбором способа управления двигателем от Arduino Uno r3, уточните на какое напряжение рассчитан ваш моторчик. Если питание требуется более 5 Вольт, то следует использовать транзистор или драйвер. Распиновка транзисторов может отличаться от приведенного примера (следует уточнить распиновку для своего типа). Драйвер L298N позволит не только включать мотор, но и изменять направление вращения.

Скетч. Подключение мотора напрямую


Схема. Управление моторчиком от Ардуино напрямую

Подключение мотора к Ардуино напрямую — самый простой вариант включения вентилятора на Arduino или машинки. Команда для включения двигателя не отличается, от команды при подключении светодиода к микроконтроллеру. Функция digitalWrite включает/выключает подачу напряжения на цифровой порт, к которому подключен двигатель постоянного тока. Соберите схему и загрузите программу.

void setup() {
   pinMode(12, OUTPUT); // объявляем пин 12 как выход
}

void loop() {
   digitalWrite(12, HIGH); // включаем мотор

   delay(1000); // ждем 1 секунду

   digitalWrite(12, LOW); // выключаем мотор

   delay(1000); // ждем 1 секунду
}
  1. для подключения мотора без драйвера можно использовать любой порт;
  2. если двигатель не включается, то, возможно, не хватает силы тока на цифровом выходе, подключите двигатель через транзистор к порту 3,3V или 5V.

Скетч. Подключение мотора через транзистор

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


Подключение FA-130 мотора постоянного тока — Motor DC Arduino

void setup() {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
}

void loop() {
   digitalWrite(13, HIGH); // включаем мотор

   delay(1000); // ждем 1 секунду

   digitalWrite(13, LOW); // выключаем мотор

   delay(1000); // ждем 1 секунду
}
  1. при необходимости можно подключить два мотора FA-130 к Ардуино;
  2. в зависимости от характеристик, двигатель подключается к 3,3 или 5 Вольтам.

Скетч. Подключение мотора через драйвер


Схема подключения двух моторов через драйвер l298n

Подключение мотора к Ардуино через драйвер L298N или Motor Shield L293D позволит менять направление вращения ротора. Но для использования данных модулей потребуется установить соответствующие библиотеки для Ардуино. В примере мы использовали схему подключения двигателя с помощью модуля L298N. Соберите схему, как на картинке ниже и загрузите следующий скетч с использованием.

// задаем имена для портов
#define IN1 3
#define IN2 4
#define IN3 5
#define IN4 6

void setup() {
   pinMode(IN1, OUTPUT);
   pinMode(IN2, OUTPUT);
   pinMode(IN3, OUTPUT);
   pinMode(IN4, OUTPUT);
}

void loop() {

   // вращаем моторчики в одну сторону
   digitalWrite(IN1, HIGH);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, HIGH);
   digitalWrite(IN4, LOW);

   delay(2000); // ждем 2 секунды

   digitalWrite(IN1, LOW);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, LOW);

   delay(1000); // выключаем на 1 секунду

   // вращаем моторчики в обратную сторону
   digitalWrite(IN1, LOW);
   digitalWrite(IN2, HIGH);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, HIGH);

   delay(2000); // ждем 2 секунды

   digitalWrite(IN1, LOW);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, LOW);

   delay(1000); // выключаем на 1 секунду
}

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

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

  • красный — питание; подключается к контакту или напрямую к источнику питания
  • коричневый или чёрный — земля
  • жёлтый или белый — сигнал; подключается к цифровому выходу Arduino.

Для подключения к Arduino будет удобно воспользоваться платой-расширителем портов, такой как Troyka Shield. Хотя с несколькими дополнительными проводами можно подключить серву и через breadboard или непосредственно к контактам Arduino.

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

Ограничение по питанию

Обычный хобби-сервопривод во время работы потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать мощный сервопривод, есть смысл задуматься о выделении его в контур с дополнительным питанием.

Рассмотрим на примере подключения 12V сервопривода:

Ограничение по количеству подключаемых сервоприводов

На большинстве плат Arduino библиотека поддерживает управление не более 12 сервоприводами, на Arduino Mega это число вырастает до значения 48. При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию на 9 и 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет. На Arduino Mega можно подключить до 12 сервоприводов без нарушения функционирования ШИМ/PWM, при использовании большего количества сервоприводов мы не сможем использовать на 11 и 12 контактах.

Building

Normal build

To build Servo in development mode. This is useful for development, but
the resulting binary is very slow.

git clone https://github.com/servo/servo
cd servo
./mach build --dev
./mach run tests/html/about-mozilla.html

Or on Windows MSVC, in a normal Command Prompt (cmd.exe):

git clone https://github.com/servo/servo
cd servo
mach.bat build --dev

For benchmarking, performance testing, or
real-world use, add the flag to create an optimized build:

./mach build --release
./mach run --release tests/html/about-mozilla.html

Note: will build both and . To make compilation a bit faster, it’s possible to only compile the servo binary: .

Checking for build errors, without building

If you’re making changes to one crate that cause build errors in another crate,
consider this instead of a full build:

./mach check

It will run , which runs the analysis phase of the compiler
(and so shows build errors if any) but skips the code generation phase.
This can be a lot faster than a full build,
though of course it doesn’t produce a binary you can run.

Building for Android target

For ARM (, most phones):

./mach build --release --android
./mach package --release --android

For x86 (typically for the emulator):

./mach build --release --target i686-linux-android
./mach package --release --target i686-linux-android

Как подключить потенциометр к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • потенциометр (переменный резистор);
  • беспаечная макетная плата;
  • один светодиод и резистор;
  • сервопривод;
  • провода «папа-папа», «папа-мама».

Скетч. Подключение потенциометра к аналоговому входу

Крайние ножки переменного резистора подключаются к портам питания (5V и GND). Средний контакт имеет подвижный контакт, на котором меняется напряжение вследствие изменения сопротивления при вращении ручки. Полярность подключения «+» и «-» роли не играет, при этом будет происходить только инверсия сигнала потенциометра. Соберите следующую схему и загрузите приведенный код в плату.


Схема подключения потенциометра к Arduino Uno

void setup() {
   Serial.begin(9600);     // запускаем монитор порта
   pinMode(A1, INPUT); // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1); // считываем данные с порта A1
   Serial.println(val);             // выводим данные на монитор порта
   delay(500);                       // ставим задержку для удобства
}
  1. при необходимости подключения нескольких потенциометров к Arduino Nano, следует их подключать к другим аналоговым входам;.

Скетч. Подключение потенциометра и светодиода

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


Схема подключения потенциометра и светодиода к Ардуино

void setup() {
   pinMode(10, OUTPUT); // подключаем светодиод к пин 10
   pinMode(A1, INPUT);     // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1); // считываем данные с порта A1
   val = val / 4;                      // делим значения на 4
   analogWrite(10, val);        // меняем яркость светодиода
}
  1. светодиод подключается к аналоговому выходу с ШИМ сигналом;
  2. данные с порта A1, которые находятся в диапазоне 0…1023, мы делим на 4 и получаем диапазон от 0 до 255 для изменения яркости светодиода.

Скетч. Подключение потенциометра и сервопривода

Сервомотор подключается к аналоговым выходам Arduino Nano. В скетче использована функция map, которая пропорционально переносит значение переменной из текущего диапазона значений в новый диапазон. Таким образом, значения с потенциометра в диапазоне 0…1023, мы переводим их в новый диапазон от 0 до 180 (угол поворота сервомотора). Соберите схему и загрузите следующий скетч.


Схема подключения потенциометра и сервомотора к Ардуино

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

void setup() {
   servo.attach(10);        // привязываем сервопривод к порту 10
   pinMode(A1, INPUT); // к входу A1 подключаем потенциометр
}

void loop() {
   int val = analogRead(A1);          // считываем данные с порта A1
   val = map(val, 0, 1023, 0, 180); // переводим val в новый диапазон
   servo.write(val);                         // передаем значения для сервопривода
}

Сравнение с шаговым двигателем

Другим вариантом точного позиционирования приводимых элементов без датчика обратной связи является применение шагового двигателя. В этом случае схема управления отсчитывает необходимое количество импульсов (шагов) от положения репера (этой особенности обязан характерный шум шагового двигателя в дисководах 3,5″ и CD/DVD при попытках повторного чтения). При этом точное позиционирование обеспечивается параметрическими системами с отрицательной обратной связью, которые образуются взаимодействующими между собой соответствующими полюсами статора и ротора шагового двигателя. Cистема управления шаговым двигателем, активизирующая соответствующий полюс статора, формирует cигнал задания для соответствующей параметрической системы  .

Так как датчик обычно контролирует приводимый элемент, электрический сервопривод имеет следующие преимущества перед шаговым двигателем:

  • не предъявляет особых требований к электродвигателю и редуктору — они могут быть практически любого нужного типа и мощности (а шаговые двигатели, как правило, маломощны и тихоходны);
  • гарантирует максимальную точность, автоматически компенсируя:
    • механические (люфты в приводе) или электронные сбои привода;
    • постепенный износ привода, шаговому же двигателю для этого требуется периодическая юстировка;
    • тепловое расширение привода (при работе или сезонное), это было одной из причин перехода на сервопривод для позиционирования головок в жестких дисках;
    • обеспечивая немедленное выявление отказа (выхода из строя) привода (по механической части или электронике);
  • большая возможная скорость перемещения элемента (у шагового двигателя наименьшая максимальная скорость по сравнению с другими типами электродвигателей);
  • затраты энергии пропорциональны сопротивлению элемента (на шаговый двигатель постоянно подаётся номинальное напряжение с запасом по возможной перегрузке);

Недостатки в сравнении с шаговым двигателем

  • необходимость в дополнительном элементе — датчике;
  • сложнее блок управления и логика его работы (требуется обработка результатов датчика и выбор управляющего воздействия, а в основе контроллера шагового двигателя — просто счётчик);
  • проблема фиксирования: обычно решается постоянным притормаживанием перемещаемого элемента либо вала электродвигателя (что ведёт к потерям энергии) либо применение червячных/винтовых передач (усложнение конструкции) (в шаговом двигателе каждый шаг фиксируется самим двигателем).
  • сервоприводы, как правило, дороже шаговых.

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

P.S.:

Проблемы фиксирования никакой нет в сервоприводе в отличие от шагового. Высокоточное позиционирование и удержание в заданной позиции обеспечивается работой электрической машины в вентильном режиме, суть которого сводится к её работе в качестве источника силы. В зависимости от рассогласования положения (и других координат электропривода) формируется задание на силу. При этом несомненным преимуществом сервопривода является энергоэффективность: ток подается только в том необходимом для того объеме, чтобы удержать рабочий орган в заданном положении. В противоположность шаговому режиму, когда подается максимальное значение тока, определяющее угловую характеристику машины. Угловая характеристика машины аналогична при малых отклонениях механической пружине, которая пытается «притянуть» рабочий орган в нужную точку. В шаговом приводе чем больше рассогласование положения, тем больше сила при неизменном токе.

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации