Arduino Nano ESP32 - Motor de Passo

Neste tutorial, vamos aprender como usar o Arduino Nano ESP32 para controlar o motor de passo:

O tutorial pode ser aplicado a qualquer tipo de motor de passo bipolar (4 fios). O tutorial vai usar o motor de passo NEMA 17 como exemplo.

Arduino Nano ESP32 Stepper motor

Hardware Necessário

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Stepper Motor Nema 17
1×L298N Motor Driver Module
1×Fonte de Alimentação 12V
1×Conector de Alimentação DC
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Motor de Passo

Existem dois tipos comuns de motores de passo:

  • Bipolar: Esses motores vêm com 4 fios.
  • Unipolar: Os motores unipolares podem ter 5 ou 6 fios. No caso de um motor de passo unipolar de 6 fios, você pode usar com eficiência quatro dos seis fios para controlá-lo como se fosse um motor de passo bipolar.

Se você está especificamente interessado em um motor de passo unipolar de 5 fios, pode consultar o tutorial intitulado Arduino Nano ESP32 - Controle o Motor de Passo 28BYJ-48 Usando o Driver ULN2003.

No entanto, este tutorial é dedicado exclusivamente aos motores de passo bipolares.

Pinagem do Motor de Passo Bipolar

Um motor de passo bipolar tem quatro pinos, e esses pinos podem ter nomes diferentes dependendo do fabricante. Abaixo, você encontra uma tabela com alguns nomes de pino comuns:

Nº DO PINO Nome 1 Nome 2 Nome 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Bipolar Stepper Motor pinout

A disposição dos pinos, os nomes dos fios e as cores dos fios podem variar de um fabricante para outro. Para entender como as cores dos fios correspondem aos nomes dos pinos, é essencial consultar o datasheet ou o manual do usuário fornecido pelo fabricante. A imagem acima ilustra as especificações de dois motores distintos, cada um com suas próprias convenções de nomes e de cores dos fios.

Passos por Revolução

A especificação do motor informa o ângulo por passo (vamos chamar de DEG_PER_STEP). Dependendo do método de controle, os passos por revolução (vamos chamar de STEP_PER_REVOLUTION) são calculados como na tabela a seguir:

