• Welcome to LusoRobótica - Robótica em Português.
 

[Arduino]Stepper Motor + EasyDriver + Arduino

Started by TigPT, 11 de October de 2008, 20:15

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

intense

uma pergunta o easyDriver da pa controlar ate quantos motores?
ou so da para um?

TigPT


jvnvr

Boas,
Antes de mais quero dar os parabéns pela iniciativa da lusorobotica, parabéns aos fundadores e membros pelas oportunidades de troca de conhecimentos que potenciam. A minha área de trabalho não tem muito a haver com robótica, mas recentemente comecei a interessar-me por cnc.

Tenho andado com ideias de criar uma micro cnc de 3 eixos para cortar placas de cartão, madeira, acrílico com cerca de 5mm de espessura.
Tenho investigado e visto muitos tutorials e projectos na net, youtube e afins.

Por oferecer outras possibilidades e ser opensource, pensei em fazer com arduino + easy driver + stepper motor. Uso Mac e por vezes PC, portanto software tem que ser multiplataforma.
Para começar, com 2 motores de impressoras para testar é bom... mas para passar para uns nema23 de seguida (penso igual ao do post).

As minhas dúvidas:
1. Controladores com arduino + easydriver são mais lentos/precisos que com outro tipo de controlador?
2. Onde posso comprar motores nema23 em Portugal (não encontrei na lusorobotica)? Se mandar vir de fora (Europa) onde aconselham?
3. Onde controlo 1 step, 1/2 step, 1/4 step, etc. com arduino/easydriver? Defino por software ou por hardware?

Cumprimentos

TigPT

Bem-vindo!

1) Sendo que o ideal é a utilização de uma porta de serie por usb, vais ter tanta velocidade de comunicação com o arduino, que com outro microcontrolador qualquer. A velocidade deste para fazer algumas rotinas para controlar os steppers também será mais do que suficiente. Creio que vais estar mais limitado à velocidade dos motores do que do micro.
2) Referes-te a estes motores: http://www.sparkfun.com/commerce/product_info.php?products_id=9238 ?
Se sim, vê na página de distribuidores da SparkFun que há várias empresas aqui na Europa.
3) Da experiência que tive com os stepper motores, estes têm uma granulosidade mínima de um step, pelo que não poderás fazer movimentos de 1/2 e 1/4 step, mas como não é de todo uma área que conheça muito, não te dou a certeza.

Tens aqui vários projectos de CNC no fórum:
http://lusorobotica.com/search.php?cx=000416183904538598060:bqwm1z-rqvk&cof=FORID:10&ie=UTF-8&q=cnc&sa=Pesquisar

ncarvalho

Viva

Quote from: TigPT on 11 de October de 2008, 20:15
O código abaixo já tem o método step(boolean direcçao, int numero_de_steps) que permite fazer o motor andar numa dada direcção X steps, sem que vocês se tenham que preocupar com o resto do código, quem quiser aprofundar mais, é só perguntar.
Estou a desenvolver um código que permita também controlar a velocidade do motor, e fazer com que este ande em background, permitindo o Arduino Diecimila ir fazendo outro código enquanto vai dando ordens ao motor para ir andando. Para já este já vos permite fazer o motor andar sem grande esforço. Deixo mais uma imagem da montagem completa.

Repescando este topico queria deixar umas questões:
- As funcões step e loop aqui usadas não podem ser substituidas pelas funções integradas  Stepper(steps, pin1, pin2),     Stepper(steps, pin1, pin2, pin3, pin4), setSpeed(rpm) e step(steps)??
- Referes que estavas a estudar uma forma de dar instruções ao motor, mas libertando o arduino para realizar outras tarefas (non-blocking). Conseguiste alguma coisa que possas partilhar?


Obrigado
NCarvalho

Nunito

TigPT, que condição colocas/sugeres para ao fim de fazer os 1600 steps, fazer um break ao loop?

senso

A cada volta incrementas ou decrementas uma variavel quando for 0 ou 1600 fazes break;
Avr fanboy

TigPT

Quote from: senso on 03 de March de 2015, 13:55
A cada volta incrementas ou decrementas uma variavel quando for 0 ou 1600 fazes break;
True

Nunito

Quote from: senso on 03 de March de 2015, 13:55
A cada volta incrementas ou decrementas uma variavel quando for 0 ou 1600 fazes break;
Voltando aqui a esta parte, que acabei por deixar de parte.
Tenho este código, mas o motor não está a parar, não sei o que está mal.

       if(buf[i] == '1')
       {
          if( steps == 600)
         {
           break;
         }
         step(true,600);
         delay(500);
         steps = steps + 1;
       }


senso

Imprime a variavel steps.
E essa função step que tem com argumentos true e 600, 600 é o numero de passos?
Se sim vais dar 600 passos vezes 500..
Avr fanboy

Nunito

Quote from: senso on 10 de April de 2015, 20:20
Imprime a variavel steps.
E essa função step que tem com argumentos true e 600, 600 é o numero de passos?
Se sim vais dar 600 passos vezes 500..
Sim, tenho os 600 como numero de passos.

senso

E queres dar 600 passos, 500 passos ou queres dar 300000 passos?
É que a solução está mesmo ao virar da esquina, mas não vou dizer..
Avr fanboy

Nunito

Quote from: senso on 10 de April de 2015, 20:37
E queres dar 600 passos, 500 passos ou queres dar 300000 passos?
É que a solução está mesmo ao virar da esquina, mas não vou dizer..
:)
 

       if(buf[i] == '1')
       {
          if( steps == 500)
         {
           break;
         } 
         step(true,50);
         delay(10);
         steps = steps + 1;
       }


senso

Assim já só dá 50*500 passos, a guiar-me pelo que dizes que a função step faz.
Avr fanboy

Nunito

Quote from: senso on 10 de April de 2015, 23:38
Assim já só dá 50*500 passos, a guiar-me pelo que dizes que a função step faz.
Mas estás a guiar-te mal, que sinceramente nao estou a perceber o que a função step faz.

void loop()
{
  step(true,1600);
  delay(500);
  step(false,1600*5);
  delay(500);
} 


Vamos lá ver se eu entendo.
Neste código do TigPT, os 1600 que ali estão são o numero de passos, correcto?