Controle o motor DC usando o driver L298N com Raspberry Pi Pico e MicroPython
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.
Conteudo
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 Driver | L298N |
Driver Chip | Ponte H dupla L298N |
Força maxima | 25W |
Tensão máxima de alimentação do motor | 46V |
Corrente máxima de alimentação do motor | 2A |
Voltagem Driver | 5-35V |
Corrente Driver | 2A |
Tamanho | 43x43x26mm |
Especificações do Módulo L298N
PinOut
Vejamos agora a pinagem do módulo.
Nome do pino | Descrição |
VCC | Este é o pino que fornece energia ao motor. É impresso com +12V a bordo, mas pode ser alimentado entre 6-12V. |
Ground | Este é o pino terra comum. |
5V | Este 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. |
ENA | Este pino controla a velocidade do motor A habilitando o sinal PWM. |
IN1 & IN2 | Estes são os pinos de entrada para o motor A. Eles controlam a direção de rotação para aquele motor em particular. |
IN3 & IN4 | Estes são os pinos de entrada para o motor B. Eles controlam a direção de rotação para aquele motor em particular. |
ENB | Este pino controla a velocidade do motor B habilitando o sinal PWM. |
OUT1 & OUT2 | OUT1: 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 & OUT4 | OUT3: 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 State | Motor 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.
IN1 | IN2 | Ação do Motor |
1 (ALTO) | 1 | Desligado |
1 | 0 (BAIXO) | Para trás |
0 | 1 | Avançar |
0 | 0 | Desligado |
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.