Início›Motor de Passo
⬤ Motor Driver · Stepper

🔄 Motor de Passo

⏱️ 30 min📚 AF_Stepper · Full/half step · Passos → Graus · LCD posição

Nesta página

🔬 Motor de Passo vs. Motor DC

CaracterísticaMotor DCMotor de Passo
Controlo de posiçãoIndirecto (encoder externo)Directo — conta passos
Precisão típicaBaixa sem encoder1.8°/passo (200 p/rot)
Corrente em repousoBaixaConstante (bobinas energizadas)
AplicaçõesTracção, ventilaçãoCNC, impressoras 3D, posicionadores

⚙️ Modos de Passo

1️⃣

SINGLE

Uma bobina de cada vez. Máxima precisão, menor consumo. Modo padrão para posicionamento.

SINGLE · 1.8°/passo
2️⃣

DOUBLE

Duas bobinas simultâneas. Maior torque — útil para cargas pesadas. Consumo duplo.

DOUBLE · max torque
½

INTERLEAVE

Alterna SINGLE e DOUBLE. Dobra a resolução (400 p/rot). Movimento mais suave.

INTERLEAVE · 0.9°
〰️

MICROSTEP

PWM das bobinas → 8 micropassos por passo. Movimento muito suave, menor torque.

MICROSTEP · 0.225°

📦 AF_Stepper — Referência

stepper_ref.ino
#include <AFMotor.h>

// AF_Stepper(passos_por_rot, canal_motor)
// canal 1 = M1+M2, canal 2 = M3+M4
AF_Stepper stepper(200, 1);  // 200 p/rot, canal 1

void setup() { stepper.setSpeed(60); }  // RPM

void loop() {
  stepper.step(200, FORWARD,  SINGLE);  // 1 rotação FWD
  stepper.step(200, BACKWARD, SINGLE);  // 1 rotação BWD
  stepper.step(400, FORWARD,  INTERLEAVE); // 1 rot. meio-passo
  stepper.release();  // Desligar bobinas
}

📐 Calcular Passos e Ângulo

stepper_angulo.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AFMotor.h>

#define PROT 200  // Passos por rotação
LiquidCrystal_I2C lcd(0x27, 20, 4);
AF_Stepper stepper(PROT, 1);
long pos = 0;

float toGraus(long p) { return p * 360.0 / PROT; }

void mover(int n, uint8_t dir) {
  stepper.step(n, dir, SINGLE);
  pos += (dir==FORWARD) ? n : -n;
  lcd.setCursor(0,1); lcd.print("Passos: "); lcd.print(pos); lcd.print("  ");
  lcd.setCursor(0,2); lcd.print("Angulo: ");
  lcd.print(toGraus(pos),1); lcd.print("    ");
}

void setup() {
  lcd.init(); lcd.backlight();
  stepper.setSpeed(60);
  lcd.setCursor(0,0); lcd.print("Motor de Passo  ");
}

void loop() {
  mover(200, FORWARD);   delay(500);
  mover(200, FORWARD);   delay(500);
  mover(400, BACKWARD);  delay(500);
  stepper.release();     delay(2000);
}

🖥️ Dashboard de Posição

Motor de Passo 60RPPassos: +400 Angulo: 720.0 graus Modo: SINGLE

🏆 Para ir mais longe

PR.FT9_5 · LCD 20×4 · L293D Motor Driver · Arduino UNO Rev3 · Início · led.dge.medu.pt