Neste tutorial, vamos ver como acionar um motor de passo bipolar utilizando um controlador A4988. Este tutorial é compatível com os drivers de motor de passo normalmente utilizados em projectos de fresagem digital ou de impressoras 3D (DRV8825, SilentStepStick, etc.).
Hardware
- Arduino UNO
- Motor de passo A4988
- Cabo USB A macho para USB B macho
Princípio de funcionamento
Os controladores de motores passo a passo permitem que os motores sejam controlados de forma eficiente utilizando apenas dois sinais de controlo, STEP e DIR. O número de impulsos enviados para o controlador corresponde ao número de passos dados, a frequência de impulsos corresponde à velocidade do motor e o sinal dir corresponde à direção de rotação do motor. O módulo A4988 encarrega-se de enviar a sequência para as duas bobinas do motor de acordo com os comandos recebidos como entrada.

Especificações técnicas A4988
| Minimum operating voltage | 8 V |
| Maximum operating voltage | 35 V |
| Continuous current per phase | 1.2 A |
| Maximum current per phase | 2 A |
| Minimum logic voltage | 3 V |
| Maximum logic voltage | 5.5 V |
| Microstep resolution | full, 1/2, 1/4, 1/8 and 1/16 |
| Reverse voltage protection? | No |
| Dimensions | 15.5 × 20.5 mm (0.6″ × 0.8″) |
Diagrama

Antes de ligar o seu motor ao driver, defina corretamente o limitador de corrente. Para o fazer, é necessário:
- fornecer ao Arduino e ao Shield a tensão do motor.
- Em seguida, coloque um voltímetro entre o potenciómetro e a terra.
- Rodar o potenciómetro com uma chave de fendas até obter o valor que segue a regra abaixo.
MaxCurrent=Vref x 2.5
Por exemplo:
Se o valor da corrente for 1A, o valor apresentado no multímetro deve ser igual a 0,4V.
MaxCurrent=1.0A –> Vref = 0.4V
A resolução dos passos do driver pode ser modificada para uma maior precisão. Esta configuração é definida colocando os pinos M0, M1 e M2 em HIGH ou LOW de acordo com a seguinte tabela lógica.
| MS1 | MS2 | MS3 | Résolution Microstepping |
| Low | Low | Low | Pas complet (full step) |
| High | Low | Low | 1/2 pas |
| Low | High | Low | 1/4 de pas |
| High | High | Low | 1/8 ième de pas |
| High | High | High | 1/16 ième de pas |
Código
Para acionar o driver do motor passo a passo, tudo o que precisamos de fazer é enviar um estado HIGH ou LOW para o pino DIR e um impulso para o pino STEP.
const int stepPin = 2;
const int dirPin = 3;
const int stepsPerRev=200;
int pulseWidthMicros = 100; // microseconds
int millisBtwnSteps = 1000;
void setup() {
Serial.begin(9600);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
Serial.println(F("A4988 Initialized"));
}
void loop() {
Serial.println(F("Running clockwise"));
digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for (int i = 0; i < stepsPerRev; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(pulseWidthMicros);
digitalWrite(stepPin, LOW);
delayMicroseconds(millisBtwnSteps);
}
delay(1000); // One second delay
Serial.println(F("Running counter-clockwise"));
digitalWrite(dirPin, LOW); //Changes the rotations direction
// Makes 400 pulses for making two full cycle rotation
for (int i = 0; i < 2*stepsPerRev; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(pulseWidthMicros);
digitalWrite(stepPin, LOW);
delayMicroseconds(millisBtwnSteps);
}
delay(1000);
}
Para mais funções, pode utilizar a biblioteca AccelStepper.h
Aplicações
- Controlo de um motor passo a passo
- Controlo de vários motores com uma placa CNC
Fontes
- DRV8825
- SilentStepStick
- A4988
- AccelStepper
- Biblioteca para SilentStepStick
- Controlo de um motor passo a passo
https://www.arduinolibraries.info/libraries/accel-stepper