| Característica | Motor DC | Motor de Passo |
|---|---|---|
| Controlo de posição | Indirecto (encoder externo) | Directo — conta passos |
| Precisão típica | Baixa sem encoder | 1.8°/passo (200 p/rot) |
| Corrente em repouso | Baixa | Constante (bobinas energizadas) |
| Aplicações | Tracção, ventilação | CNC, impressoras 3D, posicionadores |
Uma bobina de cada vez. Máxima precisão, menor consumo. Modo padrão para posicionamento.
SINGLE · 1.8°/passoDuas bobinas simultâneas. Maior torque — útil para cargas pesadas. Consumo duplo.
DOUBLE · max torqueAlterna SINGLE e DOUBLE. Dobra a resolução (400 p/rot). Movimento mais suave.
INTERLEAVE · 0.9°PWM das bobinas → 8 micropassos por passo. Movimento muito suave, menor torque.
MICROSTEP · 0.225°#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
}#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);
}