16 abril 2014

Controle de motor CC com o L293D - Ponte H

Para quem tem um circuito integrado L293D e gostaria de entender um pouco mais sobre esse componente, hoje vou mostrar como usar o CI para controle de motor CC.

O L293D é um CI fácil de encontrar, barato e que possibilita o controle de 2 motores ao mesmo tempo, pois contém, internamente, dois circuitos denominados PONTE H.

CI L293D ponte h Arduino
Imagem : 4tronix.co.uk


Ponte H é um conceito bem simples, em que um motor é controlado por 4 chaves e uma fonte de alimentação :

Motor CC Ponte H

Observando a figura abaixo, vemos que, acionando as chaves S1 e S4, o sentido da corrente será da esquerda para a direita, e o motor será acionado. Desligando S1 e S4 e ligando S2 e S3, o sentido da corrente é invertido, e consequentemente o motor passa a girar no sentido contrário.

Motor CC Ponte H - Funcionamento

Internamente, o L293D utiliza transistores e diodos para realizar este chaveamento. Podemos construir nossa própria ponte H utilizando esses componentes, mas sem dúvida o tamanho compacto do CI representa uma grande vantagem na montagem de circuitos de controle de motor.

Segundo o datasheet do L293D, o componente suporta correntes de saída de 600mA por canal, isso é, você pode ligar até 2 motores de 600mA cada. A voltagem suportada é de 4.5 à 36 volts. Isso nos permite controlar diversos tipos de motores respeitando-se, é claro, a corrente máxima suportada pelo chip. Por questões de segurança, recomenda-se utilizar motores com menos de 600 mA, apesar do CI suportar picos de 1.2A. Também é recomendado utilizar um dissipador de calor caso o CI comece a esquentar.

Para controle do CI, aplicamos uma tensão variável ao pino 1, que irá determinar a velocidade do motor, e aos pinos 2 e 7 (INPUT 1 e INPUT 2), alternamos os estados LOW (baixo) e HIGH (alto) para utilizar os conceitos de ponte H e determinar o sentido de rotação. Na ilustração abaixo, mostro a pinagem do L293D, e destacado em vermelho os pinos que utilizaremos para montagem do circuito deste post :

Pinagem L293D


Como estou utilizando um motor de 5v, os pinos 8 (Vs) e 16 (Vss) estão ligados aos 5v do Arduino. Se você for utilizar uma fonte externa, conecte o positivo ao pino 8 (Vs), tomando o cuidado de verificar se o CI não está esquentando. Nesse caso, utilize algum tipo de dissipador de calor.


Circuito Motor CC e L293D Arduino

Optei por uma versão resumida do programa de controle, sem o uso de botões, chaves ou potenciômetros, para mostrar a utilização da porta 3 do Arduino para controle de velocidade (ligado ao pino 1 - ENABLE 1do CI),  e das portas 2 (INPUT 1  - pino 2 do CI), e 7 (INPUT 2  - pino 7 do CI) para controlar o sentido de rotação simplesmente alterando o nível ALTO e BAIXO (1 ou 0) das portas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Programa : Controle de motor CC com o L293D  
// Autor : Arduino e Cia  
   
int PinoVelocidade = 3; //Ligado ao pino 1 do L293D  
int Entrada1 = 2; //Ligado ao pino 2 do L293D  
int Entrada2 = 7; //Ligado ao pino 7 do L293D  
   
void setup()  
{  
  //Define os pinos como saida  
  pinMode(PinoVelocidade, OUTPUT);  
  pinMode(Entrada1, OUTPUT);  
  pinMode(Entrada2, OUTPUT);  
}  
   
void loop()  
{  
  //Define a velocidade de rotacao  
  int velocidade = 500;  
  analogWrite(PinoVelocidade, velocidade);   

  //Aciona o motor  
  digitalWrite(Entrada1, LOW);  
  digitalWrite(Entrada2, HIGH);  
  delay(3000);  

  //Chama a rotina de parada do motor  
  para_motor();  

  //Aciona o motor no sentido inverso  
  digitalWrite(Entrada1, HIGH);  
  digitalWrite(Entrada2, LOW);  
  delay(3000);  
  para_motor();  
}  
    
void para_motor()  
{  
  digitalWrite(Entrada1, LOW);  
  digitalWrite(Entrada2, LOW);  
  delay(3000);  
}  

Pequenas alterações no circuito e no programa permitem que você utilize os mais variados tipos de chaves, sensores e dispositivos para controlar o seu motor CC.

Abaixo, vídeo mostrando o funcionamento do circuito e programa apresentados neste post :



