Controle o motor DC usando o driver L298N com Raspberry Pi Pico e MicroPython

Tempo de leitura: 8 minutes

Neste guia do usuário, aprenderemos como controlar um motor DC com Raspberry Pi Pico no MicroPython usando um driver de motor L298N. Apresentaremos o módulo de driver do motor L298N e, em seguida, o usaremos para aprender alguns controles básicos do motor dc, incluindo partida, parada, movimento para trás e para frente através de nossa placa Raspberry Pi Pico.

 

Pré-requisitos

Antes de começarmos esta lição, certifique-se de estar familiarizado e ter a versão mais recente do Python3 instalada em seu sistema e configurar o MicroPython em seu Raspberry Pi Pico. Além disso, você deve ter um ambiente de desenvolvimento integrado (IDE) em execução para fazer a programação.

 

Módulo de driver de motor L298N

Os motores DC podem ser controlados através de diversos drivers amplamente disponíveis no mercado. Para este projeto, usaremos o módulo de driver de motor L298N, pois é muito fácil e relativamente barato também. É amplamente utilizado no controle de robôs, pois podemos conectar até quatro motores ao mesmo tempo, mas se quisermos controlar a velocidade e a direção também, permite que dois motores sejam conectados. Assim, é perfeito para robôs de duas rodas. Este módulo é usado principalmente em robótica e no controle de motores CC e de passo.

O módulo driver de motor L298N consiste em um driver de motor L298N IC ,78M05 regulador de 5V, habilitação de jumper de 5V, LED de energia, dissipador de calor, resistores e capacitores todos combinados em um circuito integrado. O diagrama abaixo mostra todos os componentes que consistem dentro do módulo.

O driver do motor L298N IC é construído de forma poderosa com um grande dissipador de calor. É um driver de motor de ponte H de canal duplo que pode ser facilmente usado para acionar dois motores.

O módulo também possui um regulador 78M05 5V que é habilitado através de um jumper. Mantendo o jumper intacto, significa que o regulador de 5V está habilitado. Se a fonte de alimentação do motor for inferior a 12V, alimentaremos o módulo através do regulador de tensão. O pino de 5V neste caso atua como uma saída para alimentar o microcontrolador. Se a fonte de alimentação for superior a 12V, certifique-se de que o jumper não esteja intacto e forneça alimentação de 5V através do pino separadamente.

Nota: Se o jumper estiver conectado, não alimente a entrada da fonte de alimentação do motor e a entrada da fonte de alimentação de 5V.

 

Especificações

A tabela mostra algumas especificações do módulo driver do motor L298N:

Modelo DriverL298N
Driver ChipPonte H dupla L298N
Força maxima25W
Tensão máxima de alimentação do motor46V
Corrente máxima de alimentação do motor2A
Voltagem Driver5-35V
Corrente Driver2A
Tamanho43x43x26mm

Especificações do Módulo L298N

PinOut

Vejamos agora a pinagem do módulo.

Nome do pinoDescrição
VCCEste é o pino que fornece energia ao motor. É impresso com +12V a bordo, mas pode ser alimentado entre 6-12V.
GroundEste é o pino terra comum.
5VEste pino fornece a energia (5V) para o circuito interno (L298N IC). Será usado somente se o jumper de habilitação de 5V não estiver intacto. Se o jumper estiver intacto, ele atua como um pino de saída.
ENAEste pino controla a velocidade do motor A habilitando o sinal PWM.
IN1 & IN2Estes são os pinos de entrada para o motor A. Eles controlam a direção de rotação para aquele motor em particular.
IN3 & IN4Estes são os pinos de entrada para o motor B. Eles controlam a direção de rotação para aquele motor em particular.
ENBEste pino controla a velocidade do motor B habilitando o sinal PWM.
OUT1 & OUT2OUT1: Terminal positivo.
OUT2: Terminal negativoEstes são os pinos de saída do motor A. O motor A com tensão entre 5-35V, será conectado através destes dois terminais.
OUT3 & OUT4OUT3: Terminal positivo
OUT4: Terminal negativoEstes são os pinos de saída para o motor B.

 

Controlando motores DC através do módulo L298N e MicroPython

Vamos agora ver os detalhes por trás do controle do motor dc através do módulo L298N

 

Pinos de controle

Existem dois tipos de pinos de controle encontrados no lado inferior direito do módulo. Um tipo controla a velocidade e o outro tipo controla a direção do motor.

Pinos de Controle de Velocidade (HABILITAR)
Os pinos de controle de velocidade identificados como ENA e ENB no módulo controlam a velocidade do motor CC e o ligam e desligam.

ENA controla a velocidade do motor A e ENB controla a velocidade do motor B. Se ambos os pinos estiverem em um estado lógico ALTO (5V), ambos os motores estarão LIGADOS e girando na velocidade máxima. Se ambos os pinos estiverem em um estado lógico BAIXO (terra), ambos os motores estarão DESLIGADOS. Através da funcionalidade PWM também podemos controlar a velocidade do motor. Por padrão, há um jumper conectado a esses pinos que mantém esses pinos em estado ALTO. Para controlar a velocidade, precisamos remover o jumper e conectar esses terminais com os pinos PWM do Raspberry Pi Pico e programá-los em código. A tabela abaixo demonstra os sinais lógicos necessários para controlar o Motor A.

ENA Pino StateMotor Action
1 (HIGH)ON
0 (LOW)OFF

Se a ENA estiver em estado ALTO, o motor está habilitado e se estiver em estado BAIXO, o motor está desligado.

Pinos de Controle de Direção (ENTRADA)

Os pinos de controle de direção são os quatro pinos de entrada (IN1, IN2, IN3, IN4) no módulo.

Por meio desses pinos de entrada, podemos determinar se devemos mover o motor CC para frente ou para trás. IN1 e IN2 controlam o sentido de giro do motor A enquanto IN3 e IN4 controlam o sentido de giro do motor B. A tabela abaixo mostra os sinais lógicos necessários para a ação de rotação apropriada para o motor A.

IN1IN2Ação do Motor
1 (ALTO)1Desligado
10 (BAIXO)Para trás
01Avançar
00Desligado

Como visto na tabela, sempre que uma das entradas estiver em estado ALTO (5V), o motor irá girar. Caso contrário, quando ambas as entradas estiverem no estado LOW (terra) ou ambas estiverem no estado HIGH, o motor parará. Para que o motor A gire para frente, IN1 deve ser LOW e IN2 deve ser HIGH. Para movimento para trás, IN1 deve ser HIGH e IN2 deve ser LOW. O motor B também é controlado de maneira semelhante.

 

Interface de motor DC e driver de motor L298N com Raspberry Pi Pico

Agora, como vimos como controlar o motor dc através do driver do motor, vamos fazer uma demonstração incorporando nossa placa Raspberry Pi Pico. Você vai precisar do seguinte equipamento.

Equipamento Necessário

  • Raspberry PI Pico
  • Módulo de driver de motor L298N
  • Servo Motor DC (Amarelo)
  • Uma bateria de 9V
  • Capacitor de 0,1uF
  • Um interruptor
  • Fios de conexão

Monte o circuito conforme mostrado no diagrama de conexão abaixo

Nós estaremos usando os pinos de saída do motor A para controlar este motor. Assim, ENA definirá a velocidade e IN1 e IN2 definirão o sentido de giro do motor. GP4 está conectado com ENA. GP3 e GP2 são conectados com IN1 e IN2 respectivamente. Você pode escolher os pinos GPIO apropriados ao conectar a placa Raspberry Pi Pico e o módulo de driver juntos.

O motor CC é classificado em 6-12V e requer uma grande quantidade de corrente para dar partida. É por isso que usaremos uma fonte de alimentação externa para o motor CC. Como podemos usar qualquer fonte de alimentação de 6-12V, vamos incorporar uma bateria de 9V em nosso gabinete. Você pode usar qualquer outra fonte de energia como quiser. Estamos usando um interruptor deslizante conectado à fonte de bateria de 9V, que é muito útil para cortar a fonte de alimentação. Desta forma, podemos ligar e desligar o driver sem conectar e desconectar os fios manualmente. Também conectamos um capacitor aos dois terminais do motor CC para que não haja picos de tensão abruptos. Você não precisa incluir a chave e o capacitor, pois são opcionais, mas aumentam a funcionalidade do projeto.

 

Script MicroPython: Controlar Motor DC

Copie e salve o seguinte código em seu main.py para sua placa Raspberry Pi Pico.

O motor CC se moverá para frente, parará e então se moverá para trás em velocidade crescente infinitamente.

