I06 - Controlando um motor DC com L293D (Ponte H) e Arduino

Intermediário - Projeto 06

Controle de velocidade e sentido de rotação de um motor DC

Objetivo

Neste tutorial vamos mostrar como criar um circuito para controlar a velocidade e o sentido de rotação de um pequeno motor CC (motor de corrente contínua) com Arduino. O acionamento, velocidade e  sentido de rotação do motor será controlado através do circuito integrado L293D (ponte H) junto com o Arduino. Utilizaremos um potenciômetro para controlar a velocidade através do sinal PWM (Pulse Width Modulation) gerado pelo Arduino. Leia também: I05 - Controlando um motor DC com Arduino, transistor e potenciômetro

Definições

Motores CC (DC motor): De forma geral, os motores CC, de corrente contínua, são dispositivos que convertem energia elétrica em energia mecânica, gerando uma rotação no seu eixo. Este tutorial deve ser utilizado apenas para motores que consomem menos que 1A quando alimentados por uma tensão de 5 a 9V. No nosso projeto, vamos utilizar um motor de corrente contínua de 130mA para uma tensão de 5V com potência e rendimento máximo.

ATENÇÃO:

a) Nunca ligue o motor CC diretamente no Arduino, pois poderá danificar irreversivelmente o seu microcontrolador. Os pinos digitais do Arduino oferecem no máximo 40mA e um motor CC, mesmo que pequeno, consome muito mais que isto. Portanto, para controlar um motor CC é necessário a utilização de correntes mais altas que as do Arduino e por isso você deverá utilizar transistores ou circuitos chamados de Ponte H (ver wikipedia) como os circuitos integrados controladores de motores L293D ou SN754410. Esses componentes irão garantir correntes satisfatórias para operar o motor em vazio ou em plena carga.

b) Neste projeto escolhemos a utilização do CI L293D que além de ser bastante popular é uma ponte H dupla, onde podemos controlar até 2 motores independentemente. Veja abaixo algumas características do componente:

. 600mA por canal;
. 1.2A de corrente de pico por canal;
. Pino de Enable (Habilitação do canal);
. Proteção contra sobreaquecimento;
. Diodos de recuperação reversa internos;
. Tensão de alimentação de até 36V;
. Potência máxima: 4W;
. Pode controlar até 2 (dois) motores de corrente contínua comum;
. Pode controlar 1 (um) motor de passo de 4 fases.

b) Por questões de segurança, é altamente recomendável que se utilize uma fonte externa para alimentar o motor. Placas de Arduino, além de caras, são susceptíveis quando conectadas a dispositivos de correntes elevadas, como os motores de corrente contínua. Além disso, o motor utilizado poderá exigir tensões e correntes acima do que o Arduino pode fornecer. Lembre-se que o Arduino possui um regulador de tensão para 5V ou 3,3V.

b1. A fonte de alimentação externa deverá ter tensão e corrente suficientes para acionar e controlar o motor CC utilizado. Para evitar a queima do motor, não utilize fonte externa com tensões muito superiores à tensão de operação do motor. As características do motor devem ser obtidas no datasheet do componente.

b2. No nosso projeto, dividimos o circuito em 2 partes. A primeira parte é alimentada diretamente pelo Arduino (5V) que inclui o potenciômetro, leds e os botões de controle. A segunda parte é alimentada por um fonte ajustável de 5V com corrente máxima de 700mA que inclui o motor de corrente contínua e a ponte H L293D.

b3. É importante lembrar que a placa do Arduino deverá ser alimentada diretamente pela USB de um computador, baterias (9 ou 12V) ou por uma fonte chaveada de 9V ou 12V (plug P4), por exemplo.

c) Embora o CI L293D possua proteção contra sobre aquecimento não é aconselhável tocar no circuito interno quando ligado. Portanto, não toque no CI L293D quando ligado para evitar queimaduras.

d) Como o L293D já possui seus próprios diodos internos, não há necessidade incluirmos mais diodos de proteção para o Arduino. Portanto, as correntes parasitas geradas pela inércia do motor quando a alimentação é removida (força eletromotriz inversa) serão bloqueadas pelos diodos internos do CI L293D.

e) Preste bem atenção na montagem do circuito antes de ligar na energia elétrica. Qualquer erro poderá causar danos irreversíveis nos componentes e na placa do Arduino.

Aplicação

Para fins didáticos e projetos de automação, robótica e máquinas eletrônicas em geral.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v  
Jumpers Kit cabos ligação macho / macho 1  
Micro Motor DC

Micro Motor de corrente contínua (CC) 6000rpm / 5V

1

– Tensão nominal: 3,0 a 5,0V

- Corrente sem carga: 90mA

- Corrente em plena carga: 130mA

- Rotação sem carga: 6.000 rpm

- Rotação máximo rendimento: 5.800 rpm

- Potência Máxima: 0,35W

(datasheet)

CI L293D L293D - Ponte H Dupla 1

- Tensão de alimentação: 5V

- Tensão alimentação máxima dos drivers: 4.5 a 36V

- Entradas digitais de controle: 6 (3 para cada motor)

- Potência máxima: 4W

- Saídas para controle: 2 (1 para cada motor)

- Corrente de saída máxima: 600mA

- Quantidade de drivers: 2

(datasheet)

Push Button  Push button 6X6X5mm 2    
Potenciômetro Potenciômetro 10K 1 Resultado de imagem para potenciômetro

Você poderá experimentar valores diferentes do potenciômetro, entre 1K a 100K.

A tensão resultante do potenciômetro aumenta quando giramos o eixo do componente no sentido do polo negativo para o polo positivo

Led 5mm Led 5mm 3  

3 LEDs alto brilho ou difuso

No projeto utilizamos 1 led verde, 1 led amarelo e 1 led vermelho

Você poderá utilizar também LEDs de 3 mm e as cores que desejar.

Resistor Resistor 150Ω

3

 

3 Resistores de 150Ω ou superiores (leds)

Fonte externa fonte ajustável para protoboard + fonte chaveada de 9V 1

https://www.vidadesilicio.com.br/media/catalog/product/cache/2/thumbnail/450x450/9df78eab33525d08d6e5fb8d27136e95/4/5/450xn_8.jpg

Fonte Chaveada 9V 1A

Utilizamos no projeto uma fonte ajustável (5V) para protoboard alimentada por uma fonte chaveada de 9V (1A)

Dados da fonte ajustável para protoboard:

Tensão de entrada: 6,5 a 12 VDC
– Tensão de saída: 3,3v e 5v, sendo uma em USB
– Corrente máxima de saída: 700mA

 

Se você não tiver uma fonte ajustável, utilize um suporte com 4 pilhas AA ou 4 pilhas AAA ou uma bateria 9V como fonte de energia externa

Arduino UNO Arduino UNO R3 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da energia elétrica enquanto você monta o circuito.


Atenção

Como descrevemos no início deste tutorial, dividimos o circuito em 2 partes:

a) a primeira parte é alimentada diretamente pelo Arduino, a partir da porta USB do computador, baterias (9V) ou através de um adaptador AC de 9V a 12V ou de uma fonte chaveada de 9V a 12V.

b) segunda parte deverá ser alimentada por uma fonte externa de 5V independente, como um suporte para 4 pilhas AAA ou AA (6V), fonte chaveada 5V ou fonte ajustável para protoboard 5V. Você poderá utilizar também como fonte externa uma bateria de 9V, que por possuir baixa intensidade de corrente irá funcionar também neste projeto para motores de corrente contínua de até 5V.

Parte do circuito alimentada diretamente pelo Arduino

1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

1.1. Portanto, faça a conexão do Arduino no terminal positivo do led (anodo) e o GND no terminal negativo (catodo).

1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Leds ligados em série e em paralelo.

2.1. Valores mínimos utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

3. Observe que o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente. Desta forma, o potenciômetro funciona como um divisor de tensão que pode ser lido pelo IDE do Arduino através do conversor analógico digital (ADC ou DAC em inglês). Girando o eixo do polo negativo (GND) para o polo positivo (Vcc) aumentamos o valor da tensão e portanto aumentamos a velocidade do motor, e ao contrário, diminuiremos portanto a velocidade de rotação do motor.

3.1. O potenciômetro utilizado no projeto é um componente mecânico analógico, e por este fato o terminal "b", veja a imagem acima, deverá estar conectado à uma porta analógica do Arduino. No nosso exemplo, conectamos o potenciômetro na porta analógica A0 do Arduino.

 

3.2. O conversor analógico-digital (frequentemente abreviado por conversor A/D ou ADC) é um dispositivo eletrônico capaz de gerar uma representação digital a partir de uma grandeza analógica, normalmente um sinal representado por um nível de tensão ou intensidade de corrente elétrica. O Arduino UNO (microcontrolador ATmega328) possui um conversor analógico digital interno de 10 bits de resolução (210 = 1024), ou seja, podendo variar seus valores entre 0 e 1023.

4. Monte os botões (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do Arduino. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Veja o projeto Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino) ou assista o vídeo Arduino: Botão e Resistor de Pull Up Interno

 

Parte do circuito alimentada por fonte externa

