Controlando um Motor de Passo com o Arduino
Um motor de passo é um dispositivo eletromecânico – com rotor e estator com bobinas montados em uma configuração específica – capaz de converter a energia elétrica, fornecida na forma de um trem de pulsos, em energia mecânica na forma de movimento rotacional discreto (passos). Cada passo é apenas uma parte da rotação completa do motor. Sendo assim, a precisão do motor de passo é determinada, principalmente, pelo número de passos por rotação. Quanto maior é a quantidade de passos, maior será a precisão.
Para operar os motores de passo necessitam de um dispositivo eletrônico de controle, geralmente formado por um microcontrolador (Arduino ou outro) e um circuito chamado “driver”, que alimenta o motor e supre suas necessidades de corrente elétrica.
Figura 1: Motor de Passo, Driver e Microcontrolador
Para melhorar a precisão, alguns controladores de motor de passo dividem o passo do mesmo, podendo trabalhar com passo completo (full-step) ou com meio passo (half-step).
Quanto a forma de operação os motores de passo podem ser unipolares ou bipolares. Os motores de passo unipolares têm dois enrolamentos (ou bobinas) por fase, sendo que cada par de enrolamentos possui um fio em cada extremidade e um fio central. Geralmente, os fios que conectam a parte central de cada par de enrolamentos são ligados a um ponto comum e isso faz com que o motor de passo unipolar tenha 5 fios de ligação. Por sua vez, os motores de passo bipolares têm um único enrolamento (bobina) por fase, resultando em 4 fios de ligação.
Figura 2: Motores de Passo Unipolar e Bipolar
O movimento que um motor de passo produz é resultado das ativações em sequência de suas bobinas. A resposta para tais solicitações de aceleração e desaceleração é rápida, pois o rotor se alinha rapidamente com as bobinas que se encontram energizadas.
O posicionamento do motor de passo é preciso uma vez que o rotor sempre se movimentará em passos bem definidos cujo erro de posicionamento é pequeno e não-cumulativo (tipicamente 5%). Além disso, as variações no torque aplicado são pequenas, tendo em vista seu funcionamento. Por outro lado, os motores de passo têm desempenho inferior em altas velocidades quando comparados com os motores de corrente contínua e os servomotores.
Tabela 1: Comparação entre Motor de Passo, Motor CC e Servomotor
Para trabalhar com motores de passo é necessário conhecer características como a tensão de alimentação, o torque, a corrente máxima suportada pelas bobinas e o grau de precisão.
Controlando um Motor de Passo Unipolar
Nesse projeto vamos trabalhar com um motor de passo unipolar modelo 28BYJ-48-5V, com as seguintes características principais:
Tensão de alimentação: 5 Volts
Número de fases: 4
Redução 1/64
Ângulo de passo: 5,625 graus/64
Frequência: 100 Hz
Resistência DC: 50 Ohm ± 7% (25 °C)
Torque em tração: >34,3 mN.m
Figura 3: Motor de Passo 28BYJ-48-5V
A sequência de ativação do motor de passo 28BYJ-48-5V, operando full-step (4 passos) é apresentada na tabela 2.
Tabela 2: Sequência de ativação do motor de passo 28BYJ-48-5V em modo full-step
A sequência de ativação do motor de passo 28BYJ-48-5V, operando half-step (8 passos) é apresentada na tabela 3.
Tabela 3: Sequência de ativação do motor de passo 28BYJ-48-5V em modo half-step
Em nosso projeto, o motor de passo 28BYJ-48-5V será controlado usando o driver ULN2003A ligado a um microcontrolador Arduino, cujo sketch usará a biblioteca <Stepper.h>. Essa biblioteca será responsável por gerar a sequência de pulsos para o motor de passo.
A especificação do motor de passo 28BYJ-48-5V informa que há uma redução de 1/64 e que o ângulo de passo é 5,625 graus/64. Segundo esta especificação, o ângulo de passo indica que o motor – sem redução – dá 64 passos para girar uma volta completa (360 graus). Se dividirmos 360 graus por 64 passos resulta em um ângulo de passo de 5,625 graus.
Adicionalmente, a especificação da redução de 1/64 indica que o ângulo de passo será 64 vezes menor, ou 5,625 divididos por 64, que é igual a 0,0878906 graus. Isso é válido considerando o modo de operação half-step. Para o modo de operação full-step, usada pela biblioteca <Stepper.h> o ângulo de passo será o dobro desse valor ou 0,0878906 vezes 2 que é igual a 0,175781 graus.
Tabela 4: Graus x Passos do Motor de Passo 28BYJ-48-5V
Para calcular o número de passos correspondente a um ângulo, basta dividir esse ângulo por 0,175781.
O projeto considera um módulo ULN2003A na função de driver do motor de passo 28BYJ-48-5V. Esse módulo possui uma matriz Darlington com sete canais, suportando até 500 mA por canal. Cada canal da matriz Darlington contém um arranjo de transistores que possibilita um maior ganho de corrente elétrica.
Figura 4: Módulo Driver ULN2003A
As conexões do Arduino, driver ULN2003A e do motor de passo 28-BYJ-48-5V são ilustradas na figura 5.
Figura 5: Arduino, driver ULN2003A e do motor de passo 28-BYJ-48-5V
Montagem do Projeto no Protoboard
Os cinco fios do motor de passo 28BYJ-48-5V devem ser ligados ao módulo driver ULN2003A obedecendo o seguinte:
- Fio vermelho no comum, que é ligado a fonte de + 5 Volts
- Fio laranja no B1
- Fio amarelo no B2
- Fio rosa no B3
- Fio azul no B4
Figura 6: Visualização das ligações do Motor de Passo 28BYJ-48-5V, módulo driver ULN2003A e o microcontrolador Arduino
No módulo driver ULN2003A usado nesse projeto os pinos + 5 V e COM estão interligados. Como o motor de passo foi testado sem carga, a alimentação elétrica de + 5 Volts foi a do próprio Arduino. Se, por outro lado, o motor de passo estiver operando com carga, numa condição em que o eixo do motor de passo trabalhe com esforço, recomenda-se que a alimentação elétrica de + 5 Volts seja fornecida através de uma fonte externa que atenda às necessidades da corrente elétrica demandada.
Figura 7: Diagrama esquemático das ligações do Motor de Passo 28BYJ-48-5V, módulo driver ULN2003A e o microcontrolador Arduino
O Arduino deve ser ligado ao módulo driver ULN2003A obedecendo ao seguinte:
- Pino digital 8 no INT1
- Pino digital 9 no INT2
- Pino digital 10 no INT3
- Pino digital 11 no INT4
Sketch do Projeto
// Gira 90 graus nos 2 sentidos #include <Stepper.h> // inclue a biblioteca Stepper.h const int PassoPorVolta = 500; // Passo por Volta do Motor de Passo // Inicializa a biblioteca Stepper.h // O motor de passo => MotorP Stepper MotorP(PassoPorVolta, 8, 10, 9, 11); void setup() { // Ajusta velocidade para 60 RPM MotorP.setSpeed(60); } void loop() { // Gira 360 graus no sentido horario // Em 3 degraus de 120 graus for (int i=0; i<3; i++) { MotorP.step(682); delay(1000); } // Gira 360 graus no sentido anti-horario // Em 3 degraus de 120 graus for (int i=0; i<3; i++) { MotorP.step(-682); delay(1000); } }
Observações sobre o Código
O sketch desse projeto tem por objetivo fazer o motor girar 120 graus em ambos os sentidos. Para tanto é utilizada a biblioteca <Stepper.h>, capaz de controlar motores de passo unipolares e bipolares, que é inclusa nas linhas iniciais do código. Será necessário definir um nome para o motor de passo a ser controlado pela biblioteca <Stepper.h>. No nosso exemplo, o motor de passo foi chamado de motorP, trabalhando com 500 passos por volta (definido na variável inteira PassoPorVolta).
Então, temos a instrução, …
Stepper MotorP(PassoPorVolta, 8, 10, 9, 11);
… da biblioteca <Stepper.h>, estabelecendo que o motor de passo MotorP, de 500 passos por volta, está ligado a um driver através dos pinos 8, 10, 9 e 11 do Arduino. Veja na figura 7 a correspondência dessa instrução com as ligações do Arduino ao módulo driver ULN2003A, e deste ao motor de passo 28-BYJ-48-5V.
Na função void setup() é ajustada a velocidade do motor de passo para 60 RPM, com a instrução …
MotorP.setSpeed(60);
… que também é uma das funções da biblioteca <Stepper.h>.
A função void loop() usa a instrução MotorP.step(x) da biblioteca <Stepper.h>, onde x é a quantidade de passos que o motor deve girar, sendo dividida em duas partes, sendo a primeira responsável por fazer o motor girar 120 graus no sentido horário (equivalente a 683 passos) por 4 vezes (for (int i=0; i<3; i++)) e esperar 1 segundo (delay(1000)). A parte seguinte do sketch é responsável por fazer o motor girar 120 graus no sentido anti-horário (equivalente a -683 passos) por 4 vezes (for (int i=0; i<3; i++)) e esperar 1 segundo (delay(1000)).
Encontre a linha completa de componentes, módulos, shields e placas para Arduino na loja da Módulo Eletrônica. Envie seus comentários e sugestões. É isso aí, até a próxima.
Haroldo Mamede Coutinho Simões
Engenheiro de telecomunicações e pós-graduado em gerenciamento de negócios, tendo trabalhado em empresas de médio e grande porte por mais de 30 anos, atuando em diferentes projetos e departamentos. É instrutor de treinamento, tendo ministrado workshops em várias empresas, professor universitário em cursos MBA presenciais e tutor de cursos à distância. É apaixonado por tecnologia, especialmente pela plataforma Arduino e tudo de positivo que ela pode fazer pelas pessoas quando dela se aproximam.
VEJA TAMBÉM
Regador automático de plantas com Arduino
Aprenda neste artigo, como automatizar a rega de suas plantas, utilizando o Arduino NANO. Este projeto, além do baixo custo, pode ser montado em menos de uma hora e irá garantir que as suas plantas sempre tenham água disponível, garantido um crescimento adequado e...
Datalogger com cartão SD. Registre: temperatura, umidade, luminosidade e tensão)
Neste post, vamos aprender a como montar datalogger, para registrar em um cartão SD, temperatura, umidade relativa, tensão e nível de luminosidade. Esse tipo de dispositivo é extremamente útil para fazer análises de fenômenos que dependem do tempo. Por exemplo,...
Fita de LEDs RGB endereçáveis WS2812B e a biblioteca fastLED
No post de hoje, vamos conhecer a fita de LEDs WS2812B endereçáveis e como utilizá-la com o Arduino UNO. Essa fita de LEDs se destaca, em relação as outras do mercado, pelo fato de que seus LEDs podem ser controlados de maneira individual, permitindo que o...
NEWSLETTER
Assine nossa newsletter e receba as novidades.
0 comentários