CNC caseira

Boas.

Eu estou a começar a construir uma CNC Caseira de 3 eixos, mas estou com alguns problemas. Vou deixar aqui uma lista de materiais e coisas que já comprei e outras que fiz.

1x Motor stepper Nema 23 (http://www.ptrobotics.com/product.php?id_product=1031)
2x Moto stepper (http://www.ptrobotics.com/product.php?id_product=959) estes foi mais só para ir testando, depois em principio são para trocar por nemas 23
3x Easy Driver (http://www.ptrobotics.com/product.php?id_product=1030)

Fiz uma fonte de alimentação a partir de um PSU de uma computador. De momento esta com duas saídas 5V e uma saida 12V. A amperagem não sei ao certo mas acho que é 5V 8amp e 12V 7amp.

De momento apenas liguei o easydriver do Stepper nema23 com 5v vindos directamente do arduino. Não sei se tem “Power” suficiente ou não.

Nesta fase queria controlar o arduino com botões, mas estou com alguma dificuldade. Fiz este codigo:

#include <Stepper.h>

const int stepsPerRevolution = 200;

const int buttonPin = 14;  //Setting button number 1 to Pin 2
int buttonState = 0;   //Setting button state to off
const int buttonPin2 = 15;  //Setting button number 2 to Pin 3
int buttonState2 = 0;   //Setting button state to off
int counter = 0;
int start = 0;//counter counts the steps of motor
int stepCount = 0;  
Stepper myStepper(stepsPerRevolution, 2,3);

void setup() {
pinMode(buttonPin, INPUT); //make button pin
pinMode(buttonPin2, INPUT); //make button pin
}

void loop()
{
buttonState = digitalRead(buttonPin); //code for button 1
if (buttonState == HIGH) {

  myStepper.step(10);
  Serial.print("steps:" );
  Serial.println(stepCount);
  stepCount++;
  delay(1);

{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
stepCount = 0; 
   }
  }
 }
 
 buttonState2 = digitalRead(buttonPin2); //code for button 1
if (buttonState2 == HIGH) {

  myStepper.step(-10);
  Serial.print("steps:" );
  Serial.println(stepCount);
  stepCount++;
  delay(1);

{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
stepCount = 0; 
   }
  }
 }
 
}

Esta a funcionar, mas não estou a conseguir controlar velocidade.

Se utilizar um exemplo, por ex o Full revolution no menu stepper:

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
                                     // for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2,3);            

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
   Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
  
   // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500); 
}

O motor nunca da uma volta completa. Supostamente não deveria fazer uma volta (200steps) e depois parar 500ms?
De momento ele da tipo 1/10 de volta - Pára 500ms - 1/10 de volta e para de novo - Loop.

Será falta de corrente por estar alimentado atravez do arduino?
Será que tenho de usar outra Lib sem ser o Stepper.h por estar ligado pelo Easydriver?

Qualquer ajuda que me possam dar agradecia.

Abraço

Bem depois de ligar o ED a fonte de 12V melhorou. Já consigo levar o motor ate 70steps/ms

Continuo e sem uma contagem certa dos steps. 20steps ou 1600 microsteps não fazem uma volta.

Abraço

Desculpe a ignorância, mas qual será a capacidade desta cnc?

Ela aceitará um tipo específico de projeto? (Digo, um formato de arquivo) Ela conseguiria trabalhar em metais?

Boas.

O objectivo será conseguir trabalhar em materias até aluminio.

Quanto a Capacidade segundo o esuqema que ainda estou a elaborar será mais ou menos 40cmx40cm ou um pouco mais.

Formato de arquivo não percebi a pergunta. Poderia especificar?

Abraço.

Normalmente uma cnc recebe um ficheiro a especificar os cortes a serem feitos. Senão como vais controlar o que pretendes cortar? À mão??

5v não dão para esses motores, 12 é muito mais apropriado, no entanto o manual deles deve dar indicações mais precisas quanto a isso. Um dos motores que compraste é unipolar, ao usá-lo como bipolar vais perder binário.

Quanto aos passos, isso é controlado numa das entradas do stepper motor driver. Mudaste isso lá e verificaste a polaridade??

Eu ainda não vi a libraria do stepper motor, mas quase posso apostar que é bloqueante ( o que é capaz de tornar o controlo duma cnc extremamente dificil) então neste caso acho que é preferível estudares os timers do arduino e construires o controlo dos passos assim. Definindo uma interrupção dos timers, consegues mudar velocidades facilmente e o programa nunca bloqueia. Mas eu nunca vi essa libearia logo estou a especular.

Experimenta não usar a libraria. Define as saídas e actua o chip directamente ( pode ser com delays) para ver se os steps batem certo. Também podes ligar um botão directamente à entrada step do chip e usá-lo assim.

O formato e o G-code. Utilizo um codigo para o arduino (acho que já ha feito) que consiga interpretar o G-code. O software que estava a testar seria o CNCdriver.

O que me esta a parecer tambem e que os EasyDrivers não têm cabedal para lidar com os 2amp's por fase do motor maior. Por acaso não sabe onde posso arranjar controladores melhores em portugal?

Abraço e obrigado pelas respostas.

EDIT: Estou a utilizar uma fonte de PSU que eu converti. Estou a utilizar os 12V e o motor Nema 23 ficou a trabalhar muito melhor.

Aproveito para perguntar quais os melhores?

http://www.selectronic.fr/media/pdf/61575.pdf

http://www.selectronic.fr/media/pdf/615714.pdf

Têm ideia?

Motores unifilares são mais fáceis de controlar e você encontra mais drives disponíveis, os bifilar para mim não vale a pena usar.

Eu pensaria em uma fireball v90 ou sable 2015 já vem pronta a parte mecanica