1. Observe na imagem acima que utilizamos um suporte com 4 pilhas AAA (6V) como fonte de alimentação externa. Você também poderá utilizar 4 pilhas AA (6V), uma bateria 9V, ou ainda, uma fonte ajustável para protoboard alimentada por uma fonte chaveada de 9V (opção utilizada nos nossos testes). É importante saber que a fonte utilizada no circuito deve ter tensão e corrente adequadas para o motor que se deseja usar. No nosso exemplo, usamos uma fonte ajustável para protoboard com saída de 5V e corrente de até 700mA para um motor de corrente contínua de 5V e corrente de 130mA.

1.1. Para utilizar uma fonte ajustável para protoboard, assista o vídeo: https://www.youtube.com/watch?v=gH_LQp6de68

1.2. Para utilizar a fonte ajustável, você deverá fornecer energia em apenas um lado do protoboard. O outro lado deverá estar recebendo energia diretamente do Arduino.

2. Observe também que juntamos o Ground da fonte externa com o Graund do Arduino. Isso é recomendável para criar um ponto de referência para o fluxo dos elétrons seguirem no circuito.

 

3. Para a montagem do circuito integrado L293D devemos entender primeiro alguns conceitos:

3.1. O circuito integrado controlador de motor L293D é o que chamamos de Ponte H Dupla.

3.2. Circuito Ponte H é uma estrutura constituída de 4 chaves, cuja abertura e fechamento dessas chaves são controladas pelo Arduino. Com essas chaves é possível controlar o sentido de rotação e até mesmo a velocidade do motor. Veja a imagem abaixo:

3.2.1. Para saber mais sobre o sistema Ponte H leia Ponte H na Wikipédia.

3.3. Assista a animação abaixo que simula funcionamento de um motor de corrente contínua controlado por uma Ponte H.

3.4. Um circuito integrado controlador de motor, como o L293D por exemplo, possui transistores no lugar de chaves. Os transistores dentro da ponte H abrem e fecham na mesma configuração mostrada na animação acima, controlando para que o motor possa girar nas duas direções.

3.4. O controlador de motor L293D é uma ponte H dupla, pois é composto de duas pontes H e portanto, é capaz de controlar a velocidade e a direção de dois motores independentes, ao mesmo tempo.

 4. Veja abaixo o esquema de ligação do chip L293D:

 

4.1. Na tabela abaixo, veja como montamos o motor 1 no nosso projeto:

L293D (Porta) L293D (Descrição) Arduino (porta) Arduino (descrição) Tipo de Controle Variável
1 Enable 1 (entrada CI) 9 OUTPUT PMW (Saída do Arduino) Velocidade do motor 0 a 255
2 Input 1 (entrada do CI) 4 OUTPUT (Saída do Arduino) Sentido rotação LOW / HIGH
3 Output 1 (motor 1)  -  -  - -
4 GND -  -  -  -
5 GND -  -  - -
6 Output 2 (motor 1)  -  -  -  -
7 Input 2 (entrada do CI) 3 OUTPUT (Saída do Arduino) Sentido rotação LOW / HIGH
8 VCC (5V) -  -  -  -

5. Observe que para ativarmos o controle de velocidade do motor temos que utilizar uma porta do Arduino com PWM (Pulse Width Modulation). No projeto poderemos variar a velocidade girando o eixo do potenciômetro.

5.1. Para variar a velocidade do motor precisaremos utilizar a técnica PWM (Pulse Width Modulation), onde modulamos o sinal do Arduino que vai para a entrada do L293D (Enable 1), fazendo com que o motor ligue e desligue muitas vezes por segundo aumentando ou diminuindo a velocidade em função desta modulação.

PWM (Pulse Width Modulation) - Modulação por Largura de Pulso

5.2. Refere-se ao conceito de pulsar rapidamente um sinal digital em um condutor. Quando geramos a modulação através da largura do pulso em uma onda quadrada podemos controlar a potência ou a frequência de um circuito.

PWM signal with its two basic time periods | Download Scientific ...

5.2.1. A técnica de PWM é empregada em diversas áreas da eletrônica e, por meio da largura do pulso de uma onda quadrada, é possível o controle de potência ou velocidade nas aplicações de motores elétricos, aquecedores elétricos, leds e luzes nas diferentes intensidades e frequências. O Projeto 14 - Led com efeito dimmer usando potenciômetro é um ótimo exemplo de como utilizar o PWM para controlar a intensidade luminosa de um led utilizando a função analogWrite(). Veja abaixo um gráfico que mostra alguns exemplos de PWM de acordo com a razão cíclica (duty cycle) entre 0% e 100%.

Domine o PWM com Wagner Rambo - Embarcados

5.3. É importante entendermos também que a modulação PWM para o Arduino UNO (microcontrolador ATmega328) tem resolução de 8 bits (28 = 256), variando, portanto, de 0 a 255. Quando zero, o motor estará desligado e quando 255 o motor estará na máxima velocidade.

6. A montagem do nosso projeto foi realizada em um protoboard com linhas de alimentação contínuas. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard

6.1. Veja a fotografia abaixo que mostra a montagem completa do circuito.

Código do Projeto (Sketch)

1)Faça o dowload e abra o arquivo projetoI06.ino no IDE do Arduino: DOWNLOAD - projetoI06.ino

Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************

     Projeto I06 - Controlando um motor DC com o CI L293D
     Autor: Angelo Luis Ferreira
     Data: 29/10/2020
             http://squids.com.br/arduino

*******************************************************************************/
// botões de controle
#define switchPin 2 // Entrada da botão que inverte a rotação
#define turnPin 8 // Entrada do botão liga e desliga o circuito
#define potPin 0 // Potenciômetro no pino analógico 0

// L293D
#define motorPin1 3 // Entrada 1 do L293D
#define motorPin2 4 // Entrada 2 do L293D
#define speedPin 9 // Pino de Ativação (Enable 1) do L293D (PMW)

// variaveis
int Mspeed = 0; // Uma variável para armazenar o valor de velocidade atual
boolean stateSwitch = 0; // variável para armazenar o status do switchPin (0 ou 1)
boolean stateTurn = 0; // variável para armazenar 

// leds
const byte ledGreen = 7;
const byte ledYellow = 6;
const byte ledRed = 5;

void setup() {
  //define o pino da chave como INPUT
  pinMode(switchPin, INPUT_PULLUP);
  pinMode(turnPin, INPUT_PULLUP);
  // define os pinos remanescentes como saída
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(speedPin, OUTPUT);
  // define os leds
  pinMode(ledGreen, OUTPUT);
  pinMode(ledYellow, OUTPUT); 
  pinMode(ledRed, OUTPUT); 
}

void loop() {
  turnOnOff();
  if (stateTurn) {
    Mspeed = analogRead(potPin)/4; // lê o valor de velocidade a partir do potenciômetro
  analogWrite(speedPin, Mspeed); // escreve a velocidade para o pino de Ativação 1
  turnLed(Mspeed); // acende o led correspondente à velocidade
  pushSwitch(); // verifica se o botão para inverter a rotação do motor foi acionado
  if (stateSwitch) { // Se a chave estiver HIGH, gire o motor em sentido horário
    digitalWrite(motorPin1, LOW); // define a Entrada 1 do L293D como baixa
    digitalWrite(motorPin2, HIGH); // define a Entrada 2 do L293D como alta
  }
  else { // se a chave estiver LOW, gire o motor em sentido anti-horário
    digitalWrite(motorPin1, HIGH); // define a Entrada 1 do L293D como baixa
    digitalWrite(motorPin2, LOW); // define a Entrada 2 do L293D como alta
  }
  } else {
    turnOffLeds();
    digitalWrite(motorPin1, LOW); // define a Entrada 1 do L293D como baixa
    digitalWrite(motorPin2, LOW); // define a Entrada 2 do L293D como alta    
  } 
}

void turnOnOff() {
  if (!digitalRead(turnPin)) { // verifica se o botão foi acionado
    stateTurn = !stateTurn;
    while(!digitalRead(turnPin)) {}
    delay(50);
  }
}

void pushSwitch() {
  if (!digitalRead(switchPin)) { // verifica se o botão foi acionado
    stateSwitch = !stateSwitch;
    while(!digitalRead(switchPin)) {}
    delay(50);
  }
}

void turnLed(byte j) {
  if (j<=+85) {
    turnOffLeds();
    digitalWrite(ledGreen, HIGH);
  } else if ((85< j) && (j<= 170)) {
     turnOffLeds();
     digitalWrite(ledYellow, HIGH);
  } else if (j>=170) {
    turnOffLeds();
    digitalWrite(ledRed, HIGH);
  }
}

void turnOffLeds() {
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, LOW);
    digitalWrite(ledYellow, LOW);
}

Vídeo

Como o projeto deve funcionar

1. Ao clicar no botão (push button) à esquerda, o motor é ligado. Para desligar, basta clicar o botão novamente.

2. Ao girar o eixo do potenciômetro no sentido horário (do polo negativa para o positivo) aumentamos a velocidade do motor até atingir a velocidade máxima.

3. Ao girar o eixo do potenciômetro no senti anti-horário (do polo positivo para o negativo) reduzimos a velocidade do motor até desligar o componente.

4. Os leds verde, amarelo e vermelho acenderão conforme a velocidade do motor. Velocidade baixa acende o led verde, velocidade média, o amarelo e velocidade alta o led vermelho, conforme os seguintes valores: 0 a 85 - velocidade baixa, 86 a 170 - velocidade média, e 170 a 255 velocidade alta.

5. Clicando no botão à direita, alteramos o sentido de rotação do motor.

Desafios

Com base neste projeto, resolva o seguinte desafio:  Desafio 76

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores