Autor Tópico: Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios  (Lida 1972 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline sombravarvas

  • Novato
  • *
  • Posts: 11
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Novo Hamburgo RS
Olá pessoal, sou extremamente iniciante em Arduíno e programação.

Eu estou iniciando um projeto para automatizar uma fresadora.

será apenas 1 motor
já que o processo da fresadora é fazer com que a mesa dela se movimente apenas no sentido de ida e volta.

Os produtos que já possuo são o seguinte.

1 Arduino Uno
1 Motor Nema 23 19kgf cm 4.2A (8Fios)
1 Drive TB6600 (hy-div268n-5A)
2 Crash Sensor (botões de fim de curso)
1 Push button (botão iniciar o processo)

A ligação do motor fiz em séria buscando mais Torque do que velocidade.

As conexões estão feitas, tudo ok.

O que eu estou quebrando a cabeça agora é na programação;

O que eu desejo que aconteça é o seguinte.

Ao pressionar o Botão quero que o Motor gire sentido horário, até tocar o fim de curso.
Ao tocar o crash sensor(fim de curso) ele deve girar no sentido anti-horário, até que o outro crash sensor (Inicio de curso) seja alcançado, e ficar parado até que o Puch Buttom (botão iniciar) seja pressionado.


Segue o código que tenho até o momento.

Código: [Selecionar]
//Arduino Sketch based on easy driver
int dirpin = 8;
int steppin = 9;
int enable = 7;

int sensorFinal = 3;
int sensorInicial = 5;

void setup()
{
pinMode(dirpin, OUTPUT);
pinMode(steppin, OUTPUT);
digitalWrite(enable, LOW);

pinMode(sensorFinal, INPUT);
pinMode(sensorInicial, INPUT);

}
void loop()
{
 int i;
 int sensor = digitalRead(sensorFinal);
if (sensor == HIGH) {
 
 digitalWrite(dirpin, HIGH); // Set the direction.

}else{
   digitalWrite(dirpin, LOW); // Set the direction.
}
 delay(1);
 for (i = 0; i<1; i++) // Iterate for 4000 microsteps.
 {
 digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the "Rising Edge" so the easydriver knows to when to step.
 delayMicroseconds(2);
 digitalWrite(steppin, HIGH);
 delayMicroseconds(200); // This delay time is close to top speed for this
 } // particular motor. Any faster the motor stalls.
 
}



Desa forma o motor só gira no sentido anti-horário enquanto o fim de curso estiver pressionado.







Offline sombravarvas

  • Novato
  • *
  • Posts: 11
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Novo Hamburgo RS
Re:Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios
« Resposta #1 Online: 28 de Outubro de 2016, 14:01 »
Imagem dos equipamentos

Esqueci de mencionar que o motor esta sendo alimentado por uma fonte de 24v 5A - 120W.

http://i40.photobucket.com/albums/e203/sombrars/B89592DB-FAB1-40BE-A189-782D0152808D.jpg
Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios



Offline Cássio Alvarenga

  • Moderador
  • CNCMASTER
  • ******
  • Posts: 3429
  • Sexo: Masculino
    • www.vatech.ind.br
  • Cidade - UF: Belo Horizonte - MG
  • Profissão: Empresario / Engenheiro Mecânico
Re:Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios
« Resposta #2 Online: 29 de Outubro de 2016, 14:07 »

O que eu desejo que aconteça é o seguinte.

Ao pressionar o Botão quero que o Motor gire sentido horário, até tocar o fim de curso.
Ao tocar o crash sensor(fim de curso) ele deve girar no sentido anti-horário, até que o outro crash sensor (Inicio de curso) seja alcançado, e ficar parado até que o Puch Buttom (botão iniciar) seja pressionado.


Simples: :)

