Driver Shield com Ponte H 800mA

Introdução

O driver vai acoplado 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 através 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, mais 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 onda quadrada o tempo em que ela fica em nível ló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 circuito, 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% da 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 o 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 onda 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 variando 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 motores. 

Materiais

01- Orange one
01- Shield driver de 2 motores
01- Cabo 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 (compatilhar), e o outro jumper EN (enable ou habilitar) serve apenas para ligar ou 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 porta você está jogando 12V direto no motor e pode danifica-lo com o tempo. 

Na prática

Ao conectar a fonte, podemos notar que o motor vai girar para o sentido horário ele vai parar, depois vai girar para o sentindo anti-horário e parar novamente, como mostra no GIF abaixo.

O que mais dá para fazer?

Agora que já vimos o básico que dá para fazer com 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!