Componente · Atuador

Servomotor SG90

O SG90 é um servomotor hobby de 9 g para juntas e direções de robôs iniciantes. Entenda como mantém um ângulo, o que levanta e como acioná-lo.

O que é

O SG90 é um microservomotor: um pequeno atuador autossuficiente que gira até um ângulo comandado e o mantém. Enquanto um motor CC comum apenas gira, um servomotor mira—diga “90 graus” e ele se posiciona em 90 graus e resiste a ser afastado desse ângulo. Isso o torna a escolha natural para tudo que precisa se mover até uma posição conhecida: uma junta de braço robótico, uma garra que abre e fecha, um suporte pan-tilt de câmera ou a direção de um pequeno rover.

Com nove gramas e alguns dólares, é o servomotor com que quase todo mundo começa. Ele não é forte nem preciso o suficiente para trabalho sério, mas é a maneira mais rápida de entender como funciona o controle de posição.

Diagrama de controle de servomotor: um sinal PWM de 50 Hz cuja largura de pulso define o ângulo do servomotor. Um pulso de 1 milissegundo comanda 0 graus, 1,5 milissegundos comanda 90 graus e 2 milissegundos comanda 180 graus, mostrados em mostradores de transferidor.
Um servomotor lê a largura do pulso, não a tensão: 1 ms é 0°, 1,5 ms é o centro e 2 ms é o curso completo—repetido 50 vezes por segundo. Baixar SVG

Como funciona

Abra um e você encontrará quatro componentes: um pequeno motor CC, um trem de engrenagens que troca velocidade por torque, um potenciômetro acoplado ao eixo de saída e um circuito de controle. O potenciômetro é o elemento-chave—ele informa continuamente o ângulo real do eixo. O circuito compara esse ângulo medido ao ângulo comandado e aciona o motor na direção que reduz a diferença. É uma malha de realimentação completa em miniatura, e é exatamente por isso que o braço de cinemática inversa pode confiar que um servomotor alcançará a pose-alvo.

Você comanda o ângulo com um sinal PWM de 50 Hz, e a largura de pulso carrega a informação: aproximadamente 1 ms para uma extremidade do curso, 1,5 ms para o centro e 2 ms para a outra extremidade. Este é PWM usado como código de posição, não de velocidade. Na prática, a biblioteca Servo do Arduino oculta a temporização e você apenas escreve um ângulo.

Quando usar

Use um SG90 sempre que uma peça do robô precisar se mover até um ângulo específico e mantê-lo sob carga leve: dedos de garra, pequenas juntas de braço, gimbais de sensor ou a ligação de direção de um carro leve. Sua faixa de ~180° e o controle instantâneo de “vá para este ângulo” são ideais para aprender cinemática e construir mecanismos expressivos.

Procure outra opção quando a junta carregar peso real (use um servomotor de engrenagem metálica ou de tamanho padrão), quando precisar de rotação contínua para uma roda (use um motor CC e um L298N, ou um servomotor de rotação contínua) ou quando precisar de muitos graus de movimento preciso e com alto torque (use um motor de passo).

Conexões e armadilhas

  • Alimente-o separadamente. Um SG90 travado pode puxar 500–700 mA—muito mais do que o pino de 5 V de um microcontrolador pode fornecer. Use uma fonte dedicada de 5 V e ligue o GND dela ao GND da placa, ou a placa sofre queda de tensão e reinicia.
  • Ele não gira continuamente. Um SG90 padrão percorre ~180° e para. Comandar “gire para sempre” não faz nada; para uma roda motriz, você precisa de outro atuador.
  • Não force nem deixe entrar em travamento. As engrenagens de náilon quebram sob sobrecarga ou um golpe brusco. Mantenha as cargas leves ou passe para engrenagens metálicas.
  • Espere pequenos tremores. Servomotores baratos oscilam um pouco em torno do alvo. Uma fonte estável e limpa, além de desligar o sinal quando a junta não precisa segurar, reduzem isso.

Conexão

Três fios, e as cores são quase universais em servomotores hobby:

Fio Cor (SG90) O que é
1 Marrom Massa
2 Vermelho Alimentação, 4,8–6 V
3 Laranja Sinal — o PWM de 50 Hz

Alguns servomotores usam preto/vermelho/branco ou preto/vermelho/amarelo. A regra que sempre vale: o vermelho fica no meio, e o fio de terra é o mais escuro dos três.

SG90 Arduino Uno Observação
Marrom GND Precisa estar ligado ao GND da alimentação do servomotor
Vermelho Não o 5 V do Arduino Uma fonte separada de 5 V — veja abaixo
Laranja Qualquer pino digital A biblioteca Servo funciona em qualquer pino

Por que não usar o pino de 5 V do Arduino

