Driver Shield com Ponte H 800mA

Introdução

O driver vai acoplando na Orange One facilitando a prototipagem, serve para controlar 2 motores DC de forma independente, este driver utiliza dois CI’s L9110s de ponte H que lhe permite controlar tanto a velocidade do motor do PWM (Pulse Width Modulation ou Modulação de Largura de Pulso), quanto o sentido de rotação dos motores através de inversão de sentido do fluxo de corrente.

O que é PWM

PWM é uma maneira de codificar digitalmente níveis de sinal analógico, mas o que isso significa? O sinal PWM é totalmente digital porque em qualquer dado instante de tempo a alimentação ou está totalmente ligada ou completamente desligada. Assim, é possível controlar em uma onde quadrada o tempo em que ela fica em nível analógico alto, mantendo sua frequência, mas alterando o seu valor médio de tensão ao longo do tempo.
Dessa forma, seria como se um circulo, cuja fonte de tensão fornece 5 volts, tivesse uma chave que fica abrindo e fechando em uma determinada frequência. Veja a onda que será formada nesse circuito:

Nesta imagem temos um ciclo de trabalho de 10%. Ou seja, o sinal está ligado 10% do período e desligado nos outros 90%.

Aqui temos um ciclo de trabalho de 50%. Ou seja, o sinal está ligado 50% do período e desligado nos outros 50%.

E aqui temos um ciclo de trabalho de 90%. Ou seja, o sinal está ligado 90% do período e desligado nos outros 10%.

Estas três saídas PWM codificam três diferentes valores de sinal analógico, a 10%, 50% e 90% de energia de entrada. Dessa forma, é possível variar o tempo que a chave fica aberta ou fechada, alterando a largura do pulso.
O PWM funciona exatamente dessa forma. E assim é possível regular p tempo em que o sinal estará em nível lógico alto em uma determinada frequência. O tempo em que o sinal está em nível lógico alto, é chamado de Duty Cycle (ciclo ativo).
Para calcular a potência média dissipada no sinal em uma onde quadrada utiliza-se a fórmula:

Onde:

  • P = Potência Média (Watts);
  • t = Tempo (segundos ou milissegundos);
  • V = Tensão fornecida pela fonte (Volts);
  • I = Corrente (Amperes);

Essa fórmula serve para encontrar a porcentagem do tempo em que o sinal está em nível lógico alto, e multiplicar pela potência máxima. Dessa forma, é possível estimar a potência média de um sinal em PWM.
Portanto, o PWM é controlado variado a largura de um pulso para controlar o ciclo do sinal aplicado a uma carga, e consequentemente, sua potência. Usando o driver 2 motores como exemplo, ao definirmos na programação a velocidade dos motores em 127 e aplicando uma tensão de 9v, estamos definindo que a potência média será de aproximadamente 4,5v.
Agora, você vai aprender como montar o seu próprio circuito utilizando seu driver 2 motore.

Materiais

01 – Orange One;
01 – Shield Driver de 2 motores;
01 – Cabos USB-AB;
01 – Fonte chaveada 12V 1A;
02 – Motores DC 12V;
04 – Jumpers macho-macho.

Circuito

Para realizarmos esse experimento, acople o shield na orange one e conecte dois motores, como na imagem abaixo:

Vale lembrar que o shield pode ser alimentado juntamente com a orange one, ou separadamente com o borne de alimentação como mostra na imagem acima. Esse controle é feito através do jumper de alimentação COMP (compartilhar), e o outro jumper EN (enable ou habilitar) serve apenas para ligar e desligar o shield.

Código

Preparamos um código de exemplo para que podemos ver na prática como funciona o shield e ao mesmo tempo ver como funciona o PWM, para realizar o experimento, carregue o código a seguir em sua orange one.

