Drive A4988
Anteriormente vimos no site uma postagem de como acionar um motor de passo utilizando um drive Ponte H L298N, hoje vamos conhecer um pouco sobre o drive A4988 para motor de passo bipolar.
fonte: https://www.pololu.com
Esse pequeno drive permite um controle por meio de "micropassos", permitindo assim que o usuário obtenha em seu projeto posicionamentos mais exatos onde exige uma melhor precisão.
fonte: https://www.pololu.com
O módulo Drive A4988 trabalha utilizando tensões de 3V e 5V e para o acionamento dos motores permitem tensões aplicadas que podem variar de 8 à 35V.
fonte: https://www.pololu.com
O controle básico do motor é realizado por dois pinos do modulo, o STEP (passo) e DIR (direção).
Abaixo é possível observar a função dos pinos localizados no modulo.
fonte: https://www.pololu.com
Controlando motor com drive A4988 e Arduino
Para a realização desse projeto é necessário que você tenha em mãos:
1 Arduino Uno (ou compatível, eu usei uma BlackBoard da Robocore)
1 drive A4988
1 potenciômetro 1k
1 capacitor polarizado 100uF
1 protoboard (matriz de contatos)
1 motor de passo (na demostração estou utilizando um nema 17 PM-K047-02V)
fonte externa 12V 1A
fios jumpers
O controle do motor em questão foi a pedido de um leitor do blog para testar os motores que serão usados em uma impressora 3D.
Esquema de ligação
Vamos conectar o drive A4988 ao Arduino e controlar o movimento direcional do motor por meio do potenciômetro.
Além dos pinos STEP e DIR, utilizei também os pinos MS1 e MS2 para utilizar o recurso de micropassos que o modulo oferece possibilitando ao acionar esses pino os modos full-step, half-step, quarter-step, eight-step e sixteenth-step.
fonte: http://printersketch3d.lojaintegrada.com.br
Observar que na alimentação externa que é necessário para que o motor funcione corretamente foi inserido um capacitor de 100uF, onde pelas especificações do fabricante é indicado para compensar a sensibilidade do modulo em relação a picos de tensão.
fonte: próprio autor
Atenção ao capacitor entre os pinos VMOT e GND, e ao jumper entre os pinos SLEEP e RESET.
O código fonte
Copie e cole o código na IDE do seu Arduino e observe o funcionamento.
/** Código para Projeto DRIVE A4988 com potenciometro_Tony Emerson Marim **/
// Elaborado por Tony Emerson Marim em 11/12/2016.
/** mecatronizando@gmail.com **/
/** Controle de Motor de passo Nema17 com drive A4988 por potenciometro(direcionamento) **/
#define STEP 6 // Pino 6 conectado ao pino STEP no drive
#define DIR 7 // Pino 7 conectador ao pino Direction no drive
#define MS1 10 // Pino 10 conectado ao pino MS1 no drive
#define MS2 9 // Pino 9 conectado ao pino MS2 no drive
#define SLEEP 8 // Pino 8 conectado ao pino SLEEP no drive
#define POT A5 // Pino A5 analogico conectado ao pino de controle do potenciometro
int direction; // Variavel para setar a rotação (CW-CCW) do motor
int steps = 1025; // Posição de centro assumida
void setup() {
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(STEP, OUTPUT);
pinMode(SLEEP, OUTPUT);
digitalWrite(SLEEP, HIGH); // "Desperta" drive
delay(5);
digitalWrite(MS1, LOW); // Configuração dos Passos
digitalWrite(MS2, LOW); // Configuração dos Passos
}
void loop() {
while (analogRead(POT) >= 0 && analogRead(POT) <= 100) {
if (steps > 0) {
digitalWrite(DIR, HIGH); // (HIGH = anti- horário / LOW = horário)
digitalWrite(STEP, HIGH);
delay(1);//Tempo do passo ( quanto maior mais lento)
digitalWrite(STEP, LOW);
delay(1);
steps--;
}
}
while (analogRead(POT) > 100 && analogRead(POT) <= 400) {
if (steps < 512) {
digitalWrite(DIR, LOW);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps++;
}
if (steps > 512) {
digitalWrite(DIR, HIGH);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps--;
}
}
while (analogRead(POT) > 401 && analogRead(POT) <= 600) {
if (steps < 1025) {
digitalWrite(DIR, LOW);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps++;
}
if (steps > 1025) {
digitalWrite(DIR, HIGH);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps--;
}
}
while (analogRead(POT) > 601 && analogRead(POT) <= 900) {
if (steps < 1535) {
digitalWrite(DIR, LOW);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps++;
}
if (steps > 1535) {
digitalWrite(DIR, HIGH);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps--;
}
}
while (analogRead(POT) > 900 && analogRead(POT) <= 1024) {
if (steps < 2050) {
digitalWrite(DIR, LOW);
digitalWrite(STEP, HIGH);
delay(1);
digitalWrite(STEP, LOW);
delay(1);
steps++;
}
}
}
No Vídeo abaixo é possível ver o funcionamento do controle elaborado utilizando o potenciômetro como direcional.
O projeto completo pode ser baixado nesse LINK!
Curtiu? Compartilhe!
Assine o nosso canal no YouTube!
Curta nossa página no Facebook!
Bons Estudos!!!
Nenhum comentário:
Postar um comentário