Um SG90 consome cerca de 10 mA quando ocioso, 150–250 mA em movimento e 650 mA em travamento. A fonte USB que alimenta um Uno é limitada a 500 mA para toda a placa, e o regulador integrado, quando a placa funciona pelo conector circular, tem seu próprio limite térmico.

Um servomotor se movendo suavemente costuma funcionar, e é exatamente esse o problema: funciona na bancada e então sofre queda de tensão no instante em que encontra resistência. O sintoma é uma placa que reinicia sempre que o braço alcança uma posição específica—o que parece um defeito de software.

Dê a ele sua própria fonte de 5 V, una os GNDs e coloque um capacitor de 470 µF em paralelo com a alimentação do servomotor, perto do conector.

A relação entre largura de pulso e ângulo

Um servomotor não lê tensão. Lê por quanto tempo o pulso dura, cinquenta vezes por segundo.

Largura de pulso Ângulo nominal O que o SG90 realmente faz
1,0 ms 0° Costuma parar de 10–15° antes do fim
1,5 ms 90° Centro e normalmente preciso
2,0 ms 180° Costuma parar de 10–15° antes do fim
< 0,5 ms ou > 2,5 ms — Zumba contra o batente final, consumindo corrente de travamento

A faixa de 1–2 ms é uma convenção, não um padrão. Muitos SG90 atingem seus batentes reais mais perto de 0,6 ms e 2,4 ms, e é por isso que a biblioteca Servo do Arduino permite informar larguras mínima e máxima opcionais por meio de attach():

servo.attach(9, 600, 2400);   // instead of the 544/2400 defaults

Calibrar isso por servomotor é a diferença entre um braço que alcança seu espaço de trabalho e um que, misteriosamente, fica 20° curto nas duas extremidades.

Código mínimo funcional

#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) e a varredura terminam em 160°, mas são eventos eletricamente muito diferentes. O salto comanda a velocidade máxima, o que, em uma junta carregada, representa um pico de 650 mA e um choque mecânico nas engrenagens de náilon. A varredura reparte o mesmo movimento por dois segundos e consome uma fração da corrente. Em um braço de múltiplas juntas, essa é a diferença entre uma fonte que aguenta e outra que não aguenta.

Torque: o que 1,8 kg·cm realmente significa

A especificação é 1,8 kg·cm a 4,8 V—o que significa que o servomotor consegue sustentar 1,8 kg a 1 cm do eixo, ou 1,8/L kg a L centímetros. Essa última parte é o que confunde as pessoas.