Edson

Boas.

Obrigado pela resposta. Eu não posso ligar um motor http://www.selectronic.fr/media/pdf/615714.pdf como Unifilar?

Comprar um Kit está fora de questão, visto que o objectivo deste projecto e mesmo o Desafio pessoal. Comprar feito vai contra isso :)

Quanto aos drivers alguém conhece um Esquema para fazer eu próprio a PCB de uma drive para um motor desses? Gostava de fazer o Projecto o máximo possível por mim incluindo os drivers se possível.

Abraço.

Quanto ao motor pode. Quanto ao drive procura L297 é o mais comum. Quanto ao desafio, quando era jovem pensava assim também, hoje não da mais.

Edson

Há uns meses atrás a pesquisa por deivers de motores unifilares resultou em muito pouco. Existem mais drivers para bifilares que unipolares. Isto porque com 4 transistores se consegue um controlo do motor unifilar.

Já experimentaste passar ao lado da biblioteca??

Procura por CNC3AX, essa é a placa mais copia na internet para projetos com CNC e motores unifilar, inclusive funciona no Mach3.

Edson

Obrigado pelas respostas. Vou fazer buscas então com esse nomes.

Passar ao lado da Bib? como assim?

abraço

Tambem não entendi

Edson

Em vez de escreveres

#include <Stepper.h>

Definires as entradas e saídas, bem como as temporizações para controlar a velocidade do passo. Eu talvez dê uma vista de olhos hoje a essa biblioteca para ver como implementa os passos.

Ok, dei uma vista de olhos ao Stepper e na realidade as funções de movimentação do motor são bloqueantes. Ou seja, não consegues actuar dois motores ao mesmo tempo.

Sempre que fazes:

myStepper.step(10);

O programa fica ali parado até os 10 passos serem dados. Isto implica que ao tentares fazer uma recta na diagonal, na realidade vais ficar com uma recta na horizontal e uma na vertical. Claro que se te movimentares de passo a passo, tipo:

for (int i = 0; i < 10; i++) {
Stepper1.step(1);
Stepper2.step(2);
}

Esse efeito será mitigado (ou até completamente resolvido), mas também depende da razão de tranformação que colocares nos eixos da CNC. De qualquer das maneiras, aposto que não estavas a pensar nisto e assim já tens outro “problema” para pensar.

O que eu estava a dizer anteriormente seria algo como:

ISR (TIMER2_OVF_vect) {//usar o T2, T0 é para millis, T1 é "bom" de mais.
TCNT = XXXX; //cálculo da velocidade.

if (Stepper1.passos > 0) executa um passo; 
if (Stepper2.passos > 0) executa um passo; 

}

Ou seja, no teu programa apenas definias o número de passos e velocidade (repara que a velocidade dos motores vai ser diferente) e depois através da temporização ias decrementando o número de passos que querias dar. Isto vai envolver cálculos algo complicados da tua parte.

Ou seja, tens de ver a precisão do temporizador e jogar com ela para nunca teres temporizações muito pequenas (que vão atrapalhar o programa e provavelmente vão falhar). Algo que te ajuda é que as temporizações estão relacionadas entre os motores, por isso em vez de especificares a velocidade a que a CNC vai mexer, tens de jogar para veres qual a diferença entre velocidades dos motores (que te vão dizer quais os ângulos possíveis. Lembra-te também que vais precisar de definir uma onda, logo a temporização que usares tem de ser dividida por dois para poderes fazer uma onda quadrada com 50% de duty cycle.

Por último, lembrei-me agora, um dos motivos pelos quais isto pode não estar a funcionar é que a Stepper.h é feita para ser usada com um driver diferente. Ora vê:

http://arduino.cc/en/Reference/StepperBipolarCircuit

O teu chip faz a papinha toda para controlar o teu motor e tu precisas apenas de dois bits para controlar um motor. Um deles é a direcção (que liga ao pino DIR) e o outro é ao pino Step. Agora de repente, acho que com um pouco de trabalho devias tentar controlar o motor com um PWM (ou neste caso, FM). Colocando uma onda quadrada no pino de Step, o motor move-se facilmente. Já agora, outra coisa, podes para segurança, ligar também os pinos de Enable. Se calhar a um circuito de paragem de emergência por exemplo. Eles fazem o motor parar completamente.

Reparei agora que o meu post não faz sentido nenhum, pois não?

Hum... Não sei se o post faz sentido para os outros mas na minha cabeça e só um aglomerado de palavras :D

Percebi pouco ou nada :P

Eu acho que ja há G-gode interpreters para o arduino, Evitava-me grande parte do trabalho de programação pq percebo mesmo muito pouco. Conhecem algum?

Já agora um pouco Off-topic conhecem lojas em Portugal ou na europa onde possa adquirir material para a CNC? tipo carris, veios etc?

Abraço obrigadissimo pela informação.

Não faço ideia... mas se procurares por CNC no fórum, vais encontrar um fórum de malta que gosta de as fazer. Talvez aí consigas algo.

No que toca a hardware... acho que com duas impressoras HP Deskjet conseguias fazer uma pequena CNC. :) Tens alguma aí por casa? Elas já tinham um veio cada, rodas dentadas, motor e transmissões.

Se não me engano é possível medir a corrente que o motor está a usar com esse driver.

Boas pessoal.

O que e que acham destes drivers? http://www.zappautomation.co.uk/pdf/UIM240%20Manual%20_English_%20_2_.pdf

Acham que servem?

Abraço

Os drivers que tinhas antes também servem... estes parecem uma coisa industrial e podem ser um pouco mais caros do que a CNC vai valer no final. :\

Por outro lado, um PC velho com uma porta paralela podia controlar uns quantos motores com uma programação bem feita. ;)