collapse

* Links de Robótica

* Posts Recentes

Autor Tópico: [Arduino]Stepper Motor + EasyDriver + Arduino  (Lida 122399 vezes)

0 Membros e 2 Visitantes estão a ver este tópico.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
[Arduino]Stepper Motor + EasyDriver + Arduino
« em: 11 de Outubro de 2008, 20:15 »
Hoje vamos ver como ligar um Stepper Motor, ao Arduino Diecimila utilizando o EasyDriver v3 para ficar a saber como o controlar.


Como vêm na imagem acima, é bastante fácil montar todo o circuito, tendo que recorrer apenas a 5 fios, dos quais apenas 2 do microcontrolador:

Info:

Controlo:
  • Dir --> direcção do motor, ligado ao pin 2 do Arduino
  • Stp --> steps do motor, ligado ao pin 3 do Arduino
Alimentação:
  • +V --> alimentação positiva do motor, +15,4
  • GND --> alimentação negativa do motor, 0V
  • GND --> um segundo GND para ligar as massas do EasyDriver com o Arduino, para que este consiga entender os valores lógicos enviados pelo Arduino Diecimila


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.

Ahh para esta montagem utilizei um transformador de 12V, pois não tinha de 15,4 e funcionou perfeitamente ;)


Código:
Código: [Seleccione]
/********************************************************
**         More info about the project at:             **
**  http://lusorobotica.com/index.php?topic=106.0  **
**   by TigPT         at         [url=http://www.LusoRobotica.com]www.LusoRobotica.com[/url]  **
*********************************************************/
int dirPin = 2;
int stepperPin = 3;

void setup() {
  pinMode(dirPin, OUTPUT);
  pinMode(stepperPin, OUTPUT);
}

void step(boolean dir,int steps){
  digitalWrite(dirPin,dir);
  delay(50);
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(100);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(100);
  }
}

void loop(){
  step(true,1600);
  delay(500);
  step(false,1600*5);
  delay(500);
}
« Última modificação: 06 de Janeiro de 2012, 16:22 por TigPT »

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.033
  • El RoboSapiens
Re: Stepper Motor + EasyDriver + Arduino
« Responder #1 em: 11 de Outubro de 2008, 22:56 »
mais um grande tutorial....parabéns :lol:

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re: Stepper Motor + EasyDriver + Arduino
« Responder #2 em: 11 de Outubro de 2008, 23:01 »
Obrigado :D

Offline guibot

  • Mini Robot
  • *
  • Mensagens: 643
    • Guibot
Re: Stepper Motor + EasyDriver + Arduino
« Responder #3 em: 12 de Outubro de 2008, 02:38 »
parece bem nice!!  
 
sabes se o L293D funciona como controlador de motores de passo?

continua com o bom trabalho

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re: Stepper Motor + EasyDriver + Arduino
« Responder #4 em: 12 de Outubro de 2008, 10:25 »
Pelo que li, podes utilizar o L293 como H-bridge para meter um stepper a ser controlado pelo Arduino, mas terás que ter 1 pin para cada fio do stepper, 4 pins.. e 2 L293, visto que cada L293 tem 2 bridges... Existe uma manha qualquer para fazeres só com 2 pins do arduino, visto que os stepps são sempre em xor, ou seja, para 2 numa posição os outros dois são o seu negado. Mas não vi bem como se fazia, porque não era o que pretendia.

Se tiveres mais interessado, diz que eu procuro saber melhor como é.  ;)
« Última modificação: 16 de Dezembro de 2008, 23:46 por Fifas »

Offline guibot

  • Mini Robot
  • *
  • Mensagens: 643
    • Guibot
Re: Stepper Motor + EasyDriver + Arduino
« Responder #5 em: 14 de Outubro de 2008, 01:42 »
obrigado pela resposta
tenho aqui 2 steppers bem grandinhos sacados de um leitor de cassete, quero ver se lhes dou uso    8-)

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re: Stepper Motor + EasyDriver + Arduino
« Responder #6 em: 14 de Outubro de 2008, 08:06 »
Citação de: "guibot"
obrigado pela resposta
tenho aqui 2 steppers bem grandinhos sacados de um leitor de cassete, quero ver se lhes dou uso    ;)

