Guias · 18 min de leitura

Motor CC, servo motor e motor de passo: diferenças e qual escolher

Motor CC, servo ou motor de passo? Velocidade, torque e precisão comparados, drivers L298N, ULN2003 e A4988, consumo de corrente, BLDC e ESC, e qual usar em cada projeto.

A diferença entre motor CC, servo motor e motor de passo cabe em uma frase: o motor CC gira sem parar e rápido enquanto você o alimenta, o servo vai até o ângulo que você pede e fica lá, e o motor de passo gira em passos pequenos e contáveis. Então, se você precisa girar uma roda, escolhe um motor CC; para abrir uma tampa em 90 graus, um servo; para mover uma peça com precisão de um décimo de milímetro, um motor de passo. Sempre que algo precisa se mexer em um projeto com Arduino, ESP32 ou Raspberry Pi Pico, você vai encontrar um desses três.

Neste guia comparamos o que há dentro de cada motor, números reais de velocidade, torque e precisão de posição de modelos populares (motor TT, SG90, MG996R, 28BYJ-48, NEMA 17), qual driver cada um precisa (L298N, um sinal PWM, ULN2003, A4988), quanta corrente eles consomem e qual é usado em cada projeto. No final você encontra códigos para Arduino, ESP32 e Pico que acionam os três ao mesmo tempo, uma breve introdução aos motores sem escovas (BLDC) e aos ESCs, e os erros mais comuns.

Motor CC (TT)
Motor CC (TT)
Servo SG90
Servo SG90
Servo MG996R
Servo MG996R
28BYJ-48 + driver ULN2003
28BYJ-48 + driver ULN2003

Resposta curta: os três motores comparados em uma tabela

CaracterísticaMotor CCServo motorMotor de passo
MovimentoGira continuamenteVai até um ângulo definido e o mantém (geralmente 0–180°)Gira passo a passo, sem limite de voltas
O que você controlaVelocidade e sentidoÂngulo (posição)Número de passos e taxa de passos
RealimentaçãoNenhuma (com encoder, passa a ter)Sim: o potenciômetro internoNenhuma (malha aberta)
VelocidadeMuito alta (milhares de RPM sem redução)Média (SG90: 0,1 s/60°)Baixa a média, o torque cai à medida que a velocidade sobe
TorqueDepende da caixa de reduçãoAlto para o tamanho (graças às engrenagens)Alto em baixa velocidade, também segura parado
Precisão de posiçãoNenhumaCerca de 1°1,8° (bem mais fina com micropasso)
Quando paradoFica soltoMantém a posição ativamenteFica travado enquanto as bobinas estiverem energizadas
DriverPonte H (L298N, L9110S) ou MOSFETNão precisa, sinal direto de um pinoULN2003 ou A4988, DRV8825
Fios23 (GND, +, sinal)4 ou 5 (às vezes 6)
Uso típicoRodas, ventoinhas, bombasBraços robóticos, travas de porta, radarImpressoras 3D, CNC, sliders de câmera

A linha mais importante da tabela é a da realimentação. O servo sabe onde está graças ao potenciômetro interno e, quando algo o empurra, ele volta para a posição. O motor de passo não sabe onde está; você apenas conta quantos passos ele deu, e essa contagem está certa enquanto o motor não for sobrecarregado e não perder passos. O motor CC não faz ideia de quanto girou; se você precisa de posição, tem de colocar um encoder no eixo dele. A escolha do motor depende em grande parte de o seu projeto precisar ou não dessa informação.

Como funciona um motor CC?

Quase todo motor CC dos projetos hobby é um motor CC com escovas. Dentro dele há ímãs fixos e uma bobina que gira (o rotor); escovas de carvão e um comutador de cobre invertem o sentido da corrente conforme o rotor gira, e assim ele continua girando. Ele tem dois fios: aplique tensão e ele gira; inverta os fios e ele gira para o outro lado. A tensão define a velocidade e a corrente que ele consome define o torque. Enquanto o motor gira, as bobinas geram uma tensão contrária chamada força contraeletromotriz (back EMF), que limita a corrente; quando o eixo é bloqueado, essa força contraeletromotriz desaparece e a corrente salta para a corrente de travamento (stall).

Kit de motor CC TT com redução e roda
O motor clássico dos carrinhos robô: um motor TT com caixa de redução plástica de 1:48. Em 6 V ele gira cerca de 200–250 RPM sem carga e consome 150 mA em vazio e até 1,5 A quando travado.

Um motor CC pequeno sem redução gira a milhares de RPM, mas tem pouquíssimo torque; é por isso que robôs sempre usam motores com redução. A caixa de redução de 1:48 de um motor TT baixa cerca de 12.000 RPM no eixo do motor para 250 RPM na roda e multiplica o torque por aproximadamente 48 (menos as perdas nas engrenagens). Você muda a velocidade com PWM e o sentido com uma ponte H; os detalhes estão em Controle de motor CC com o L298N. O ponto fraco do motor CC é a posição: o mesmo valor de PWM dá uma velocidade diferente conforme a tensão da bateria e a carga, então um comando “ande para frente por 2 segundos” cobre uma distância diferente a cada vez. Se você precisa de distância exata, coloca um encoder na roda.

Como funciona um servo motor?

