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.
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 MS1, MS2 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:
- Envie 1 para acionar o motor de passo no sentido horário
- Envie 2 para acionar o motor de passo no sentido anti-horário
- Envie 3 para parar o motor, o que coloca o pino Enable em nível alto, desligando as saídas do motor
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!