Dando continuidade ao detalhamento do projeto de tape changer vamos mostrar como se dá o acionamento do motor de passo NEMA 17 na mesa linear. Afinal de contas, como ligar um motor de passo?
Segue vídeo explicativo da ligação com CNC shield e o acionamento:
Uma das coisas que já podemos concluir é que este motor de passo exigindo pelo menos 12V de tensão e fornecer uma corrente de até 1A (está nas especificações do motor) é necessário um circuito extra que permita o Arduino interagir nestes patamares de tensão e corrente. Aí que entram em ação os drivers que terão como função acionar as bobinas do motor através de transistores de potência e ficando o Arduino somente com a função de controlar o acionamento. O driver que utilizaremos é o A4988. Segue abaixo o esquema de ligação se for usar protoboard:
Há uma outra maneira de se ligar esse motor de passo utilizando o CNC Shield.
Note que o driver A4988 é encaixado em dos compartimentos do shield CNC para cada motor/eixo:
Segue abaixo a pinagem utilizada pelo shield:
Para testar o motor de passo implementamos o seguinte código abaixo:
Créditos: Blog Arduino e Cia:
Link: http://www.arduinoecia.com.br/2015/03/controle-motor-de-passo-bipolar-driver-A4988.html
// Programa : Driver motor de passo A4988
// Autor : Arduino e Cia
#include <AccelStepper.h>
int velocidade_motor_1 = 700;
int aceleracao_motor_1 = 80;
int sentido_horario_motor_1 = 0;
int sentido_antihorario_motor_1 = 0;
char comando;
// Definicao pino ENABLE
int pino_enable = 8;
// Definicao pinos STEP e DIR
AccelStepper motor1(1,2,5);
void setup()
{
Serial.begin(9600);
pinMode(pino_enable, OUTPUT);
// Configuracoes iniciais motor de passo
motor1.setEnablePin(pino_enable);
motor1.setMaxSpeed(velocidade_motor_1);
motor1.setSpeed(velocidade_motor_1);
motor1.setAcceleration(aceleracao_motor_1);
sentido_horario_motor_1 = 0;
sentido_antihorario_motor_1 = 0;
Serial.println("Digite a, b ou c e clique em ENVIAR...");
}
void ligamotor1horario() {
digitalWrite(pino_enable, LOW);
sentido_horario_motor_1 = 1;
sentido_antihorario_motor_1 = 0;
}
void ligamotor1antihorario() {
digitalWrite(pino_enable, LOW);
sentido_horario_motor_1 = 0;
sentido_antihorario_motor_1 = 1;
}
void loop()
{
// Aguarda os caracteres no serial monitor
if (Serial.available() > 0)
{
comando = (char) Serial.read();
if (comando == 'a')
{
Serial.println("Letra a recebido - Girando motor1 sentido horario ate chave2 acionar.");
ligamotor1horario();
}
if (comando == 'b')
{
Serial.println("Letra b recebido - Girando motor1 sentido anti-horario ate chave1 acionar.");
ligamotor1antihorario();
}
if (comando == 'c')
{
Serial.println("Letra c recebido - Parando motor...");
sentido_horario_motor_1 = 0;
sentido_antihorario_motor_1 = 0;
motor1.moveTo(0);
digitalWrite(pino_enable, HIGH);
}
}
if (sentido_horario_motor_1 == 1)
{
motor1.moveTo(20000);
motor1.run();
}
if (sentido_antihorario_motor_1 == 1)
{
motor1.moveTo(-20000);
motor1.run();
}
}
É isso aí pessoal! Espero que tenham gostado! Até a próxima!
Nenhum comentário:
Postar um comentário