Um servo motor é, na verdade, um sistema completo dentro de uma caixinha: um motor CC, um trem de engrenagens que reduz a velocidade e aumenta o torque, um potenciômetro preso ao eixo de saída e uma placa de controle. O Arduino não envia ao servo um ângulo diretamente, e sim um pulso a 50 Hz (uma vez a cada 20 ms); a largura do pulso descreve a posição desejada. A placa de controle compara esse alvo com a posição real lida no potenciômetro e aciona o motor nesse sentido até a diferença zerar. Isso se chama controle em malha fechada, e é por isso que o servo resiste quando você tenta girá-lo com a mão.

Micro servo motor SG90
Micro servo SG90: cerca de 9 gramas, 1,8 kg·cm de torque e 0,1 s/60° em 4,8 V. O fio marrom é o GND, o vermelho é o +5 V e o laranja é o sinal.
DispositivoO que a largura do pulso significaExemplo
Servo padrão (180°)Ângulo: cerca de 1 ms em uma ponta, 1,5 ms no centro, 2 ms na outra pontaSG90, MG90S, MG996R
Servo de rotação contínua (360°)Velocidade e sentido: 1,5 ms parado, mais curto para um lado, mais longo para o outroFS90R
ESC + motor sem escovasAceleração: 1 ms parado, 2 ms aceleração máximaESCs de drones e modelos RC

A faixa RC padrão é de 1–2 ms, mas a maioria dos servos baratos, como o SG90, precisa de aproximadamente 0,5–2,4 ms para os 180° completos, e a biblioteca Servo do Arduino usa 544–2400 µs por padrão. A zona morta do SG90, a menor variação à qual ele reage, é de cerca de 10 µs, o que corresponde a aproximadamente 1°; por isso a precisão prática de um servo fica em torno de um grau. Um servo de rotação contínua (FS90R) é um servo com a realimentação desativada: você controla velocidade e sentido em vez do ângulo, e a informação de posição se perde. Se você precisa de mais força, o MG996R com engrenagens metálicas é a escolha padrão; para o básico, veja O que é um servo motor?

Como funciona um motor de passo?

O motor de passo não tem escovas. As bobinas da carcaça são energizadas em uma ordem definida, e o rotor magnético dá um único passo em direção à próxima bobina a cada vez. Os motores de passo híbridos mais comuns têm 200 passos por volta, ou 1,8° por passo. Envie um certo número de pulsos e ele dá esse mesmo número de passos; envie mais rápido e ele gira mais rápido. Enquanto as bobinas estiverem energizadas, o motor fica travado no lugar; isso se chama torque de retenção. A diferença principal: o motor de passo trabalha em malha aberta. Se a carga passar do torque dele, ele perde passos, e o Arduino nunca percebe. É por isso que as impressoras 3D levam cada eixo até uma chave de fim de curso ao ligar (homing).

Motor de passo 28BYJ-48 e placa driver ULN2003
28BYJ-48 e placa ULN2003: o motor de passo inicial mais barato, que funciona com 5 V e dá cerca de 2048 passos por volta graças à redução interna. Os 4 LEDs da placa mostram qual bobina está energizada.

Você vai encontrar dois tipos de motor de passo. Os motores unipolares (28BYJ-48, 5 fios) têm um fio comum compartilhado pelas bobinas e são acionados por um simples arranjo de transistores, como o ULN2003. Os motores bipolares (NEMA 17, 4 fios) precisam que a corrente da bobina seja invertida, o que é feito por drivers com limitação de corrente, como o A4988, o DRV8825 ou o TMC2209. Esses drivers também fazem micropasso: o A4988 divide cada passo completo em 16, elevando o número de passos por volta para 3200 e deixando o movimento bem mais silencioso e suave. Para os detalhes, veja 28BYJ-48 e ULN2003 e driver de motor de passo A4988.

Velocidade, torque e precisão de posição: os números

ModeloAlimentaçãoVelocidadeTorquePrecisãoCorrente
Motor CC TT (1:48)3–6 V≈ 200–250 RPM (6 V, sem carga)0,8 kg·cm (6 V, travado)Nenhuma (precisa de encoder)150 mA em vazio, 1,5 A travado
Servo SG904,8–6 V0,1 s / 60°1,8 kg·cm≈ 1°Muito pouca em repouso, pode passar de 0,5 A em movimento
Servo MG996R4,8–7,2 V0,17 s / 60° (4,8 V)9,4–11 kg·cm≈ 1°0,5–0,9 A em funcionamento, 2,5 A travado
Motor de passo 28BYJ-485 V≈ 10–15 RPM≈ 0,3 kg·cm≈ 0,18° (2048 passos/volta)150–200 mA, mesmo parado
Motor de passo NEMA 17 (17HS4401)12–24 V (com A4988)Algumas centenas de RPM≈ 4 kg·cm (0,4 N·m) de retenção1,8°; 0,1125° em micropasso de 1/16Até 1,7 A por fase, ajustado com Vref

O torque costuma ser dado em kg·cm: um motor de 1 kg·cm consegue segurar uma carga de 1 kg a 1 cm do eixo, mas só 0,5 kg a 2 cm (1 kg·cm ≈ 0,098 N·m). Por exemplo, um MG996R em 6 V entrega 11 kg·cm; na ponta de um braço de 15 cm, ele segura em teoria 11 / 15 ≈ 0,73 kg. Mas esse é o torque de pico no momento em que o motor trava, e o peso do próprio braço se soma à carga. Uma boa regra para o motor durar bastante é ficar abaixo da metade desse valor; na prática, você consegue levar algumas centenas de gramas na ponta desse braço.

Em velocidade, a ordem se inverte. O motor CC é de longe o mais rápido. Um servo SG90 completa um movimento de 180° em cerca de 0,3 segundo e não consegue ir mais rápido. O torque do motor de passo cai conforme a velocidade sobe, porque a corrente da bobina não tem tempo de subir por completo a cada passo; um 28BYJ-48 começa a perder passos acima de uns 15 RPM. Alimentar um NEMA 17 com A4988 a partir de 24 V em vez de 12 V dá mais torque em alta velocidade, porque o driver limita a corrente de qualquer forma. Em precisão, porém, o motor de passo vence: um NEMA 17 dá 1,8° em passo completo e, no papel, 0,1125° com micropasso de 1/16. Uma observação: a relação de redução interna do 28BYJ-48 não é exatamente 1:64, e sim cerca de 1:63,68, então uma volta real tem cerca de 2038 passos, e não 2048; em projetos que giram sem parar, como relógios, essa diferença se acumula.

Qual driver cada motor precisa?

Um pino do Arduino fornece no máximo 40 mA, e o limite seguro fica em torno de 20 mA; até um pequeno motor TT consome cerca de 7 vezes isso em vazio e mais de 70 vezes quando travado. Além disso, a bobina de um motor gera um pico de tensão reversa alto no instante em que a corrente é cortada, o que pode destruir um pino sem proteção. Por isso há sempre um driver entre o motor e a placa: a placa só envia pequenos sinais de controle, enquanto a corrente do motor flui direto da fonte de alimentação através do driver. Os drivers têm transistores e diodos que absorvem a tensão reversa. Para uma ventoinha ou bomba que gira só para um lado, um único MOSFET basta.

MotorDriverLado do ArduinoObservação
Motor CC, um sentidoMOSFET (ex.: IRLZ44N) + diodo1 pino PWMVentoinhas, bombas, motores de vibração
Motor CC, dois sentidosL298N, L9110S, TB6612FNG2 pinos de sentido + 1 pino PWMA ponte H inverte o sentido, o PWM define a velocidade
Servo motorNão precisa (já vem embutido)1 pino, sinal de 50 HzPara muitos servos, uma placa PCA9685 (16 canais, I2C)
Motor de passo unipolar (28BYJ-48)ULN20034 pinosLiga as bobinas em sequência, 500 mA por canal
Motor de passo bipolar (NEMA 17)A4988, DRV8825, TMC22092 pinos (STEP, DIR)Limite de corrente ajustado com Vref, faz micropasso
Motor sem escovas (BLDC)ESC1 pino, sinal de servoA corrente nominal deve servir para o motor (ex.: 30 A)
Módulo driver de motor de passo A4988
Driver de motor de passo A4988: alimentação do motor de 8–35 V, cerca de 1 A por fase sem dissipador e micropasso de até 1/16. O pequeno trimpot em cima ajusta o limite de corrente (Vref).
No Arduino Uno, a biblioteca Servo usa o Timer1, então, assim que o primeiro servo é conectado, o analogWrite (PWM) para de funcionar nos pinos 9 e 10, não importa em que pino o servo esteja. Se você ligou o pino ENA ou ENB do L298N no 9 ou no 10, a velocidade do motor não vai mudar como você espera. Se você vai controlar a velocidade de um motor CC junto com um servo, use os pinos 3, 5, 6 ou 11 para o PWM.

Consumo de energia: quanta corrente cada motor consome?

Os três motores se comportam de forma muito diferente em relação à corrente, e você precisa escolher a fonte de alimentação de acordo. O motor CC consome mais corrente à medida que a carga aumenta; na partida e quando uma roda emperra, ele se aproxima da corrente de travamento. Dimensione a fonte para esse pico, não para a corrente em vazio. O servo consome muito pouco enquanto espera, mas produz picos de corrente curtos e bruscos a cada movimento: até um único SG90 pode passar de 0,5 A por um instante, e um MG996R chega a 2,5 A quando forçado. Esses picos derrubam a tensão e resetam o Arduino, ou causam um erro de brownout no ESP32. Já o motor de passo tem corrente passando pelas bobinas mesmo quando não se mexe nada: um 28BYJ-48 consome 150–200 mA parado e esquenta. Em projetos a bateria, se você não precisa de torque de retenção, desligar as bobinas (colocando o pino EN do A4988 em HIGH) aumenta bastante a autonomia da bateria.

  • Use uma alimentação separada: não alimente motores pelo pino 5V do Arduino. Uma porta USB fornece cerca de 500 mA, e a placa já usa parte disso; tirando um único servo pequeno, todo motor precisa da sua própria fonte.
  • Ligue os GNDs: o terminal negativo da fonte do motor precisa estar ligado ao GND da placa; caso contrário, o sinal de controle fica sem referência (veja GND comum).
  • Adicione capacitores: coloque um eletrolítico de 470–1000 µF na linha de alimentação dos servos, pelo menos 47 µF na entrada VMOT do A4988 e um capacitor cerâmico de 100 nF entre os terminais de um motor CC com escovas. O primeiro reduz as quedas de tensão; o último, o ruído das escovas.
  • Dimensione a fonte pelo pico de corrente: por exemplo, um braço robótico com 4 servos precisa de uma fonte de 5–6 V capaz de fornecer pelo menos 3 A, e um carrinho com dois motores TT precisa de um pack de baterias que aguente 2 × 1,5 A. Você pode calcular quanto tempo a bateria vai durar com a calculadora de autonomia da bateria.
  • Abaixe a tensão do jeito certo: se você precisa de 5–6 V para os servos a partir de um pack de 7,4 V, use um regulador chaveado como o LM2596; reguladores lineares como o 7805 esquentam muito com correntes na casa dos ampères.

