Mais um Tutorial para os colegas do Lab de Garagem - Arduino controlando o motor de passo
28BYJ-48 com o driver ULN2003.
Essa montagem, eu diria que é a mais simples para controle de um motor de passo (stepper motor). Nem por isso ela pode ser considerada ruim. Esse motorzinho tem uma redução interna que aumenta bem o torque, apesar do pequeno tamanho. O módulo de controle com o chip ULN2003 é bem pequeno também, o que pode facilitar a montagem em um seu projeto.
As vantagens são a simplicidade na montagem , Sketch pode ser bem enxuto, o uso de tensão de 5V para alimentar o motor, etc.
A desvantagens são que a rotação é baixa (devido a redução na caixa de engrenagens) , que o motor unipolar é menos eficiente e o uso de quatro portas do Arduino. Alguns módulos de controle de motor de passo usam interfaces com duas portas apenas (por exemplo I2C).
Favor interagir com o tutorial, somente assuntos relacionados com o mesmo.
Se deseja esclarecer alguma outra dúvida, favor criar um novo tópico.
Farei o Tutorial em partes.
Para facilitar a pesquisa nos tópicos, criei esse índice :
A precisão de um motor de passo :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Informações sobre o Motor de Passo 28BYJ-48 :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Informações sobre o Módulo Driver ULN2003:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Diagrama de montagem do Modulo Driver + Motor com Arduino:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Primeiro exemplo - com dois botões para alterar o sentido da rotação:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Segundo exemplo - controla-se o motor através do angulo:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Terceiro exemplo - Controle do motor através de um potenciômetro:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Quarto exemplo - Três voltas no sentido horário e mais duas voltas no sentido ant-horário :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Quinto exemplo - Acionamento com duplo sentido :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Aplicações com o Motor + Driver - Impressora de Ovos e Ploter de PCB:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Aplicações com o Motor + Driver - Fotografia Time-lapse:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - modos de operação :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - Modo Passo completo com baixo torque ( Wave Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - Modo Passo completo com alto torque ( Full Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - Modo Meio Passo ( Half Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
E muito mais !!!
Espero que gostem.
Tags:
Mais uma aplicação com esse Motorzinho !
http://www.instructables.com/id/Arduino-Time-Lapse-Panorama-Control...
Fotografia Time lapse com Gopro !
Mais um Time Lapse com o mesmo Motorzinho:
http://makezine.com/projects/built-a-motion-control-rig-for-time-la...
Fala Jose Gustavo eai tudo bem?
estou acompanhando tutorial, ta ficando interessante mt coisa ainda tinha duvida vlw
um forte abraço pra vc =)
Obrigado ! Seja bem vindo.
Abraços,
Motor de Passo - modos de operação :
Nesse tutorial o Motor de passo é Unipolar, isto é, ele possui quatro enrolamentos que chamamos de Fases.
Cada circuito driver do chip ULN2003A aciona uma das fases. E a ativação de cada driver é realizada pelas portas digitais do Arduino ( portas D08, D09, D10 e D11) .
Para um motor de Passo Unipolar, temos alguns modos de operação. O modo Passo completo com alto torque ( Full step), Passo completo com baixo torque ( Wave Step), Meio Passo (half step) e micro-passo (Micro stepping).
No caso do Micro passo, a corrente nos enrolamentos deve ser alterada. Como o nosso circuito não permite o controle da corrente, esse modo de operação não se aplica.
Para entender como as Fases são acionadas em cada caso, vejam essas cartas de tempo:
Referência : https://dscl.lcsr.jhu.edu/main/images/b/b3/Stepper_Motors_2011.pdf
Obs: 0 (enrolamento desativado) e 1 (enrolamento ativo)
Nas linhas estão a sequência dos passos e nas colunas estão as Fases.
Passo completo com alto torque ( Full step)
Duas Fases são acionadas ao mesmo tempo.
Passo completo com baixo torque ( Wave Step)
Somente uma Fase acionada de cada vez.
Meio Passo (half step)
Na sequência de oito passos, em alguns passos temos somente uma Fase acionada
e em outros passos, temos duas Fases acionadas.
Motor de Passo - Modo Passo completo com baixo torque ( Wave Step):
Um dos motivos para a escolha desse Módulo driver ULN2003 é que ele possui quatro leds que permitem a indicação da ativação das fases do motor. Para fins didáticos, isso é muito útil.
Como já foi dito, no modo Passo completo com baixo torque ( Wave step) somente uma Fase é acionadas de cada vez, portanto o torque do motor é menor do que nos outros modos. Esse modo é pouco usado exatamente por isso. O rendimento do motor é menor, mas tem-se como vantagem um menor consumo de corrente, já que somente uma Fase é ativada em cada passo.
Comecei com esse modo, pois ele é o mais fácil de visualizar tanto através dos Leds como na Carta de tempo.
Para melhor visualizar o avanço dos Leds piscando de acordo com a ativação das Fases, altere a variável atraso-fase para 500 milisegundos :
int atraso_fase = 500 ;
Desse modo poderá perceber que os Leds piscam um de cada vez e na sequência da Carta de Tempo (vide abaixo).
Importante ressaltar que nas matrizes do programa : AHO e HOR , estão carregados os bytes de ativação das fases, de acordo com a tabela anexada no tópico anterior. Uma sequência de bytes é inversa da outra.
Referências:
http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_D...
Sobre Matrizes no Sketch https://www.arduino.cc/en/Reference/Array
Esse é o Sketch Wave_step.ino (anexei o arquivo) :
// Controle de Motor de Passo - Modo Passo Completo baixo torque (Wave step)
// Baseado em http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_D...
// Motor 28BYJ48/5V com Módulo ULN20023 - Arduino Nano / IDE 1.6.7
// Uma volta no eixo = 4075 pulsos / 512 x 8 = 4096
// Gustavo Murta 26/mar/2016
// Matriz dos bytes das Fases do Motor - sentido Horário Wave Step
byte HOR[4] = {0x01,0x02,0x04,0x08};
// Matriz dos bytes das Fases do Motor - sentido Anti-Horário WaveStep
byte AHO[4] = {0x08,0x04,0x02,0x01};
// Intervalo de tempo entre as fases em milisegundos - min 2 para Wave Step
int atraso_fase = 2 ;
int intervalo = 1000 ; // Intervalo de tempo entre os movimentos do motor em ms
void Motor_AHO() // Movimento no sentido anti-horário
{
for(int i = 0; i < 512; i++) // incrementa o contador i de 0 a 511 - uma volta
for(int j = 0; j < 4; j++) // incrementa o contador j de 0 a 3
{
PORTB = AHO[j]; // Carrega bytes da Matriz AHO na Porta B
delay (atraso_fase); // Atraso de tempo entre as fases em milisegundos
}
}
void Motor_HOR() // Movimento no sentido horário
{
for(int i = 0; i < 512; i++) // incrementa o contador i de 0 a 511 - uma volta
for(int j = 0; j < 4; j++) // incrementa o contador j de 0 a 3
{
PORTB = HOR[j]; // Carrega bytes da Matriz HOR na Porta B
delay (atraso_fase); // Atraso de tempo entre as fases em milisegundos
}
}
void setup()
{
DDRB = 0x0F; // Configura Portas D08,D09,D10 e D11 como saída
PORTB = 0x00; // Reset dos bits da Porta B (D08 a D15)
}
void loop()
{
Motor_HOR(); // Gira motor no sentido Horário
delay (intervalo); // Atraso em milisegundos
Motor_AHO(); // Gira motor no sentido Anti-Horário
delay (intervalo); // Atraso em milisegundos
}
Essa é a Carta de Tempo do Modo Passo completo com baixo torque ( Wave Step):
Veja que para cada passo, somente uma Fase (Channel) esta ativa.
Motor de Passo - Modo Passo completo com alto torque ( Full Step):
O Modo de Passo completo com alto torque é um pouquinho mais complexo, pois para cada passo, duas Fases são ativadas simultaneamente. Esse modo é o mais usado, pois como o nome já diz, tem mais torque. O consumo de corrente é o mais alto devido à essa ativação de duas Fases.
Como no exemplo anterior, para melhor visualizar o avanço dos Leds piscando de acordo com a ativação das Fases, altere a variável atraso-fase para 500 milisegundos :
int atraso_fase = 500 ;
Fica visível que dois Leds piscam ao tempo, também seguindo a Carta de Tempo anexada (vide abaixo).
Verificando os valores dos Bytes das matrizes do programa : AHO e HOR , percebe-se que dois bits são ativados ao mesmo tempo. E é claro, uma sequência de bytes é inversa da outra.
Referências:
http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_D...
Sobre Matrizes no Sketch https://www.arduino.cc/en/Reference/Array
Esse é o Sketch Full_step.ino (anexei o arquivo) :
// Controle de Motor de Passo - Modo Passo Completo alto torque (Full step)
// Baseado em http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_D...
// Motor 28BYJ48/5V com Módulo ULN20023 - Arduino Nano / IDE 1.6.7
// Uma volta no eixo = 4075 pulsos / 512 x 8 = 4096
// Gustavo Murta 26/mar/2016
// Matriz dos bytes das Fases do Motor - sentido Horário Full Step
byte HOR[4] = {0x09,0x03,0x06,0x0C};
// Matriz dos bytes das Fases do Motor - sentido Anti-Horário Full Step
byte AHO[4] = {0x0C,0x06,0x03,0x09};
int atraso_fase = 2 ; // Intervalo de tempo entre as fases em milisegundos - min 2 para Full Step
int intervalo = 1000 ; // Intervalo de tempo entre os movimentos do motor em ms
void Motor_AHO() // Movimento no sentido anti-horário
{
for(int i = 0; i < 512; i++) // incrementa o contador i de 0 a 511 - uma volta
for(int j = 0; j < 4; j++) // incrementa o contador j de 0 a 3
{
PORTB = AHO[j]; // Carrega bytes da Matriz AHO na Porta B
delay (atraso_fase); // Atraso de tempo entre as fases em milisegundos
}
}
void Motor_HOR() // Movimento no sentido horário
{
for(int i = 0; i < 512; i++) // incrementa o contador i de 0 a 511 - uma volta
for(int j = 0; j < 4; j++) // incrementa o contador j de 0 a 3
{
PORTB = HOR[j]; // Carrega bytes da Matriz HOR na Porta B
delay (atraso_fase); // Atraso de tempo entre as fases em milisegundos
}
}
void setup()
{
DDRB = 0x0F; // Configura Portas D08,D09,D10 e D11 como saída
PORTB = 0x00; // Reset dos bits da Porta B (D08 a D15)
}
void loop()
{
Motor_HOR(); // Gira motor no sentido Horário
delay (intervalo); // Atraso em milisegundos
Motor_AHO(); // Gira motor no sentido Anti-Horário
delay (intervalo); // Atraso em milisegundos
}
Essa é a Carta de Tempo do Modo Passo completo com alto torque ( FullStep):
Veja que para cada passo, duas Fases (Channel) são ativadas ao mesmo tempo.
Olá.
Do jeito que está esse fonte, você só poderá fazer o STOP quando um dos movimentos de 1000 passos terminar. Acredito que não seja essa a sua intenção.
O ideal, usando Arduino é vc. modificar esse fonte para que a cada passo seja verificado se o STOP foi acionado.
Para isso, a técnica ideal é aproveitar o loop do Arduino, criar uma variável que indique se vc. está girando em um sentido ou ao contrário. Outra para contar os passos e controlar essas duas variáveis dentro do loop. A verificação do Botão de Stop fica como está. A cada passada pelo loop é acionado um passo (crescente ou decrescente de acordo com o sentido clicado por último). Quando a variável contadora chegar ao fim, tudo deixa de acontecer, uma verificação dentro dos IFs verifica quantos passos já foram dados e se atingir o limite não faz nada.
Boa sorte.
Boa noite Ramon,
Se você não tem conhecimento de programação de Arduino, sugiro que faça o seu programa em etapas.
Um programa para apertar o botão :
https://www.arduino.cc/en/Tutorial/Debounce
Para acionar Leds :
Com essas fontes esta querendo dar um tiro de canhão em um mosquito.
A tensão máxima das saídas Coletor aberto do ULN2003 é de 50V.
Mas as portas de controle operam somente com 5V.
A corrente máxima em cada saída é de apenas 500 mA.
Como o circuito não sabe quando será o fim de curso, recomendo que use uma interrupção :
https://www.arduino.cc/en/Reference/AttachInterrupt
https://playground.arduino.cc/Code/Interrupts
Se você tiver mais dúvidas do seu projeto, favor criar um novo tópico,
Obrigado.
Motor de Passo - Modo Meio Passo ( Half Step):
O Modo Meio Passo é uma mesclagem dos outros dois modos, Full Step e Wave Step.
Esse modo é usado quando o movimento do motor precisa ser delicado e preciso e o torque não é importante.
Se um motor tem por exemplo 200 passos por rotação, no modo Half Step, o número de passos dobra para 400 !
Por isso é chamado de Meio Passo. O efeito Meio passo é conseguido intercalando um passo com duas Fases do Motor ativadas simultaneamente com um passo ativando somente uma Fase, obedecendo uma sequência própria para isso. Devido à essa alternância, o torque e o consumo de corrente varia de acordo com o passo. Com mais fases ativas, terá maior torque e maior consumo de corrente.
Como em todos os outros exemplos, para melhor visualizar o avanço dos Leds piscando de acordo com a ativação das Fases, altere a variável atraso-fase para 500 milisegundos :
int atraso_fase = 500 ;
Confira a sequência de Leds visualizando a Carta de Tempo anexada (vide abaixo).
O interessante nesse modo é que as matrizes dos Bytes AHO e HOR , tem oito valores e não somente quatro como nos outros modos.Analisando os Bytes dá para perceber que as matrizes dos outros modos foram agrupadas.
// Controle de Motor de Passo - Modo Meio Passo (Half step)
// Baseado em http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_D...
// Motor 28BYJ48/5V com Módulo ULN20023 - Arduino Nano / IDE 1.6.7
// Uma volta no eixo = 4075 pulsos / 512 x 8 = 4096
// Gustavo Murta 26/mar/2016
// Matriz dos bytes das Fases do Motor - sentido Horário - Meio Passo
byte HOR[8] = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
// Matriz dos bytes das Fases do Motor - sentido Anti-Horário - Meio Passo
byte AHO[8] = {0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
int atraso_fase = 1 ; // Intervalo de tempo entre as fases em milisegundos - min 1 para Meio Passo
int intervalo = 1000 ; // Intervalo de tempo entre os movimentos do motor em ms
void Motor_AHO() // Movimento no sentido anti-horário
{
for(int i = 0; i < 512; i++) // incrementa o contador i de 0 a 511 - uma volta
for(int j = 0; j < 8; j++) // incrementa o contador j de 0 a 7
{
PORTB = AHO[j]; // Carrega bytes da Matriz AHO na Porta B
delay (atraso_fase); // Atraso de tempo entre as fases em milisegundos
}
}
void Motor_HOR() // Movimento no sentido horário
{
for(int i = 0; i < 512; i++) // incrementa o contador i de 0 a 511 - uma volta
for(int j = 0; j < 8; j++) // incrementa o contador j de 0 a 7
{
PORTB = HOR[j]; // Carrega bytes da Matriz HOR na Porta B
delay (atraso_fase); // Atraso de tempo entre as fases em milisegundos
}
}
void setup()
{
DDRB = 0x0F; // Configura Portas D08,D09,D10 e D11 como saída
PORTB = 0x00; // Reset dos bits da Porta B (D08 a D15)
}
void loop()
{
Motor_HOR(); // Gira motor no sentido Horário
delay (intervalo); // Atraso em milisegundos
Motor_AHO(); // Gira motor no sentido Anti-Horário
delay (intervalo); // Atraso em milisegundos
}
Essa é a Carta de Tempo do Modo Meio Passo ( Half Step):
Em alguns passos tem duas fases ativadas e em outros tem somente uma fase ativada .
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por