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
Lista completa de produtos
comprarBlackBoard UNO R3
Módulo Driver Ponte H - L298N
Fonte Chaveada 12V 1A
Cabo USB AB 1.50m
Jumpers Macho-Macho x40 Unidades
Jumper Premium 10cm Macho-Fêmea - 40 Unidades
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.
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.
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.
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.
Circuito
Para realizar o experimento da rampa de aceleração e desaceleração, é necessário montar o circuito a seguir.
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".