Acionando os três motores com um só Arduino: passo a passo

O melhor jeito de ver a diferença é rodar os três lado a lado. No circuito abaixo, um motor TT é acionado por um L298N, um SG90 direto por um pino e um 28BYJ-48 por uma placa ULN2003. A tabela de pinos vale para os três exemplos de código: Arduino Uno, ESP32 e Raspberry Pi Pico.

ConexãoArduino UnoESP32Raspberry Pi Pico
L298N ENA (velocidade, PWM)D5GPIO 25GP15
L298N IN1D7GPIO 26GP14
L298N IN2D8GPIO 27GP13
Sinal do servo (laranja)D9GPIO 18GP16
ULN2003 IN1D10GPIO 19GP2
ULN2003 IN2D11GPIO 21GP3
ULN2003 IN3D12GPIO 22GP4
ULN2003 IN4D13GPIO 23GP5
GND (todas as fontes)GNDGNDGND
  1. Retire o jumper do ENA no L298N; ligue ENA, IN1 e IN2 aos pinos da tabela e o motor CC aos bornes OUT1 e OUT2. Conecte a alimentação do motor (por exemplo, duas células 18650 em série, 7,4 V) ao borne de 12V.
  2. Ligue o fio marrom do servo ao GND, o vermelho a uma fonte separada de 5–6 V e o fio laranja de sinal ao D9.
  3. Encaixe o conector branco do 28BYJ-48 na placa ULN2003, ligue IN1–IN4 a D10–D13 e alimente o terminal + da placa com uma fonte de 5 V.
  4. Ligue entre si os terminais negativos de todas as fontes e o GND do Arduino.
  5. Carregue o código pela Arduino IDE; as bibliotecas Servo e Stepper já vêm com a IDE, então você não precisa instalá-las.
  6. Ligue as fontes dos motores e observe como os três motores se comportam, um depois do outro.
C++ (Arduino IDE)
1#include <Servo.h>
2#include <Stepper.h>
3
4// DC motor (L298N): ENA=5, IN1=7, IN2=8
5const int ENA = 5;                 // PWM; Servo kütüphanesi 9 ve 10'un PWM'ini kapatır / Servo library disables PWM on 9 and 10
6const int IN1 = 7;
7const int IN2 = 8;
8
9const int SERVO_PIN = 9;           // servo sinyali / servo signal
10Servo servo;
11
12const int STEPS_PER_REV = 2048;    // 28BYJ-48 tam tur / full revolution
13Stepper stepper(STEPS_PER_REV, 10, 12, 11, 13);   // sıra: IN1, IN3, IN2, IN4 / order: IN1, IN3, IN2, IN4
14
15void releaseStepper() {            // bobinleri bırak, boşta akım çekmesin / release coils, no idle current
16  for (int pin = 10; pin <= 13; pin++) {
17    digitalWrite(pin, LOW);
18  }
19}
20
21void setup() {
22  pinMode(ENA, OUTPUT);
23  pinMode(IN1, OUTPUT);
24  pinMode(IN2, OUTPUT);
25  servo.attach(SERVO_PIN);
26  stepper.setSpeed(10);            // devir/dakika, 28BYJ-48 için en fazla ~15 / RPM, max ~15 for 28BYJ-48
27}
28
29void loop() {
30  // 1) DC motor: hız ve yön, konum yok / speed and direction, no position
31  digitalWrite(IN1, HIGH);
32  digitalWrite(IN2, LOW);
33  analogWrite(ENA, 180);           // yaklaşık %70 güç / about 70% power
34  delay(2000);
35  analogWrite(ENA, 0);             // motoru serbest bırak / let the motor coast
36  delay(500);
37
38  // 2) Servo: açı ver, gidip orada kalsın / give an angle, it goes there and holds
39  servo.write(0);
40  delay(600);
41  servo.write(180);
42  delay(600);
43  servo.write(90);
44  delay(600);
45
46  // 3) Step motor: tam çeyrek tur ileri ve geri / exactly a quarter turn forward and back
47  stepper.step(STEPS_PER_REV / 4);   // 512 adım = 90° / 512 steps = 90°
48  delay(500);
49  stepper.step(-STEPS_PER_REV / 4);
50  releaseStepper();
51  delay(1000);
52}
LinhaMotorO que faz
digitalWrite(IN1/IN2) (sentido)CCDefine o sentido: HIGH-LOW para frente, LOW-HIGH para trás
analogWrite(ENA, 180) (velocidade)CCDefine a velocidade: 180 / 255 ≈ 70% da potência; onde o motor para é desconhecido
servo.write(90) (ângulo)Servo motorLeva o servo a 90° e o mantém lá enquanto o sinal continuar chegando
stepper.setSpeed(10) (velocidade)PassoDefine o tempo entre os passos para 10 rotações por minuto
stepper.step(512) (passos)PassoDá exatamente 512 passos (90°); trava o código até terminar
releaseStepper() (liberar)PassoDesliga as quatro bobinas; o motor fica solto e não consome corrente

