Motor de passo 28BYJ-48 com Raspberry Pi Pico usando MicroPython

Tempo de leitura: 7 minutes

Neste tutorial, aprenderemos sobre o motor de passo 28BYJ-48 e como fazer a interface com o Raspberry Pi Pico usando um driver UNL2003. 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 Raspberry Pi Pico GPIO não podem fornecer corrente suficiente para um motor de passo 28BYJ-48. A segunda razão importante é que ele protege os pinos da placa de serem danificados devido ao alto requisito de corrente de um motor de passo do que a corrente máxima que os pinos Raspberry Pi Pico podem fornecer.

Pré-requisitos

Antes de começarmos esta lição, certifique-se de estar familiarizado e ter a versão mais recente do Python3 instalada em seu sistema e configurar o MicroPython em seu Raspberry Pi Pico. Além disso, você deve ter um ambiente de desenvolvimento integrado (IDE) em execução para fazer a programação.

Componentes necessários

  • Placa Raspberry Pi Pico
  • 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 Raspberry Pi Pico, ESP32, ESP8266, Arduino ou TM4C123 Tiva Launchpad, etc. por revolução. 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 PinoNúmero da bobinaCor
14Azul
22Rosa
33Amarelo
41Laranja
5VccVermelho

 

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.

PinoDescrição
1N1 para IN4Estes 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 GNDVcc é 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 Raspberry Pi Pico com motor de passo 28BYJ-48 e driver de motor ULN2003

Para conectar o Raspberry Pi Pico 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 Raspberry Pi Pico com os pinos de entrada (IN1-IN4) do driver. Usamos os seguintes pinos GPIO para conectar com cada pino de entrada.

Raspberry Pi PicoMotor Driver
GP2IN1
GP3IN2
GP4IN3
GP5IN4

Você também pode usar qualquer outro pino Pi Pico GPIO 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 do microcontrolador serão comuns.

 

O diagrama de conexão é mostrado na figura abaixo.

 

Script MicroPython: Motor de passo 28BYJ-48 com Raspberry Pi Pico

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(2,Pin.OUT)
IN2 = Pin(3,Pin.OUT)
IN3 = Pin(4,Pin.OUT)
IN4 = Pin(5,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(2,Pin.OUT)
IN2 = Pin(3,Pin.OUT)
IN3 = Pin(4,Pin.OUT)
IN4 = Pin(5,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)