Interface 28BYJ-48 Stepper Motor com ESP32 usando MicroPython

Tempo de leitura: 7 minutes

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.

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)

 

Visits: 12 Visits: 1126542