Quando você roda o código, a diferença fica evidente: o motor CC gira por dois segundos, mas o eixo para em um ponto diferente a cada vez. O servo vai rápido para 0°, 180° e 90°, e resiste se você tentar girá-lo com a mão. O motor de passo avança devagar exatamente um quarto de volta e volta ao mesmo ponto; depois que releaseStepper() é chamado, você consegue girar o eixo dele livremente com a mão. A função step() da biblioteca Stepper trava o código até o movimento terminar; se você quer acionar vários motores ao mesmo tempo com aceleração suave, passe para a biblioteca AccelStepper.

Motor CC, servo e motor de passo com o ESP32

Os pinos do ESP32 trabalham com 3,3 V; as entradas do L298N e do ULN2003 leem esse nível como HIGH, e os servos também funcionam com um sinal de 3,3 V. Os motores continuam precisando da própria alimentação. A diferença está no servo: a biblioteca Servo padrão do Arduino não é compatível com o ESP32. Você pode instalar a biblioteca ESP32Servo ou, como abaixo, gerar o sinal de 50 Hz por conta própria com a unidade de PWM por hardware do ESP32, o LEDC. Como usamos duas frequências diferentes, 1 kHz para o motor CC e 50 Hz para o servo, atribuímos os canais a timers separados (canais 0 e 2) com ledcAttachChannel; em algumas versões do core, canais vizinhos compartilham o mesmo timer. O código é para o core Arduino do ESP32 3.x; nas versões 2.x, você usa ledcSetup e ledcAttachPin no lugar. A biblioteca Stepper funciona sem alterações no ESP32; se você está começando com a placa, dê uma olhada em O que é o ESP32?

C++ (Arduino IDE)
1#include <Stepper.h>
2
3// ESP32 Arduino çekirdeği 3.x / ESP32 Arduino core 3.x
4const int ENA = 25;                // L298N hız (PWM) / L298N speed (PWM)
5const int IN1 = 26;
6const int IN2 = 27;
7const int SERVO_PIN = 18;          // servo sinyali / servo signal
8
9const int STEPS_PER_REV = 2048;
10Stepper stepper(STEPS_PER_REV, 19, 22, 21, 23);   // sıra: IN1, IN3, IN2, IN4 / order: IN1, IN3, IN2, IN4
11
12void motor(int speed) {            // -255 … 255
13  digitalWrite(IN1, speed > 0);
14  digitalWrite(IN2, speed < 0);
15  ledcWrite(ENA, abs(speed));
16}
17
18void servoWrite(int angle) {       // 0 … 180
19  int us = map(angle, 0, 180, 500, 2400);              // açı → darbe (µs) / angle → pulse (µs)
20  ledcWrite(SERVO_PIN, (uint32_t)us * 65535 / 20000);  // 20 ms içindeki pay / share of the 20 ms period
21}
22
23void setup() {
24  pinMode(IN1, OUTPUT);
25  pinMode(IN2, OUTPUT);
26  ledcAttachChannel(ENA, 1000, 8, 0);        // kanal 0: 1 kHz, 8 bit (0–255) / channel 0: 1 kHz, 8-bit
27  ledcAttachChannel(SERVO_PIN, 50, 16, 2);   // kanal 2, ayrı zamanlayıcı: 50 Hz, 16 bit / channel 2, separate timer: 50 Hz, 16-bit
28  stepper.setSpeed(10);                      // devir/dakika / RPM
29}
30
31void loop() {
32  motor(200);         delay(2000);   // DC: ileri / forward
33  motor(0);           delay(500);    // DC: dur / stop
34  servoWrite(0);      delay(600);    // servo: 0°
35  servoWrite(180);    delay(600);    // servo: 180°
36  servoWrite(90);     delay(600);    // servo: 90°
37  stepper.step(512);  delay(500);    // step: çeyrek tur / quarter turn
38  stepper.step(-512); delay(1000);
39}

Código MicroPython para o Raspberry Pi Pico

No Pico, todo pino GP pode gerar PWM. No MicroPython, você ajusta a velocidade do motor CC de 0 a 65535 com duty_u16() e a largura do pulso do servo em nanossegundos com duty_ns(). O motor de passo gira escrevendo a sequência de meio passo nos quatro pinos, um após o outro; no modo de meio passo, uma volta do 28BYJ-48 tem 4096 passos. Se você está começando com o Pico, comece por O que é o Raspberry Pi Pico?

