Interface L298 N DC Motor Driver Módulo com Arduino

Embora você eventualmente precise aprender a controlar motores CC para construir seu próprio robô, você provavelmente precisará de algo um pouco mais fácil para começar –, que é onde entra o driver do motor L298N. Ele pode controlar a velocidade e a direção de rotação de dois motores CC.

Além disso, pode controlar um motor de passo bipolar, como o NEMA 17. Se você quiser saber mais sobre isso, confira este tutorial.

Controlando um motor CC

Só podemos ter controle total sobre um motor CC se conseguirmos controlar sua velocidade e direção de rotação. Isto é possível combinando estas duas técnicas.

  • PWM – para controlar a velocidade
  • Ponte H – para controlar a direção de rotação

Vamos conhecer mais sobre essas técnicas.

PWM – para controlar a velocidade

A velocidade de um motor CC pode ser controlada alterando sua tensão de entrada. Uma técnica amplamente utilizada para conseguir isso é a Modulação por Largura de Pulso (PWM).

PWM é uma técnica na qual o valor médio da tensão de entrada é ajustado enviando uma série de pulsos ON-OFF. Esta tensão média é proporcional à largura dos pulsos, conhecida como Ciclo de trabalho.

Quanto maior o ciclo de trabalho, maior a tensão média aplicada ao motor CC, resultando em um aumento na velocidade do motor. Quanto menor o ciclo de trabalho, menor a tensão média aplicada ao motor CC, resultando em uma diminuição na velocidade do motor.

A imagem abaixo mostra a técnica PWM com vários ciclos de trabalho e tensões médias.

H-Bridge – para controlar a direção de rotação

A direção de rotação de um motor CC pode ser controlada alterando a polaridade de sua tensão de entrada. Uma técnica amplamente utilizada para conseguir isso é usar uma ponte H.

Um circuito de ponte H é composto por quatro interruptores dispostos em forma de H, com o motor no centro.

Fechar dois interruptores específicos ao mesmo tempo inverte a polaridade da tensão aplicada ao motor. Isso causa uma mudança na direção de rotação do motor.

A animação a seguir mostra o funcionamento do circuito da ponte H.

Chip Motor Driver L298N

No centro do módulo há um grande chip preto com um dissipador de calor robusto – o L298N.

O chip L298 N contém duas pontes H padrão capazes de acionar um par de motores CC, tornando-o ideal para a construção de uma plataforma robótica de duas rodas.

O driver do motor L298 N tem uma faixa de fornecimento de 5 V a 35 V e é capaz de corrente contínua de 2 A por canal, por isso funciona muito bem com a maioria dos nossos motores CC.

Especificações Técnicas

Aqui estão as especificações:

Tensão de saída do motor 5V – 35V
Tensão de saída do motor (recomendado) 7V – 12V
Tensão de entrada lógica 5V – 7V
Corrente contínua por canal 2A
Dissipação de potência máxima 25W

Para obter mais detalhes, consulte a folha de dados abaixo.

Folha de Dados 

Pinout do Módulo Motor Driver L298N

O módulo L298 N tem 11 pinos que lhe permitem comunicar com o mundo exterior. A pinagem é a seguinte:

Vamos nos familiarizar com cada pino um por um.

Pinos Potência

O módulo de driver de motor L298 N recebe energia de um terminal de parafuso de 3 pinos e 3,5 mm de passo.

O driver do motor L298 N possui dois pinos de alimentação de entrada: VS e VSS.

VS pin alimenta o H-Bridge interno do IC, que aciona os motores. Este pino aceita tensões de entrada que variam de 5 a 12 V.

VSS é usado para alimentar o circuito lógico dentro do IC L298 N, e pode variar entre 5 V e 7 V.

GND é o pino de aterramento comum.

Pinos Saída

Os canais de saída do condutor do motor L298N, OUT1 e OUT2 para motor A e OUT3 e OUT4 para o motor B, são quebrados para a borda do módulo com dois terminais de parafuso de passo de 3,5 mm. Você pode conectar dois motores CC de 5-12 V a esses terminais.

Cada canal no módulo pode fornecer até 2 A para o motor DC. A quantidade de corrente fornecida ao motor, entretanto, depende da capacidade da fonte de alimentação do motor.,

Pinos de controle de direção

Os pinos de controle de direção permitem controlar se o motor gira para frente ou para trás. Na verdade, esses pinos controlam os interruptores do circuito H-Bridge dentro do chip L298N.

