Eletrônica Por Equipe DevBras

Capa do artigo: Torque do servo: calcule a carga e a fonte certa

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.

Avalie este artigo

Referência: http://www.seucurso.com.br/index.php?option=com_content&view=article&id=218:controlando-um-servo-motor-com-arduino&catid=901:arduino&Itemid=65