MicroPython
1from machine import Pin, PWM
2import time
3
4# DC motor (L298N): ENA=GP15, IN1=GP14, IN2=GP13
5ena = PWM(Pin(15))
6ena.freq(1000)
7in1 = Pin(14, Pin.OUT)
8in2 = Pin(13, Pin.OUT)
9
10# Servo: GP16, 50 Hz
11servo = PWM(Pin(16))
12servo.freq(50)
13
14# Step motor (ULN2003): IN1–IN4 = GP2–GP5
15coils = [Pin(n, Pin.OUT) for n in (2, 3, 4, 5)]
16SEQ = [(1,0,0,0), (1,1,0,0), (0,1,0,0), (0,1,1,0),
17       (0,0,1,0), (0,0,1,1), (0,0,0,1), (1,0,0,1)]   # yarım adım dizisi / half-step sequence
18
19def motor(speed):                    # -100 … 100
20    in1.value(speed > 0)
21    in2.value(speed < 0)
22    ena.duty_u16(int(abs(speed) * 655.35))
23
24def servo_angle(angle):              # 0 … 180
25    us = 500 + angle * 1900 // 180   # 500–2400 µs
26    servo.duty_ns(us * 1000)
27
28phase = 0                            # dizideki konum, çağrılar arasında korunur / position in the sequence, kept between calls
29
30def step(steps, delay_ms=2):         # yarım adımda 4096 adım = 1 tur / 4096 half-steps = 1 turn
31    global phase
32    d = 1 if steps > 0 else -1
33    for _ in range(abs(steps)):
34        phase = (phase + d) % 8
35        for pin, v in zip(coils, SEQ[phase]):
36            pin.value(v)
37        time.sleep_ms(delay_ms)
38    for pin in coils:
39        pin.value(0)                 # bobinleri bırak / release coils
40
41while True:
42    motor(70)                        # DC: %70 ileri / 70% forward
43    time.sleep(2)
44    motor(0)                         # DC: dur / stop
45    time.sleep(0.5)
46    for a in (0, 180, 90):           # servo: üç açı / three angles
47        servo_angle(a)
48        time.sleep(0.6)
49    step(1024)                       # step: çeyrek tur / quarter turn
50    time.sleep(0.5)
51    step(-1024)
52    time.sleep(1)

Qual motor para cada projeto?

ProjetoMotor indicadoPor quê?
Carrinho robô, robô seguidor de linhaMotor CC com redução (TT, N20)Gira continuamente, é barato, o controle de velocidade por PWM basta
Cancela de estacionamento, trava de porta, fechaduraServo (SG90; MG996R para tampas pesadas)Vai e volta entre duas posições e fica lá
Porta automática de correr, portão de garagemMotor CC com redução + chave de fim de cursoCurso longo e muita força; os pontos finais são detectados por chaves
Impressora 3D, CNC, gravadora a laserMotor de passo NEMA 17 + A4988 ou TMC2209Posição repetível com precisão melhor que um décimo de milímetro
Braço robóticoServo (MG996R na base, SG90 na garra)Cada articulação precisa parar em um ângulo específico
Slider de câmera, prato giratório, cortina inteligenteMotor de passoMovimento lento, suave e repetível
Radar, câmera pan-tilt, seguidor solarServo motorUma varredura de 0–180° basta e o código é muito simples
Ventoinha, bomba d'águaMotor CC + MOSFETUm sentido basta; só velocidade ou liga-desliga
Drone, aeromodelo RC, skate elétricoMotor sem escovas (BLDC) + ESCVelocidade, eficiência e potência muito altas

Em alguns projetos qualquer um dos motores serve, e a escolha depende dos detalhes. Em um carrinho robô, motores CC dão conta das rodas, mas se você quer que o carrinho ande exatamente 50 cm, ou adiciona encoders ou aciona as rodas com motores de passo. Em um braço robótico, os servos são o caminho mais fácil; braços pesados e precisos usam motores de passo com redução nas articulações. Em uma impressora 3D é fácil calcular quantos passos um eixo precisa por milímetro: com um motor de 200 passos, micropasso de 1/16 e uma polia GT2 de 20 dentes (passo de dente de 2 mm), você obtém 200 × 16 / (20 × 2) = 80 passos/mm; com um fuso trapezoidal T8 de avanço de 8 mm, fica 200 × 16 / 8 = 400 passos/mm. Para projetos que fazem varredura de 0–180°, como um radar ou um seguidor solar, o servo é ao mesmo tempo a solução mais barata e a mais simples.

Uma breve introdução aos motores sem escovas (BLDC) e aos ESCs

O motor CC sem escovas (BLDC) é construído ao contrário: os ímãs ficam na parte que gira e as bobinas ficam na carcaça fixa. Sem escovas nem comutador, não há atrito, faíscas nem desgaste; o motor é mais eficiente, mais silencioso e dura muito mais. O preço é que o sentido da corrente agora precisa ser comutado por um circuito eletrônico, e não pelas escovas. É por isso que os motores BLDC têm 3 fios e não giram se você os ligar direto a uma bateria. Em motores de modelismo, a velocidade é dada pelo valor KV, as RPM sem carga por volt. Um motor de 1000 KV (ex.: o A2212) com uma bateria LiPo de 3 células (11,1 V) gira a cerca de 11.100 RPM sem carga. Drones, aeromodelos RC, skates e patinetes elétricos, ventoinhas de computador e discos rígidos usam motores sem escovas.

Para ligar um motor BLDC a um Arduino você precisa de um ESC (electronic speed controller, controlador eletrônico de velocidade). O ESC transforma a tensão CC da bateria em pulsos trifásicos para o motor; ESCs sem sensor estimam a posição do rotor a partir da força contraeletromotriz na bobina que não está energizada. A parte boa é que a entrada de controle do ESC é igual à de um servo: em pulsos de 50 Hz, 1000 µs significa parado e 2000 µs aceleração máxima. A corrente nominal do ESC (ex.: 30 A) precisa ser maior que a corrente máxima que o motor pode consumir, e a maioria dos ESCs tem uma saída BEC que fornece 5 V. Por segurança, ao ser ligado, o ESC quer ver primeiro a aceleração mínima; isso se chama arming (armar), e ele não gira o motor até receber esse sinal. No código abaixo, o fio de sinal do ESC vai ao D9 e o cursor do potenciômetro da aceleração vai ao A0.

