ESP8266 - Motor de Passo

Este tutorial ensina você a usar o ESP8266 para controlar um Motor de Passo usando o Driver L298N. Em detalhes, vamos aprender:

O tutorial é aplicável a todos os tipos de motores de passo bipolares com quatro fios. Ele usará um motor de passo NEMA 17 como exemplo.

Motor de passo ESP8266 NodeMCU com driver L298N

Se você quer controlar outro tipo de motor de passo, confira este tutorial ESP8266 - Motor de Passo 28BYJ-48.

Sobre o Motor de Passo

Existem dois tipos comuns de motores de passo:

  • bipolar: este motor tem 4 fios
  • unipolar: este motor tem 5 ou 6 fios

Para um motor de passo unipolar de 6 fios, podemos usar quatro dos seus seis fios e controlá-lo como se fosse um motor de passo bipolar.

Para motores de passo unipolares de 5 fios, consulte ESP8266 - controlar o motor de passo 28BYJ-48 usando o driver ULN2003.

O foco deste tutorial é somente o motor de passo bipolar.

Pinagem do Motor de Passo Bipolar

A pinagem do motor de passo bipolar tem 4 pinos. Diferentes fabricantes usam vários nomes para os pinos do motor. A tabela a seguir mostra alguns dos nomes de pinos mais usados:

Nº DO PINO Nomenclatura 1 Nomenclatura 2 Nomenclatura 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Pinagem do motor de passo bipolar

A sequência dos pinos, a rotulagem dos fios e as cores dos fios podem variar entre fabricantes. É necessário ler o datasheet ou o manual para entender a correlação entre a cor do fio e o nome do pino. A imagem acima também mostra os detalhes de dois motores distintos, com rotulagem e coloração de fios diferentes.

Passos por Revolução

A especificação do motor indica o DEG_PER_STEP. Dependendo do tipo de controle, o STEP_PER_REVOLUTION pode ser determinado usando a tabela abaixo:

Método de controle Passos por Revolução Grau 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 informa que ele tem 1.8 grau/passo:

Método de controle Passos por Revolução Grau 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 ESP8266

O ESP8266 pode produzir sinais para operar o motor de passo. No entanto, os sinais do ESP8266 não têm a tensão e/ou a corrente necessárias para o motor de passo. Consequentemente, é preciso um driver de hardware entre o ESP8266 e o motor de passo. Este driver tem duas funções:

  • Aumentar os sinais de controle do ESP8266 (corrente e tensão)
  • Proteger o ESP8266 da alta corrente e tensão usadas para alimentar o motor de passo.

Existem vários tipos de drivers de hardware que podem ser usados para gerenciar motores de passo. Um dos drivers de hardware mais usados para controlar motores de passo é o Driver L298N.

Sobre o Driver L298N

Um Driver L298N pode ser usado para controlar dois motores DC ou um motor de passo. Este tutorial ensina você a usá-lo para controlar o motor de passo.

Pinagem do Driver L298N

Pinagem do driver L298N

O Driver L298N tem 11 pinos e três jumpers:

  • Pino VCC: Fornece energia para o motor e pode ficar entre 5 e 35V.
  • Pino GND: É um pino de terra comum e precisa ser conectado ao GND (0V).
  • Pino 5V: Fornece energia para o módulo L298N e pode ser alimentado com 5V do ESP8266.
  • Pinos IN1, IN2, IN3, IN4: São conectados aos pinos do ESP8266 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, e os dois jumpers ENA e ENB precisam ficar no lugar.
  • Jumper 5V-EN: Se ele ficar no lugar, a energia para o módulo L298N vem do VCC e nada precisa ser conectado ao pino 5V. Se ele for removido, é preciso fornecer energia ao módulo L298N por meio de um pino 5V.

O driver L298N tem duas alimentações de entrada:

  • Uma para o motor de passo (pinos VCC e GND): de 5 a 35 Volts.
  • Uma para a operação interna do módulo L298N (pinos 5V e GND): de 5 a 7 Volts. Se o jumper 5V-EN for deixado no lugar, essa alimentação não é necessária.

Diagrama de Ligação

Diagrama de ligação do motor de passo ESP8266 NodeMCU com driver L298N

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

※ Nota:

  • Deixe os três jumpers do módulo L298N no lugar se a fonte de alimentação do motor for de 12V ou menos.
  • A disposição dos pinos nos motores de passo pode variar entre fabricantes. Consulte a tabela abaixo para garantir a ligação correta.

Tabela de ligação entre o ESP8266 e o Driver L298N

Pinos do ESP8266 Pinos do L298N
7 IN1
6 IN2
5 IN3
4 IN4

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

