Manual

do

Maker

.

com

Controlar motor de passo com A4988

Controlar motor de passo com A4988

Pra finalizar um projeto de uma CNC de bolso, foi necessário conhecer o driver do motor de passo também, como fiz com o EasyDriver para a impressora matricial. Como o projeto envolve um CNC shield com Arduino Nano e os drivers A4988, resolvi escrever sobre o driver previamente para reduzir o tamanho do artigo sobre a CNC.

Motor de passo com A4988

A primeira coisa a fazer, é familizarizar-se com o pinout. Esse modelo de placa em específico tem a distribuição de pinos conforme a imagem em destaque.

Os EasyDriver que utilizo na impressora matricial não esquentam quase nada com o driver que eu escrevi, mas também joguei a corrente para o mínimo com 12V de entrada. Na mini CNC que estou fazendo com drives de DVD talvez dê pra ter uma noção melhor do aquecimento e dessa vez não vou utilizar minha biblioteca, então, o funcionamento pode ser diferente e pode vir a esquentar muito mais. Por isso a minha recomendação é que se utilize dissipador sobre ele.

Se quiser dar uma olhada no datasheet, eis o linka4988_DMOS_microstepping_driver_with_translator.pdf.

Características

A capacidade dele é bem impressionante, entregando uma saída de até 35V@2A. Precisão de passos de até 1/16 avos,  saída do motor entre -2V e +37V,  sensibilidade nos pinos entre -0.5 e 0.5V. Temperatura ambiente entre -20 e +85 graus. Os EasyDriver chegam tranquilamente a 70 graus em diversas circunstâncias, principalmente quanto a intensidade e continuidade do uso, portanto deve-se ficar atento a isso.

Micro Step

Eu gosto muito do EasyDriver, essa é a minha primeira experiência com o A4988 e realmente preciso colocá-lo à prova, mas uma das características que me chamaram a atenção foi o controle do micro step dele, podendo ser 1, 1/2, 1/4, 1/8 ou 1/16 avos. Isso é muito importante em relação à precisão do movimento.  En contrapartida, se você estiver utilizando ela em uma protoboard, o wiring será um pouco mais complexo. Se quiser uma programação pré-estabelecida, pode optar por deixar essa configuração pronta com a alimentação do nível lógico (3V3 ou 5V), sendo uma combinação de VCC ou GND. se estiver utilizando apenas 1 driver, pode optar por usar os pinos de GPIO sobressalentes do Arduino em questão. Por fim, eu acredito que a melhor utilização para esse driver é sobre uma CNC shield. Até agora eu vi uma CNC shield para Arduino UNO e uma para Arduino Pro Mini. Como ela trabalha em 3V3 e 5V, tanto faz qual Pro mini vai sobre o shield.

Pinout

O funcionamento dos demais pinos é o mesmo que o do EasyDriver.

DirectionDireção do motorGND alimentação do driver
TepVOalimentação do driver
LeepColocar o driver em sleep1Bfio 1 bobina 1
Ese1Afio 2 bobina 1
MS3MicroStep 32Afio 1 bobina 2
MS2MicroStep 22Bfio 2 bobina 2
MS1MicroStep 1GNDalimentação motor
Enableativa a controladoraVMOalimentação motor

Os detalhes podem ser vistos no artigo do EasyDriver, sendo a excessão os micro steps, que possuem a seguinte combinação:

MS1MS2MS3Resolução
LOWLOWLOW1 passo
HIGHLOWLOW1/2 passo
LOWHIGHLOW1/4 de passo
HIGHHIGHLOW1/8 de passo
HIGHHIGHHIGH1/16 avos de passo

Se você não usar um CNC shield, coloque um capacitor de 47uF para proteção contra spikes entre VCC e GND do motor. Acho que não é necessário falar sobre polaridade do capacitor, hum?

Step e Direction controlam o movimento do motor e esses pinos precisarão estar conectados a pinos de GPIO do Arduino.

Um "Ctrl+Chups mega-kibe nas naveganças pelo google" me ajudaram a encontrar esse wiring de exemplo usando um Nema 17 com um Arduino Mega.

a4988_wiring_mega.webp

Fazendo de "ouvido", reduza ao máximo o limitador de corrente e se necessário for, aumente um pouquinho ou então, veja a tolerância do motor em questão. A tolerância pode ser calculada assim:

current_limit = Vref * 2

Por exemplo, se a tensão de referência é de 0.6, você tem 0.6*2 = 1.2A.  Para pegar esse sinal, coloque uma ponta do multimetro sobre o potenciômetro e a outra ponta no GND ao lado direito do potenciômetro, na base.

Código de exemplo

Baseado no wiring supracitado, um código de exemplo para esse teste pode ser esse (bastante semelhante ao código de teste do Artigo do EasyDriver):

// definicao de pinos
const int pin_step = 3; 
const int pin_dir  = 4; 
 
void setup() {
  // configuracao dos pinos
  pinMode(pin_step,OUTPUT); 
  pinMode(pin_dir, OUTPUT);
}
void loop() {
  digitalWrite(pin_dir,HIGH); 
  //200 pulsos para uma volta completa em fullstep no Nema 17
  for(int i=0;i<200;i++) {
    digitalWrite(pin_step,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(pin_step,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000);
  
  digitalWrite(pin_dir,LOW);
  for(int i=0;i<400;i++) {
    digitalWrite(pin_step,HIGH);
    delayMicroseconds(500);
    digitalWrite(pin_step,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

Se for adquirir o componente, seja gentil e dê preferência aos parceiros do blog. É só ir ao carrossel no início do artigo e escolher!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.