C++ (Arduino IDE)
1#include <Servo.h>
2
3Servo esc;                         // ESC bir servo gibi sürülür / an ESC is driven like a servo
4const int POT_PIN = A0;            // gaz potansiyometresi / throttle potentiometer
5
6void setup() {
7  esc.attach(9, 1000, 2000);       // 1000–2000 µs aralığı / 1000–2000 µs range
8  esc.writeMicroseconds(1000);     // en düşük gaz: ESC'yi kur (arming) / minimum throttle: arm the ESC
9  delay(3000);                     // bip seslerini bekle / wait for the beeps
10}
11
12void loop() {
13  int throttle = map(analogRead(POT_PIN), 0, 1023, 1000, 2000);   // pot → gaz / pot → throttle
14  esc.writeMicroseconds(throttle);
15  delay(20);                       // bir servo periyodu / one servo period
16}
Sempre retire a hélice ao testar um motor sem escovas; um motor de 1000 KV passa de 10.000 RPM em um instante, e uma hélice pode causar ferimentos graves. Carregue baterias LiPo só com um carregador adequado, nunca as coloque em curto e não use uma bateria estufada. Se você está alimentando o Arduino pela USB, não ligue o fio vermelho que vem do BEC do ESC; os fios de sinal e de GND bastam.

Erros comuns e como corrigi-los

  • O Arduino reinicia quando o motor funciona: o motor ou o servo está sendo alimentado pelo pino 5V da placa. Use uma fonte separada, ligue os GNDs e adicione um capacitor grande na alimentação.
  • O servo treme ou dá saltos: a fonte é fraca, os fios são finos e longos ou o GND não é comum. Ligue o servo a uma fonte de 5–6 V capaz de fornecer pelo menos 1 A.
  • A velocidade do motor CC não muda quando um servo é usado: no Uno, o ENA está ligado ao pino 9 ou 10, e a biblioteca Servo desativa o PWM nesses pinos. Passe o ENA para o 3, 5, 6 ou 11.
  • O motor CC não gira com valores baixos de PWM, só zumbe: não há potência suficiente para vencer o atrito estático. Dê a partida no motor com um valor alto por um instante e depois baixe a velocidade, ou mantenha o valor mínimo em torno de 80–100. Considere também a queda de tensão de cerca de 2 V do L298N.
  • O motor de passo vibra, mas não gira: a ordem das bobinas está errada ou a velocidade está alta demais. Para o 28BYJ-48, use a ordem Stepper(2048, IN1, IN3, IN2, IN4) e mantenha a velocidade abaixo de 15 RPM.
  • O motor de passo perde passos: a carga é pesada demais, a aceleração é brusca demais ou o limite de corrente do A4988 está baixo demais. Ajuste o Vref com a fórmula I = Vref / (8 × Rcs), em que Rcs é o resistor de detecção de corrente da placa, e use uma aceleração suave com a AccelStepper.
  • O A4988 queimou: o cabo do motor foi ligado ou desligado com o driver energizado, o Vref estava alto demais ou não havia capacitor no VMOT. Sempre conecte o motor com a alimentação desligada.
  • O ESC não gira o motor e fica apitando: ele não recebeu um sinal de aceleração mínima ao ligar. Confira se o setup() envia writeMicroseconds(1000) e espera alguns segundos; se necessário, calibre o ESC como descrito no manual dele.
Se você não consegue decidir, faça a si mesmo uma pergunta: o motor vai girar continuamente (motor CC), ir até um ângulo específico e ficar lá (servo) ou dar muitas voltas e ainda saber a posição exata (motor de passo)? Se você precisa de velocidade e eficiência muito altas, a resposta é um motor sem escovas com ESC.

Resumindo: motor CC é velocidade, servo é ângulo e motor de passo é posição; combine o motor certo com o driver certo e metade do seu projeto está resolvida. Começar com um SG90 e um motor TT e depois passar para um motor de passo é o jeito mais fácil de aprender os três. No app BlueGrays você encontra, passo a passo e com esquemas do circuito e código, os projetos “Uso do servo motor”, “Controle de servo com potenciômetro”, “Uso do motor de passo”, “Servo de 360 graus com motor de passo”, “Carrinho controlado por Bluetooth com L298N” e “Robô que desvia de obstáculos”.

Perguntas frequentes

Qual é a diferença entre servo motor e motor de passo?

O servo sabe a própria posição graças ao potenciômetro interno e geralmente vai até o ângulo pedido entre 0 e 180° e fica lá. O motor de passo pode girar sem limite e sabe a posição contando os passos, mas, se for sobrecarregado e perder passos, ele não percebe. Escolha um servo para movimentos de ângulo curtos e rápidos e um motor de passo para posicionamento preciso ao longo de muitas voltas.

Posso ligar um motor CC direto no Arduino?

Não. Um pino do Arduino fornece no máximo 40 mA, enquanto um motor CC pequeno consome centenas de miliampères e, quando a corrente é cortada, gera um pico de tensão reversa que pode destruir o pino. Use um MOSFET e um diodo para controle em um sentido, ou um driver de ponte H como o L298N ou o L9110S para frente e para trás.