O módulo possui dois pinos de controle de direção. O IN1 e IN2 os pinos controlam a direção de rotação do motor A; Enquanto IN3 e IN4 controle a direção de rotação do motor B.

A direção de rotação do motor pode ser controlada aplicando lógica HIGH (5 V) ou lógica LOW (Ground) a essas entradas. O gráfico abaixo mostra várias combinações e seus resultados.

Entrada1 Entrada2 Direção de rotação
Baixo(0) Baixo(0) Motor DESLIGADO
Alto(1) Baixo(0) Avançar
Baixo(0) Alto(1) Para trás
Alto(1) Alto(1) Motor DESLIGADO

Pinos de Controle de Velocidade

Os pinos de controle de velocidade ENA e ENB são usados para ligar/desligar os motores e controlar sua velocidade.

Puxar esses pinos ALTO fará com que os motores girem, enquanto puxá-los BAIXO irá detê-los. Porém, com a Modulação por Largura de Pulso (PWM), a velocidade dos motores pode ser controlada.

O módulo geralmente vem com um jumper nesses pinos. Quando este jumper está no lugar, o motor gira a toda velocidade. Se quiser controlar a velocidade dos motores de forma programática, remova os jumpers e conecte-os aos pinos habilitados para PWM do Arduino.

Regulador e Jumper 5 V a bordo

O módulo inclui um regulador 78M05 5 V que pode ser habilitado ou desativado através de um jumper.

Quando este jumper está no lugar, o regulador de 5 V é ativado, e a fonte de alimentação lógica (VSS) é derivada da fonte de alimentação do motor (VS). Neste caso, o terminal de entrada de 5 V atua como o pino de saída, entregando 5 V 0,5 A. Você pode usá-lo para alimentar um Arduino ou outro circuito que precisa de energia de 5 V.

Quando o jumper é removido, o regulador de 5 V é desativado, e temos que fornecer 5 V separadamente através do pino VSS.

Aviso:

Se a fonte de alimentação do motor for inferior a 12 V, você pode manter o jumper no lugar. Se for superior a 12 V, o jumper deve ser removido para evitar danos ao regulador de 5 V a bordo.

Além disso, não forneça energia aos pinos VSS e VS enquanto o jumper estiver no lugar.

 

Queda de tensão de L298N

O L298 N tem uma queda de tensão de aproximadamente 2V. Isso se deve ao fato de que os transistores de comutação internos têm uma queda de tensão de aproximadamente 1 V quando polarizados para frente, e como uma ponte H requer que a corrente passe através de dois transistores, a queda total de tensão é de 2 V.

Então, se você conectar 12 V ao terminal da fonte de alimentação do motor, os motores receberão aproximadamente 10 V. Isso significa que um motor de 12 V DC nunca girará a toda velocidade.

Para que o motor funcione em sua velocidade máxima, a fonte de alimentação do motor deve ter uma tensão ligeiramente superior (+2V) à necessidade real de tensão do motor.

Levando em consideração uma queda de tensão de 2 V, se você estiver usando motores de 5V, precisará fornecer 7V no terminal de alimentação do motor. Se você tem motores de 12 V, em seguida, sua tensão de alimentação do motor deve ser de 14V.

  • Essa queda excessiva de tensão resulta em dissipação significativa de energia na forma de calor. É por isso que os motoristas baseados em L298N exigem um grande dissipador de calor.

Ligação de um Módulo Motor Driver L298N para um Arduino

Agora que sabemos tudo sobre o módulo, podemos começar a conectá-lo ao nosso Arduino!

Comecemos por ligar a fonte de alimentação do motor. Em nosso experimento, estamos usando motores de caixa de câmbio CC, também chamados de motores “TT”, que são frequentemente encontrados em robôs com tração nas duas rodas. Eles são classificados para 3 a 12V. Conectaremos, portanto, uma fonte de alimentação externa de 12 V ao terminal VS. Como o L298 N tem uma queda de tensão de cerca de 2 V, os motores receberão 10 V e girarão a uma RPM ligeiramente menor. Mas tudo bem.

Em seguida, precisamos fornecer 5 V para o circuito lógico do L298 N. Usaremos o regulador de 5 V integrado para extrair 5 V da fonte de alimentação do motor, portanto, mantenha o jumper de 5 V-EN no lugar.

Agora conecte os pinos Input e Enable do módulo L298 N (ENA, IN1, IN2, IN3, IN4 e ENB) aos seis pinos de saída digital Arduino (9, 8, 7, 5, 4 e 3). Observe que ambos os pinos de saída 9 e 3 do Arduino são habilitados para PWM.

