Torque do servo: calcule a carga e a fonte certa
Servo zune, esquenta e reinicia o Arduino? Calcule o torque da carga com um script, use até metade do travamento e dimensione a fonte com GND comum.
Quando um servo zune, esquenta e faz o Arduino reiniciar a cada movimento, o problema quase nunca é o código. É conta de física: a carga pede mais torque do que o servo entrega com folga, e a corrente que ele puxa para tentar derruba a alimentação da placa. Este post faz essa conta com números, escolhe a fonte e mostra quando o projeto precisa de outro tipo de motor.
A ligação básica, a calibração dos pulsos e o movimento suave com millis() estão no guia de servo motor no Arduino. Aqui o exemplo é um braço de três servos (base, ombro e garra) num Arduino Uno, e o ombro é a junta que falha primeiro.
O que acontece dentro do servo quando a carga é pesada
Um servo de hobby tem um motor de corrente contínua, uma caixa de engrenagens, um potenciômetro preso ao eixo e um circuito de controle. O Arduino manda um pulso a cada 20 ms (o REFRESH_INTERVAL do Servo.h oficial), e a largura do pulso diz o ângulo pedido. O circuito compara o pedido com o potenciômetro e empurra o motor até os dois baterem.
Se a carga é pesada demais, a posição nunca bate. O circuito empurra com força total, o motor fica perto da condição de travamento (stall), que é quando ele puxa mais corrente, e a energia vira calor e zumbido. Se essa corrente sai do pino de 5 V do Arduino, a tensão cai e o microcontrolador reinicia. O sintoma parece bug; é falta de torque e de fonte.
Como calcular o torque que a junta pede
Torque é força vezes distância até o eixo. Anúncios de servo informam em kg·cm: 2 kg·cm seguram, no limite, 2 kg a 1 cm do eixo ou 0,2 kg a 10 cm. Esse número costuma ser o torque de travamento, medido com o eixo parado na tensão indicada. Projetar em cima dele é projetar para o servo trabalhar no limite. Um teto comum é usar no máximo metade.
O pior caso do ombro é o braço esticado na horizontal. Cada massa entra com a distância do seu centro até o eixo. O script abaixo faz a conta para o exemplo e compara três servos de anúncio:
# torque.py: torque e corrente de um braço com servos (pior caso: braço na horizontal)
G = 9.81 # m/s²
def torque_kgcm(cargas):
"""cargas: lista de (massa_kg, distancia_cm) medidas a partir do eixo"""
return sum(m * d for m, d in cargas)
ombro = [
(0.12, 12.0), # garra + objeto na ponta
(0.05, 6.0), # peso do próprio braço, no centro dele
]
t = torque_kgcm(ombro)
print(f"Torque no ombro: {t:.2f} kg·cm = {t * G / 100:.3f} N·m")
servos = {"micro 1,8 kg·cm": 1.8, "padrão 10 kg·cm": 10.0, "padrão 20 kg·cm": 20.0}
for nome, stall in servos.items():
uso = t / stall
veredito = "ok" if uso <= 0.5 else ("no limite" if uso <= 0.8 else "vai travar")
print(f" {nome:<16} usa {uso:5.0%} do travamento -> {veredito}")
# Fonte: soma das correntes de travamento que podem acontecer juntas
travamento_a = {"base": 1.5, "ombro": 1.5, "garra": 0.7}
soma = sum(travamento_a.values())
print(f"Soma dos travamentos: {soma:.1f} A; com 25% de folga: {soma * 1.25:.1f} A")
Saída no Python 3:
Torque no ombro: 1.74 kg·cm = 0.171 N·m micro 1,8 kg·cm usa 97% do travamento -> vai travar padrão 10 kg·cm usa 17% do travamento -> ok padrão 20 kg·cm usa 9% do travamento -> ok Soma dos travamentos: 3.7 A; com 25% de folga: 4.6 A
O micro servo azul dos tutoriais trabalharia a 97% do travamento só para segurar o braço parado. Ele vai zunir, esquentar e, com engrenagens de plástico, espanar. O gráfico mostra como o torque cresce com a distância e com a carga, e onde fica a metade do torque de cada servo:

Mude a mecânica antes de trocar o servo
O torque é linear na distância. Encurtar o braço pela metade corta o torque pela metade. Outras saídas que custam pouco:
- Aproximar a carga do eixo. A garra pesada no fim do braço é o pior lugar para ela.
- Contrapeso do outro lado do eixo. Ele compensa o peso parado, mas aumenta a inércia, então o movimento precisa ser mais lento.
- Material mais leve. Trocar uma régua de alumínio por um perfil impresso oco reduz a parcela do próprio braço.
- Mola de compensação. Braços de luminária usam a mesma ideia para que o motor não segure todo o peso.
Como dimensionar a fonte dos servos
Procure a corrente de travamento (stall current) na folha de dados do servo. Se não houver, meça: multímetro em série na alimentação, segure o eixo por um instante e anote o pico. Faça a medição com cuidado, porque o motor esquenta rápido travado. As regras de uso do aparelho estão em multímetro no circuito desligado.
Some o travamento dos servos que podem esforçar ao mesmo tempo e dê folga. No exemplo, com as correntes hipotéticas do script, a soma é 3,7 A, e uma fonte de 5 V e 5 A cobre o pior caso. Depois:
- Ligue o positivo e o negativo da fonte direto nos servos, sem passar pela placa.
- Ligue o GND da fonte ao GND do Arduino. Sem terra comum, o pulso de controle não tem referência e o servo treme ou ignora o comando.
- Ponha um capacitor eletrolítico de algumas centenas de microfarads perto dos servos, com tensão nominal acima da fonte, para segurar os picos.
- Alimente o Arduino pelo USB ou pela entrada própria. O pino de 5 V do Uno não segura um servo padrão travado. Os limites de cada entrada estão em como alimentar o Arduino.
Confira a faixa de tensão do servo antes de escolher 5 V ou 6 V. Muitos servos dão mais torque a 6 V, mas isso só vale se a folha permitir.
Fim de curso também é carga
A biblioteca Servo mapeia 0° para 544 µs e 180° para 2.400 µs (MIN_PULSE_WIDTH e MAX_PULSE_WIDTH no Servo.h). Muitos servos batem no limite mecânico antes disso. Pedir 0° ou 180° faz o motor empurrar o batente sem parar, e o efeito na corrente é o mesmo de uma carga pesada. Meça os limites do seu exemplar com writeMicroseconds() e passe esses valores ao attach(pino, min, max), como descreve a documentação da biblioteca Servo. O passo a passo da calibração está no guia do servo no Arduino.
Movimento brusco de ponta a ponta é o outro pico. A inércia da carga pede torque extra na partida e na parada. Andar em passos de 10 µs a cada 15 ms, sem delay(), reduz o tranco e a corrente de pico.
Quando o projeto pede outro motor
O servo comum posiciona um eixo dentro de um arco, perto de 180°. Ele não foi feito para girar sem parar nem para tração:
- Roda de robô: motor de corrente contínua com redução e driver de ponte H, com sentido e velocidade por PWM, como em motor DC: sentido e velocidade.
- Servo de rotação contínua: o pulso passa a controlar velocidade e sentido, mas o servo perde a noção de posição e o torque continua de servo pequeno.
- Muitas voltas com posição exata: motor de passo com driver, que segura posição contando passos.
- Junta pesada parada por muito tempo: servo de engrenagem metálica com torque bem acima da conta, ou mecânica com trava (rosca sem fim) que segura o peso sem corrente.
Resumo da conta
Some massa vezes distância de cada peça no pior caso. Mantenha o resultado abaixo da metade do torque de travamento do anúncio. Some as correntes de travamento que podem acontecer juntas, dê folga e alimente os servos fora da placa, com GND comum e capacitor. Se a conta não fecha, mude a mecânica ou o motor; trocar o código não muda o torque.