/*
################################################################################## 
# Shield driver 2 motores
#
# Copyright 2020 Orange Maker.
#
# neste codigo iremos mudar o sentido dos motores e a velocidade de 0rpm ate
# sua rotacao maxima. Para que nao aconteca uma mudança drastica inversao
# iremos colocar um intervalo de 1 segundo a cada mudanca de sentido. 
# como estamos programando um shield, entao as portas ja estao definidas, iremos
# apenas declarar em nosso codigo.
#
# A saida digital 11 da Orange One se conecta ao controle de velocidade do motor 1
# A saida digital 12 da Orange One se conecta ao controle de direcao do motor 1
# A saida digital 9 da Orange One se conecta ao controle de velocidade do motor 2
# A saida digital 8 da Orange One se conecta ao controle de direcao do motor 2.
##################################################################################  
*/

int motorBDir = 8;  // direcao do motor B - HIGH ou LOW
int motorBVel = 9;  // velocidade motor B - de 0 a 255
int motorADir = 12; // direcao do motor A - HIGH ou LOW
int motorAVel = 11; // velocidade motor A - de 0 a 255



void setup() {
  pinMode(motorBDir, OUTPUT); // Declarando a porta como saída
  pinMode(motorBVel, OUTPUT); // Declarando a porta como saída
  pinMode(motorADir, OUTPUT); // Declarando a porta como saída
  pinMode(motorAVel, OUTPUT); // Declarando a porta como saída
}
void loop() {
/*
#  Quando os pinos de direcao estiver em HIGH, quanto maior o valor que colocarmos
#  no pino de velocidade menos a roda vai girar, pois, quando enviamos 255 e HIGH
#  para o mesmo canal, o CI entende como 0 (desligado).
*/


  digitalWrite(motorADir, HIGH); // | Quando os pinos de direcao estao em HIGH
  digitalWrite(motorBDir, HIGH); // | e os pinos de velocidade em 0, os motores  
  analogWrite(motorAVel, 0);     // | vao girar em sua velocidade maxima no
  analogWrite(motorBVel, 0);     // | sentido horario.
  
  delay(1000); // Vai para por 1 segundo

  digitalWrite(motorADir, LOW);  // | Quando os pinos de direcao estao em LOW
  digitalWrite(motorBDir, LOW);  // | e os pinos de velocidade em 0, os motores  
  analogWrite(motorAVel,0);      // | vao ficar parado, pois nao esta chegando 
  analogWrite(motorBVel,0);      // | tensao nos motores.

  delay(1000); // Vai parar por 1 segundo

  digitalWrite(motorADir, LOW);  // | Quando os pinos de direcao estao em LOW
  digitalWrite(motorBDir, LOW);  // | e os pinos de velocidade em 255,os motores
  analogWrite(motorAVel, 255);   // | vao girar em sua velocidade maxima no
  analogWrite(motorBVel, 255);   // | sentido anti-horario.

  delay(1000); // Vai parar por 1 segundo

  digitalWrite(motorADir, LOW);  // | Os motores ficarao parado novamente.
  digitalWrite(motorBDir, LOW);  // |
  analogWrite(motorAVel,0);      // |
  analogWrite(motorBVel,0);      // | 

  delay(1000); // Vai parar por 1 segundo
}

Após carregar o código, conecta a orange one ou seu shield à uma fonte de 12V. Se você estiver usando um motor de tensão de 9v e uma fonte externa de 12V, ao jogar 255 direto para a porte você está jogando 12V direto no motor e pode danifica-lo com o tempo.

Na prática

Após carregar o código, conecta a orange one ou seu shield à uma fonte de 12V. Se você estiver usando um motor de tensão de 9v e uma fonte externa de 12V, ao jogar 255 direto para a porte você está jogando 12V direto no motor e pode danifica-lo com o tempo.

O que mais dá pra fazer?

Agora que já vimos o básico que dá para fazer o driver 2 motores, imagine construir seu próprio robô, com este driver você será capaz disso. É possível colocar mais de um motor em um canal, com a condição de que a soma da corrente dos motores não ultrapassa de 800mA.

E aqui finalizamos esse tutorial. Obrigado por acompanha-lo!

Ajuda no chat
Enviar via WhatsApp