Código de Pesquisa

Como Controlar a Velocidade de um Motor DC com um Módulo ESP32 e L298N

Como Controlar a Velocidade de um Motor DC com um Módulo ESP32 e L298N

Controlar motores DC pode ser uma tarefa simples com os componentes e o entendimento certos. Neste tutorial, vamos explorar como controlar dois motores DC usando o microcontrolador ESP32 e o módulo driver de motor L298N. Ao final deste guia, você será capaz de ajustar a velocidade e a direção dos seus motores com base em sinais PWM do ESP32, permitindo aplicações versáteis em robótica e automação.

ESP32_L298N_DC_principal

O vídeo que acompanha este tutorial fornece uma demonstração visual de todo o processo, incluindo a fiação e a programação (no vídeo em :00).

Hardware Explicado

Módulo Controlador de Motor L298N
Módulo Controlador de Motor L298N

Para alcançar o controle do motor, usaremos o ESP32 e o módulo driver de motor L298N. O ESP32 é um microcontrolador poderoso com capacidades de Wi-Fi e Bluetooth, tornando-o ideal para projetos de IoT. O L298N é um driver de motor em ponte H que nos permite controlar a direção e a velocidade dos motores usando sinais PWM. O módulo L298N possui dois circuitos em ponte H, o que significa que podemos controlar dois motores de forma independente. Cada ponte H permite o controle da direção do motor (horário ou anti-horário) e da velocidade variando o sinal PWM. Conectando os pinos de habilitação e entrada do L298N ao ESP32, podemos manipular os motores de forma eficaz.

Detalhes da Ficha Técnica

Fabricante STMicroelectronics
Número da peça L298N
Tensão de Lógica/IO 5 V
Tensão de alimentação 5-46 V (VS)
Corrente de saída (por canal) 2 A max/canal (máx. abs.)
Corrente de pico (por canal) 2,5 A
Orientação sobre a frequência de PWM 1 kHz - 15 kHz
Limiares de lógica de entrada 2,5 V (alto), 1,5 V (baixo)
Queda de tensão / RDS(on)/ saturação 1,8 V a 2 A
Limites térmicos 150 °C
Pacote Multiwatt de 15 pinos
Notas / variantes Driver de motor com ponte H dupla

  • Certifique-se de que a classificação de tensão do motor corresponda à tensão de alimentação do L298N.
  • Use dissipadores de calor adequados para operação contínua em altas correntes.
  • Conecte os componentes de terra para evitar referências flutuantes.
  • Use uma frequência PWM adequada para a aplicação (1-15 kHz).
  • Tenha cuidado com as classificações de corrente máxima para prevenir o superaquecimento.
  • Teste a direção do motor antes de finalizar a fiação para evitar danos.
  • Considere capacitores de desacoplamento na fonte de alimentação para estabilidade.

Instruções de fiação

ESP32_L298N_wiring

Para conectar o L298N ao ESP32, comece ligando os dois motores DC aos terminais de saída do L298N. Conecte o Motor 1 aos terminais etiquetados comoOUT1eOUT2, e Motor 2 paraOUT3eOUT4. A polaridade dos motores não importa, pois o L298N cuidará da direção. Em seguida, conecte sua fonte de alimentação externa aoVMSeGNDterminais no L298N. Certifique-se de que a voltagem é apropriada para seus motores, tipicamente entre 5V e 46V. O5Vo terminal no L298N pode ser usado para alimentar o ESP32, se necessário, mas certifique-se de que os requisitos de corrente sejam atendidos. Para os pinos de controle, conecteENApara GPIO 19,IN1para GPIO 18, eIN2para o GPIO 5 para o Motor 1. Para o Motor 2, conecteIN3para GPIO 17,IN4para GPIO 16, eENBpara o GPIO 4. Finalmente, conecte os aterramentos do ESP32 e do L298N juntos para garantir uma referência comum.

Exemplos de Código e Passo a Passo

Os seguintes trechos de código ilustram como controlar os motores usando a biblioteca L298N projetada para o ESP32. A biblioteca simplifica o processo de envio de comandos para os motores. Primeiro, a biblioteca necessária é incluída e os parâmetros do motor são definidos:


#include 
#define ENA 19
#define IN1 18
#define IN2 5
#define IN3 17
#define IN4 16
#define ENB 4
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB);

Neste trecho, definimos os pinos de controle para ambos os motores. A instância da bibliotecaroboté criado, que será usado para controlar os motores durante todo o programa. Em seguida, configuramos a comunicação serial e inicializamos a instância do robô nasetup()função:


void setup() {
  Serial.begin(115200);
  robot.begin();
}

