Controle do motor de passo com o driver de motor L298N e o Arduino
Se estiver planejando montar o seu novo robô, você vai querer aprender a controlar os motores de passo. A maneira mais fácil e econômica de controlar os motores de passo é usar o driver de motor L298N. Ele pode controlar a velocidade e o sentido de rotação de qualquer motor de passo bipolar de pequeno a médio porte, como o NEMA 17.
Se quiser controlar vários motores de passo, é recomendável usar um driver de motor de passo dedicado e autônomo, como o A4988.
Controle de um motor de passo com uma ponte H
O módulo L298N tem duas pontes H. Cada ponte H aciona uma das bobinas eletromagnéticas de um motor de passo.
Ao energizar essas bobinas eletromagnéticas em uma sequência específica, o eixo do motor de passo pode ser movido para frente ou para trás com precisão em pequenos passos.
Entretanto, a velocidade do motor é determinada pela frequência com que essas bobinas são energizadas.
A animação a seguir mostra como as pontes H acionam um motor de passo.
Chip de driver de motor L298N
No centro do módulo há um chip grande e preto com um dissipador de calor robusto – o L298N, da ST Semiconductor.
Dentro do chip L298N, você encontrará duas pontes H padrão capazes de acionar um par de motores CC ou um único motor de passo.
O driver de motor L298N tem uma faixa de alimentação de 5V a 35V e é capaz de fornecer 2 A de corrente contínua por bobina, portanto, funciona muito bem com a maioria dos nossos motores de passo.
Especificações técnicas
Aqui estão as especificações:
Tensão de saída do motor | 5V – 35V |
Tensão de saída do motor (recomendado) | 7V – 12V |
Tensão de entrada lógica | 5V – 7V |
Corrente contínua por canal | 2A |
Dissipação de potência máxima | 25W |
Para obter mais detalhes, consulte a folha de dados abaixo.
Pinagem do módulo de driver de motor L298N
O módulo L298N tem um total de 11 pinos que o conectam ao mundo externo. Os pinos são os seguintes:
Vamos nos familiarizar com todos os pinos, um por um.
Pinos de alimentação
O módulo de driver de motor L298N é alimentado por meio de um terminal de parafuso de 3 pinos com passo de 3,5 mm.
Na verdade, o driver de motor L298N tem dois pinos de alimentação de entrada – VS e VSS.
O pino VS fornece energia às pontes H internas do CI para acionar o motor. Você pode conectar a esse pino uma tensão de entrada entre 5 e 12V.
O VSS é usado para acionar o circuito lógico dentro do CI L298N, que pode ser de 5 a 7V.
GND é o pino de aterramento comum.
Pinos de saída
Os canais de saída OUT1, OUT2, OUT3 e OUT4 do driver de motor L298N são divididos na borda do módulo com dois terminais de parafuso com passo de 3,5 mm. Você pode conectar qualquer motor de passo de 12-24 V a esses terminais.
Cada canal do módulo pode fornecer até 2 A para o motor de passo. Entretanto, a quantidade de corrente fornecida ao motor depende da fonte de alimentação do sistema.
Pinos de controle
Usando os quatro pinos de controle IN1, IN2, IN3 e IN4, é possível controlar a velocidade e o sentido de rotação do motor de passo. Na verdade, esses pinos controlam os interruptores do circuito de ponte H dentro do chip L298N.
A maneira como você pulsa esses pinos afeta o comportamento do motor.
1. A sequência de pulsos determina a direção de giro do motor.
2. A frequência dos pulsos determina a velocidade do motor.
3. O número de pulsos determina a distância que o motor irá girar.
Pinos de habilitação
Os pinos de habilitação ENA e ENB são usados para habilitar ou desabilitar o motor independentemente dos sinais de entrada.
Puxar esses pinos para ALTO habilitará o motor, enquanto puxá-los para BAIXO desabilitará o motor.
O módulo geralmente vem com jumpers nesses pinos. Quando os jumpers estão no lugar, o motor está habilitado. Se quiser controlar o motor programaticamente, será necessário remover os jumpers e conectar esses pinos aos pinos digitais do Arduino.
Regulador de 5V integrado e jumper
O módulo tem um regulador de 5V integrado – 78M05. Ele pode ser ativado ou desativado por meio de um jumper.
Quando esse jumper está no lugar, o regulador de 5V é ativado, o que deriva a fonte de alimentação lógica (VSS) da fonte de alimentação do motor (VS). Nesse caso, o terminal de entrada de 5V (VSS) atua como pino de saída e fornece 5V 0,5A. Você pode usá-lo para alimentar o Arduino ou outro circuito que exija uma fonte de alimentação de 5V.
Quando o jumper é removido, o regulador de 5 V é desativado e temos que fornecer 5 V separadamente por meio do pino VSS.
Aviso:
Você pode deixar o jumper no lugar se a fonte de alimentação do motor for menor que 12V. Se for superior a 12 V, você deverá remover o jumper para evitar danos ao regulador de 5 V integrado.
Além disso, NÃO forneça energia aos pinos VSS e VS enquanto o jumper estiver no lugar.
Como identificar as fases de um motor de passo bipolar?
Antes de começar a conectar o motor ao módulo, você precisa identificar as fases do motor que planeja usar. A melhor maneira de fazer isso é verificar a folha de dados do motor.
Se você não conseguir encontrar a folha de dados, use o seguinte truque.
– Coloque seu multímetro no modo “resistência” e simplesmente meça a resistência de pares de fios.
– Se a resistência for de apenas alguns ohms (<100Ω), você tem um par.
– Os outros dois fios devem formar o segundo par.
Ligação de um motor de passo bipolar ao módulo L298N e ao Arduino
Vamos começar conectando a fonte de alimentação ao módulo. Em nosso experimento, estamos usando um stepper bipolar NEMA 17 classificado em 12V. Portanto, conectaremos a fonte de alimentação externa de 12 V ao terminal VS.
Em seguida, precisamos fornecer 5 V ao circuito lógico do L298N. Usaremos o regulador de 5V integrado para derivar 5V da fonte de alimentação do motor, portanto, deixe o jumper 5V-EN no lugar.
Você também precisa manter os jumpers ENA e ENB no lugar para que o motor esteja sempre ativado.
Agora, conecte os pinos de entrada (IN1, IN2, IN3 e IN4) do módulo L298N aos quatro pinos de saída digital do Arduino (8, 9, 10 e 11).
Por fim, conecte uma fase do motor ao terminal A (OUT1 e OUT2) e a outra fase ao terminal B (OUT3 e OUT4). A polaridade não importa.
A imagem a seguir mostra como fazer a ligação de tudo.
Código Arduino – Controle do motor de passo NEMA 17
Aqui está o sketch simples que faz o motor de passo girar no sentido horário a 60 RPM e depois no sentido anti-horário.
Esse sketch lhe dará uma compreensão completa de como controlar um motor de passo bipolar como o NEMA 17 com o driver de motor L298N e pode servir de base para experimentos e projetos mais práticos.
// Include the Arduino Stepper Library #include <Stepper.h> // Number of steps per output rotation const int stepsPerRevolution = 200; // Create Instance of Stepper library Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { // set the speed at 60 rpm: myStepper.setSpeed(60); // initialize the serial port: Serial.begin(9600); } void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(500); }
Explicação do código:
O sketch começa com a inclusão da biblioteca Arduino Stepper. A biblioteca de passo é fornecida com o IDE do Arduino e cuida do sequenciamento dos pulsos que são enviados ao motor.
// Include the Arduino Stepper Library #include <Stepper.h>
Depois de incluir a biblioteca, definimos uma variável chamada stepsPerRevolution. Como o nome sugere, é o número de passos por revolução que seu motor está classificado. No nosso caso, é 200.
// Number of steps per output rotation const int stepsPerRevolution = 200;
Em seguida, criamos um objeto da biblioteca Stepper. O construtor da classe Stepper usa como argumentos as etapas por rotação do motor e as conexões de pinos do Arduino.
// Create Instance of Stepper library Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
Na seção de configuração do código, definimos a velocidade do motor de passo chamando a função setSpeed() e inicializamos a comunicação serial.
void setup() { // set the speed at 60 rpm: myStepper.setSpeed(60); // initialize the serial port: Serial.begin(9600); }
Por fim, na seção de loop do código, simplesmente chamamos a função step(), que faz o motor girar um número específico de etapas a uma velocidade definida pela função setSpeed(). Passar um número negativo para essa função inverte a direção de rotação do motor.
void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(500); }