Código: [Selecionar]
If (digitalRead(botao) == HIGH)  //Se o botão for apertado executara as funções abaixo
{
 
 digitalWrite(pino_direcao,HIGH); // Seleciona direção do motor
 While (digitalRead(fim_de_curso1)==LOW) //Enquanto o fim de curso 1 não for acionado
 {
 digitalWrite(pino_passo,HIGH);
 DelayMicroseconds(5);
digitalWrite(pino_passo,LOW);                // Move o motor de passo
DelayMicroseconds(300); // Define a velocidade
}

digitalWrite(pino_direcao,LOW); // Inverte a direção

While (digitalRead(fim_de_curso2)==LOW) //Enquanto o fim de curso2 não for acionado
 {
 digitalWrite(pino_passo,HIGH);
 DelayMicroseconds(5);
digitalWrite(pino_passo,LOW);                // Move o motor de passo
DelayMicroseconds(300); // Define a velocidade
}

}


Offline sombravarvas

  • Novato
  • *
  • Posts: 11
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Novo Hamburgo RS
Re:Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios
« Resposta #3 Online: 01 de Novembro de 2016, 08:04 »
Cássio, muito obrigado pela resposta.

Pesquisei sobre while, acredito que seja esse o caminho que tenho que seguir.

Mas não consegui fazer funcionar na pratica nem com o seu código e nem colocando somente 1 while

Código: [Selecionar]
void loop() {

digitalWrite(dirpin, HIGH); // Seleciona a direção do motor
 while (digitalRead(sensorFinal)==LOW) //Enquanto o fim de curso 1 nao for acionado
 {
 digitalWrite(steppin, LOW); // This LOW to HIGH change is what creates the "Rising Edge" so the easydriver knows to when to step.
 delayMicroseconds(2);
 digitalWrite(steppin, HIGH);
 delayMicroseconds(200); // This delay time is close to top speed for this
 }
}

Offline sombravarvas

  • Novato
  • *
  • Posts: 11
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Novo Hamburgo RS
Re:Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios
« Resposta #4 Online: 01 de Novembro de 2016, 08:08 »
O motor simplesmente não gira com o while.

e ao tocar o sensor final ele da um passo em diferences posições

se eu substituir pelo código antigo com o FOR

ele gira normalmente.

Offline sombravarvas

  • Novato
  • *
  • Posts: 11
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Novo Hamburgo RS
Re:Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios
« Resposta #5 Online: 01 de Novembro de 2016, 09:34 »
Bem eu pesquisei e encontrei a biblioteca AccelStepper

Achei mais fácil de utilizar até

consegui configurar o botão que ao clicar o motor gira no sentido horário até que o sensor de fim de curso seja acionado.


só não consegui ainda fazer com que ao acionar o sensor de fim de curso, ele inverta o sentido de giro até atingir o sensor de inicio de curso.

Código: [Selecionar]
#include <AccelStepper.h>


// Define a stepper motor 1 for arduino
// Pino de direçao Digital 8 (CW), Pino de pulso DIgital 9 (CLK)
AccelStepper stepper(1, 9, 8);
void setup()

pinMode(sensorInicial, INPUT);
pinMode(sensorFinal, INPUT);
pinMode(botaoIniciar, INPUT);

 
  Serial.begin(9600);
  // Change these to suit your stepper if you want
  stepper.setMaxSpeed(2000);//1100
  stepper.setAcceleration(1100);
  //stepper.moveTo(2000); // se vividir esse valor por 200 é a quantidade de 20 voltas.
  //stepper.setSpeed(2000);
}

void loop()
{
 
    if (digitalRead(botaoIniciar)==LOW)
    {
      while (digitalRead(sensorFinal)==HIGH){
      stepper.move(200);  //nao importa o valor que eu coloque ele vai girar até que o sensor de fim de curso seja acionado.
 
      stepper.run();   
    }
    }
}
   

Offline Cássio Alvarenga

  • Moderador
  • CNCMASTER
  • ******
  • Posts: 3429
  • Sexo: Masculino
    • www.vatech.ind.br
  • Cidade - UF: Belo Horizonte - MG
  • Profissão: Empresario / Engenheiro Mecânico
Re:Automatizando fresadora, sentido de rotação Nema 23 com tb6600 8 fios
« Resposta #6 Online: 01 de Novembro de 2016, 20:34 »
O motor simplesmente não gira com o while.

e ao tocar o sensor final ele da um passo em diferences posições

se eu substituir pelo código antigo com o FOR

ele gira normalmente.

Claro que gira.

Ele esta realmente entrando no "while" use um "serialprint" só pra garantir que esta entrando em while.
Usa um resistor de pull-down nos botões.