from machine import Pin, PWM
from time import sleep

IN1 = Pin(3, Pin.OUT)
IN2 = Pin(2, Pin.OUT)

speed = PWM(Pin(4))
speed.freq(1000)

while True:
        speed.duty_u16(10000)
        IN1.low()  #spin forward
        IN2.high()
        sleep(5)
        
        IN1.low()  #stop
        IN2.low()
        sleep(2)
        
        speed.duty_u16(20000)
        IN1.high()  #spin backward
        IN2.low()
        sleep(5)
        
        IN1.low()  #stop
        IN2.low()
        sleep(2)
    
        speed.duty_u16(30000)
        IN1.low()  #spin forward
        IN2.high()
        sleep(5)
        
        IN1.low()  #stop
        IN2.low()
        sleep(2)
        
        speed.duty_u16(40000)
        IN1.high()  #spin backward
        IN2.low()
        sleep(5)

 

Como o Código Funciona?

Comece por importar as classes pin e pwm do módulo machine, pois temos que lidar com ambos. A aula de sono ajudará a causar atrasos entre cada transição.

from machine import Pin, PWM
from time import sleep

Em seguida, definiremos os pinos IN1 e IN2 como saídas. O primeiro argumento na classe Pin() é o número do pino no qual estamos configurando a saída. A saída está no GP3 que está conectado ao IN1. O segundo argumento mostra o modo pin, por exemplo. entrada digital ou modo de saída digital. Como estamos configurando o pino 3 como a saída digital que demos, especifica como ‘Pin.Out’. Isso é armazenado no objeto ‘IN1’. Da mesma forma, vamos configurar o GP2 como saída também. Este é o pino IN2.

IN1 = Pin(3, Pin.OUT)
IN2 = Pin(2, Pin.OUT)

Em seguida, criamos um objeto de pino PWM chamado ‘speed’ para passar o pino pwm como parâmetro. O parâmetro mostra onde o pino está conectado em nosso caso GP4.

Em seguida, configuraremos a frequência do sinal PWM.

speed = PWM(Pin(4))
speed.freq(1000)

 

Alteração da velocidade e direção do motor

Dentro do loop infinito, começaremos girando o motor no sentido direto por 5 segundos. Isso é feito definindo o pino IN1 baixo e IN2 alto. Além disso, monitoraremos a velocidade do motor alterando o ciclo de trabalho do sinal PWM aplicado no pino PWM.

A faixa de ciclo de trabalho para Raspberry Pi Pico está entre 0-65535. Incrementar o ciclo de trabalho aumentará a velocidade do motor. Passamos o ciclo de trabalho dentro de speed.duty_u16() para alterar a velocidade do motor. Usamos o ciclo de trabalho crescente para aumentar a velocidade do motor após cada transição.

speed.duty_u16(10000)
IN1.low()  #spin forward
IN2.high()
sleep(5)

Em seguida, vamos parar o motor por 2 segundos. Isso é feito definindo os pinos IN1 e IN2 para baixo.

IN1.low()  #stop
IN2.low()
sleep(2)

Em seguida, vamos girar o motor no sentido inverso por 5 segundos. Isso é feito configurando o pino IN1 para alto e o pino IN2 para baixo.

speed.duty_u16(20000)
IN1.high()  #spin backward
IN2.low()
sleep(5)

Da mesma forma, primeiro moveremos o motor para frente por 5 segundos, depois pararemos por 2 segundos e, em seguida, moveremos o motor para trás por 5 segundos enquanto aumentamos a velocidade em cada transição.

while True:
        speed.duty_u16(10000)
        IN1.low()  #spin forward
        IN2.high()
        sleep(5)
        
        IN1.low()  #stop
        IN2.low()
        sleep(2)
        
        speed.duty_u16(20000)
        IN1.high()  #spin backward
        IN2.low()
        sleep(5)
        
        IN1.low()  #stop
        IN2.low()
        sleep(2)
    
        speed.duty_u16(30000)
        IN1.low()  #spin forward
        IN2.high()
        sleep(5)
        
        IN1.low()  #stop
        IN2.low()
        sleep(2)
        
        speed.duty_u16(40000)
        IN1.high()  #spin backward
        IN2.low()
        sleep(5)

 

Demonstração

Para testar o script MicroPython para motor DC com Raspberry Pi Pico, carregue o arquivo main.py em sua placa.