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
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:
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.