Interface 28BYJ-48 Stepper Motor com ESP32 usando MicroPython
Neste tutorial, aprenderemos sobre o motor de passo 28BYJ-48 e como fazer a interface dele com o ESP32 usando um driver UNL2003 e MicroPython. O motor de passo 28BYJ-48 é barato e um dos motores de passo mais usados no mercado. Ele vem com um driver de motor UL2003 anexado a ele que é responsável por acionar um motor de passo. A razão para usar um driver é que os pinos GPIO do ESP32 não podem fornecer corrente suficiente para um motor de passo 28BYJ-48. A segunda razão importante é que ele protege os pinos do ESP32 GPIO de serem danificados devido ao alto requisito de corrente de um motor de passo do que a corrente máxima que os pinos do ESP32 GPIO podem fornecer.
Conteudo
Pré-requisitos
Antes de começarmos esta lição, certifique-se de que você esteja familiarizado e tenha a versão mais recente do firmware MicroPython instalado em sua placa ESP32 e tenha um Ambiente de Desenvolvimento Integrado (IDE) em execução no qual faremos a programação, como uPyCraft IDE ou Thonny IDE.
Componentes necessários
- Placa de desenvolvimento ESP32
- Um motor de passo 28BYJ-48 com driver de motor ULN2003
- Fonte de alimentação externa de 5V
- Fios de conexão
Introdução aos motores de passo
Os motores de passo são motores síncronos e sem escovas CC. Eles giram em etapas discretas de valores predefinidos e são capazes de girar no sentido horário e anti-horário. Ao contrário de outros motores CC, eles fornecem um controle de posição preciso de acordo com o número de passos por revolução para o qual o motor foi projetado. Isso significa que uma revolução completa de um motor de passo é dividida em um número discreto de etapas. Eles são comumente usados em máquinas CNC, robótica, impressoras 2D e 3D.
Para este guia, usaremos um motor de passo 28BYJ-48 e o controlaremos através do driver de motor ULN2003.
Motor de passo 28BYJ-48
Este é o motor de passo mais comumente usado em indústrias de baixa potência e mais famoso em projetos amadores.
O 28BYJ-48 é um motor de passo unipolar de 5V que recebe sinais elétricos como entrada e gira convertendo esses sinais de entrada em rotação mecânica. Consiste em 4 bobinas estacionárias classificadas em +5V. Essas bobinas são conhecidas como estator e formam um anel ao redor do rotor. Devido à tensão de operação de 5 volts, podemos facilmente acionar este motor a partir de qualquer microcontrolador como ESP32, ESP8266, Arduino ou TM4C123 Tiva Launchpad, etc. Esses motores são silenciosos em comparação com outros motores CC e servomotores. Você pode obter controle posicional facilmente sem precisar de circuitos e componentes extras.
Ângulo da passada
Este motor de passo tem um ângulo de passo de 5,625 graus. Isso significa que 28BYJ-48 completará uma revolução em (360/5.625) 64 passos dando um passo de cada vez e em um passo ele cobre uma distância de 5,625 graus. No entanto, o motor de passo também pode ser usado no modo de passo completo. No modo de passo completo, o ângulo de cada passo é de 11,25 graus. Isso significa que o motor completa sua revolução em 32 etapas (360/11.25).
Portanto, para avançar ou retroceder um passo, as bobinas do motor são energizadas com uma determinada sequência.
Passos por Revolução e Ângulo do Passo
O eixo de saída deste motor de passo específico é acionado através de uma relação de transmissão de 64:1 que também é conhecida como relação de variação de velocidade. Isso sugere que depois que o motor interno girar 64 vezes, o eixo completará uma rotação.
Portanto podemos concluir que:
- Para completar uma rotação completa do eixo, serão necessários um total de 2048 etapas. Isso é conhecido como os passos por revolução calculados pela multiplicação de 32 e 64 (32 × 64 = 2048).
- Além disso, isso permitirá que o motor tenha um ângulo de passo de 360º/2048 passos = 0,18º/passo.
Especificações
- É uma bobina unipolar de 5 pinos com uma tensão DC nominal de 5V.
- Possui 4 fases com um ângulo de passada de 5.625°/64.
- A taxa de variação de velocidade é 1/64
- A frequência deste motor de passo é 100Hz e a potência isolada é 600VAC/1mA/1s.
- O método de meio passo é recomendado para acionar este motor de passo.
- O valor do torque de tração para um motor de passo é 300 gf-cm.
Pinagem
A figura a seguir mostra o diagrama de pinagem do motor de passo 28BYJ-48. É composto por 5 pinos. Destes 5 pinos, quatro pinos são usados para fornecer lógica de sequência às bobinas e um pino é um pino de alimentação de +5 volts.
Detalhes da configuração do pino
Número do Pino | Número da bobina | Cor |
1 | 4 | Azul |
2 | 2 | Rosa |
3 | 3 | Amarelo |
4 | 1 | Laranja |
5 | Vcc | Vermelho |
Bobina 1-Coil 4: São bobinas usadas para controlar a sequência de passos do motor de passo. Uma extremidade de cada bobina é conectada com +5V e a outra extremidade será conectada com a saída do driver ULN2003.
Vcc: Usado para aplicar alimentação de +5 volts ao motor de passo. Essa tensão aparece nas bobinas quando uma bobina específica é aterrada por meio de uma sequência de controle.
Módulo de driver de motor de passo ULN2003
Para usar um motor de passo 28BYJ-28 com placa ESP32, será necessário conectá-lo com o driver do motor ULN2003. Isso é necessário porque o consumo atual de 28BYJ-48 é em torno de 240mA. Isso significa que a corrente necessária para acionar as bobinas aplicando uma sequência de sinais de controle também é de quase 200mA. Os pinos GPIO das placas de desenvolvimento ESP não podem fornecer corrente dessa magnitude. Portanto, precisamos de um driver ULN2003 que traduza a saída de baixa corrente dos pinos ESP32 GPIO em corrente mais alta que atenda aos requisitos de sinais de controle de motor de passo.
A placa de fuga ULN2003 tem alta corrente e tensão do que um único transistor e, portanto, pode acionar um motor de passo facilmente, habilitando nossa placa ESP.
Pinagem do módulo do driver do motor de passo
O driver IC ULN2003 consiste em 7 saídas de transistor de pares Darlington. Cada saída pode conduzir carga de 500mA e 50V. A entrada para cada transistor de 7 pares Darlington será um sinal do nosso microcontrolador. Para acionar um motor de passo, esta placa de driver usa apenas quatro pinos de entrada (IN1, IN2, IN3 e IN4).
O diagrama a seguir mostra a placa de acionamento do motor ULN2003:
Motor Connector Header é usado para conectar o motor de passo. Ele fornece saída de quatro transistores de pares Darlington.
Pino | Descrição |
1N1 para IN4 | Estes são pinos de entrada usados para fornecer sinais de controle ao motor de passo, como sequências de controle. Vamos conectar esses pinos com os pinos GPIO do ESP32. |
Vcc e GND | Vcc é um pino de alimentação e é usado para fornecer energia de 5 volts ao motor de passo a partir de uma fonte de alimentação externa. |
O ESP32 não possui um sinal de 5 volts integrado. Portanto, precisaremos fornecer uma fonte de alimentação externa de 5V ao driver do motor para que ele funcione.
Além disso, o motor de passo 28BYJ-48 requer corrente de 240mA para operar e também consome energia em condição ociosa. Portanto, recomenda-se não alimentar o motor de passo 28BYJ-48 diretamente de qualquer microcontrolador, em vez disso, use uma fonte de alimentação externa de 5 volts.
Interface ESP32 com motor de passo 28BYJ-48 e driver de motor ULN2003
Para conectar a placa de desenvolvimento ESP32 com o motor de passo e driver, usaremos os pinos de entrada IN1-IN4, os pinos da fonte de alimentação e o conector de conexão do motor. O motor de passo 28BYJ-48 já vem acoplado com o driver do motor através do conector do motor. Agora vamos conectar quatro pinos GPIO da nossa placa ESP32 com os pinos de entrada (IN1-IN4) do driver. Usamos os seguintes pinos GPIO para conectar com cada pino de entrada.
ESP32 | Motor Driver |
---|---|
GPIO26 | IN1 |
GPIO25 | IN2 |
GPIO33 | IN3 |
GPIO32 | IN4 |
Você também pode usar qualquer pino GPIO ESP32 adequado.
Além disso, alimentaremos o driver do motor com uma fonte de alimentação externa de 5V. Ambos os aterramentos da fonte de alimentação e da placa ESP32 serão em comum.
O diagrama de conexão é mostrado na figura abaixo.
ESP32 MicroPython Sketch controlando motor de passo 28BYJ-48
Este código MicroPython nos ajudará a girar o motor de passo no sentido horário. Para isso, temos que fornecer uma sequência de valores (1 (estado alto), 0 (estado baixo)) para os pinos do motor de passo.
from machine import Pin from time import sleep IN1 = Pin(26,Pin.OUT) IN2 = Pin(25,Pin.OUT) IN3 = Pin(33,Pin.OUT) IN4 = Pin(32,Pin.OUT) pins = [IN1, IN2, IN3, IN4] sequence = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]] while True: for step in sequence: for i in range(len(pins)): pins[i].value(step[i]) sleep(0.001)
Como o Código Funciona?
Começaremos importando a classe Pin do módulo machine e a classe sleep do módulo time.
from machine import Pin from time import sleep
Configure os pinos GPIO conectados com os pinos IN1, IN2, IN3, IN4 como pinos de saída. Isso é feito usando o método Pin() e passando o número GPIO como o primeiro parâmetro e Pin.OUT como o segundo parâmetro.
Em seguida, crie uma matriz chamada ‘pins’ consistindo nos quatro pinos de saída IN1, IN2, IN3 e IN4.
IN1 = Pin(26,Pin.OUT) IN2 = Pin(25,Pin.OUT) IN3 = Pin(33,Pin.OUT) IN4 = Pin(32,Pin.OUT) pins = [IN1, IN2, IN3, IN4]
Em seguida, crie uma matriz 2d chamada ‘sequência’ para manter a sequência de valores que forneceremos aos pinos do motor de passo. Esses valores são 1 e 0, indicando um estado alto e um estado baixo.
Nota: A inversão desta sequência de números moverá o motor de passo no sentido anti-horário.
sequence = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
Dentro do loop infinito, percorreremos a sequência e definiremos em cada pino o valor da sequência em ordem. Isso será feito após um atraso de 0,001 segundo para garantir o movimento adequado do motor de passo.
while True: for step in sequence: for i in range(len(pins)): pins[i].value(step[i]) sleep(0.001)