22 comentários:

  1. Gostaria de Saber quem foi o escritor desta page sobre L293D para acionar motores?

    ResponderExcluir
    Respostas
    1. Boa noite Jociane,

      Produção própria do administrador do Arduino e Cia. Não só essa, como todas as páginas deste site. :-)

      Se desejar entrar em contato diretamente com o administrador, relatar algum problema ou tirar alguma dúvida, utilize o formulário de contato no lado direito da página.

      Abraço !

      Excluir
  2. vc sabe como usar o motor pego de um carinho de brinquedo e usar no arduino sem diodo e sem o L293D Ponte-H

    ResponderExcluir
    Respostas
    1. Boa noite, se for um motor muito, mas muito fraco, dá pra ligar direto no Arduino, mas eu não recomendo. Uma outra alternativa é você comprar um módulo com o L293D.

      Abraço !

      Excluir
  3. Boa tarde, no caso de um motor de 12v, teria como estar programando para qualquer RPM?

    ResponderExcluir
    Respostas
    1. Boa tarde Renato,

      Tudo vai depender do motor que você vai utilizar. Eu testei alguns motores que não aceitavam velocidade muito baixa.

      Abraço.

      Excluir
  4. Olá, boa tarde.

    Parabéns pela postagem. Bem didática.
    ,
    Só gostaria de acrescenta um ponto que não foi abordado, e que pode gerar certos acidentes.


    Recomenda-se a utilização de motores com menos do que 600 mA por questões de segurança (o CI pode esquentar muito, e também ocorrem picos de corrente). Os picos são de 1.2A (com pequena duração, é claro).

    E também devem ser levados em conta a corrente com e sem carga do motor.

    No mais é isso, parabens pelo blog e sucesso!

    Té + \o

    ResponderExcluir
    Respostas
    1. Boa noite Marcus,

      Obrigado e agradeço a colaboração. Realmente faltou essa observação e vou incluir isso não só nesse post, como também no post do Motor Shield L293D.

      Grande abraço e obrigado mais uma vez !

      Excluir
  5. Boa tarde, gostaria de saber se alimentando ci com uma fonte externa, o pino 16 VSS e 8VS ambos são alimentados com o terminal positivo da fonte??

    E também de saber qual o limite de velocidade no código, no caso ,quando vc declarou 500; o motor estaria com os 5volts?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Se utilizar fonte externa, conecte somente o pino 8 VS. Segundo o datasheet,a tensão máxima suportada é de 36 volts.

      Quanto à velocidade, foi por tentativa e erro mesmo. O valor de 500 foi o máximo que o meu motor aceitou.

      Abraço !

      Excluir
  6. Olá amigo, queria utilizar uma fonte externa de 12V para ligar um cooler no lugar do motor, mas me confundi quanto ao Terra, devo interligar o terra do arduino junto com o terra da fonte externa? Obrigado

    ResponderExcluir
    Respostas
    1. Oi Michel,

      Isso mesmo interligue um pino GND do Arduino com o GND da fonte.

      Abraço !

      Excluir
  7. Os pinos ENABLE 1 E ENABLE 2 do L293 servem para que? Controlar a velocidade dos motores? Se não for controlar a velocidade pode ligar energia nesses pinos igual aos Vss ? ou não?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Eles habilitam a ponte H numero 1 e a ponte H numero 2 do CI. Se vc ligar mais um motor nesse circuito, por exemplo, vai utilizar também o pino Enable 2.

      Abraço !

      Excluir
  8. Ponte H L293NE funciona da mesma forma que a L293D?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Pelo que eu pesquisei, o L293D tem diodos na saída para evitar danos aos transistores de saída do CI, já o L293NE não possui esses diodos, e você terá que colocá-los no circuito por conta própria.

      Abraço!

      Excluir
  9. Olá, boa explicação.
    Agora, como faço para inverter a rotação do motor usando um APP Android ( AMR_Voice), comandado por voz e também o esquema de ligação?

    ResponderExcluir
  10. ola estou fazendo o tcc da faculdade e gostaria de saber se tem algum post de como usar a l293d para controlar um motor de passo,desde ja obrigado

    ResponderExcluir
    Respostas
    1. Oi Glauco,

      Não tenho nenhum post (ainda) aqui no Arduino e Cia sobre isso, mas eu recomendo este artigo aqui: http://www.instructables.com/id/Bi-Polar-Stepper-Motor-with-L293D-and-Arduino/

      Abraço!

      Adilson

      Excluir
  11. tenho uma duvida, se eu quiser colocar pilhas em quais pinos teria q colocar?
    e isso mudaria a força do motor?

    ResponderExcluir
  12. Qual o código pra ligar dois motores alguém pode ajudar

    ResponderExcluir