Como controlar motores DC em um Arduino com um driver de motor L293D

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Existem várias maneiras de controlar motores DC com um Arduino. Mas um dos mais fáceis e populares é o driver de motor L293D. O driver do motor L293D foi projetado especificamente para controlar motores DC, motores de passo, solenóides e qualquer outra carga com alta impedância. Uma de suas principais vantagens é que ele pode controlar a velocidade e direção de dois motores DC de forma independente.

Anúncio PCBWay

Neste tutorial, abordaremos o seguinte:

  • Como o driver do motor L293D funciona
  • Como conectar um motor L293D e DC ao Arduino
  • Como controlar a direção de um único motor DC
  • Como controlar a velocidade de dois motores DC

Como o L293D funciona

o L293D é um H-Bridge de canal duplo IC capaz de controlar dois motores DC. O L293D pode controlar até dois motores DC classificados de 4,5V a 36V.

O diagrama esquemático abaixo mostra uma versão simplificada do circuito interno que controla um motor:

Como controlar motores DC em um Arduino com um driver de motor L293D 1

Dois pares de transistores Darlington (Q1 / Q4 e Q2 / Q3) são configurados como uma ponte-H. Existe um diodo através do emissor e coletor de cada transistor, para evitar EMF de volta do motor, causando danos aos transistores.

Quando os transistores Q1 e Q4 estão ambos LIGADOS e os transistores Q2 e Q3 estão DESLIGADOS, a corrente flui através do motor de Vcc para o terra da seguinte maneira:

Como controlar motores DC em um Arduino com um driver de motor L293D 2

Isso faz com que o motor gire no sentido horário ou anti-horário. A direção do giro depende da polaridade do motor e de como você o conecta à fonte de alimentação.

Quando os transistores Q2 e Q3 estão LIGADOS e Q1 e Q4 estão DESLIGADOS, a corrente através do motor é revertida. Ao reverter o fluxo de corrente através do motor, a direção de sua rotação será revertida.

Como controlar motores DC em um Arduino com um driver de motor L293D 3

Diagrama de pinos L293D

Aqui está um diagrama de pinos do L293D:

Diagrama de pinos L293D

O L293D possui duas pontes H separadas. Uma ponte H está à esquerda e a outra à direita:

Como controlar motores DC em um Arduino com um driver de motor L293D 4
Diagrama de pinos L293D - duas pontes H

A ponte H 1 pode controlar um motor e a ponte H 2 pode controlar outro motor.

Leia Também  Top 10 coisas para fazer em casa para impulsionar seu sistema imunológico

Cada pino tem a seguinte função:

  • Saída 1: potência para o motor H-bridge 1
  • Saída 2: potência para o motor H-bridge 1
  • Saída 3: potência para o motor H-bridge 2
  • Saída 4: potência para o motor H-bridge 2
  • Vcc 1: Alimentação de 5V para o chip L293D
  • Vcc 2: fonte de alimentação para os motores (4,5V a 36V DC)
  • Ativar 1, 2: liga / desliga a ponte H 1 (HIGH habilita, LOW desabilita)
  • Ativar 3, 4: liga / desliga H-bridge 2 (HIGH habilita, LOW desabilita)
  • Entrada 1: sinal de controle do motor para ponte H 1
  • Entrada 2: sinal de controle do motor para ponte H 1
  • Entrada 3: sinal de controle do motor para ponte H 2
  • Entrada 4: sinal de controle do motor para ponte H 2

Para ligar o motor da ponte H 1, envie um sinal HIGH para o pino de entrada 1 e o sinal LOW para o pino de entrada 2. Isso fará com que o motor gire em uma direção. Para fazer o motor girar na direção oposta, envie um sinal BAIXO para o pino de entrada 1 e um sinal ALTO para o pino de entrada 2. Para desligar o motor, envie um sinal de BAIXA para o pino de entrada 2.

Instalação de um motor CC com o L293D

Neste tutorial, criaremos alguns projetos de exemplo para demonstrar como usar o L293D para controlar motores DC no Arduino. Para criar os projetos de exemplo, você precisará das seguintes partes:

Conecte o motor DC e o L293D ao Arduino

Vamos criar um exemplo de projeto que fará um motor DC girar em uma direção por dois segundos, parar e depois girar na direção oposta por dois segundos. Para criar este projeto, conecte o motor DC, L293D e Arduino, desta forma:

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Você provavelmente precisará de uma fonte de alimentação separada para o motor. Aqui, estamos usando uma fonte de 12V para alimentar o motor e uma fonte de 5V separada para alimentar o Arduino e o L293D.

Leia Também  Melhores kits de ferro de solda para todos os entusiastas da eletrônica - Guia Detalhado de Revisão e Compra

Código Arduino para controlar um motor DC

Depois de criar o circuito acima, carregue este código no seu Arduino:

int in1 = 10;
int in2 = 11;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
}

void loop() {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  delay(2000);
  digitalWrite(in1, LOW);
  delay(1000);

  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  delay(2000);
  digitalWrite(in2, LOW);
  delay(1000);
}

As duas primeiras linhas de código atribuem o in1 variável ao pino 10 de Arudino, e in2 variável ao pino 11. Em seguida, na seção de configuração, definimos in1 e in2 como saídas com o pinMode() função.

No loop seção, digitalWrite(in1, HIGH) e digitalWrite(in2, LOW) vira in1 ALTO e in2 BAIXO, o que faz o motor girar em uma direção. o delay(2000) A função mantém o motor girando por dois segundos. Então, digitalWrite(in1, LOW) desliga o motor configurando in1 BAIXO. o delay(1000) A função mantém o motor desligado por um segundo.

Depois que o motor estiver desligado por um segundo, invertemos a direção do motor definindo in1 BAIXO e in2 ALTO com digitalWrite(in1, LOW) e digitalWrite(in2, HIGH). Nós usamos delay(2000) para manter o motor girando em marcha à ré por dois segundos. Então desligamos o motor configurando in2 BAIXO com digitalWrite(in2, LOW).

Controlar a direção de dois motores

Agora vamos adicionar um segundo motor ao circuito. Siga o diagrama de fiação abaixo para conectar tudo:

Como controlar motores DC em um Arduino com um driver de motor L293D 6

Código Arduino para controlar a direção de dois motores

Este esboço fará com que um dos motores gire para frente e para trás por dois segundos, depois faça o outro motor girar para frente e para trás por dois segundos.

int in1 = 10;
int in2 = 11;
int in3 = 12;
int in4 = 13;
int ena = 9;
int enb = 6;

void setup() {
  pinMode(ena, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(ena, INPUT);
  pinMode(enb, INPUT);
}

void loop() {
  digitalWrite(ena, HIGH); 
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  delay(2000);
  digitalWrite(in1, LOW);   
  delay(1000);
  
  digitalWrite(in1, LOW);   
  digitalWrite(in2, HIGH);
  delay(2000);
  digitalWrite(in2, LOW); 
  delay(2000);
                         
  digitalWrite(enb, HIGH); 
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW); 
  delay(2000);
  digitalWrite(in3, LOW);  
  delay(1000);
  
  digitalWrite(in3, LOW);  
  digitalWrite(in4, HIGH);
  delay(2000);
  digitalWrite(in4, LOW); 
  delay(2000);
}

Controle a velocidade de dois motores

Agora vamos adicionar a capacidade de controlar a velocidade dos dois motores. Você precisará adicionar dois potenciômetros de 10K Ohm ao circuito anterior. Conecte todos os componentes de acordo com este diagrama de fiação:

Como controlar motores DC em um Arduino com um driver de motor L293D 7

Código Arduino para controlar a velocidade de dois motores

Depois de conectar o circuito acima, faça o upload deste código no Arduino:

int in1 = 10;
int in2 = 11;
int in3 = 12;
int in4 = 13;
int speedControl1 = A2;
int speedControl2 = A1;
int ena = 9;
int enb = 6;
int setting1 = 0;      
int setting2 = 0;    

void setup() {
  pinMode(ena, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(ena, INPUT);
  pinMode(enb, INPUT);
}

void loop() {
  setting1 = analogRead(speedControl1);  
  analogWrite(ena, setting1);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  delay(2000);
  digitalWrite(in1, LOW);   
  delay(1000);
  
  digitalWrite(in1, LOW);   
  digitalWrite(in2, HIGH);
  delay(2000);
  digitalWrite(in2, LOW); 
  delay(2000);
                        
  setting2 = analogRead(speedControl2);
  analogWrite(enb, setting2); 
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW); 
  delay(2000);
  digitalWrite(in3, LOW);  
  delay(1000);
  
  digitalWrite(in3, LOW);  
  digitalWrite(in4, HIGH);
  delay(2000);
  digitalWrite(in4, LOW); 
  delay(2000);
}

Para usar os potenciômetros para controlar a velocidade dos motores de corrente contínua, fazemos uma analogRead() dos pinos conectados aos potenciômetros – speedControl1 e speedControl2. o analogRead() O valor medido a partir desses pinos será um número inteiro entre 0 e 1023, dependendo da posição do potenciômetro. Este valor é armazenado no setting1 e setting2 variáveis.

Leia Também  Blog do Tindie | Controle MIDI abrangente do seu rack!

O L293D enviará energia aos motores, dependendo da tensão aplicada aos pinos de habilitação. Quanto maior a tensão aplicada ao pino de habilitação, mais energia será fornecida ao motor e mais rápido ele girará. Então nós usamos analogWrite(ena, setting1) e analogWrite(enb, setting2) para enviar as leituras de tensão dos potenciômetros para os motores CC. Isso mudará a velocidade dos motores à medida que os potenciômetros são girados.

Como controlar motores DC em um Arduino com um driver de motor L293D 4
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br