Isso inicializa a comunicação serial para depuração e prepara a biblioteca de controle do motor para operação. Por fim, a lógica de controle principal é colocada noloop()função, onde podemos girar os motores e ajustar sua velocidade:


void loop() {
  robot.rotate(motor1, 80, CW); // run motor1 at 80% speed in CW direction
  delay(3000); // wait for 3 seconds
  robot.brake(1); // brake motor1
  delay(2000); // wait for 2 seconds
}

Este trecho demonstra como girar o Motor 1 a 80% da velocidade em uma direção horária por três segundos antes de frear. O código completo inclui lógica adicional para o Motor 2 e variação de velocidades, que pode ser vista no programa completo carregado abaixo do artigo.

Demonstração / O Que Esperar

Ao ser executados, os motores devem responder aos sinais PWM enviados do ESP32. Você verá o Motor 1 girando no sentido horário a 80% da velocidade, seguido por uma ação de frenagem. O programa também inclui lógica para gerenciar variações de velocidade de forma gradual, que pode ser testada observando a aceleração do motor de 0% a 100% (no vídeo às 05:00). Armadilhas comuns incluem não conectar os aterramentos adequadamente, o que pode levar a um comportamento errático, e exceder as classificações de corrente do L298N, causando superaquecimento. Certifique-se de monitorar o comportamento do motor e ajustar os parâmetros conforme necessário.

Marcação de Vídeo

  • 00:46 Introdução
  • 04:07 Ligando ESP32 com L298N
  • 06:10 Preparando o Arduino IDE para trabalhar com placas ESP32
  • 08:15 Código Arduino explicado
  • 15:00 Demonstração de controle de motor único
  • 16:00 Demonstração de controle de 2 motores DC
  • 17:00 Demonstração de Alimentação do ESP32 a partir do L298N e fonte de energia externa

Imagens

Módulo Controlador de Motor L298N
Módulo Controlador de Motor L298N
ESP32_L298N_DC_main
ESP32_L298N_DC_main
ESP32_L298N_wiring
ESP32_L298N_wiring
278-Library Example for L298N Module to control DC motors
Idioma: C++
/*
 * Library Example for L298N Module to control DC motors
 * 
 * This code is to control a single motor. For two motor control, please open L298N_DC_2_Motors.
 * This code is ready for ESP32.
 * Watch video instructions for this code:  https://youtu.be/2JTMqURJTwg
 * 
 * Written by Ahmad Shamshiri on December 24, 2019 
 * in Ajax, Ontario, Canada. www.robojax.com
 * 
 * 
  * 
 * Get this code and other Arduino codes from Robojax.com.

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <Robojax_L298N_DC_motor.h>
// motor 1 settings
#define CHA 0
#define ENA 19 // this pin must be PWM enabled pin if Arduino board is used
#define IN1 18
#define IN2 5

// motor 2 settings
#define IN3 17
#define IN4 16
#define ENB 4// this pin must be PWM enabled pin if Arduino board is used
#define CHB 1

const int CCW = 2; // do not change
const int CW  = 1; // do not change

#define motor1 1 // do not change
#define motor2 2 // do not change

// for single motor
//Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, true);	

// for two motors without debug information	// Watch video instruction for this line: https://youtu.be/2JTMqURJTwg
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA,  IN3, IN4, ENB, CHB);

// for two motors with debug information
//Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB, true);

void setup() {
  Serial.begin(115200);
  robot.begin();
  //L298N DC Motor by Robojax.com

}

void loop() {
  
 // robot.demo(1);
  robot.rotate(motor1, 80, CW);//run motor1 at 60% speed in CW direction
  robot.rotate(motor2, 70, CCW);//run motor1 at 60% speed in CW direction
  
  delay(3000);

  robot.brake(1);
  robot.brake(2);  
  delay(2000);


  robot.rotate(motor1, 100, CW);//run motor1 at 60% speed in CW direction
  delay(3000);
  
  robot.rotate(motor2, 100, CCW);//run motor1 at 60% speed in CW direction
  
  robot.brake(1);
  robot.brake(2);   
  delay(2000);  

  for(int i=0; i<=100; i++)
  {
    robot.rotate(motor1, i, CW);// turn motor1 with i% speed in CW direction (whatever is i) 
    delay(100);
  }
  delay(2000);
  
  robot.brake(1);
  delay(2000);  
  
  for(int i=0; i<=100; i++)
  {
    robot.rotate(motor2, i, CW);// turn motor1 with i% speed in CW direction (whatever is i) 
    delay(100);
  }
  delay(2000);
  
  robot.brake(2);
  delay(2000);    
  // Robojax L298N Library. Watch video instruction https://youtu.be/2JTMqURJTwg
}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Bibliotecas do Arduino (zip)

Arquivo Fritzing