SUPORTE TÉCNICO
De segunda à sexta pelo e-mail:
suporte@robocore.net
CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

Controlando Motores com o Módulo L298N



Introdução

Uma das áreas do #MovimentoMaker, a Robótica, possui diversos criadores e hobbistas ao redor do mundo. Ela tem como intenção criar robôs controlados ou autônomos que realizam alguma função específica. Por exemplo, robôs que competem na categoria "Follow Line" têm o objetivo de se manter em cima da linha durante todo o percurso, e o completar o mais rápido possível. Porém nada disso seria possível se não houvesse como controlar os motores que movimentam o robô através das rodas.

Levando isso em conta, nesse tutorial você verá como acionar dois motores utilizando o driver L298N.

Lista de Materiais

Teoria Sobre o Funcionamento

Para fazer um motor com escova rotacionar o eixo, basta alimentar seus terminais com uma fonte apropriada. Porém para selecionar o sentido de rotação do motor seria necessário inverter a polaridade de alimentação do motor, o que dificulta o processo. As pontes H mais comuns utilizam quatro transistores que, ao receber um sinal vindo do microcontrolador, permitem a passagem de corrente para os terminais do motor, fazendo com que ele rotacione no sentido desejado, como é possível ver abaixo.

ponte h gif
Funcionamento da ponte H
Fonte: Blog Peter J. Vis

O driver L298N utiliza duas pontes H para controlar separadamente dois motores. Porém, além de controlar o sentido de rotação do motor, o driver também é capaz de controlar a velocidade do motor. Utiliza-se um sinal PWM para regular o nível de rotação do eixo. PWM (Pulse Width Modulation) significa Modulação por Largura de Pulso (MLP), e utiliza a razão do ciclo (duty cycle) para controlar o valor de alimentação. Como o sinal de PWM varia de 0% a 100% em relação ao duty cycle, as placas Arduino convertem o sinal gerado pelo comando analogWrite proporcionalmente. Deste modo, o sinal 255 da placa é convertido para um sinal PWM de 100%, e o sinal 0 da placa é convertido para um sinal PWM de 0%. Portanto um sinal de 127 da placa será convertido para um sinal PWM de 50%. Consequentemente, para um motor, o sinal 0 seria o motor parado, já o sinal 255 seria a sua rotação máxima. Abaixo é possível ver um exemplo com o sinal PWM sendo aplicado em um LED.

pwm no led
Funcionamento do sinal PWM
Fonte: Explore Embedded

Funcionamento do Driver L298N

O módulo L298N utiliza as portas In1, In2 e EnA para controlar o motor "A" (lado esquerdo do diagrama de blocos da imagem a seguir). Os pinos In1 e In2 são responsáveis pelo direcionamento do sentido do motor, e o pino EnA é responsável pela regulação de velocidade do motor "A", portanto o pino de saída da BlackBoard para o pino EnA do módulo deverá permitir um sinal PWM. Da mesma maneira que o motor "A", o motor "B" possui dois pinos de direcionamento de sentido, porém ao invés de serem os pinos In1 e In2, são os pinos In3 e In4. O pino que determina a velocidade do motor "B" é o EnB, que também deve permitir um sinal PWM vindo da BlackBoard. É possível observar o diagrama de blocos do funcionamento do chip L298N na imagem abaixo.

diagrama de blocos
Diagrama de blocos
Fonte: Datasheet L298

Rampa de Aceleração e Desaceleração

Neste tutorial utilizaremos uma rampa de aceleração e desaceleração para fazer com que o motor gire. A rampa de aceleração irá aumentar a velocidade do motor gradativamente até que ele atinja a sua velocidade máxima. Já a rampa de desaceleração fará o oposto com o motor, desacelerando gradativamente, na mesma proporção acelerada. Essa rampa de aceleração é utilizada para evitar que o motor atinja um pico de corrente ao ser partido. Como motores DC ao serem partidos diretamente tentam chegar à sua velocidade máxima, é recomendado utilizar uma rampa de aceleração para que sua velocidade seja atingida aos poucos, consumindo pouca corrente. Na imagem abaixo é possível observar o comportamento do motor durante uma rampa de aceleração e desaceleração.

diagrama de blocos
Curva de aceleração e desaceleração
Fonte: National Instruments