Por que meu motor de passo esquenta?

A corrente passa continuamente pelas bobinas do motor de passo para fornecer torque de retenção, mesmo com o motor parado, então é normal a carcaça ficar morna ou até quente. Se estiver quente demais para manter a mão por mais de alguns segundos, o limite de corrente do A4988 (Vref) está alto demais. Quando você não precisa manter a posição, pode reduzir o aquecimento e o consumo colocando o pino EN em HIGH ou desligando as bobinas.

Um servo motor consegue girar 360 graus?

Os servos padrão geralmente giram só entre 0 e 180° por causa de um batente mecânico interno. Servos de rotação contínua (360°), como o FS90R, dão voltas completas, mas aí você controla velocidade e sentido em vez do ângulo e perde a informação de posição. Se você precisa ao mesmo tempo de voltas completas e de posição precisa, um motor de passo é a melhor escolha.

Por que as impressoras 3D usam motores de passo?

O motor de passo gira um ângulo fixo a cada pulso que recebe, então oferece um posicionamento preciso e repetível sem nenhum sensor extra. Um motor NEMA 17 com micropasso de 1/16 e correia GT2 dá 80 passos por milímetro, o que equivale a cerca de 0,0125 mm por passo. Por serem baratos, robustos e fáceis de controlar, os motores de passo são o padrão nas impressoras 3D hobby e nas máquinas CNC.

Como controlar um motor sem escovas (BLDC) com o Arduino?

Um motor sem escovas não pode ser acionado direto por um pino nem com um L298N; você precisa de um ESC no meio. O fio de sinal do ESC vai a um pino do Arduino e, com a biblioteca Servo, writeMicroseconds(1000) significa parado e writeMicroseconds(2000) significa aceleração máxima. Ao ligar, você precisa enviar a aceleração mínima por alguns segundos para armar o ESC (arming).

Ver todos os projetos
Uso de servo motor
#35Iniciante
Premium

Uso de servo motor

O braço de um pequeno servo motor gira para três posições em sequência: o início, o meio e o fim do percurso, esperando dois segundos em cada parada. O Arduino informa ao motor em qual ângulo ficar, e

4.7(48)
67
Uso do motor de passo
#67Intermediário
Premium

Uso do motor de passo

Um motor que gira passo a passo, exatamente o quanto você quer, como o ponteiro de um relógio. Por meio de uma placa de acionamento, o Arduino gira um pequeno motor de passo uma volta completa em uma

4.5(31)
42
Carrinho controlado por Bluetooth com L298N
#80Avançado
Premium

Carrinho controlado por Bluetooth com L298N

Transforme seu celular em um controle remoto e dirija seu próprio carrinho robô. O Arduino recebe os comandos de um aplicativo de controle remoto no celular por meio de um módulo Bluetooth e aciona as

5.0(38)
65
Uso de servo motor com potenciômetro
#36Iniciante
Premium

Uso de servo motor com potenciômetro

Conforme você gira o botão do potenciômetro, o braço do servo motor gira junto: uma extremidade do botão corresponde a zero grau, e a outra, a meia volta. O Arduino lê continuamente a posição do botão

4.6(37)
52
Servo motor de 360 graus com motor de passo
#68Intermediário
Premium

Servo motor de 360 graus com motor de passo

Ensine um motor de passo comum a ir até qualquer ângulo que você quiser, ao longo de uma volta completa. O Arduino calcula quantos passos correspondem a cada ângulo; o motor vai para 0, 90, 45, 180, 1

4.5(22)
32
Robô que desvia de obstáculos
#81Avançado
Premium

Robô que desvia de obstáculos

Que tal construir um veículo inteligente que encontra seu próprio caminho? O robô que desvia de obstáculos monitora o ambiente constantemente com o sensor ultrassônico na parte da frente. Ao encontrar

5.0(38)
49
Servo motor com ESP32 (controle por potenciômetro)
#118Intermediário
Premium

Servo motor com ESP32 (controle por potenciômetro)

Neste projeto, controlamos um servo motor SG90 com um potenciômetro. Ajustamos o ângulo do servo mapeando o valor analógico lido do potenciômetro para a faixa de 0 a 180 graus. A biblioteca ESP32Servo gera sinais para o servo nos GPIOs do ESP32 adequados e capazes de operar como saída; este projeto usa o GPIO 18. Esse é um método básico de controle para braços robóticos, estabilizadores de câmera e mecanismos de portas automáticas.

4.3(29)
42
Fechadura RFID com ESP32 (RC522 + servo + OLED + buzzer + LED)
#137Avançado
Premium

Fechadura RFID com ESP32 (RC522 + servo + OLED + buzzer + LED)

Vamos montar uma fechadura inteligente com ESP32, módulo RFID RC522, servo motor SG90, display OLED SSD1306, buzzer ativo e 2 LEDs. Ao ler um cartão, seu UID é comparado à lista de cartões autorizados definida no código. Se estiver autorizado, o servo motor gira para abrir a fechadura (LED verde + 2 bipes curtos), que trava novamente após 5 segundos. Com um cartão não autorizado, o LED vermelho acende, 3 bipes rápidos soam e o UID lido aparece no OLED.

4.8(9)
15