Comprimento do braço a partir do eixo Carga máxima (travamento) Carga de trabalho segura (~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

Há duas coisas a retirar daqui. Primeiro, o torque cai linearmente com o alcance, portanto um segmento de braço de 15 cm só consegue levantar 120 g no travamento absoluto. Segundo, nunca projete com base no valor de travamento. Um servomotor em travamento consome corrente total, não produz movimento e aquece; um terço do torque de travamento é um limite sensato para uma junta que precisa manter uma posição por um período de tempo qualquer.

O número também é dado a 4,8 V. A 6 V, o mesmo servomotor produz aproximadamente 2,2 kg·cm, uma das poucas melhorias gratuitas da robótica hobby—desde que sua fonte possa fornecer a corrente correspondentemente maior.

Reduzindo a oscilação

Servomotores baratos oscilam um pouco em torno do alvo, e há quatro causas distintas que vale diferenciar:

  • Ruído da alimentação. O mais comum. Um servomotor compartilha uma trilha com motores e vê cada pico de corrente como uma perturbação de controle. Use uma fonte separada e um capacitor no servomotor.
  • Oscilação na temporização do sinal. A biblioteca Servo gera pulsos por software, e um laço ocupado ou outra interrupção desloca as bordas. Migrar para uma PCA9685 corrige isso completamente—ela gera os pulsos em hardware.
  • Zona morta. O controlador do próprio servomotor ignora erros abaixo de cerca de 5 µs de largura de pulso, aproximadamente 1°. Abaixo dessa resolução, ele simplesmente não responde, e pedir passos mais finos não produz nada.
  • Retenção sob carga. Um servomotor lutando contra a gravidade no limite do torque zumbirá continuamente. Use detach() quando a junta não precisar segurar ou equilibre-a mecanicamente.

Solução de problemas

Sintoma Causa provável Solução
A placa reinicia quando o servomotor se move Corrente do servomotor passando pelo Arduino Fonte separada de 5 V, GND comum e capacitor de 470 µF
Zumba o tempo todo e aquece Posição comandada além do batente final Restrinja a faixa de largura de pulso no attach()
Percorre apenas cerca de 150° Os padrões da biblioteca não alcançam os batentes reais attach(pin, 600, 2400) e ajuste
Vai completamente para o ângulo errado Chapeu instalado em uma rotação arbitrária Cada junta precisa de um deslocamento de calibração—e talvez de uma inversão de sinal
Oscila em repouso Ruído da alimentação ou pulsos temporizados por software Comece pelo capacitor; use um PCA9685 se persistir
Quebrou e agora patina Engrenagens de náilon falharam sob choque ou sobrecarga Use um MG90S com engrenagem metálica; reduza a carga ou a velocidade
Fica mais lento e fraco com o tempo A alimentação sofre queda de tensão à medida que a bateria se descarrega O torque varia com a tensão—meça a trilha sob carga
Não gira continuamente É um servomotor posicional Use um servomotor de rotação contínua ou um motorredutor CC

SG90 ou outra opção?

Componente Torque a 4,8 V Engrenagens Escolha quando
SG90 1,8 kg·cm Náilon Aprendizado, garras leves, gimbais de sensor
MG90S 2,2 kg·cm Metal Mesmo tamanho, resiste a choques—a substituição direta
MG996R 9,4 kg·cm Metal Juntas de tamanho padrão que carregam peso real
SG90 de rotação contínua — Náilon Uma roda motriz, em que você quer velocidade, não ângulo
Motor de passo NEMA 17 ~40 N·cm — Posicionamento preciso e reproduzível, sem zona morta

Um alerta sobre “garras leves” na primeira linha. Uma garra é a aplicação em que um SG90 passa a vida inteira travado—segurar um objeto não é movimento; portanto, a bobina consome cerca de 0,5 A sem nada para resfriá-la, e essa é a maneira usual de esses servomotores falharem. Também é por isso que a força da mandíbula é definida pelo braço de alavanca, não pelo torque indicado na caixa: 0,176 N·m em um braço de 30 mm resultam em 5,87 N no travamento e cerca de 4,11 N que você realmente consegue sustentar. Dimensionar uma garra de servomotor aborda ambos os pontos, e o simulador de garras faz a conta para o seu braço.

O resumo honesto: o SG90 é um atuador didático. É a maneira mais rápida de entender como funciona o controle de posição e não é forte nem reproduzível o suficiente para uma junta importante. Quando um projeto para de funcionar porque o servomotor não é bom o bastante, o MG90S geralmente é a resposta—mesmo tamanho, mesma ligação e engrenagens metálicas.

Explore o grafo

Usado nestas montagens

Projetos, caminhos de aprendizagem e simuladores que incluem Servomotor SG90.

Comparar

Alternativas

Perguntas

Perguntas frequentes sobre Servomotor SG90

O que é o servomotor SG90?

O SG90 é um servomotor hobby de 9 g—um pequeno motorredutor que gira até um ângulo comandado e o mantém, em vez de girar livremente. É o servomotor mais barato e comum da robótica iniciante, usado em juntas de braços, garras, suportes de câmera pan-tilt e direções.

Como funciona um servomotor?

Dentro há um motor CC, um trem de engrenagens, um potenciômetro e um circuito de controle. O potenciômetro informa ao circuito o ângulo atual; o circuito o compara com o ângulo comandado e aciona o motor até que ambos coincidam. Essa malha de realimentação incorporada é o que permite ao servomotor manter uma posição precisa.

Como controlar um SG90 com um Arduino?

Você envia um sinal PWM de 50 Hz no qual a largura de pulso define o ângulo: cerca de 1 ms significa 0°, 1,5 ms significa 90° e 2 ms significa 180°. Na prática, use a biblioteca Servo do Arduino e chame servo.write(angle)—ela gera a temporização para você.

Quanto peso um SG90 consegue levantar?

O torque de travamento do SG90 é de cerca de 1,8 kg·cm, o que significa que ele consegue sustentar 1,8 kg com um braço de 1 cm, ou ~180 g a 10 cm. A carga contínua utilizável é bem menor. Para algo mais pesado ou um braço mais longo, use um servomotor de engrenagem metálica como o MG90S ou um servomotor de tamanho padrão.

SG90 ou MG90S—qual é melhor?

Eles têm o mesmo tamanho e são controlados da mesma forma, mas o MG90S tem engrenagens metálicas e um pouco mais de torque, portanto suporta travamentos e cargas que quebrariam as engrenagens de náilon do SG90. Use o SG90 para aprender e para cargas leves; escolha o MG90S quando a junta carregar peso real ou sofrer golpes.

Quanta corrente um SG90 consome?

Um SG90 consome apenas alguns miliamperes quando ocioso, mas pode chegar a 500–700 mA quando entra em travamento ou se move sob carga. Isso é demais para o pino de 5 V de um Arduino; portanto, alimente os servomotores por uma fonte separada de 5 V com o GND em comum, ou a placa sofrerá queda de tensão e reiniciará.

Leitura complementar

Referências