Arduino Nano - Motor de Passo

Este tutorial ensina como usar o Arduino Nano para controlar um Motor de Passo usando o Driver L298N. Em detalhes, vamos aprender:

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

Arduino Nano Motor de Passo Driver L298N

Se você quiser controlar outro tipo de motor de passo, veja o tutorial Arduino Nano - Motor de Passo 28BYJ-48.

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
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

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: este motor tem 4 fios
  • unipolar: este motor tem 5 ou 6 fios.

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

Para um motor de passo unipolar de 5 fios, veja o tutorial Arduino Nano - controlar o motor de passo 28BYJ-48 usando o driver ULN2003 para mais informações.

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

Pinagem do Motor de Passo Bipolar

O Motor de Passo bipolar tem quatro pinos, e os nomes desses pinos variam conforme o fabricante. A tabela a seguir mostra alguns dos nomes mais usados:

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
Pinagem do Motor de Passo Bipolar

A disposição dos pinos, os rótulos dados aos fios e as cores dos fios podem ser diferentes entre os fabricantes. Você deve consultar o datasheet ou o manual para descobrir como a cor do fio corresponde ao nome do pino. A imagem acima também mostra as especificações de dois motores diferentes, com rótulos e cores de fios distintos.

Passos por Revolução

A especificação do motor indica o valor DEG_PER_STEP. Dependendo da técnica de controle, STEP_PER_REVOLUTION pode ser determinado pela tabela a seguir:

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 informar uma medida de 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 Arduino Nano

O Arduino Nano pode gerar sinais para controlar o motor de passo, mas esses sinais não têm a tensão e/ou a corrente suficientes que o motor de passo exige. Por isso, é necessário um driver de hardware entre o Arduino Nano e o motor de passo. Esse driver tem duas funções:

  • Amplificar os sinais de controle do Arduino Nano em corrente e tensão
  • Proteger o Arduino Nano contra a alta corrente e a alta 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 populares 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 como 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 Arduino Nano.
  • Pinos IN1, IN2, IN3, IN4: São conectados aos pinos do Arduino 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 estar no lugar.
  • Jumper 5V-EN: Se ele ficar no lugar, a energia do módulo L298N vem do VCC e nada precisa ser conectado ao pino 5V. Se ele for removido, a energia precisa ser fornecida ao módulo L298N por um pino 5V.

O driver L298N tem duas entradas de alimentação:

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

Diagrama de Ligação

Diagrama de ligação do Arduino Nano com Motor de Passo e Driver L298N

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Nano e outros componentes.

※ Nota:

  • Mantenha os três jumpers do módulo L298N nas posições atuais 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 os fabricantes. Consulte a tabela abaixo para a ligação correta.

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

Pinos do Arduino Nano 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 no diagrama acima. Ela é apenas uma ilustração. A disposição dos pinos nos motores de passo pode ser diferente 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, é recomendável revisar o datasheet, a especificação ou o manual do motor. Verifique se as informações trazem o mapeamento entre a cor e o nome do pino. Por exemplo, este motor de passo fornece o mapeamento mostrado 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:

Em todas as tabelas de ligação apresentadas acima entre o motor de passo e o Driver L298N, é possível trocar OUT1 com OUT2, e OUT3 com OUT4. Assim, existem mais formas de fazer a ligação. No entanto, se a troca for feita, o sentido de rotação dos motores 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 pode ser um desafio, principalmente quando precisamos fazer isso sem bloqueio. Felizmente, a biblioteca AccelStepper torna isso muito fácil.

O Arduino IDE contém uma biblioteca Stepper integrada. No entanto, não sugerimos que você use essa biblioteca pelos seguintes motivos:

  • A biblioteca oferece um recurso bloqueante. Isso significa que o Arduino Nano fica impedido de executar outras tarefas enquanto controla o motor de passo.
  • Ela não possui funções suficientes.

Em vez disso, sugerimos usar a biblioteca AccelStepper. Essa 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 passos simultâneos individuais para cada um
  • Desvantagem: NÃO oferece acionamento em micropasso.

Como Controlar a Posição do Motor de Passo pelo 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, o que é uma grande vantagem da biblioteca. No entanto, ao usar essa função, há alguns pontos aos quais você deve prestar atenção:

  • Chame 'stepper.run()' com a maior frequência possível, de preferência dentro da função void loop().
  • Evite usar a função delay() enquanto o motor estiver em movimento.
  • Não use as funções Serial.print() e Serial.println() enquanto o motor estiver funcionando, pois elas deixam o motor de passo mais lento.

Como Controlar a Velocidade do Motor de Passo pelo Driver L298N

Podemos regular não só a velocidade, mas também a aceleração e a desaceleração, usando algumas funções básicas.

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

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

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

  • Sentido horário: ao controlar o motor de uma posição menor para uma maior (aumento da posição)
  • Sentido anti-horário: ao controlar o motor de uma posição maior para uma menor (diminuição da posição)

Por exemplo:

  • Quando a posição atual é 100 e o motor é direcionado para 200, ele gira no sentido horário
  • Se a posição atual é -200 e o motor é controlado para -100, ele gira no sentido horário
  • Se a posição atual é 200 e o motor é regulado para 100, ele gira no sentido anti-horário
  • Se a posição atual é -100 e o motor é conduzido para -200, ele gira no sentido anti-horário

※ Nota:

Como dito antes, 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.
  • Também é possível fazê-lo parar imediatamente usando a função stepper.stop().

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

O código a seguir:

  • 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 o processo indefinidamente
/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); 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

  • Clique no ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise “AccelStepper” e localize a biblioteca AccelStepper criada por Mike McCauley.
  • Pressione o botão Install para concluir a instalação da biblioteca AccelStepper.
Biblioteca AccelStepper do Arduino Nano
  • Copie o código e abra no Arduino IDE.
  • Clique no botão Upload para fazer upload do código para o Arduino Nano.
  • O motor de passo vai girar uma revolução no sentido horário, pausar por 5 segundos, girar de volta uma revolução no sentido anti-horário, pausar por 5 segundos e repetir esse processo.
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' 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 on COM15
2

Explicação do Código

Veja 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!