


Para entender o mecanismo de redução do motor, veja esse excelente video :
Como podem ver, a caixa tem várias engrenagens ( 31 dentes, 32 dentes, 26 dentes, 22 dentes, 11 dentes, 10 dentes, e mais duas com 9 dentes).O pessoal fez alguns cálculos para determinar com maior precisão qual era a redução.(31*32*26*22)/(11*10*9*9) = 283712/4455 = 25792/405 = 63,68395...Na especificação do fabricante, ele aproximou o valor para 64.Para calcular o número de passos do motor interno para girar uma volta do eixo externo (com redução) :(64 * 25792)/405 = 4075,7728395..Isto é , são necessários aproximadamente 4075 passos no motor de passo interno, para uma volta no eixo externo. Esse valor pode ter uma pequena variação devido às folgas nas engrenagens.O unico chip no módulo é o ULN2003. Esse chip possui um conjunto de sete drivers de transistores Darlington que permitem o acionamento de cargas indutivas. Todas as saídas tem o coletor aberto e diodos de supressão (Clamp) . Os transistores suportam tensões de até 50V e correntes de até 500 mA. Todas as entradas IN1, IN2,IN3 e IN4 são compatíveis com sinais TTL e CMOS, com limite de 5V. O pino comum tem que ser conectado na tensão de alimentação do motor. Nesse caso é conectado no 5V.Datasheet ULN2003APGEssa é disposição dos circuitos drivers no chip ULN2003APG:
Esse é o diagrama da placa de circuito do Módulo ULN2003APG :
Os quatro leds vermelhos (A,B,C e D) são usados para indicar o acionamento de cada um dos drivers (fases do motor). Mesmo que o diagrama mostre sete entradas, somente quatro podem ser usadas e somente essas tem pinos no conector.Muita atenção ao conectar a alimentação nos pinos. O pino mais à esquerda (-) no módulo é o terra (veja foto abaixo). Esse terra tem que ser conectado ao terra da fonte e ao terra do Arduino. O pino (+) no caso do Motor 28BYJ-48, tem que ser conectado ao positivo de uma fonte de 5V (preferencialmente de 1 Ampére). Não recomendo que conecte no 5V do Arduino, pois poderá sobrecarregar o regulador de tensão do mesmo.O jumper Power ON/OFF é usado para ligar ou desligar o motor.
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) .
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.
Referência : Stepper_Motors_2011.pdfEsse é o diagrama da montagem do circuito com Arduino.Materiais necessários para a montagem do projeto com Motor de Passo 28BYJ-48 + Driver ULN2003 e Arduino Uno
Obs: como já informei, recomendo que use uma fonte externa de 5V para alimentar o Driver + Motor de passo.
Esse é o diagrama eletrônico do mesmo circuito:
No Modo de Passo completo com alto torque, 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 é mais alto, devido à ativação das duas fases.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.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.
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.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.Full_step.ino
// Controle de Motor de Passo - Modo Passo Completo alto torque (Full step)
// Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-motor-de-passo-28byj-48-driver-uln2003
// Baseado em http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_Driver
// Motor 28BYJ48/5V com Módulo ULN20023 - Arduino Nano / IDE 1.8.5
// Uma volta no eixo = 4075 pulsos / 512 x 8 = 4096
// Gustavo Murta 23/jul/2018
byte HOR[4] = {0x09,0x03,0x06,0x0C}; // Matriz dos bytes das Fases do Motor - sentido Horário Full Step
byte AHO[4] = {0x0C,0x06,0x03,0x09}; // Matriz dos bytes das Fases do Motor - sentido Anti-Horário Full Step
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
}Referências:
http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_D...
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.wave_step.ino// Controle de Motor de Passo - Modo Passo Completo baixo torque (Wave step)
// Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-motor-de-passo-28byj-48-driver-uln2003
// Baseado em http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_Driver
// Motor 28BYJ48/5V com Módulo ULN20023 - Arduino Nano / IDE 1.8.5
// Uma volta no eixo = 4075 pulsos / 512 x 8 = 4096
// Gustavo Murta 23/julho/2018
byte HOR[4] = {0x01,0x02,0x04,0x08}; // Matriz dos bytes das Fases do Motor - sentido Horário Wave Step
byte AHO[4] = {0x08,0x04,0x02,0x01}; // Matriz dos bytes das Fases do Motor - sentido Anti-Horário WaveStep
int atraso_fase = 2 ; // Intervalo de tempo entre as fases em milisegundos - min 2 para Wave 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
}// Controle de Motor de Passo - Modo Meio Passo (Half step)
// Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-motor-de-passo-28byj-48-driver-uln2003
// Baseado em http://www.elecrow.com/wiki/index.php?title=ULN2003_Stepper_Motor_Driver
// Motor 28BYJ48/5V com Módulo ULN20023 - Arduino Nano / IDE 1.8.5
// Uma volta no eixo = 4075 pulsos / 512 x 8 = 4096
// Gustavo Murta 23/jul/2018
byte HOR[8] = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; // Matriz dos bytes das Fases do Motor - sentido Horário
byte AHO[8] = {0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; // Matriz dos bytes das Fases do Motor - sentido Anti-Horário
int atraso_fase = 1 ; // Intervalo de tempo entre as fases em milisegundos
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 .
AccelStepperPOT.ino// Controle de Motor de Passo com Potenciometro
// Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-motor-de-passo-28byj-48-driver-uln2003
// Baseado em http://www.airspayce.com/mikem/arduino/AccelStepper/ProportionalControl_8pde-example.html
// Motor 28BYJ48/5V com Modulo ULN20023 - Arduino UNO / IDE 1.8.5
// Uma volta no eixo = 4075 pulsos
// Gustavo Murta 02/jago/2018
#include <AccelStepper.h> // biblioteca AccelStepper
#define ANALOG_PIN A0 // pino A0 para leitura da tensão do Potenciometro
AccelStepper motorPasso (AccelStepper::FULL4WIRE, 8, 10, 9, 11); // Passo completo 4 fios
void setup()
{
motorPasso.setMaxSpeed(500); // maxima velocidade = 500 pulsos por segundo
}
void loop()
{
int analog_in = analogRead(ANALOG_PIN); // lendo a tensão do pino A0 do Arduino
motorPasso.moveTo(analog_in); // gira o eixo do motor X pulsos (0 a 1023 pulsos)
motorPasso.setSpeed(100); // velocidade = 100 pulsos por segundo
motorPasso.runSpeedToPosition(); // gira o eixo para a posição definida
}Esse motor de passo permite movimentos precisos e com baixa rotação. Essas são algumas aplicações interessantes voltadas para fotografia :
ARDUINO TIME-LAPSE PANORAMA CONTROLLER

Motion Control Rig for Time-Lapse Photography
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
|
Essa montagem, eu diria que é a mais simples para controle de um motor de passo (stepper motor). 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 do circuito.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200