Finalmente, conecte um motor ao terminal A (OUT1 e OUT2) e o outro ao terminal B (OUT3 e OUT4). Você pode trocar as conexões do seu motor. Não há tecnicamente um caminho certo ou errado.

Código de exemplo Arduino

O sketch abaixo mostrará como controlar a velocidade e a direção de rotação de um motor DC usando o Motor Driver L298 N e pode servir de base para experimentos e projetos mais práticos.

O sketch move o motor em uma direção durante uma revolução e depois na direção oposta. Há também alguma aceleração e desaceleração envolvidas.

  • Ao acelerar ou desacelerar o motor, você pode ouvi-lo zumbindo, especialmente em valores mais baixos de PWM. Isso é normal; não há nada com que se preocupar. Isso acontece porque o motor CC requer uma quantidade mínima de tensão para operar.
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;

void setup() {
    // Defina todos os pinos de controle do motor como saídas
    pinMode(enA, OUTPUT);
    pinMode(enB, OUTPUT);
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
    
    // Desligar os motores - Estado inicial
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}

void loop() {
    directionControl();
    delay(1000);
    speedControl();
    delay(1000);
}

// Essa função permite que você controle a direção de rotação dos motores
void directionControl() {
    // Ajuste os motores para a velocidade máxima
    // Para PWM, os valores máximos possíveis são de 0 a 255
    analogWrite(enA, 255);
    analogWrite(enB, 255);

    // Ligue o motor A e B
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    delay(2000);
    
    // Agora mude a direção do motor
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    delay(2000);
    
    // Desligue os motores
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}

// Essa função permite que você controle a velocidade dos motores
void speedControl() {
    // Turn on motors
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    
    // Acelerar de zero a velocidade máxima
    for (int i = 0; i < 256; i++) {
        analogWrite(enA, i);
        analogWrite(enB, i);
        delay(20);
    }
    
    // Desacelerar da velocidade máxima para zero
    for (int i = 255; i >= 0; --i) {
        analogWrite(enA, i);
        analogWrite(enB, i);
        delay(20);
    }
    
    // Agora desligue os motores
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}

Explicação do Código:

O código Arduino é bastante simples. Não requer que nenhuma biblioteca funcione. O sketch começa declarando os pinos do Arduino que estão conectados aos pinos de controle do L298N.

// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;

Na seção de configuração do código, todos os pinos de controle do motor, incluindo os pinos de controle de direção e velocidade, são configurados como OUTPUT digital. E os pinos de controle de direção são puxados para baixo para desativar inicialmente ambos os motores.

void setup() {
  // Defina todos os pinos de controle do motor como saídas
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
    
  // Desligar os motores - Estado inicial
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

Na seção de loop do código, chamamos duas funções definidas pelo usuário com um atraso de um segundo.

void loop() {
  directionControl();
  delay(1000);
  speedControl();
  delay(1000);
}

Essas funções são:

  • directionControl() – Esta função faz com que ambos os motores girem a toda velocidade por dois segundos. Em seguida, ele inverte a direção de rotação dos motores e gira por dois segundos. Finalmente, ele para os motores.

// Essa função permite que você controle a direção de rotação dos motores
void directionControl() {
    // Ajuste os motores para a velocidade máxima
    // Para PWM, os valores máximos possíveis são de 0 a 255
    analogWrite(enA, 255);
    analogWrite(enB, 255);

    // Ligue o motor A e B
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    delay(2000);
    
    // Agora mude a direção do motor
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    delay(2000);
    
    // Desligue os motores
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}
  • speedControl() – Esta função usa o analogWrite() função para gerar um sinal PWM que acelera ambos os motores de zero a velocidade máxima antes de desacelerá-los de volta a zero. Finalmente, ele para os motores.
// Essa função permite que você controle a velocidade dos motores
void speedControl() {
    // Turn on motors
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    
    // Acelerar de zero a velocidade máxima
    for (int i = 0; i < 256; i++) {
        analogWrite(enA, i);
        analogWrite(enB, i);
        delay(20);
    }
    
    // Desacelerar da velocidade máxima para zero
    for (int i = 255; i >= 0; --i) {
        analogWrite(enA, i);
        analogWrite(enB, i);
        delay(20);
    }
    
    // Agora desligue os motores
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}
Please follow and like us:
error0
fb-share-icon
Tweet 20
fb-share-icon20