Driver motor com Ponte H L298N – Controlando Motor DC com Arduino
Se você curte robótica, provavelmente deve estar louco para montar seu próprio robô. A ponte H é uma peça chave quando o assunto é robótica. Neste tutorial você aprenderá como controlar um motor DC usando o Driver motor L298n com um Arduino Uno. Esse tutorial é essencial para quem quer montar seu robô com Arduino.
[toc]
O que é uma Ponte H?
Na maioria das abordagens em robótica faz-se necessária a utilização de motores DC em diversos tipos de locomoção de robôs, movimentação de braços mecânicos, etc. Os motores DC (direct current ou corrente continua) são cargas indutivas que, em geral, demandam uma quantidade de corrente superior à que as portas do Arduino conseguem fornecer.
Sendo assim, não devemos ligar estes motores diretamente nas portas do Arduino pois se o motor demandar uma corrente acima de 40mA nas portas digitais (máxima fornecida pelo Arduino) pode queimar a porta e danificar a placa.
Para solucionar a questão da alta corrente poderíamos usar transistores, porem é importante que seja possível controlar o sentido de giro do motor, função que não se faz possível usando apenas um transistor já que para inverter o sentido de giro devemos inverter a polaridade da alimentação do motor (onde era positivo se põe negativo e vice versa). Um transistor só seria suficiente para ligar e desligar o motor.
Para resolver nosso problema utilizamos um famoso circuito conhecido como Ponte H que nada mais é que um arranjo de 4 transistores. Este circuito é uma elegante solução por ser capaz de acionar simultaneamente dois motores controlando não apenas seus sentidos, como também suas velocidades. Além de seu uso ser simples no Arduino.
Mas como funciona a Ponte H? Porque este nome?
As pontes H em possuem este nome devido ao formato que é montado o circuito, semelhante a letra H. O circuito utiliza quarto chaves (S1, S2, S3 e S4) que são acionadas de forma alternada, ou seja, (S1-S3) ou (S2-S4), veja as figuras abaixo. Dependendo da configuração entre as chaves teremos a corrente percorrendo o motor hora por um sentido, hora por outro.
Quando nenhum par de chaves está acionado, o motor está desligado (a). Quando o par S1-S3 é acionado a corrente percorre S1-S3 fazendo com que o motor gire em um sentido (b). Já quando o par S2-S4 é acionado a corrente percorre por outro caminho fazendo com que o motor gire no sentido contrário (c).
Circuito integrado Ponte H L2398N
O CI L298N é muito utilizado para o propósito de controle de motores, ele nada mais é que uma ponte H em um componente integrado. Uma das vantagens do uso desse CI é o menor espaço ocupado, a baixa complexidade do circuito e o fato de ele já possuir dois circuitos H, podendo assim, controlar dois motores. Na figura a seguir você pode conferir o diagrama de blocos do CI L298N retirado de sua folha de dados (folha de dados L298N) :
As funções dos principais pinos desse CI são descritas na tabela a seguir:
Outra vantagem do L298N é a resposta a sinais de PWM. Se no lugar de usar sinais lógicos TTL for usado sinais de PWM, é possível regular a tensão de saída, e dessa forma regular a velocidade dos motores.
O PWM, Pulse Width Modulation (Modulação por Largura de Pulso), consiste basicamente em aplicar uma onda quadrada de amplitude Vcc e frequência alta no lugar da tensão continua Vcc. Leia mais sobre PWM na postagem Grandezas digitais e analógicas e PWM.
Ao usar um sinal de PWM nas entradas IN1 e IN2, por exemplo, teremos uma tensão de saída nos pinos OUT1 e OUT2 em PWM que será igual à Duty Cycle*Vcc. Dessa forma, podemos regular a diferença de potencial média aplicada nos motores, controlando as suas velocidades.
Existem outras opções de CI’s de ponte H no mercado, é importante consultar as especificações deles em suas folhas de dados(Datasheet) para saber qual irá lhe atender melhor. Veja algumas opções de ponte H:
- L293D Folha de Dados;
- LMD18200 Folha de dados.
Módulos Driver motor com Ponte H
Esses módulos são muito utilizados em aplicações de robótica. Esses módulos possuem dimensões pequenas e já possuem o circuito básico para o uso do CI, o que facilita na acomodação do módulo no robô ou em outros projetos e a sua utilização.
Existem varias opções disponíveis no mercado, com tamanhos e especificações diferentes. Algumas especificações são importantes ao escolher seu módulo, são elas:
- Especificação de potência máxima fornecida;
- Tensão máxima suportada;
- Corrente máxima suportada;
- Tensão lógica.
Um exemplo desses módulos é o oferecido em nossa loja, sua características são:
- Ci L298N;
- Tensão para os motores: 5 – 35V;
- Corrente máxima para os motores: 2A;
- Potencia máxima: 25W;
- Tensão lógica: 5V;
- Corrente lógica: 0-36mA;
- Dimensões: 43x43x27 mm
- Peso: 30g.
Módulo Driver motor com Ponte H L298N
Agora que já sabemos como a Ponte H funciona, vamos entender na prática como podemos usá-las em conjunto com o Arduino. Para isso iremos usar o Driver motor com Ponte H L298N.
Entradas e saídas
Para começa vamos entender função de cada pino bem como deve ser utilizado.
Motor A e Motor B: Conectores para os dois motores
-
- 6-35V: Porta para alimentação da placa com tensão entre 6 a 35V.
-
- Ativa 5V: Quando jumpeado, a placa utilizará o regulador de tensão integrado para fornecer 5v (na porta 5v) quando a porta 6-35V estiver sendo alimentada por uma tensão entre 6 e 35V. Neste caso, não se deve alimentar a porta 5V pois pode danificar os componentes. A tensão fornecida na porta 5V pode ser usada para alimentar o Arduino, por exemplo.
-
- 5v: Em casos de não haver fonte de alimentação com mais de 6V podemos alimentar a placa com 5V por esta porta.
-
- Ativa MA: Quando jumpeado aciona o motor A com velocidade máxima. Para controlar a velocidade do motor A basta remover o jumper e alimentar o pino com uma tensão entre 0 e 5v, onde 0V é a velocidade mínima (parado) e 5V a velocidade máxima.
-
- Ativa MB: Quando jumpeado aciona o motor B com velocidade máxima. Para controlar a velocidade do motor B basta remover o jumper e alimentar o pino com uma tensão entre 0 e 5v, onde 0V é a velocidade mínima (parado) e 5V a velocidade máxima.
-
- IN1 e IN2:são utilizados para controlar o sentido do motor A;
- IN3 e IN4: são utilizados para controlar o sentido do motor B;
Veja que agora, no lugar das chaves S1-S3 e S2-S4 temos os pinos IN1 e IN2. Onde IN1 corresponde às chaves S1-S3 e a IN2 às chaves S3-S4.
Para controlar o sentido, temos as seguintes combinações para o motor A(IN1 e IN2)
Para o motor B (IN3 e IN4), a tabela funciona da mesma forma.
Mãos à obra – Driver motor com Ponte H L298N – Controlando Motores com Arduino
Vamos fazer um exemplo para testar na pratica a ponte h. Neste primeiro exercício queremos testar o controle do sentido de giro dos motores A e B através do Arduino.
Componentes necessários
Para este exemplo, utilizaremos:
- Placa Arduino UNO ou similar
- Ponte H L298N – driver motor
- 2x Motores DC (pode ser feito com apenas 1)
- Fonte alimentação de 12V ou Fonte alimentação de 9V
Montando o projeto
Prossiga com a montagem conforme esquema abaixo. Caso você use apenas um motor, basta desconsiderar o motor B:
Garanta que seu Arduino e a fonte externa estejam desligados durante a montagem.
Conectando o Arduino ao computador
Conecte seu Arduino ao computador e abra a IDE Arduino.
Antes de carregar um programa, você precisa selecionar qual porta você deseja usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.
Você também precisa garantir que o tipo de placa apropriado está selecionado em Ferramentas(Tools) no submenu Placa (Board).
Programando
Crie um programa (sketch) e salve com o nome de “exemplo1_ponteh”.
Em seguida, insira nele o código conforme escrito abaixo:
/*Pinagem do arduino*/ //motor_A int IN1 = 2 ; int IN2 = 3 ; //motor_B int IN3 = 4 ; int IN4 = 5 ; //Inicializa Pinos void setup(){ pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); } void loop(){ /*Inicio dos Estados do motor A*/ //Sentido 1 digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); delay(5000); //Freia Motor_A digitalWrite(IN1,HIGH); digitalWrite(IN2,HIGH); delay(5000); //Sentido 2 digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); delay(5000); //Freia Motor_A digitalWrite(IN1,HIGH); digitalWrite(IN2,HIGH); delay(5000); /*Fim dos Estados do motor A*/ /*Inicio dos Estados do motor B*/ //Sentido 1 digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); delay(5000); //Freia Motor_B digitalWrite(IN3,HIGH); digitalWrite(IN4,HIGH); delay(5000); //Sentido 2 digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); delay(5000); //Freia Motor_B digitalWrite(IN3,HIGH); digitalWrite(IN4,HIGH); delay(5000); /*Fim dos Estados do motor_B*/ }
Após escrever o código, clique em Carregar (Upload) para que o programa seja transferido para seu Arduino.
Colocando para funcionar
Se tudo deu certo, teremos o motores fazendo os seguintes movimentos:
- Motor A gira em um sentido
- Motor A freia
- Motor A gira no sentido contrario
- Motor A freia
- Motor B gira em um sentido
- Motor B freia
- Motor B gira no sentido contrario
- Motor B freia
Entendendo a fundo
Entendendo o Software
Primeiro definimos os pinos que estão conectados à ponte H para controle de cada motor.
//motor_A int IN1 = 2 ; int IN2 = 4 ; //motor_B int IN3 = 6 ; int IN4 = 7 ;
Veja que temos 2 pinos para cada moto para controle de sentido de giro.
Movimentando o motor
Para fazer o motor se movimentar, primeiro temos que informar para que direção ele deve girar:
//Motor_A //Sentido 1 digitalWrite(IN1,LOW); //0V digitalWrite(IN2,HIGH); //5V
Para controlar o sentido, temos as seguintes combinações para o motor A(IN1 e IN2)
É importante ter em mente essas combinações:
//Sentido 1 digitalWrite(IN1,LOW); //0V digitalWrite(IN2,HIGH); //5V //Freia Motor_A digitalWrite(IN1,HIGH); //5V digitalWrite(IN2,HIGH); //5V //Sentido 2 digitalWrite(IN1,HIGH); //5V digitalWrite(IN2,LOW); //0V
Fechamento
Que tal agora aprender a controlar a velocidade de um motor DC usando um módulo de Ponte H?
Esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto!! Compartilhe à vontade.
Referências Bibliográficas
[1] Guimarães, F. A. Desenvolvimento de Robô Móvel Utilizando para a Exploração de Ambientes Hostis – Dissertação de Mestrado em Engenharia de Processos Químicos e Bioquímicos, Escola de Engenharia Mauá do Centro Universitário do Instituto Mauá de Tecnologia, São Caetano do Sul, SP, Brasil, 2007.
Editado por Allan Mota e revisado por Ícaro Lobo
38 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
Parabéns pela sua postagem
É bem explicativo e detalhado
eu consegui aprender com a sua postagem
Parabens
Parabéns pelo post!
Poderia me tirar uma dúvida? Ao alimentar o L298N com 9v, o mesmo estará fornecendo 9V para o motor?
Preciso controlar dois motores 3V-6V, e possuo apenas uma bateria de 9V, e regulador de tensão não é uma opção no momento, teria alguma dica?.
ola tudo bem?
tenho um projeto que usei o mesmo esquema que o seu, porem com uma outra programação, porem quando eu paro de manda o sinal de giro para os motores atraves do joytick, os motores demora cerca de 3 segundos para para, o que faz com que ele anda a mais do ponto onde deveria parar!
sera que vc consegue me ajudar?
Olá. Parabéns pelo tutorial.
Neste caso do tutorial ao apertar o botão o motor vai girar. Porém eu preciso que o motor gire somente enquanto eu mantenho o botão pressionado e ao soltar o botão o motor precisa parar de girar. Como posso estar fazendo isso?
Aguardo e Obrigado desde já
Boa tarde amigo, tenho um projeto pronto, com ponte H L298N, Arduíno Uno e HC-05 ( mod. bluetooth ), tudo funcionado perfeitação como quero.
Uso um motor de 12v retirado de uma parafusara, com sua própria bateria de 12v, porem a ponte H não transmite os 12v para o motor, apenas 4,8 e o motor não tem força suficiente para impulsionar meu projeto.
Tem essa possibilidade ????
oLÁ, TENHO UMA PONTE H KEYES L298 REV 02 COM SV1 COM 8 PINOS, NÃO CONSIGO ENCONTRAR SIMILAR, ENCONTRO APENAS COM 6 PINOS. pODEM ME ORIENTAR? GRATO
Bom dia, a porta Ativa 5V(Enable) não deveria estar sendo alimentada por um tensão para a ponte H funcionar ?
Pelo menos foi o que eu entendi desse outro tutorial de vocês: https://portal.vidadesilicio.com.br/ponte-h-l298n-controle-velocidade-motor/
Obrigado desde já, aprendo bastante com esse site.
Olá Renan, nesse tutorial o Enable está sendo alimentado com tensão através do jumper.
No tutorial sobre velocidade citamos esse jumper: https://portal.vidadesilicio.com.br/ponte-h-l298n-controle-velocidade-motor/#Modulando_a_ponte_H
Boa noite estou com o seguinte dilema estou usando um motor que presumo que seja de 12v. Liguei ele no módulo testei com uma fonte de 12v por 1A ele não funciona direito ele gira travando parecendo um motor de passo, então liguei em fonte de 12v por 1,5A funcionou muito bem; controlei a velocidade com um potenciômetro. O grande problema e o dissipador do módulo ele esquenta muito alguém pode me dar uma luz para resolver esse problema?
Colega boa tarde.
montei seu projeto e gostaria de saber como incrementar ele usando um RF GV-350D que comprei a tempo,
Boa tarde. Segui o passo a passo, porem não obtive resposta. Conferi as ligações, o código, está td ok. O código compila normalmente, mas o motor não gira. Estou usando uma fonte de arduino de 12 volts ligada na tomada como alimentação. Será que o problema pode ser a fonte?
Parabéns pelo post!! Muito bem explicado!!
Obrigado.
Estou com o mesmo problema do Matheus Pereira Feliciano. o programa funciona, o motor (A)(12v) gira para um lado e para o outro mas a tensão entre OUT1 e OUT2 é de 3.5v (não deveria ser em torno de 12V?). estou usando uma bateria automotiva (13.5V) mantida em carga por um carregador de bateria. testei com 2 módulos e o resultado foi o mesmo.
Se tiro o jumper ATIVA 5V ou ATIVA MA, o motor não gira.
O que pode ser? módulos com defeito?
Boa tarde excelente explicação, só gostaria de saber se é possível colocar um Joystick com fio, sendo que usasse o direcional e pelo menos mais botão para ligar um motor de 5 v direto na placa do arduino e a ponte h controlaria os dois motores de 12v, poderia postar o esquema de montagem e a programação?
Desde já muito obrigado!
olá, estou om problemas na ligação de 2 motores dc 3~6v com redução com o driver ponte-h l298n. Consigo ligar o driver, mas os motores apenas começam a girar e param. Estou utilizando 4 pilhas AA para a alimentação e os fios são aqueles bem finos que estão ligados ao driver. Gostaria de sabe o que ocorre com a minha ligação
As pilhas estão novas? Talvez elas não estejam dando conta. Essa ligação é bem simples e provavelmente seu problema esteja ligado à fonte de alimentação.
Olá, meu arduino não é reconhecido pelo computador, a porta COM não aparece como opção. As únicas coisas funcionando nele são seus próprios Leds. Poderia me ajudar?
Você já tentou usá-lo em outro computador? Permanece com o mesmo problema?
Sim, descobri que meu chip AtMEGA estava queimado, parece que alimentei da forma errada e acabou danificando o mesmo.
Em compensação, sabe me dizer como saber se meu módulo bluetooh HC-05 está queimado? pois estou ligando na saída 5V do Arduino e no GND mas não liga. Gostaria de saber oq poderia ter acontecido já que tenho certeza absoluta de que não ultrapassei as especificações de 3,3V – 6V
Vou montar um carrinho controlado através de um Arduino , com o módulo Bluettoth HC-06 , e possuo 4 motores de 12V cada e 1,5A , e tenho duas ponte H L298N , queria saber a ligação , e principalmente a programação , obrigado desde já !!
Olá, estou realizando um projeto final do meu curso de automação e estou montando uma ponte rolante com 2 motores de 12vc. No caso nós planejamos o funcionamento dele em ponte H (ação e reversão e parada) acionado por reles ( no caso a shield de relés, 2 pra cada motor ) , funcionando via bluetooth e por um shield de joystick (somente o analógico) para fazer o manual.
Minha dificuldade está sendo em realizar a programação do mesmo.
os componentes são ,
Arduino Uno;
Shield de Relé ( 4 no Total)
Shield de Bluetooth (HC-05)
Shield de Joystick ( KEYES )
O aplicativo de Celular que estou usando para o bluetooth é o “bluetooth RC Controller”
Agradeceria muito de uma ajuda, pois sou leigo em programação de arduino, e estou meio que desesperado. haha.
Abraço.
Olá, estou em um projeto onde precisamos fazer o controle de um motor usando esse shield. Quando fui aplicar um PWM no pino Enable A observei que a relação não foi linear (Vcc*DutyCicle). O pwm é gerado por um dspic. Você acha que as diferenças entre o arduino e o dspic podem ter influenciado na diferença do resultado?
Mariana, Eu não entendi aonde que a relação não foi linear, Você mediu a tensão de saída da ponte H conforme variava o PWM (0 a 255) a curva gerada não foi linear? É interessante verifica o dutycicle no enable A e a saída da ponte H no Osciloscópio para verificar essa relação. Mande mais informações, seu problema pode ocorrer para outros leitores.
Oi Allan, quando apliquei um pwm no pino enable A, a tensão de saída da ponte H não era a porcentagem do Duty Cicle aplicada a tensão de alimentação. Meus testes foram feitos com uma fonte de 12V. Testei o comportamento da tensão de saída da ponte aplicando duty cicles de diversos valores. Quando aplicado um de 56% a saída da ponte h já não oferecia tensão suficiente para que o motor funcione com um Vcc de 12V. Plotei um gráfico no matlab e a tensão de saída em relação ao pwm foi próxima a uma exponencial. Vou verificar essas relações no osciloscópio e mando mais informações. Obrigada.
Outra coisa que eu esqueci de comentar, quando se aplica um pwm com duty clicle de 100% ( Ou quando deixa o jumper no shield), sempre tem uma queda de tensão próxima a 1.6 V, independente da tensão de alimentação do shield.
Essa queda de tensão é normal. Ela esta ligada as quedas de tensão nos diodos do módulo.
Cara, realizamos a montagem com o CI L298N alimenta um motor de passo Bipolar. Porem o L298 está esquentando, teria algum modo de continuarmos utilizando o L298 porém limitar a corrente?
Você pode reduzir a corrente reduzindo a tensão de alimentação do motor. Já tentou fazer isso?
Olá, preciso da seguinte ajuda….
Vou alimentar 2 motores de 12v com até 300mA e preciso de um formato de ponte H que use o pwm do arduino para acionamento.
O shield não é opção, apenas a ponte com transistores.
Parabéns pelo material desse artigo.
Abraço!!
O módulo ponte H L298n abordado nesse tutorial é uma das soluções mais simples para a aplicação que deseja fazer.
Você encontra esse módulo nesse link: http://www.vidadesilicio.com.br/modulo-ponte-h-l298.html
E pode aprender como controlar a velocidade de motores através de PWM usando esse módulo nesse tutorial aqui: https://portal.vidadesilicio.com.br/ponte-h-l298n-controle-velocidade-motor/
Muito obrigado por responder, mas como disse antes, módulos (shield), não são opção nesse momento. Apenas ponte com transmissores mesmo. Tenho data para finalizar e não chegaria a tempo essa compra. Os transistores acredito encontrar aqui na cidade.
Você pode comprar o próprio CI em uma casa de eletrônica também. Ele só um pouco chato para trabalhar. Basta procurar pelo ci L298n. Em uma busca rápida na internet encontrei esse tutorial mostrando uma sugestão de com usar esse CI: http://eletronicaemcasa.blogspot.com.br/2013/03/ponte-h-para-motores-com-l298.html
BOA NOITE,
EU ESTOU PROCURANDO O DATASHEET DA PONTE H, POREM SÓ ENCONTRO O DATASHEET DO L298…
GOSTARIA DE SABER SE OS DIODOS NA PONTE H ESTÃO CONECTADOS EM PARALELO COM A CARGA PRA FAZER A FUNÇÃO DE RODA LIVRE, SABE ME DIZER?
Olá Wagner, eu encontrei esse esquemático referente a esse módulo.
https://portal.vidadesilicio.com.br/wp-content/uploads/2017/03/Modulo-L298N-esquema.jpg
Olá, precisava de ajuda, estou usando uma ponte h l298n com um motor 12v, fiz a ligação conforme os esquemas ja esplicado aqui quanto em outros, mais o motor nao atinge sua rotação final, creio que n esteja chegando os 12v no motor. Alguem poderia mim ajudar?
Para um motor de 12V você precisa transformar essa tensão de 11V em 5V. Você pode usar um Regulador De Tensão LM2596 1.25V-35V Ajustavel.
Assim você alimenta ele com 11V e ajusta a saída para 5V. E com esse 5V você alimenta 2 pontes H’s, cada ponte H controlando 2 motores.
http://www.vidadesilicio.com.br/regulador-tens-o-lm2596.html
http://www.vidadesilicio.com.br/regulador-de-tensao-ajustavel-lm2596.html
Eu tenho 4 motores DC de 5v cada um e dois módiulos de ponte H L298N. Queria alimentar eles usando uma fonte externa de 11v, a ligação seria igual a essa que você mostrou?
Sei que este post já faz um tempo, mas nunca é tarde para receber elogios. Parabéns pela excelete didática ai explanar o assunto. Muito vem explicado e detalhado. Aprendi muito sobre essa ponte. Continuem com esses tutoriais. São excelentes. Muito obrigada. E mais uma vez… PARABÉNS!!!!