Vídeo: Usando Motor Shield L293D Sem Biblioteca 1

No post anterior sobre o assunto já exploramos a utilização do Motor Shield L293D com a biblioteca AF Motor e já conhecemos também um pouco do seu hardware. Hoje o utilizaremos sem a biblioteca. Para controlar o motor shield L293D sem biblioteca, o conhecimento do hardware é fundamental.

Motor Shield L293D – análise do hardware

Na análise do hardware do motor shield L293D, verificou-se que os bits de controle dos motores são originados na saída de um registrador de deslocamento, o 74HC595 (Figura 2).

Motor shield L293D sem biblioteca

Figura 2 – Registrador de Deslocamento 74HC595

O funcionamento elementar deste circuito integrado é gerar uma saída paralelo de 8 bits (1 byte) a partir de uma entrada serial. A entrada serial consiste em 3 pinos: clock (pino 11), latch (pino 12) e data (pino 14).

                O pino 14 é o responsável por enviar os 8 bits que serão gerados na saída do 74HC595, o pino 11 é o clock, onde a cada borda de descida carrega um novo bit de dado e o pino 12 libera estes 8 bits na saída (Q0 a Q7). Sendo estes 8 bits aplicados ao controle dos drivers, o segredo consiste em desenvolver uma função na própria IDE do Arduino, onde o parâmetro é o dado que se deseja enviar para a saída e, por conseguinte, controlará os motores.

Programa motor shield L293D sem biblioteca

O código completo, demonstrando a função e o teste utilizado pode ser visto abaixo.

/*
   Aula 69 - Controle do Motor Shield L293D sem Biblioteca
   
   Autor: Eng. Wagner Rambo  Data: Junho de 2016
*/

// --- Mapeamento de Hardware ---
#define   dir_clk      4     //clock do registrador no digital  4
#define   dir_ser      8     //dados do registrador no digital  8
#define   dir_latch   12     //latch do registrador no digital 12
#define   dir_en       7     //enable do registrador no digital 7
#define   pwm2a       11     //pwm motor1
#define   pwm2b        3     //pwm motor2
#define   pwm0a        6     //pwm motor3
#define   pwm0b        5     //pwm motor4


// --- Protótipo das Funções Auxiliares ---
void sendCommand(unsigned char value);   //Função para enviar o byte para saída do registrador


// --- Configurações Iniciais ---
void setup() 
{
  pinMode(dir_clk,   OUTPUT);    //saída para clock
  pinMode(dir_ser,   OUTPUT);    //saída para dados
  pinMode(dir_latch, OUTPUT);    //saída para latch
  pinMode(dir_en,    OUTPUT);    //saída para enable
  pinMode(pwm2a,     OUTPUT);    //saída para pwm motor1
  pinMode(pwm2b,     OUTPUT);    //saída para pwm motor2
  pinMode(pwm0a,     OUTPUT);    //saída para pwm motor3
  pinMode(pwm0b,     OUTPUT);    //saída para pwm motor4
  
  digitalWrite(dir_en, LOW);
  analogWrite(pwm2a, 0xFF);
  analogWrite(pwm2b, 0xFF);
  analogWrite(pwm0a, 0xFF);
  analogWrite(pwm0b, 0xFF);
  


} //end setup


// --- Loop Infinito ---
void loop() 
{
  
  sendCommand(0b10101100);
  delay(2000);
  sendCommand(0b01010011);
  delay(2000);


} //end loop


// --- Desenvolvimento das Funções Auxiliares ---
void sendCommand(unsigned char value)
{
  
    boolean verify;                  //bit de controle

    digitalWrite(dir_latch, LOW);    //desliga latch
    digitalWrite(dir_clk,   LOW);    //desabilita o clock
    
    for(unsigned char i=0x0; i<0x08; i++)    //loop finito para enviar os 8 bits
    {
       digitalWrite(dir_clk, LOW);   //clock em low
       
       if(value & (1<<i)) verify = HIGH;
       else verify = LOW;
       
       digitalWrite(dir_ser, verify); //Habilita saída de dados conforme condição acima
       digitalWrite(dir_clk, HIGH);
    
    } //end for
    
    
    digitalWrite(dir_clk, LOW);
    
    digitalWrite(dir_latch, HIGH);


} //end sendCommand


Para mais detalhes, assista ao vídeo mostrado no início deste post e para download completo dos arquivos utilizados, acesse este link.

Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

Um Comentário

  1. Olá Felipe, estou tentando simular este projeto no isis proteus , contudo não estou conseguindo , pois não
    sei como construir a label que alimenta o pino 8 do L293D. Poderia me explicar como construir essa label
    no proteus. Desde já agradeço.