Eletrônica

Calcular ângulo do servo a partir do pulso PWM

Calculadora Grátis · Privado
Revisado por: (política editorial ) · Última revisão:
Esta calculadora foi útil?

Esta calculadora converte a largura de pulso PWM (em milissegundos) no ângulo correspondente de um servomotor RC. A fórmula é Ângulo = (pulso_ms − 1,0) × faixa_°, onde 1,0 ms é o mínimo, 2,0 ms é o máximo e 1,5 ms é o centro exato. Usada em Arduino, robótica, aeromodelismo RC e automação, permite calcular a posição angular sem testes físicos iterativos. A tabela de referência abaixo cobre servos de 90°, 180° e 270°.

Última revisão: 3 de junho de 2026 Verificado por Fonte: Wikipedia PT — Servomotor: princípio de funcionamento e sinal PWM, Arduino Reference — Servo.writeMicroseconds(), SparkFun — Hobby Servo Tutorial: PWM timing and control 100% privado

Para um servo RC padrão (faixa 180°): **Ângulo = (pulso_ms − 1,0) × 180**. Exemplos: 1,0 ms = 0°, 1,5 ms = 90° (centro), 2,0 ms = 180°. Para converter ms em µs para o Arduino: `servo.writeMicroseconds(pulso_ms × 1000)`. Fórmula inversa: pulso_ms = (ângulo / faixa) + 1,0.

Quando usar esta calculadora

  • Programar movimentos precisos de braço robótico com Arduino, calculando os valores de pulso PWM (writeMicroseconds) para cada junta antes de escrever o código.
  • Configurar a posição neutra de aileron ou profundor em aeromodelos RC, garantindo que o pulso de 1,5 ms corresponda a 0° de deflexão.
  • Calibrar o ângulo de direção de um carrinho RC ou robô seguidor de linha, determinando os pulsos de corte máximo esquerdo e direito.
  • Verificar a linearidade de um servomotor em bancada, mapeando pulsos de 1,0 ms a 2,0 ms em passos de 0,1 ms e conferindo distribuição uniforme.
  • Adaptar servos de faixa 270° (como o MG996R em modo estendido) para projetos de câmera pan-tilt, calculando o pulso exato para cada ângulo de enquadramento.

Exemplo: servo 180° com pulso de 1,75 ms

  1. Pulso = 1,75 ms, faixa = 180°
  2. Ângulo = (1,75 − 1,0) × 180 = 0,75 × 180 = 135°
  3. % da faixa = (1,75 − 1,0) / 1,0 × 100 = 75%
  4. No Arduino: servo.writeMicroseconds(1750)
Resultado: 1,75 ms → 135° (75% da faixa)

Como funciona

3 min de leitura

Como se calcula o ângulo do servo a partir do pulso PWM

A relação entre largura de pulso PWM e ângulo de um servomotor é linear dentro da faixa de operação. A fórmula geral é:

Ângulo (°) = (pulso_ms − pulso_min_ms) / (pulso_max_ms − pulso_min_ms) × faixa_°

Simplificado para padrão RC (1,0–2,0 ms):
Ângulo (°) = (pulso_ms − 1,0) × faixa_°

Inversa (pulso a partir do ângulo desejado):
pulso_ms = (ângulo / faixa_°) + 1,0

Porcentagem da faixa:
% = (pulso_ms − 1,0) / 1,0 × 100

> Frequência do sinal PWM: servos RC operam com período de 20 ms (50 Hz). O pulso ativo ocupa de 1,0 ms a 2,0 ms desse período; o restante é nível baixo. No Arduino use servo.writeMicroseconds(valor) onde valor = pulso_ms × 1000 (entre 1000 µs e 2000 µs).

---

Tabela de referência: servo 180° (padrão RC)

Valores padronizados para servo de 180° — o mais comum em Arduino e robótica educacional:

Pulso (ms)Pulso (µs)Ângulo (°)% da FaixaPosição
1,0010000%Mínimo
1,10110018°10%
1,25125045°25%¼ da faixa
1,50150090°50%Centro exato
1,751750135°75%¾ da faixa
1,901900162°90%
2,002000180°100%Máximo

Tabela de referência: servo 270° (ex.: MG996R modo estendido, DS3218)

Pulso (ms)Ângulo (°)Posição
1,00Mínimo
1,2567,5°¼ da faixa
1,50135°Centro
1,75202,5°¾ da faixa
2,00270°Máximo

Tabela de referência: servo 90° (mini-servos de aeromodelo)

Pulso (ms)Ângulo (°)Posição
1,00Mínimo
1,5045°Centro
2,0090°Máximo

---

Exemplos práticos

Caso 1 — Arduino controlando servo de leme em barco RC (servo 180°)


O código envia pulso de 1,3 ms:
Ângulo = (1,3 − 1,0) × 180 = 0,3 × 180 = 54°
% da faixa = 0,3 / 1,0 × 100 = 30%

No Arduino: servo.writeMicroseconds(1300);
O leme está a 54° do batente esquerdo — 36° à esquerda do centro (90°).

Caso 2 — Câmera pan-tilt com servo de 270° em ângulo específico


Para apontar a câmera a 180° em servo de faixa 270°:
pulso = (180 / 270) + 1,0 = 0,667 + 1,0 = 1,667 ms (≈ 1667 µs)

No Arduino: servo.writeMicroseconds(1667);

Caso 3 — Verificação de linearidade em bancada


Testando servo com pulsos de 1,0 ms a 2,0 ms em passos de 0,25 ms, faixa 180°:
  • 1,00 ms → 0° ✓

  • 1,25 ms → 45° ✓

  • 1,50 ms → 90° ✓

  • 1,75 ms → 135° ✓

  • 2,00 ms → 180° ✓
  • Se o servo marcar 88° no pulso de 1,50 ms, há erro de 2° indicando descalibração ou folga mecânica.

    ---

    Erros comuns ao calcular servo PWM

    1. Confundir µs com ms: Servo.h usa writeMicroseconds() em µs (1000–2000). Usar writeMicroseconds(1.5) resulta em valor truncado para 1 µs, travando o servo na posição mínima.

    2. Assumir que todos os servos operam de 1,0 ms a 2,0 ms: Servos de alta performance como o Futaba S3003 operam de 0,9 ms a 2,1 ms, dando ~18° de erro nas extremidades com a fórmula padrão.

    3. Não respeitar o período de 20 ms (50 Hz): Frequências diferentes (60 Hz, 100 Hz) podem danificar servos analógicos ou causar comportamento errático. Servos digitais suportam até 330 Hz, mas apenas se especificado pelo fabricante.

    4. Calcular ângulo absoluto em vez de deflexão: Em aeromodelismo, deflexão é medida em relação ao centro (±graus). Um pulso de 1,75 ms em servo 180° dá ângulo absoluto de 135°, mas deflexão = +45° em relação ao centro (90°).

    Perguntas frequentes

    Qual é o pulso PWM padrão para o centro de um servo RC?

    O padrão da indústria RC define 1,5 ms (1500 µs) como posição central para servos de qualquer faixa. Esse valor foi estabelecido pelo protocolo PWM de aeromodelismo na década de 1970 e é seguido pela esmagadora maioria dos fabricantes (Hitec, Futaba, Tower Pro, JR). Servos fora desse padrão declaram explicitamente o pulso de centro no datasheet.

    Por que o sinal PWM para servos usa 50 Hz e não outra frequência?

    O período de 20 ms (50 Hz) foi definido pelos primeiros sistemas de rádio controle analógicos, que precisavam de tempo suficiente para multiplexar vários canais em sequência. Servos analógicos atualizam sua posição a cada pulso (50×/segundo) — suficiente para controle suave. Servos digitais modernos (ex.: Hitec D-series) podem operar a 333 Hz para resposta mais rápida, mas servos analógicos a 333 Hz podem superaquecer pela ativação contínua do circuito de controle.

    Como usar o resultado desta calculadora no Arduino?

    Com a biblioteca Servo.h, use servo.writeMicroseconds(valor_us) onde valor_us = pulso_ms × 1000. Para ângulo direto, servo.write(angulo) funciona para 0–180°, mas internamente o Arduino mapeia para 544–2400 µs (não o padrão 1000–2000 µs). Para maior precisão, sempre use writeMicroseconds() com o valor calculado. Exemplo: 1,75 ms → servo.writeMicroseconds(1750).

    O que acontece se eu enviar um pulso menor que 1,0 ms ou maior que 2,0 ms?

    A maioria dos servos possui batentes mecânicos que impedem o movimento além da faixa nominal. Pulsos fora da janela (ex.: 0,5 ms ou 2,5 ms) forçam o motor contra o batente, causando aquecimento excessivo, corrente elevada (1–2 A) e desgaste prematuro das engrenagens. Servos de plástico podem travar em segundos. Sempre limite ao intervalo 1,0–2,0 ms ou ao intervalo especificado no datasheet.

    A relação pulso × ângulo é sempre linear?

    Idealmente sim, mas na prática existe pequena não-linearidade mecânica nas extremidades da faixa (últimos e primeiros 5–10°), causada pela geometria das engrenagens e pelo feedback potenciométrico. Para robótica de precisão, faça uma curva de calibração real medindo com goniômetro digital em 9–10 pontos de pulso. Servos digitais de alta qualidade (ex.: Dynamixel, Hitec HSB-9380TH) possuem linearidade de ±0,5° em toda a faixa.

    Quais são as faixas de ângulo mais comuns nos servos disponíveis no mercado?

    Os modelos mais comuns são: 90° (mini-servos de aeromodelo, lemes de barco); 180° (padrão RC, mais comum em Arduino e robótica educacional); 270° (pan-tilt e braços robóticos, ex.: MG996R modo estendido, DS3218); e 360° (rotação contínua — o pulso controla velocidade/direção, não posição: 1,5 ms = parado, <1,5 ms = anti-horário, >1,5 ms = horário). Confirme sempre no datasheet do fabricante.

    Como calcular o pulso necessário para um ângulo específico (cálculo inverso)?

    A fórmula inversa é: pulso_ms = (ângulo_desejado / faixa_total) + 1,0. Exemplo: posicionar servo de 270° em 200° → pulso = (200 / 270) + 1,0 = 0,741 + 1,0 = 1,741 ms (1741 µs). No Arduino: servo.writeMicroseconds(1741). Ajuste os valores base caso o datasheet indique limites diferentes (ex.: 0,9 ms – 2,1 ms).

    Servos de rotação contínua funcionam com a mesma fórmula?

    Não. Servos de rotação contínua têm o potenciômetro interno substituído por um divisor de tensão fixo, eliminando o feedback de posição. Nesses modelos, o pulso controla velocidade angular: 1,5 ms = parado, 1,0 ms = velocidade máxima em um sentido, 2,0 ms = velocidade máxima no oposto. A fórmula desta calculadora não se aplica; use-os apenas para controle de velocidade em rodas de robôs ou esteiras.

    Como a tensão de alimentação afeta a precisão angular do servo?

    Servos MG995/MG996R especificados para 4,8 V a 6,0 V podem apresentar variação de até 5° com queda de tensão, pois o torque diminui e a resistência mecânica vence o sinal em certas posições. Para projetos de precisão, use reguladores de tensão estabilizados e verifique a corrente — servos de metal exigem fonte dedicada separada do Arduino (que fornece no máximo ~500 mA pelo 5 V).

    Fontes e referências