Tutorial Arduino - Motor de Passo 28BYJ-48 + driver ULN2003

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.  

Exibições: 69210

Responder esta

Respostas a este tópico

Olá JGAM, Como Vai?
Tenho uma dúvida quanto a esse motor.

Qual a maior RPM suportada por esse motor, e como eu poderia setar isso, pois estou testando com os exemplos da biblioteca steeper.h mas não consigo aumentar a velocidade dele.

Consegue me dar uma dica?

Boa noite Marcio, 

Todo motor de passo tem um valor máximo de rpm. Essa velocidade depende da construção do motor. E esse motor, por ter várias engrenagens que reduzem a rotação, possui uma  velocidade máxima  bem baixa. 

Na especificação do motor, achei esse parâmetro:

In-traction Torque >34.3mN.m(120Hz)

Entendo que a frequência máxima dos pulsos (com tração) é de 120 Hz.

http://robocraft.ru/files/datasheet/28BYJ-48.pdf

É o que eu entendi tambem. Mas fiz alguns testes aqui e é possível conseguir muito mais. Não sei se começa uma curva de perda de potência. Modifiquei os meus para trabalharem em regime bipolar (Que dão mais potência, embora dependa de uma placa melhor para funcionar. Mas o que são R$ 12,00 a mais né???).

Vou começar a montar uma plotter. Funcionando, parto para uma CNC, vamos aos poucos.

Obrigado por compartilhar a sua experiência, Euclides.

Abraços. 

Obrigado pessoal, por participarem da minha dúvida. Percebi q não consigo aumentar a velocidade do giro mais do q o q vem nos exemplos por ai, em média 60 RPM. 

Olhando no datashit dele, tem uma propriedade "Speed Variation Ratio" = 1/64.

Não seria 64 giros por minuto?

Euclides, me mantenha informado dos seus testes, se puder.

Eu preciso de um motor q possibilite entre 0 a 1000 RPM, se souberem algum q possibilite isso, me avisem.

Obrigado!

Márcio A. Pinheiro.
Olha, vai ser difícil vc. encontrar um motor de passo que funcione nessas condições por um preço que valha a pena.
Acredito ser possível, mas as tensões, correntes, frequências de trabalho e as placas especiais que vão controla-lo não serão triviais. No Youtube talvez vc. consiga ver alguma mostra de motores de passos nesses regimes.
Tem que pesquisar.
Abraço e boa sorte.
Euclides.

Obrigado Euclides!

Marcio , sugiro que dê mais detalhes sobre o seu projeto, criando um novo tópico. Assim a galera poderá ajuda-lo. 

Informações sobre o Módulo Driver ULN2003:

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. Se precisar  controlar maior corrente, pode usar dois drivers em paralelo.

Todas as entradas são compatíveis com sinais TTL e CMOS, mas com limite de 5V.

Creio que as entradas devam ser compatíveis com os níveis 3,3V também. 

Vendo o datasheet, percebi que a tensão VCE quando o driver esta ativo é de aproximadamente 1V !

O pino comum tem que ser conectado na tensão de alimentação do motor. Ex: se o motor é de 12V, esse pino deverá ser conectado no 12V. No nosso caso é conectado no 5V. 

Esse chip é produzido por vários fabricantes. Por isso estou enviando esses links dos Datasheets :

http://www.onsemi.com/pub_link/Collateral/ULN2003A-D.PDF

http://www.ti.com/lit/ds/symlink/uln2003a.pdf

http://www.st.com/web/en/resource/technical/document/datasheet/CD00...

Se precisar controlar outras cargas com tensões maiores, ou entradas com níveis diferentes pode procurar por outros chips similares: ULN2023, UL2803, etc.

Essa é disposição dos circuitos drivers no chip ULN2003A:

Esse é o diagrama da placa de circuito do Módulo ULN2003A :

Os quatro leds vermelhos 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.

Muito atenção ao conectar a alimentação nos pinos. 

O pino mais à esquerda no diagrama é o terra. Esse terra tem que ser conectado ao terra da fonte e ao terra do Arduino.

O pino VCC no caso do Motor 28BYJ-48 tem que ser conetado à 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 e talvez até queimá-lo.

O jumper Power ON/OFF é usado para ligar e desligar o motor.  

Galera a minha contribuição é simples mais acredito que será de algum acréscimo para o tópico. Deixarei 5 circuitos com os respectivos sketchs. A maioria são curtos.

O primeiro trata-se do controle do motor step com 2 botões, um para a esquerda e outro para a direita.

Eis o circuito e após o código:

 

#include <Stepper.h>
int pinobotao_ah = 3;
int pinobotao_h = 2;
int passos = 30;
int leitura = 0;
int leitura2 = 0;
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

void setup()
{
pinMode(pinobotao_h, INPUT);
pinMode(pinobotao_ah, INPUT);
myStepper.setSpeed(60);
}

void loop()
{
//Gira o motor no sentido horario
leitura = digitalRead(pinobotao_h);
if (leitura != 0)
{
myStepper.step(passos);
}

//Gira o motor no sentido anti-horario
leitura2 = digitalRead(pinobotao_ah);
if (leitura2 != 0)
{
myStepper.step(-passos);
}
}

o segundo controla-se o motor através do angulo:

 

#include <CustomStepper.h>

//Define os parametros iniciais de ligacao do motor de passo
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

void setup()
{
//Define a velocidade do motor
stepper.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
}

void loop()
{
if (stepper.isDone())
{
//Intervalo entre acionamentos
delay(2000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o angulo de rotacao
stepper.rotateDegrees(180);
}

stepper.run();
}

Este terceiro, temos o controle do motor através de um potenciômetro:

 

 

#include <Stepper.h>

const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
int stepCount = 0;

void setup() {

}

void loop() {
int sensorReading = analogRead(A0);
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
myStepper.step(stepsPerRevolution/100);
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço