Clube de Robótica

L298N – Controladora de 2 motores

Anúncios

Tutorial – L298N Módulo controlador de 2 motores e Arduino


Adptação do site: http://tronixlabs.com/news/tutorial-l298n-dual-motor-controller-module-2a-and-arduino/ Posted by John Boxall on November 22, 2014

Neste tutorial vamos explicar como usar o Módulo Controlador L298N H- ponte para controlar 2 motores com o Arduíno. Isto permite controlar a velocidade e a direção de dois motores de corrente contínua, ou controlar um motor passo a passo bipolar com facilidade. O módulo de ponte-H L298N pode ser usado com motores que têm uma tensão de alimentação entre 5 e 35V DC.

O módulo tem também um regulador de 5V, se a tensão de alimentação for até 12V é possível ter uma fonte de 5V no módulo.

Primeiro vamos identificar as ligações, em seguida, explicar como controlar motores DC , e por fim, um motor de passo.

Pins de saída do módulo
Observa a imagem seguinte – os números da imagem correspondem à relação da lista a seguir à imagem:

  1. Terminal + do Motor 1 DC ou A+ do motor passo a passo
  2. Terminal – do Motor 1 DC ou A- do motor passo a passo
  3. Jumper de 12V – se estiver a aplicar-se uma tensão de alimentação com mais de 12V DC deve remover-se o jumper . Isso permite ativar o regulador de 5V no módulo.
  4. Aqui liga-se a tensão de alimentação do motor, o valor máximo é de 35V DC . Remova o jumper 12V se a tensão for maior do que 12V DC
  5. GND – Ground
  6. 5V de saída se o jumper de 12V estiver colocado, ideal para alimentar o Arduino (etc )
  7. Jumper para ativar o motor 1 DC. Deixe no lugar o jumper quando se utiliza um motor passo a passo . Conectar-se a saída de PWM para controle de velocidade do motor 1 DC.
  8. IN1
  9. IN2
  10. IN3
  11. IN4
  12. Jumper para ativar o motor 2 DC. Deixe no lugar o jumper quando se utiliza um motor passo a passo . Conectar-se a saída de PWM para controle de velocidade do motor 2 DC.
  13. Terminal + do Motor 2 DC ou B+ do motor passo a passo
  14. Terminal – do Motor 2 DC ou B- do motor passo a passo

Controlando os Motores DC


Para controlar um ou dois motores DC é bastante fácil. Primeiro ligar cada um dos motores às conexões A e B no módulo L298N. Se por exemplo estiver usar dois motores para um robô assegure-se de que a polaridade dos motores é a mesma, caso contrário, é preciso trocá-las garantido que ambos os motores rodam para afrente ou para trás e não um para a frente e outro para trás!

Em seguida, ligar a fonte de alimentação: o positivo para no pino 4 do módulo e o negativo / GND no pino 5. Se você fornecer uma tensão até 12V deve deixar o jumper nos 12V ( ponto 3 na imagem de cima) e 5V estará disponível do pino 6 do módulo . Desta forma pode alimentar-se o pino de 5V do Arduino ligando-o da fonte de alimentação dos motores. Não se esqueça de ligar Arduino GND ao pino 5 no módulo , para completar a alimentação do circuito.

Agora precisa de seis pinos de saída digitais do Arduino , dois destes têm de ser PWM ( modulação por largura de pulso). PWM pinos são indicadas pela til ( “~” ) ao lado do número de pinos, como na figura seguinte:

Por fim, ligam-se os pinos de saída digital do Arduino ao módulo L298N. Consideramos por exemplo que temos dois motores de corrente contínua, os pins digitais D9, D8, D7 e D6 serão conectados aos pinos IN1 , IN2 , IN3 e IN4 respectivamente. Em seguida, liga-se o D10 ao módulo no pino 7 (mas primeiro tem de se remova o jumper) e D5 ao módulo no pino 12 (nesta situação também é necessário remova o jumper).

A direcção do motor é controlada através do envio de um sinal de HIGH ou LOW para cada motor (ou canal). Por exemplo para o motor um, um HIGH para IN1 e uma LOW para IN2 fará com que ele vire para uma direção, e uma LOW e HIGH fará com que ele gire na outra direcção.

No entanto, os motores não vão virar até que um sinal HIGH seja aplicado no pino (7 para o motor um, 12 para motor de dois). E eles podem ser desligados com um sinal LOW ao(s) mesmo(s) pino(s) . No entanto, se for preciso controlar a velocidade dos motores, o sinal PWM do pino digital ligado ao pino respectivo permite garantir a mesma.

Os passos anteriores devem ser executados para demonstrar a forma de controlar um motor DC. No exemplo utilizamos dois motores de corrente contínua e um Arduino UNO ligados de acordo com o descrito em cima, juntamente com uma fonte de alimentação externa. Em seguida, tem de se fazer o upload do programa seguinte para o Arduíno:

PROGRAMA


/*
Clube de ROBÓTICA ESGC - 2017
Autor Prof. Ramiro Martins
Estudo do controlador de velocidade L298N e
ensaio dos movimentos dos motores
Foram utilizados 2 demos um para os movimentos básicos(frente, trás, direita e esquerda)
e outro para a acelraração e desacelaração
*/

// Ligar os pins da controladora aos pins digitais do Arduino
// Motor A da esquerda
int enA = 10;
int in1 = 9;
int in2 = 8;
// Motor B da direita
int enB = 5;
int in3 = 7;
int in4 = 6;

void setup()
{
// definir todos os pinos de saída da controladora dos motores
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void demoUm()
{
// esta função irá fazer rodar os motores no mesmo sentido a uma velocidade fixa
// liga o motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// a velocidade é definida para 200 o intervalo é de 0 a 255
analogWrite(enA, 200);
// liga o motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// a velocidade é definida para 200 o intervalo é de 0 a 255
analogWrite(enB, 200);
// as funções anteriores serão executadas durante 2 segundos
delay(2000);
// agora troca-se as direções dos motores A e B
// mas primeiro desligam-se os motores
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
// as funções anteriores serão executadas durante 0,2 segundos
delay(200);
//agora sim o motores começam a rodar em sentido contrário
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// as funções anteriores serão executadas durante 2 segundos
delay(2000);
// agora desligam-se os motores
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
// as funções anteriores serão executadas durante 2 segundos
delay(2000);
// rodar para a esquerda seguindo em frente
// liga o motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// a velocidade é definida para 20 rodando mais devagar
analogWrite(enA, 20);
// liga o motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// a velocidade é definida para 200 rodando mais depressa que o A - deslocamento para a esquerda
analogWrite(enB, 200);
// as funções anteriores serão executadas durante 2 segundos
delay(2000);
// rodar para a direita seguindo em frente
// liga o motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// a velocidade é definida para 200 rodando mais depressa que o A - deslocamento para a direita
analogWrite(enA, 200);
// liga o motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// a velocidade é definida para 20 rodando mais devagar
analogWrite(enB, 20);
// as funções anteriores serão executadas durante 2 segundos
delay(2000);
}
void demoDois()
{
// esta função irá ligar os motores em toda a gama de velocidades possíveis acelerando e desacelerando
// nota que a velocidade máxima é determinada pelo próprio motor e a tensão aplicada
// os valores PWM enviados pelo analogWrite () são frações da velocidade máxima possível do hardware

// Liga os motores
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// acelera de zero até a velocidade máxima
for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// desacelera da velocidade máxima até a zero
for (int i = 255; i >= 0; i--)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// agora desligam-se os motores
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
// Teste subprograma demoUm
demoUm();
// tempo de espera entre o demoUm e o demoDois
delay(1000);
// Teste subprograma demoDois
demoDois();
// tempo de espera após o demoDois
delay(1000);
}

VIDEO


Video de demonstração: https://youtu.be/5YmEfjjvolU


SITE PARA CONSULTA


Também pode visitar outro site com um exemplo sobre a aplicação desta controladora.

http://blog.filipeflop.com/motores-e-servos/motor-dc-arduino-ponte-h-l298n.html

Lá podem encontrar os esquemas de ligação para os dois tipos de tensões de alimentação.

Também deve consultar o artigo de Arduíno Portugal: Ponte H L298N – Aprenda a controlar a velocidade de um motor DC

Anúncios

Anúncios