Offline guibot

  • Mini Robot
  • *
  • Mensagens: 643
    • Guibot
Re: Stepper Motor + EasyDriver + Arduino
« Responder #7 em: 14 de Outubro de 2008, 10:00 »
só pude dar uma olhada na diagonal.. parece bem fix!

obrigado TigPT

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re: Stepper Motor + EasyDriver + Arduino
« Responder #8 em: 14 de Outubro de 2008, 11:31 »
De nada, quando fores ler, dá uma especial atenção a este link que tem tutorial para ligar através de um L293 a fazer de H-bridge e tudo ;)

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re:[Arduino]Stepper Motor + EasyDriver + Arduino
« Responder #9 em: 22 de Janeiro de 2009, 17:08 »
Encontrei mais um código que pode ajudar a quem quiser mais informação sobre este stepper e o controlador.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1231909180/1

Neste caso estava a ser utilizado para controlar uma base de um telescópio para fazer acompanhamento de estrelas... acho que o tr3s está interessado nisto!

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.154
Re:[Arduino]Stepper Motor + EasyDriver + Arduino
« Responder #10 em: 25 de Janeiro de 2009, 12:41 »
Código: [Seleccione]
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(100);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(100);
  }
Neste código a unica coisa que fazes é ligar o motor e desligar o motor o numero de passos que queres, certo?
Se tu fizeres isto, ele ia funcionar como continuo, certo? Ia estar sempre HIGH durante STEPS*100ms, correcto?

Código: [Seleccione]
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(100);
  }

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re:[Arduino]Stepper Motor + EasyDriver + Arduino
« Responder #11 em: 25 de Janeiro de 2009, 12:44 »
Código: [Seleccione]
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(100);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(100);
  }
Neste código a unica coisa que fazes é ligar o motor e desligar o motor o numero de passos que queres, certo?
Se tu fizeres isto, ele ia funcionar como continuo, certo? Ia estar sempre HIGH durante STEPS*100ms, correcto?

Código: [Seleccione]
  for(int i=0;i<steps;i++){
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(100);
  }
Não, por ser um stepper e não um DC, tens que lhe dar stepps, um pulso para cada passo que queres que ele dê. Assim se queres que ande rápido dás pulsos rápidos, se queres que ande lento dás pulsos lentos, mas cada vez que levantas um pin a high, ele dá um passo, e depois fica à espera que venha a low para no próximo high ele dar mais um passo.

PS - São micros e não milis, e são 200 não 100.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.154
Re:[Arduino]Stepper Motor + EasyDriver + Arduino
« Responder #12 em: 25 de Janeiro de 2009, 13:06 »
Ok, já entendi. Tens razão era micro. Outra coisa, o easydriver faz a conversão do sinal de comando do arduino num sinal de potencia para o motor e funciona como protecção, certo?
Por exemplo se eu tivesse um stepper motor que funcionasse apenas com 5V, e o fosse usar sem carga, para não ter grandes correntes, poderia fazer o controlo directamente do arduino?

Abraço

Edit: Se usa-se essa roda para mover um peso, quanto conseguiria mover? não encontrei essa informação na datasheet

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 4.939
    • Tiago Rodrigues
Re:[Arduino]Stepper Motor + EasyDriver + Arduino
« Responder #13 em: 25 de Janeiro de 2009, 13:14 »
Deves de utilizar sempre protecção para o micro, podes encontrar aqui um esquema simples para fazeres em casa com uma ponte H para controlar steppers:

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

Quanto a força, ainda não medi, mas no datasheet fala de um momento de 54 g por cm2.

Experimentei impedi-lo de rodar com agarrando à mão parar não era com ele, pareceu-me ter bastante força. Depois quando tiver tempo para o robot digo-te com que peso ele consegue andar às costas ;)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.154
Re:[Arduino]Stepper Motor + EasyDriver + Arduino
« Responder #14 em: 25 de Janeiro de 2009, 13:23 »
Vou ter de rever Fisica para perceber o significado desse momento de inercia lool. Mas se puderes fazer os testes, para diferentes pesos, era bom :)