Circuito

Para realizar o experimento da rampa de aceleração e desaceleração, é necessário montar o circuito a seguir.

circuito fritzing
Circuito elétrico

Para alimentar a BlackBoard é necessário utilizar uma fonte que seja capaz de fornecer a tensão e a corrente suficientes para os motores. Para que o valor de saída seja o desejado, é necessário realizar a seguinte conta para obter o mínimo necessário para alimentar o motor, Vs = Vss + 2,5 V, sendo Vs a tensão de alimentação do módulo e Vss a tensão de alimentação lógica do módulo, que deve sempre estar próxima à 5 V, requerendo, portanto, uma alimentação de no mínimo 7,5 V. Assim como a alimentação lógica do módulo, a alimentação dos motores também deve levar em conta uma queda de tensão gerada pelo acionamento dos transistores. Essa queda de tensão no L298 é, em média, de 2,5 V (para 1 A). Deste modo, caso a tensão nominal do motor seja de 12 V, seria necessário alimentar o driver com uma fonte que forneça pelo menos 14,5 V, para compensar a queda de tensão do driver. Lembrando que o driver L298 só é capaz de fornecer no máximo 2 A para as saídas dos motores.

Código

Com o circuito montado copie o código abaixo para a Arduino IDE, e carregue-o para a placa.

O Que Deve Acontecer

O resultado esperado é uma aceleração e desaceleração rápida para os dois sentidos do motor. A rampa de aceleração é muito utilizada para diminuir o consumo de partida do motor em robôs, deste modo há também uma diminuição no tempo de descarga de baterias. Além de evitar que fontes chaveadas reiniciem ao não conseguir fornecer a corrente necessária para o motor, impedindo a partida dele.

Indo Além

A prototipagem de drivers, assim como a de muitos módulos, pode ser um complicação devido à quantidade de fios. Para facilitar a prototipagem de alguns componentes, existem alguns Shields, compatíveis com a plataforma Arduino UNO, que, ao se encaixarem na placa, já conectam os pinos do componente às saídas necessárias. Como é o caso do Shield Motor Driver 2x2A, que possui um chip L298P, que é o mesmo chip do módulo L298N, porém com outra configuração. Com ele é possível controlar o sentido e a velocidade do motor utilizando uma quantidade menor de portas digitais da placa, porém com a mesma capacidade de controle dos motores.

Solucionando Problemas

Os Motores estão Rotacionando em Sentidos Diferentes?

Pode ser que as polaridades de conexão nos motores estejam invertidas. Tente trocar a polaridade na conexão do driver de um dos motores, e observe os resultados.

Driver não Funciona?

Atrás do borne de alimentação do módulo há dois pinos macho. Eles devem estar conectados com um jumper, pois o jumper integra o circuito do regulador de tensão para alimentar o circuito lógico do módulo. Caso não seja possível utilizar um jumper, é necessário alimentar, também, o módulo com 5 V pelo borne "+5 V".

Avatar


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


programasupergenius
date Enviado: 2021-08-20 08:53:53
Posso alimentar esse esquema acima com esta fonte? Fonte Chaveada 12V 1A

Giovanni5
date Enviado: 2021-08-20 09:12:48
programasupergenius
Se você utilizar o mesmo modelo de motor que o utilizado neste tutorial, sim, uma fonte de 12V 1A pode ser utilizada para alimentar esse circuito, pois esse modelo de motor possui um consumo de corrente baixo. Entretanto, se não estiver utilizando o mesmo modelo de motores deste tutorial, será necessário utilizar uma fonte que seja capaz de suprir o consumo de corrente do modelo de motor usado, e o consumo de corrente da placa Arduino e do Driver também. Normalmente também é considerada uma margem, para que a fonte suporte eventuais picos de consumo de corrente.

Giovanni5
date Enviado: 2021-08-20 09:13:56
programasupergenius
Vale lembrar também que, o driver L298N só é capaz de fornecer 2A por canal (motor), então se estiver utilizando outro modelo de motor, que possua um consumo de corrente maior do que este limite, o driver poderá ser danificado.

solmota75
date Enviado: 2021-08-16 10:13:34
sem o Driver L298N

solmota75
date Enviado: 2021-08-16 10:12:40
tem como controlar os motores via potenciometro?

