Компонент · Исполнительный механизм
Сервопривод SG90
SG90 — компактный сервопривод массой 9 g для суставов первых роботов. Как он удерживает угол, что поднимает и как им управлять.
Что это такое
SG90 — это микросервопривод: компактный автономный исполнительный механизм, который поворачивается к заданному углу и удерживает его. Обычный двигатель постоянного тока просто вращается, а сервопривод наводится: задайте 90 градусов — и он повернётся на 90 градусов и будет сопротивляться внешнему воздействию. Поэтому это естественный выбор для любого механизма, которому необходимо перейти в известное положение: сустава роботизированной руки, захвата, который открывается и закрывается, поворотной платформы камеры или механизма поворота небольшого робота.
При массе девять граммов и цене в несколько долларов это сервопривод, с которого начинает почти каждый. Он недостаточно силён и точен для серьёзных задач, но позволяет быстрее всего понять, как работает управление положением.
Как это работает
Если вскрыть корпус, внутри обнаружатся четыре элемента: небольшой двигатель постоянного тока, редукторная передача, меняющая скорость на момент, потенциометр, связанный с выходным валом, и управляющая схема. Потенциометр — ключевой элемент: он непрерывно сообщает фактический угол вала. Схема сравнивает измеренный угол с заданным и приводит двигатель в том направлении, которое уменьшает расхождение. Это полноценный контур обратной связи в миниатюре — именно поэтому роботизированная рука с обратной кинематикой может поручить сервоприводу достичь целевой позы.
Угол задаётся сигналом PWM частотой 50 Hz, причём сообщение несёт ширину импульса: примерно 1 ms для одного края диапазона, 1.5 ms для середины и 2 ms для другого края. Здесь PWM используется как код положения, а не скорости. На практике библиотека Arduino Servo скрывает формирование импульсов: достаточно задать угол.
Когда его следует использовать
Используйте SG90, когда деталь робота должна перейти в конкретный угол и удерживать его при небольшой нагрузке: пальцы захвата, небольшие суставы руки, подвесы датчиков или тяга механизма поворота лёгкого шасси. Диапазон ~180° и мгновенное управление «перейти в этот угол» идеально подходят для изучения кинематики и создания выразительных механизмов.
Выбирайте другое решение, если сустав несёт значительную массу (используйте сервопривод с металлическими шестернями или стандартного размера), если для колеса требуется непрерывное вращение (используйте двигатель постоянного тока и L298N либо сервопривод непрерывного вращения), а также при необходимости в большом диапазоне точного движения с большим моментом (используйте шаговый двигатель).
Подключение и важные нюансы
- Питайте его отдельно. Остановившийся SG90 может потреблять 500–700 mA — намного больше, чем может обеспечить вывод 5 V микроконтроллера. Используйте отдельный источник 5 V и соедините его землю с землёй платы, иначе напряжение просядет и плата перезагрузится.
- Он не вращается непрерывно. Стандартный SG90 поворачивается на ~180° и останавливается. Команда «вращаться постоянно» ничего не даёт; для приводного колеса нужен другой исполнительный механизм.
- Не прикладывайте чрезмерное усилие и не допускайте останова. Нейлоновые шестерни ломаются от перегрузки или резкого удара. Поддерживайте небольшие нагрузки или переходите на металлические шестерни.
- Ожидайте небольшого дрожания. Дешёвые сервоприводы слегка колеблются вокруг цели. Стабильное питание и отключение сигнала, когда удержание сустава не требуется, уменьшают его.
Подключение
Три провода, причём цвета у хобби-сервоприводов практически универсальны:
| Провод | Цвет (SG90) | Назначение |
|---|---|---|
| 1 | Коричневый | Земля |
| 2 | Красный | Питание, 4.8–6 V |
| 3 | Оранжевый | Сигнал — PWM частотой 50 Hz |
Некоторые сервоприводы используют чёрный/красный/белый или чёрный/красный/жёлтый. Всегда действует одно правило: красный провод находится посередине, а земля соответствует самому тёмному из трёх проводов.
| SG90 | Arduino Uno | Примечание |
|---|---|---|
| Коричневый | GND | Должен иметь общую землю с источником питания сервопривода |
| Красный | Не вывод 5 V Arduino | Отдельный источник 5 V — см. ниже |
| Оранжевый | Любой цифровой вывод | Библиотека Servo работает на любом выводе |
Почему нельзя питать от вывода 5 V Arduino
SG90 потребляет около 10 mA в режиме ожидания, 150–250 mA при движении и 650 mA при останове. Источник питания USB, от которого работает Uno, ограничен 500 mA для всей платы, а встроенный регулятор при питании через разъём имеет собственный тепловой предел.
Один сервопривод при небольшом движении часто работает — в этом и заключается проблема: на стенде всё исправно, но при возникновении сопротивления питание проседает. Симптом — перезагрузка платы всякий раз, когда рука достигает определённого положения, что выглядит как ошибка программного обеспечения.
Подайте отдельное питание 5 V, объедините земли и установите конденсатор 470 µF параллельно питанию сервопривода рядом с разъёмом.
Связь между шириной импульса и углом
Сервопривод не считывает напряжение. Он считывает длительность импульса пятьдесят раз в секунду.
| Ширина импульса | Номинальный угол | Что фактически делает SG90 |
|---|---|---|
| 1.0 ms | 0° | Часто останавливается на 10–15° раньше |
| 1.5 ms | 90° | Середина диапазона, обычно точная |
| 2.0 ms | 180° | Часто останавливается на 10–15° раньше |
| < 0.5 ms или > 2.5 ms | — | Гудит, упираясь в крайний упор, и потребляет ток останова |
Диапазон 1–2 ms является соглашением, а не стандартом. Многие SG90 достигают настоящих крайних положений ближе к 0.6 ms и 2.4 ms, поэтому библиотека Arduino Servo с функцией attach() принимает необязательные минимальную и максимальную ширины импульса:
servo.attach(9, 600, 2400); // instead of the 544/2400 defaults
Такая калибровка для каждого сервопривода — разница между рукой, достигающей рабочего пространства, и рукой, которая по непонятной причине не достигает его на обоих краях примерно на 20°.
Минимальный рабочий код
#include <Servo.h>
Servo joint;
const int PIN = 9;
void setup() {
joint.attach(PIN, 600, 2400); // calibrate these two numbers per servo
joint.write(90); // centre before doing anything else
delay(500);
}
// Move gently instead of jumping — a servo commanded to jump goes at full speed.
void sweepTo(int target, int stepDelayMs) {
int current = joint.read();
int step = (target > current) ? 1 : -1;
while (current != target) {
current += step;
joint.write(current);
delay(stepDelayMs);
}
}
void loop() {
sweepTo(20, 15);
delay(400);
sweepTo(160, 15);
delay(400);
}
joint.write(160) и плавное перемещение заканчиваются при 160°, но это полностью разные электрические события. Скачок команды задаёт полную скорость, а при нагруженном суставе это всплеск 650 mA и механический удар через нейлоновые шестерни. Плавное перемещение распределяет то же движение на две секунды и потребляет лишь долю тока. На многосуставной руке это разница между источником питания, который справляется, и тем, который не справляется.
Момент: что означает 1.8 kg·cm
Характеристика — 1.8 kg·cm при 4.8 V: сервопривод может удерживать 1.8 kg на расстоянии 1 cm от вала или 1.8/L kg при расстоянии L в сантиметрах. Именно последняя часть часто вводит в заблуждение.
| Длина плеча от вала | Максимальная нагрузка (при останове) | Безопасная рабочая нагрузка (~30%) |
|---|---|---|
| 1 cm | 1800 g | 540 g |
| 5 cm | 360 g | 108 g |
| 10 cm | 180 g | 54 g |
| 15 cm | 120 g | 36 g |
Следует запомнить два обстоятельства. Во-первых, момент линейно уменьшается с увеличением вылета, поэтому плечо длиной 15 cm при абсолютном останове может поднять только 120 g. Во-вторых, никогда не проектируйте исходя из момента останова. Сервопривод в останове потребляет полный ток, не совершает движения и нагревается; треть момента останова — разумный предел для сустава, который должен удерживать положение в течение значительного времени.
Эта величина также указана для 4.8 V. При 6 V тот же сервопривод обеспечивает примерно 2.2 kg·cm — одно из немногих бесплатных улучшений в хобби-робототехнике, если источник питания способен отдавать соответствующий ток.
Уменьшение дрожания
Дешёвые сервоприводы слегка колеблются вокруг цели, и этому есть четыре разные причины, которые стоит различать:
- Шум источника питания. Самая частая причина. Сервопривод питается по общей шине с двигателями и воспринимает каждый бросок тока как возмущение. Нужен отдельный источник питания и конденсатор возле сервопривода.
- Дрожание временных интервалов сигнала. Библиотека
Servoформирует импульсы программно, поэтому нагруженный цикл или другое прерывание сдвигают их фронты. Полностью устраняет это переход на PCA9685: он формирует импульсы аппаратно. - Мёртвая зона. Собственный регулятор сервопривода игнорирует ошибки примерно менее 5 µs по ширине импульса, то есть около 1°. Ниже этого разрешения он просто не реагирует, поэтому требование более мелких шагов не даёт результата.
- Удержание против нагрузки. Сервопривод, преодолевающий гравитацию на пределе момента, непрерывно гудит. Вызывайте
detach(), когда сустав не должен удерживаться, или уравновесьте его механически.
Диагностика
| Симптом | Вероятная причина | Исправление |
|---|---|---|
| Плата перезагружается при движении сервопривода | Ток сервопривода проходит через Arduino | Отдельный источник 5 V, общая земля, конденсатор 470 µF |
| Постоянно гудит и нагревается | Команда выходит за крайний упор | Сузить диапазон ширины импульса в attach() |
| Проходит только около 150° | Значения библиотеки по умолчанию не достигают настоящих упоров | Использовать attach(pin, 600, 2400) и выполнить настройку |
| Перемещается в полностью неверный угол | Вал установлен под произвольным углом | Каждому суставу нужен калибровочный сдвиг и, возможно, изменение знака |
| Дрожит в покое | Шум питания или программное формирование импульсов | Сначала конденсатор; при сохранении дрожания — PCA9685 |
| Сломана и теперь проскальзывает | Нейлоновые шестерни разрушены ударом или перегрузкой | Металлические шестерни MG90S; уменьшить нагрузку или скорость |
| Со временем движется медленнее и слабее | Просадка питания по мере разряда батареи | Момент пропорционален напряжению — измерить шину под нагрузкой |
| Не вращается непрерывно | Это позиционный сервопривод | Использовать сервопривод непрерывного вращения или редукторный двигатель постоянного тока |
SG90 или что-то другое?
| Деталь | Момент @ 4.8 V | Шестерни | Когда выбирать |
|---|---|---|---|
| SG90 | 1.8 kg·cm | Нейлон | Обучение, небольшие захваты, подвесы датчиков |
| MG90S | 2.2 kg·cm | Металл | Тот же размер, устойчивость к ударам — взаимозаменяемое улучшение |
| MG996R | 9.4 kg·cm | Металл | Суставы стандартного размера со значительной нагрузкой |
| SG90 непрерывного вращения | — | Нейлон | Приводное колесо, где нужна скорость, а не угол |
| Шаговый двигатель NEMA 17 | ~40 N·cm | — | Точное повторяемое позиционирование без мёртвой зоны |
Одно предупреждение о «небольших захватах» в первой строке. Захват — единственное применение, в котором SG90 проводит большую часть времени в останове: удержание объекта не является движением, поэтому обмотка потребляет около 0.5 A без охлаждения — обычная причина гибели таких сервоприводов. По этой причине усилие захвата определяется длиной плеча, а не моментом на табличке: 0.176 N·m при длине пальца 30 mm даёт 5.87 N при останове и около 4.11 N, которые действительно можно удержать. Руководство расчёт сервоприводного захвата рассматривает оба вопроса, а симулятор захвата выполнит расчёт для ваших пальцев.
Честный итог: SG90 — это исполнительный механизм для обучения. Он быстрее всего позволяет понять ощущения управления положением, но недостаточно силён и не обеспечивает достаточной повторяемости для важного сустава. Когда проект перестаёт работать из-за недостаточных возможностей сервопривода, обычно подходит MG90S: те же размеры, то же подключение, но металлические шестерни.
Исследуйте граф
Используется в этих сборках
Проекты, учебные пути и симуляторы, в которых используется Сервопривод SG90.
- ПроектРобот обхода препятствий: датчик, сканирование и поворот
- ПроектРоботизированная рука 4-DOF на PCA9685: сервоприводы и кинематика
- ПроектСоберите графоплоттер с двумя точными осями на шаговых двигателях
- ПроектСоберите робота для захвата и переноса с проверкой
- Учебный путьЗахват предметов и рабочие органы: как поднять предмет
Сравнение
Альтернативы
Вопросы
Сервопривод SG90: частые вопросы
Что такое сервопривод SG90?
SG90 — это хобби-сервопривод массой 9 g: небольшой редукторный двигатель, который поворачивается к заданному углу и удерживает его вместо свободного вращения. Это самый дешёвый и распространённый сервопривод для начинающих разработчиков робототехники; его применяют в суставах рук, захватах, поворотных платформах для камер и механизмах поворота.
Как работает сервопривод?
Внутри находятся двигатель постоянного тока (DC), редукторная передача, потенциометр и управляющая схема. Потенциометр сообщает схеме текущий угол; она сравнивает его с заданным углом и приводит двигатель в движение до их совпадения. Эта встроенная обратная связь позволяет сервоприводу удерживать точное положение.
Как управлять SG90 с помощью Arduino?
Передайте сигнал PWM частотой 50 Hz, в котором ширина импульса задаёт угол: примерно 1 ms соответствует 0°, 1.5 ms — 90°, а 2 ms — 180°. На практике используйте библиотеку Arduino Servo и вызывайте servo.write(angle): она сформирует временные параметры сама.
Какую массу может поднять SG90?
Момент останова SG90 составляет около 1.8 kg·cm: сервопривод может удерживать 1.8 kg на плече 1 cm или ~180 g на плече 10 cm. Допустимая постоянная нагрузка значительно ниже. Для большей массы или более длинного плеча нужен сервопривод с металлическими шестернями, например MG90S, либо сервопривод стандартного размера.
SG90 или MG90S — что лучше?
Они одного размера и управляются одинаково, но у MG90S металлические шестерни и немного больший момент, поэтому он выдерживает остановы и нагрузки, которые сломали бы нейлоновые шестерни SG90. Используйте SG90 для обучения и небольших нагрузок; выбирайте MG90S, когда сустав несёт значимую массу или подвергается ударам.
Какой ток потребляет SG90?
В режиме ожидания SG90 потребляет лишь несколько миллиампер, но при останове или движении под нагрузкой ток может возрасти до 500–700 mA. Это слишком много для вывода 5 V Arduino, поэтому питайте сервоприводы от отдельного источника 5 V с общей землёй, иначе напряжение просядет и плата перезагрузится.
Дополнительные материалы