segunda-feira, 23 de abril de 2012

Biblioteca Accel Stepper


É uma biblioteca extra do Arduino encontrada no seu site que possui funções para controlar motores de passo. Fornece uma interface orientada a objeto para 2 ou 4 pinos de um motor de passo.
Essa biblioteca melhora significativamente a biblioteca padrão do arduino, a stepper.h, pois ela pode mover vários motores simultaneamente, suporta aceleração e desaceleração, suporta motores de 2 e 4 fios  e velocidades muito lentas.
Funções:
setMaxSpeed (float speed ) – Define a velocidade máxima permitida. A função run () irá acelerar o motor até atingir essa velocidade.
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.setMaxSpeed(100);
}

setAcceleration (float acceleration) – Define os parâmetros de aceleração e desaceleração.
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.setAccelaration (50);
}

moveTo (long absolute) – move o motor para a posição desejada, necessita da função run() para que o motor seja acionado.
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.moveTo (200);
}

run () - Comando de acionamento do motor. Implementa a aceleração e desaceleração no motor para que a trajetória desejada seja realizada. 
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.moveTo (200);
}
void loop {
stepper1.run ();
}
distanceToGo () - A distância entre a posição atual para a posição de destino.
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.moveTo (200);
}
void loop {
stepper1.run ();
if (stepper1.distanceToGo == 0)
    stepper1.moveTo(-100);
}

currentPosition () – Posição atual do motor.
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.moveTo (200);
}
void loop {
stepper1.run ();
if (stepper1.distanceToGo == 0){
    stepper1.moveTo(-stepper1.currentPosition ());
      stepper1.run();
}
}

runToPosition () – Move o motor para uma posição até que atinja a posição desejada.
Ex:
#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.moveTo (200);
}
void loop {
stepper1.run ();
if (stepper1.distanceToGo == 0)
    stepper1.runToPosition(-100);
}

runToNewPosition () – Move o motor para uma nova posição até que atinja o alvo.
Ex:

#include <AccelStepper.h>
AccelStepper stepper1;
void setup {
stepper1.moveTo (200);
}
void loop {
stepper1.run ();
if (stepper1.distanceToGo == 0)
    stepper1.runToNewPosition(-200);
}

Existem outras funções nessa biblioteca, porém essas são as usadas para o programa de controle da CNC.

segunda-feira, 19 de dezembro de 2011

Placa de Circuito Impresso

A partir do momento que começamos a usar a fonte de PC o uso da protoboard se tornou inviável, pois devido a alta potência da fonte os contatos da protoboard derreteram por causa do calor dissipado.
A solução mais viável foi confeccionar a placa do circuito de controle apresentado nos posts anteriores.
A confecção de uma Placa de circuito impresso em casa é simples, principalmente pelo processo de transferência Térmica. Com o uso de alguns utensílios domésticos(ferro, esponja de aço e detergente), de uma placa de cobre e uma boa ferramenta CAD, sua placa estará pronta em algumas horas. 
Para o desenho do esquemático e do Layout da placa utilizamos o software eagle, que é uma ferramenta de fácil uso e sua versão free está disponibilizada para download aqui. O tutorial com algumas informações de como manusear essa ferramenta você encontra aqui.
Abaixo o desenho do esquemático e o layout da placa.
Esquemático do Circuito

Layout da Placa


Para o sucesso da sua placa o crucial é escolher o papel certo para a transferência, o mais indicado é o papel Glossy que pode ser encontrado em qualquer livraria, mas o A4 também pode ser usado, porém o A4 apresenta dificuldades na hora da sua remoção e pode danificar as trilhas.
O primeiro passo é imprimir o Layout da placa.

As placas usadas devem ser limpas com o uso da esponja de aço, evite tocá-la para
evitar resíduos de gordura que possa prejudicar futuramente o circuito.
sobrepondo o papel na placa e utilizando o ferro de passar roupas a aqueça 
 até o ponto do desenho ser transferido, aplique bastante pressão para facilitar a