Giovanni5
date Enviado: 2021-08-16 10:37:53
solmota75
Sim, é possível utilizar um MOSFET, como o do módulo IRF520 (https://www.robocore.net/driver-motor/modulo-mosfet-irf520), por exemplo, para controlar a velocidade de um motor , porém o motor só irá girar em um sentido, e ainda assim será necessária uma placa Arduino para converter a leitura analógica do potenciômetro em sinal PWM.

oscar.dt
date Enviado: 2020-10-28 13:20:15
Boa tarde, é possível utilizar este programa para controlar apenas um motor?

Giovanni5
date Enviado: 2020-10-28 13:46:39
oscar.dt
Sim, é possível, basta remover as conexões do segundo canal do driver, que controla o segundo motor, e remover os respectivos comandos do código. Assim o projeto continuará funcionando normalmente, mas controlando apenas um motor.

tonyf.eng
date Enviado: 2020-07-16 14:01:09
Boa tarde...
Teria como disponibilizar um exemplo com a rotaçao sendo ativada por 2 botoes...um botao ativa um sentido da rotacao do motor e o outro botao ativa o outro sentido da rotacao.
Obrigado.

Giovanni5
date Enviado: 2020-07-16 14:14:52
tonyf.eng
Infelizmente não temos ainda um tutorial específico para isso, porém agradecemos pela sugestão, iremos analisar a possibilidade de desenvolver algo deste gênero.

celio-p-silva
date Enviado: 2020-06-27 00:43:32
Boa noite pessoal... Será que alguém pode me ajudar com uma questão?
Estou controlando um motor de passo usando a ponte H 298N , e preciso de uma forma de parar um motor de passo bipolar , no meio da revolução usando um fim de curso , não estou achando um meio para isso , ele não aceita comando antes de terminar a revolução!! Os tutoriais que achei usam outros drivers para tal...
Des de já agradeço a atenção ... Obrigado!!
 if (botao1.pressed()){
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(5*stepsPerRevolution);
  }
 if (botao2.pressed()){ ???
}

Giovanni5
date Enviado: 2020-06-29 09:20:44
celio-p-silva
Não é recomendado utilizar o L298N para controlar o gir de motores de passo, já que ele é um driver específico para motores DC. De toda forma, você pode utilizar o seu fim de curso como uma interrupção no sistema, deste modo o motor iria parar a rotação do motor, no meio de sua revolução. Você pode utilizar o link a seguir como referência para este projeto, https://www.arduino.cc/reference/pt/language/functions/external-interrupts/attachinterrupt/ .

jwr
date Enviado: 2020-04-10 11:32:29
Muito legal esse post, parabéns.

È possível substituir o "i" por um PWM para que com o comando de um potenciômetro eu consiga subida suave, mesmo jogando o potenciômetro de 0 a 100% muito rápido? EX de cod

/***************************************\
** ROBOCORE ARDUINO KIT INICIANTE **
* *
** Projeto Dimmer **
\***************************************/
const int PinoPotenciometro = 0;
const int Led = 11;
int ValorPot = 0;
int pwm = 0;
void setup() {
 pinMode(Led, OUTPUT);
}
void loop() {
 ValorPot = analogRead(PinoPotenciometro);
 pwm = map(ValorPot, 0, 1023, 0, 255);
 analogWrite(Led, pwm);
}

Giovanni5
date Enviado: 2020-04-13 08:11:26
jwr
Sim, é possível realizar este projeto, porém você terá de alterar o código para identificar a variação de leitura do potenciômetro, e então efetuar a curva de aceleração e desaceleração. Talvez a melhor solução seja armazenar as leituras do potenciômetro em duas variáveis auxiliares, uma de leitura anterior, e uma de leitura atual. Deste modo você poderá compará-las, e, caso a variável atual seja maior que a variável anterior, o código executa a curva de aceleração, por exemplo.

tadificil
date Enviado: 2020-03-03 16:20:06
recebi sua mensagem  e encaminhei ao suporte um email.. mas o video nao consigo mesmo feito pelo celular é grande para meu email

Giovanni5
date Enviado: 2020-03-03 16:34:15
tadificil
Nós recebemos o seu e-mail, e prosseguiremos com o suporte através daquele canal.