Ponte H L298N: Módulo de Controle de Motores DC

Ponte H L298N é um módulo baseado no circuito tipo ponte H e é utilizado para controle de motores DC. Possui dois canais, permite controlar velocidade e sentido de rotação de até dois motores ao mesmo tempo.
Esse módulo é muito empregado na robótica, possui um circuito básico para o uso do CI L298N e tem dimensões pequenas que facilita a acomodação do módulo no robô ou em outros projetos de sua utilização.

Pinagem Ponte H L298N

Ponte H L298N

Output A – conexão do Motor 1
Output B – conexão do Motor 2
5v – A placa possui um regulador de tensão 5v integrado, e este regulador pode ser acionado pelo jumper “5v enable” caso a alimentação da placa seja de 7V – 35V
Input – quatro entradas de controle In1, In2, In3 e In4

    • In 1 – PWM para a velocidade do motor 1
    • In 2 – Sinal digital para sentido de rotação do motor 1 (nível 0 > horário e nível 1 anti-horário)
    • In 3 – PWM para a velocidade do motor 2.
    • In 4 – Sinal digital para sentido de rotação do motor 2 (nível 0 > horário e nível 1 anti-horário)

Especificações

    • Chip Driver: Chip dupla ponte H L298N
    • Tensão de alimentação: +5 V ~ +35 V
    • Pico de corrente de Saída: 2A por porta (Motor)
    • Tensão dos terminais de controle: 4.5~5.5 V
    • Corrente dos terminais de controle: 0~36mA
    • Tensão por nível lógico: Nível alto 4.5~5.5V e 0V para nível baixo
    • Potência máxima: 20W
    • Temperatura de trabalho: -25ºC ~ +130ºC
    • Outras características: Indicador de direção, indicador de Ligado, proteção contra sobre corrente

Projeto Exemplo de Aplicação de uma Ponte H L298N

Primeiramente, é preciso adquirir os componentes para controlar dois Motores DC através de uma Ponte H L298N conforme listado:

    • 01 Ponte H L298N
    • 01 Arduino (Uno, Mega e outros)
    • 02 Motores DC
    • 02 Potenciômetros
    • 02 Pushbutton
    • 02 Resistores (acima de 10KΩ)
    • Jumpers para conexão
    • 01 Fonte DC de Alimentação para os Motores

Em seguida, faça a ligação cuidadosamente conforme o esquema abaixo:

ESQUEMA PONTE H L298N

Feito isso, logo após estivermos certo da conexão dos componentes, podemos carregar o código no Arduino:

  1 /* Codigo simples para funcionamento de Ponte H L298N */
  2  
  3  # define enA 4 //  ENA
  4  # define MotorDireitoAvante  5  // IN1
  5  # define MotorDireitoAtras   6  // IN2
  6  
  7  # define enB 7 // ENB
  8  # define MotorEsquerdoAvante  8 // IN3
  9  # define MotorEsquerdoAtras   9 // IN4
 10  
 11  # define botaoPin_1 2   // Entrada do push button
 12  # define botaoPin_2 3   // Entrada do push button
 13  
 14  # define potPin1 A0    // Potenciometro no pino analogico 0
 15  # define potPin2 A1    // Potenciometro no pino analogico 1
 16  
 17  int Veloc_1 = 0;       // Uma variavel para armazenar o valor da velocidade atual
 18  int Veloc_2 = 0;       // Uma variavel para armazenar o valor da velocidade atual
 19  
 20  boolean leBotao(int porta);   // Prototipo funcao que le o botao.
 21  
 22  boolean sentido1 = false;    // Define o sentido de rotacao do motor.
 23  boolean sentido2 = false;    // Define o sentido de rotacao do motor.
 24  
 25  void setup() {
 26    pinMode(MotorDireitoAvante,  OUTPUT); // IN1
 27    pinMode(MotorDireitoAtras,   OUTPUT); // IN2
 28    pinMode(MotorEsquerdoAvante, OUTPUT); // IN3
 29    pinMode(MotorEsquerdoAtras,  OUTPUT); // IN4
 30    pinMode(botaoPin_1, INPUT);   // Define o pino do botao como INPUT
 31    pinMode(botaoPin_2, INPUT);   // Define o pino do botao como INPUT
 32    Serial.begin(9600);
 33  }
 34  
 35  void loop() {
 36  
 37    Veloc_1 = analogRead(potPin1);
 38    Veloc_1 = map(Veloc_1, 0, 1023, 0, 255);
 39    Veloc_2 = analogRead(potPin2);
 40    Veloc_2 = map(Veloc_2, 0, 1023, 0, 255);
 41  
 42    if (leBotao(botaoPin_1)) /* Se botao for apertado retorna true, se nao for, retorna false */
 43    {
 44      analogWrite(enA, 0);
 45      analogWrite(enB, Veloc_2);
 46  
 47      sentido1 = !sentido1;
 48  
 49      delay(1000);
 50    }
 51  
 52    if (sentido1)
 53    {
 54      digitalWrite(MotorDireitoAvante,  HIGH); // IN1
 55      digitalWrite(MotorDireitoAtras,   LOW);  // IN2
 56      analogWrite(enA, Veloc_1);
 57    }
 58    else
 59    {
 60      digitalWrite(MotorDireitoAvante,  LOW);  // IN1
 61      digitalWrite(MotorDireitoAtras,   HIGH); // IN2
 62      analogWrite(enA, Veloc_1);
 63    }
 64  
 65    if (leBotao(botaoPin_2)) /* Se botao for apertado retorna true, se nao for, retorna false */
 66    {
 67      analogWrite(enA, Veloc_1);
 68      analogWrite(enB, 0);
 69  
 70      sentido2 = !sentido2;
 71  
 72      delay(1000);
 73    }
 74  
 75    if (sentido2)
 76    {
 77      digitalWrite(MotorEsquerdoAvante, HIGH); // IN3
 78      digitalWrite(MotorEsquerdoAtras,  LOW);  // IN4
 79      analogWrite(enB, Veloc_2);
 80    }
 81    else
 82    {
 83      digitalWrite(MotorEsquerdoAvante,  LOW); // IN3
 84      digitalWrite(MotorEsquerdoAtras, HIGH);  // IN4
 85      analogWrite(enB, Veloc_2);
 86    }
 87  }
 88  
 89  
 90  boolean leBotao(int porta)
 91  {
 92    static boolean estadoAnterior[2] = {true, true}; /* static --> para manter a variavel na memoria */
 93  
 94    boolean estadoBotao = digitalRead(porta);
 95    boolean ligado = false;
 96  
 97    if (!estadoBotao && estadoAnterior[porta]) /* Esse controle permite que, mesmo o botao permanecendo apertado, vai ser considerado apenas uma vez*/
 98    {
 99      ligado = true;
100    }
101  
102    estadoAnterior[porta] = estadoBotao;
103  
104    return ligado;
105  }

Então, percebe-se que, ao rodar os potenciômetros, há uma variação de velocidade de rotação dos motores e, também, apertando os botões nota-se a inversão no sentido de rotação.

Onde comprar?

LOJAS

Conheça também!