Manual
do
Maker
.
com
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.
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.
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.
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.
O funcionamento dos demais pinos é o mesmo que o do EasyDriver.
Direction | Direção do motor | GND | alimentação do driver |
Tep | VO | alimentação do driver | |
Leep | Colocar o driver em sleep | 1B | fio 1 bobina 1 |
Ese | 1A | fio 2 bobina 1 | |
MS3 | MicroStep 3 | 2A | fio 1 bobina 2 |
MS2 | MicroStep 2 | 2B | fio 2 bobina 2 |
MS1 | MicroStep 1 | GND | alimentação motor |
Enable | ativa a controladora | VMO | alimentação motor |
Os detalhes podem ser vistos no artigo do EasyDriver, sendo a excessão os micro steps, que possuem a seguinte combinação:
MS1 | MS2 | MS3 | Resolução |
LOW | LOW | LOW | 1 passo |
HIGH | LOW | LOW | 1/2 passo |
LOW | HIGH | LOW | 1/4 de passo |
HIGH | HIGH | LOW | 1/8 de passo |
HIGH | HIGH | HIGH | 1/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.
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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.