Como usar o driver A4988 com motor de passo Nema 17

Controle motores de passo bipolares com o Driver Motor de Passo A4988, utilizando apenas dois pinos para controle e com a possibilidade de movimentar os motores por meio de “micropassos”, método utilizado em aplicações que exigem um posicionamento exato do motor. Neste post, vamos usar o driver A4988 com motor Nema 17, um conhecido motor de passo muito usado em impressoras 3D. Uma opção também é você usar o Driver motor de passo DRV8825, que tem pinagem muito semelhante e cumpre a mesma função do A4988.

Arduino com driver A4988 e motor de passo Nema 17

Este módulo é controlado pelo chip Allegro A4988 (datasheet), e pode ser alimentado com tensões entre 3 e 5.5V. Para o motor, permite alimentação externa de 8 à 35V. Um potenciômetro na placa permite a regulagem da corrente de saída.

O módulo driver motor de passo A4988

O controle básico do motor de passo é feito por meio de dois pinos do microcontrolador, ligados aos pinos STEP (passo) e DIR (direção) do módulo A4988, conforme podemos verificar na pinagem do mesmo, mostrada abaixo:

Uma das grandes vantagens desse módulo é a possibilidade de utilizar micropassos, função configurável por meio dos pinos MS1MS2 e MS3. Acionando esses pinos conforme sequência mostrada na tabela, podemos selecionar os modos full-step, half-step, quarter step (1/4), eight step (1/8) e sixteenth step (1/16).

A utilização do modo micropasso reduz o torque do motor, em média, 30% em comparação com o modo de passo completo (full-step).

Controlando driver A4988 com Arduino

Vamos conectar o driver A4988 ao Arduino Uno e utilizar um programa que, controlado pelos caracteres (números) enviados através do serial monitor, move o motor de passo no sentido horário, anti-horário, ou pára o motor. Para o teste, vamos usar um motor de passo Nema 17, um motor muito utilizado em impressoras 3D e projetos de CNC.

Além dos pinos STEP e DIR, vamos utilizar também o pino ENABLE, para desligar as saídas do motor quando o programa receber o comando de parada. Também deve ser colocado um jumper entre os pinos SLEEP e RESET do módulo:

Atenção para a ligação da alimentação externa do motor, na qual eu utilizei um capacitor eletrolítico de 100 µF. Segundo o fabricante, a placa é muito sensível à picos de tensão, e é altamente recomendável a utilização de um capacitor entre os pinos VMOT e GND.

Programa A4988 com motor Nema 17

Carregue o programa abaixo no Arduino, que utiliza a biblioteca AccelStepper, disponível neste link. Descompacte o arquivo e coloque a pasta AccelStepper dentro da pasta Libraries da IDE do Arduino.

Você também pode instalar a biblioteca diretamente pela IDE do Arduino, no menu Sketch -> Incluir Biblioteca -> Gerenciar bibliotecas. Procure por AccelStepper e clique em Instalar:

Com a biblioteca instalada, carregue o programa abaixo no Arduino:

// Programa : Driver motor de passo A4988
// Autor : Arduino e Cia

#include <AccelStepper.h>

int velocidade_motor = 100; 
int aceleracao_motor = 100;
int sentido_horario = 0;
int sentido_antihorario = 0;
int numero = 0; 

// Definicao pino ENABLE
int pino_enable = 10;

// Definicao pinos STEP e DIR
AccelStepper motor1(1,7,4 );

void setup()
{
  Serial.begin(9600);
  pinMode(pino_enable, OUTPUT);
  // Configuracoes iniciais motor de passo
  motor1.setMaxSpeed(velocidade_motor);
  motor1.setSpeed(velocidade_motor);
  motor1.setAcceleration(aceleracao_motor);
  
  Serial.println("Digite 1, 2 ou 3 e clique em ENVIAR...");
}

void loop()
{
  // Aguarda os caracteres no serial monitor
  if (Serial.available() > 0) 
  {
    numero = Serial.read();
    {
      if (numero == '1')
      {
        Serial.println("Numero 1 recebido - Girando motor sentido horario.");
        digitalWrite(pino_enable, LOW);
        sentido_horario = 1;
        sentido_antihorario = 0;
      } 
      
      if (numero == '2')
      {
        Serial.println("Numero 2 recebido - Girando motor sentido anti-horario.");
        digitalWrite(pino_enable, LOW);
        sentido_horario = 0;
        sentido_antihorario = 1;
      }
     
      if (numero == '3')
      {
        Serial.println("Numero 3 recebido - Parando motor...");
        sentido_horario = 0;
        sentido_antihorario = 0;
        motor1.moveTo(0);
        digitalWrite(pino_enable, HIGH);
      } 
    }
  }
  
  // Move o motor no sentido horario
  if (sentido_horario == 1)
  {
    motor1.moveTo(10000);
  }
  // Move o motor no sentido anti-horario
  if (sentido_antihorario == 1)
  {
    motor1.moveTo(-10000);
  }
  // Comando para acionar o motor no sentido especificado
  motor1.run();
}  

Esse programa utiliza o serial monitor para controlar o sentido de rotação do motor de passo:

No serial monitor, utilize a parte superior da janela para enviar os comandos de controle do motor, e acompanhe na parte inferior a resposta aos comandos:

Gostou? Confira outros posts sobre motores aqui no Arduino e Cia!

4.4/5 - (7 votos)

Related posts

Controlando servo motor com o Motor Shield L293D

by Arduino e Cia
10 anos ago

Controlando motores DC com o Arduino Motor Shield L293D

by Arduino e Cia
10 anos ago

Controle de motor de passo com ponte H L298N

by Arduino e Cia
10 anos ago
Sair da versão mobile