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