passagem do desenho inteiro.
Após retirar o papel, enxague a placa para retirar todos os resíduos, deixando apenas o
desenho do circuito. Com o desenho pronto e sem falhas a placa deve ser submetida a
um banho com produto químico corrosivo especifico. O mais indicado é o Percloreto de Ferro, pois não é toxico e cumpre seu trabalho perfeitamente.
Após o banho, enxugue a placa e prepare-a para a perfuração.
Se for sua primeira placa é completamente normal haver algumas falhas. A pratica é que leva a perfeição.
Depois de Perfurada e soldados todos os componentes a nossa placa ficou assim:











sábado, 5 de novembro de 2011

Fonte de PC na alimentação do circuito de controle

As vantagens de usar fontes de PC é que além de serem baratas e fáceis de usar, podem ser retiradas de qualquer PC inoperante.



A que está sendo usada é uma ATX de 400W. Para fazê-la funcionar basta curto circuitar o fio verde em qualquer um preto.



As tensões estão relacionadas a cor do pino, essas informações vem na própria fonte e geralmente são iguais para qualquer ATX.
Laranja -> +3.3V
Vermelho -> +5V
Amarelo -> +12V
Roxo -> +5 VSB
Branco -> -5V
Azul -> -12 V

Circuito de controle usando L298

Como falei anteriormente, testamos o Ci L298 e de fato ele apresenta melhor desempenho, pois fornecer mais corrente. O circuito montado foi baseado no equema abaixo.



Os pinos 1 e 15 não estão sendo usados adequadamente pois são os sensores de corrente e para usa-los é necessários outro CI o L297 que é o responsável por ler a corrente que está no sensor e controla-la.
Esse circuito requer uma potência relativamente alta então é recomendado usar fontes de PC, a fonte que estávamos usando era uma  ST-305D DC Power Supply, conforme figura abaixo.





Conectada ao circuito esta fonte ficava entrando em curto, por esse motivo decidimos usar uma fonte de PC de 400W. Mais detalhes sobre fontes de PC, no próximo post.

quarta-feira, 5 de outubro de 2011

Movimento dos eixos

Os motores foram acoplados aos eixos da CNC e já conseguem movimentá-los, está sendo usado o circuito citado no post anterior com 2 chips L293 controlando os 2 motores de passo.
Abaixo a imagem dos dois motores usados.

 Motor responsável pelo eixo Y

 Motor responsável pelo eixo X

Um pequeno vídeo dos eixos em movimento.





Circuitos de Controle

Testar os motores unipolares apenas com a interface de potência e o Arduino acarretara muitos prejuízos como a queima de motores, trasistores e quem sabe até do Arduino - essa ultima acho muito difícil, mas é uma questão preventiva a considerar - foi assim que aconteceu pra gente, perdemos uns 3 motores e alguns transistores, isso por causa da falta de um controlador de corrente PWM. O motor ficava ligado muito tempo a corrente subia exponencialmente e CABUM, já era componente. 
Para acabar com essas perdas, estamos usando chips integrados de ponte H e motores bipolares. O L293 é ótimo para essa aplicação e está funcionando perfeitamente, montamos o circuito encontrado no site http://lab.guilhermemartins.net/2009/01/29/l293d-custom-motor-driver/ e funcionou, porém esse chip não consegue fornecer a corrente requerida por alguns motores e acaba esquentando muito, podendo até queimar se ligado por muito tempo, por isso serão testados posteriormente outros chips como o L298 que parece ser bem melhor que o L293.
Abaixo o esquema do circuito montado. 

O CI é alimentado com 5V, porém o pino 8 deve ser alimentado com a mesma tensão de acionamento do motor, geralmente 12V.

Arduino


  

Com o intuito de facilitar os testes e dando inicio a uma das proximas etapas, começamos a estudar o Arduino, que é uma plataforma de hardware livre que tem como objetivo criar ferramentas que são acessíveis, com baixo custo, flexíveis e fáceis de usar. Principalmente para aqueles que não teriam alcance aos controladores mais sofisticados e de ferramentas mais complicadas. Mais informações sobre o Arduino no site oficial http://arduino.cc/.

O software do Arduino é baseado na linguagem C/C++, é simples e fácil, dá pra aprender a programar rapidinho, principalmente aqueles que já tem uma base em C/C++.
Com o Arduino foi possível gerar as sequências necessárias e controlar a velocidade do motor de forma fácil e rápida.