Importante!: Não dê atenção à ordem dos fios do motor de passo na imagem do diagrama de ligação. Ela é apenas uma ilustração. A disposição dos pinos nos motores de passo pode variar dependendo do fabricante. 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, sugerimos que você revise o datasheet, a especificação ou o manual do motor de passo. Certifique-se de que ele inclui a correlação entre a cor e o nome do pino. Por exemplo, este motor de passo fornece o mapeamento como visto na imagem a seguir:

Mapeamento das cores das bobinas do motor de passo

Usando o mapeamento, a tabela de ligação é:

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:

Nas tabelas de ligação apresentadas acima, OUT1 e OUT2, assim como OUT3 e OUT4, podem ser trocados entre si. Isso aumenta o número de configurações de ligação possíveis. No entanto, isso também pode fazer o motor mudar o seu sentido de rotação (de horário para anti-horário, ou vice-versa).

Como controlar um Motor de Passo usando um driver L298N.

Controlar um motor de passo pode ser uma tarefa desafiadora, principalmente quando precisamos fazê-lo sem interrupção. Felizmente, a biblioteca AccelStepper torna isso muito fácil.

O Arduino IDE inclui uma biblioteca Stepper embutida. No entanto, não sugerimos usar essa biblioteca porque:

  • Ela contém uma função bloqueante, que impede o ESP8266 de executar outras tarefas enquanto controla o motor de passo.
  • Ela não tem recursos suficientes.

Em vez disso, sugerimos que você use a biblioteca AccelStepper. Esta biblioteca oferece:

  • Aceleração
  • Desaceleração
  • Acionamento em passo completo e meio passo
  • A capacidade de controlar vários motores de passo ao mesmo tempo, com cada motor podendo se mover de forma independente
  • Desvantagem: Não suporta acionamento em micropasso

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

Podemos alcançar a posição desejada do motor de passo através de: . 1. Definir a posição atual como o ponto de referência . 1. Estabelecer o ponto de referência como a posição atual

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

※ Nota:

A função stepper.moveTo() é não bloqueante, o que é uma grande vantagem da biblioteca. No entanto, ao usá-la, precisamos ter cuidado:

  • Garanta que 'stepper.run()' seja chamada o mais frequentemente possível, de preferência dentro da função void loop().
  • Evite usar a função delay() enquanto o motor está em movimento.
  • Não use as funções Serial.print() ou Serial.println() enquanto o motor está em funcionamento, pois isso vai deixar o seu movimento mais lento.

Como Controlar a Velocidade do Motor de Passo via Driver L298N

Podemos regular tanto a velocidade quanto a aceleração/desaceleração por meio de algumas funções simples.

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

Como Controlar o Sentido do Motor de Passo via Driver L298N

Se você ligar o motor como indicado, ele vai girar no:

  • Sentido horário: quando o motor é movido de uma posição mais baixa para uma mais alta (incremento de posição)
  • Sentido anti-horário: quando o motor é deslocado de uma posição mais alta para uma mais baixa (decremento de posição)
  • Se a posição atual é 100 e mandamos o motor para 200, ele vai girar no sentido horário.
  • Quando a posição atual é -200 e o motor recebe a instrução de ir para -100, ele vai girar no sentido horário.
  • Se a posição atual é 200 e o motor recebe o comando de ir para 100, ele vai girar no sentido anti-horário.
  • Se a posição atual é -100 e o motor recebe a instrução de ir para -200, ele vai girar no sentido anti-horário.

※ Nota:

Como observado anteriormente, se você trocar OUT1 com OUT2, ou OUT3 com OUT4, o aumento da posição pode ser anti-horário e a diminuição da posição pode ser horária.

Como Parar o Motor de Passo

  • O motor de passo vai parar quando chegar à posição desejada.
  • Se uma parada imediata for desejada, a função stepper.stop() pode ser usada.

Código ESP8266 - Código do Motor de Passo

O código abaixo:

  • Faz o motor girar uma revolução no sentido horário
  • Pausa o motor por 5 segundos
  • Faz o motor girar uma revolução no sentido anti-horário
  • Para o motor por 5 segundos
  • Repete este processo continuamente
/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); 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 ESP8266 no Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para o ESP8266 no Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (e.g. NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Clique no ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise “AccelStepper” e localize a biblioteca AccelStepper criada por Mike McCauley.
  • Clique no botão Install para instalar a biblioteca AccelStepper.
Biblioteca AccelStepper para ESP8266 NodeMCU

Copie o código e abra-o com o Arduino IDE.

Clique no botão Upload no Arduino IDE para carregar o código no ESP8266.

Você vai observar que o motor de passo gira uma revolução no sentido horário, pausa por 5 segundos, depois gira de volta uma revolução no sentido anti-horário e pausa novamente por 5 segundos. Este processo se repete continuamente.

Confira os resultados no Serial Monitor.

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Explicação do Código

Confira a explicação linha por linha contida nos comentários 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!