Método de controle Passos por Revolução Ângulo real por passo
Passo completo STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Meio passo STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micropasso (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

Por exemplo, se o datasheet do motor especifica 1.8 graus/passo:

Método de controle Passos por Revolução Ângulo real por passo
Passo completo 200 passos/revolução 1.8°
Meio passo 400 passos/revolução 0.9°
Micropasso (1/n) (200 * n) passos/revolução (1.8 / n)°

Como controlar um motor de passo usando o Arduino Nano ESP32

O Arduino Nano ESP32 pode produzir sinais para comandar o motor de passo, mas esses sinais podem não ter os níveis de tensão e de corrente que o motor de passo exige. Por isso, é necessário um driver de hardware intermediário para fazer a ponte entre o Arduino Nano ESP32 e o motor de passo. Esse driver tem duas funções principais:

  • Amplificar os sinais de controle: Ele aumenta a corrente e a tensão dos sinais de controle que vêm do ESP32, garantindo que atendam aos requisitos do motor de passo.
  • Proteger o ESP32: Ao mesmo tempo, ele protege o Arduino Nano ESP32 dos níveis mais altos de corrente e de tensão usados para alimentar o motor de passo, evitando qualquer possível dano.

Existem vários drivers de hardware disponíveis para controlar motores de passo, e uma opção muito usada é o driver L298N.

Sobre o Driver L298N

Um único driver L298N pode ser usado para controlar dois motores DC ou um motor de passo. Neste tutorial, aprendemos como usá-lo para controlar o motor de passo.

Pinagem do Driver L298N

L298N Driver Pinout

O driver L298N possui 11 pinos e três jumpers:

  • Pino VCC: fornece alimentação para o motor. Pode ser qualquer valor entre 5 e 35V.
  • Pino GND: é um pino de terra comum, precisa ser conectado ao GND (0V).
  • Pino 5V: fornece alimentação para o módulo L298N. Pode ser alimentado pelo 5V do Arduino Nano ESP32.
  • Pinos IN1, IN2, IN3, IN4: são conectados aos pinos do ESP32 para receber o sinal de controle do motor de passo.
  • Pinos OUT1, OUT2, OUT3, OUT4: são conectados ao motor de passo.
  • Jumpers ENA, ENB: são usados para habilitar o motor de passo. Você precisa manter os dois jumpers ENA e ENB no lugar.
  • Jumper 5V-EN: se mantivermos o jumper 5V-EN no lugar, a alimentação do módulo L298N vem do VCC, e não precisamos conectar nada ao pino 5V. Se removermos o jumper 5V-EN, precisamos alimentar o módulo L298N por meio do pino 5V

Como descrito acima, o driver L298N tem duas alimentações de entrada:

  • Uma para o motor de passo (pinos VCC e GND): de 5 a 35V.
  • Uma para o funcionamento interno do módulo L298N (pinos 5V e GND): de 5 a 7V. Se o jumper 5V-EN for mantido no lugar, não precisamos conectar este pino a nada.

Diagrama de Ligação

The wiring diagram between Arduino Nano ESP32 and Stepper Motor L298N Driver

This image is created using Fritzing. Click to enlarge image

※ Nota:

  • Mantenha os três jumpers do módulo L298N no lugar (caso a alimentação do motor seja ≤ 12V)
  • A ordem dos pinos nos motores de passo pode variar entre os fabricantes. Confira a tabela abaixo para fazer a ligação correta.

Tabela de ligação entre o Arduino Nano ESP32 e o Driver L298N

Pinos do Arduino Nano ESP32 Pinos do L298N
D5 IN1
D4 IN2
D3 IN3
D2 IN4

Tabela de ligação entre o Driver L298N e o Motor de Passo

Importante!: Não se preocupe com a ordem dos fios do motor de passo na imagem do diagrama de ligação acima. Ela é apenas um exemplo. A ordem dos pinos nos motores de passo pode variar entre os fabricantes. Certifique-se de que a sua ligação siga a tabela abaixo.

Pinos do L298N Pinos do motor de passo Ou Ou
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Antes de comprar um motor de passo, recomendamos que você verifique o datasheet, a especificação ou o manual do motor de passo. Certifique-se de que eles informem o mapeamento entre a cor e o nome do pino. Por exemplo, este motor de passo fornece o mapeamento como na imagem abaixo:

Stepper Motor coil color mapping

Com base nesse mapeamento, a tabela de ligação fica assim:

Pinos do L298N pinos do motor de passo cor do fio
OUT1 A fio preto
OUT2 C fio verde
OUT3 B fio vermelho
OUT4 D fio azul

※ Nota:

Em todas as tabelas de ligação acima entre o motor de passo e o Driver L298N, podemos trocar OUT1 com OUT2 e OUT3 com OUT4. Portanto, há mais formas de fazer a ligação. No entanto, se os trocarmos, o sentido de rotação do motor pode mudar (de horário para anti-horário, e vice-versa).

Como controlar um Motor de Passo usando um driver L298N.

Controlar um motor de passo não é uma tarefa simples, especialmente quando queremos controlá-lo de forma não bloqueante. Felizmente, graças à biblioteca AccelStepper, controlar o motor de passo se torna muito fácil.

O Arduino IDE também tem uma biblioteca Stepper embutida. No entanto, não recomendamos que você use essa biblioteca porque:

  • A biblioteca fornece funções bloqueantes. Isso significa que ela impede o Arduino Nano ESP32 de fazer outras tarefas enquanto controla o motor de passo.
  • Ela não tem funções suficientes.

Em vez disso, recomendamos que você use a biblioteca AccelStepper. Essa biblioteca oferece suporte a:

  • Aceleração
  • Desaceleração.
  • Acionamento em passo completo e em meio passo.
  • Vários motores de passo simultâneos, com passos independentes e simultâneos em cada motor de passo.
  • Desvantagem: NÃO oferece suporte ao acionamento em micropasso

Como Controlar a Posição do Motor de Passo via Driver L298N

Podemos mover o motor de passo para a posição desejada usando:

stepper.moveTo(desiredPosition); // move motor one revolution

※ Nota:

A função stepper.moveTo() é não bloqueante. Esse é um ótimo ponto da biblioteca. No entanto, precisamos ter atenção ao usar essa função:

  • Chame 'stepper.run()' o mais frequentemente possível. Ela deve ser chamada na função void loop().
  • NÃO use a função delay() enquanto o motor estiver se movendo.
  • NÃO é recomendado usar as funções Serial.print() e Serial.println() enquanto o motor estiver se movendo. Essas funções fazem o motor de passo se mover mais devagar.

Como Controlar a Velocidade do Motor de Passo via Driver L298N

Podemos controlar não só a velocidade, mas também a aceleração e a desaceleração, usando algumas funções simples.

stepper.setAcceleration(50.0); // set acceleration/deceleration stepper.setSpeed(200); // set desired speed

Como Controlar a Direção do Motor de Passo via Driver L298N

Se você fizer a ligação como acima, o motor vai girar no:

  • Sentido horário: se controlarmos o motor de uma posição para uma posição maior (incremento de posição)
  • Sentido anti-horário: se controlarmos o motor de uma posição para uma posição menor (decremento de posição)

Por exemplo:

  • Se a posição atual é 100 e controlamos o motor para 200, o motor gira no sentido horário
  • Se a posição atual é -200 e controlamos o motor para -100, o motor gira no sentido horário
  • Se a posição atual é 200 e controlamos o motor para 100, o motor gira no sentido anti-horário
  • Se a posição atual é -100 e controlamos o motor para -200, o motor gira no sentido anti-horário

※ Nota:

Como mencionado antes, se você trocar OUT1 com OUT2, ou OUT3 com OUT4, o incremento da posição pode ser anti-horário e o decremento da posição pode ser horário.

Como Parar o Motor de Passo

  • O motor de passo vai parar automaticamente após atingir a posição desejada.
  • O motor de passo pode ser forçado a parar imediatamente a qualquer momento usando a função stepper.stop().

Código Arduino Nano ESP32 - Código do Motor de Passo

O código abaixo faz o seguinte:

  • Gira o motor uma revolução no sentido horário
  • Para o motor por 5 segundos
  • Gira o motor de volta uma revolução no sentido anti-horário
  • Para o motor por 5 segundos
  • Esse processo é repetido continuamente
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(AccelStepper::FULL4WIRE, D5, D3, D4, D2); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

Passos Rápidos

Para começar com o Arduino Nano ESP32, siga estes passos:

  • Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente para o Arduino Nano ESP32 no Arduino IDE.
  • Ligue os componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
  • Abra o Gerenciador de Bibliotecas clicando no ícone Library Manager na barra de navegação à esquerda do Arduino IDE
  • Pesquise por “AccelStepper” e encontre a biblioteca AccelStepper de Mike McCauley
  • Clique no botão Install para instalar a biblioteca AccelStepper.
Arduino Nano ESP32 AccelStepper library
  • Copie o código acima e abra com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para fazer upload do código para o Arduino Nano ESP32
  • Você vai ver:
    • O motor de passo gira uma revolução no sentido horário
    • O motor de passo para por 5 segundos
    • O motor de passo gira de volta uma revolução no sentido anti-horário
    • O motor de passo para por 5 segundos
    • O processo acima é executado repetidamente.
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Explicação do Código

Leia a explicação linha por linha nas linhas de comentário do código-fonte!

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!