Ponte H L298N – Aprenda a controlar a velocidade de um motor DC

0 Flares Twitter 0 Facebook 0 Google+ 0 0 Flares ×

No último tutorial vimos como se faz para ligar um motor DC no Arduino com o auxílio de um módulo ponte H, usando suas entradas para variar o sentido de giro. Mas na robótica é comum termos que controlar, além do sentido, a velocidade do motor. Nesse tutorial iremos ensinar, de forma simples e didática, como podemos controlar a velocidade de um motor DC.

Como controlar a velocidade de um motor?

Um motor DC gira baseado em campos magnéticos gerados pela corrente que passa em suas bobinas. Para variar a velocidade do motor podemos alterar essa corrente que é diretamente proporcional a tensão sobre elas.

Motor_DC_2Pole

Campo magnético motor DC

 

Dessa forma, com a mudança da tensão em cima do motor, teremos uma alteração de velocidade. mas como podemos fazer isso usando o Arduino e a Ponte H? A solução é simples e eficiente e se chama PWM.

PWM

PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados analógicos por meios digitais (Leia mais sobre Grandezas digitais e analógicas e PWM). Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser controlada a porcentagem do tempo em que a onda permanece em nível lógico alto. Esse tempo é chamado de Duty Cycle(Ciclo de trabalho) e sua alteração provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de Duty Cycle) no caso do Arduino.

PWM2

 

O duty cycle é a razão do tempo em que o sinal permanece na tensão máxima (5V no Arduino) sobre o tempo total de oscilação, como está ilustrado na figura abaixo:

ponteh

Duty Cycle (%) = (x/x+y)*100% = (x/T)*100%

Vmédio = Vmáx*Duty Cycle(%)

O valor do Duty Cycle usado pelo Arduino é um inteiro armazenado em 8 bits, de forma que seu valor vai de 0 (0%) a 255 (100%).

Exemplo.: Para um sinal PWM de valor 200 temos:

Se 255 é 100%, 200 é aproximadamente 78,4%.

Como a tensão máx de saída do Arduino é 5V a tensão média do sinal PWM será:

Vmédio = Vmax*Duty Cycle(%)

Vmédio=5*78,4%

Vmédio=3,92V

Modulando a ponte H

No módulo Ponte H com CI L298N cada ponte H possui um pino que ativa ou não a ponte H. Caso tenha um sinal de 5V inserido nele, a ponte enta ligada, caso seja 0V a ponte esta desligada. Como temos 2 pontes H, temos o Enable A(Ativa A) e o Enable B (Ativa B).

Normalmente o Enable A e B fica em curto com um sinal de 5V da placa através de um jumper.

ponte h2

Jumpers Enable A e B

Se retiramos esse jumper e inserimos um sinal PWM nessa entrada, modularemos a tensão que é enviada para o motor no mesmo formato. Isso ocorre porque a ponte H só ira “funcionar” enquanto o sinal de Enable estive com 5V.

Sinal PWM

Sinal PWM entrando no Enable A em vermelho (5V) e a saída para o motor A em preto (12V).

 

Sendo assim, a saída para o motor será um sinal PWM com um Duty Cycle igual ao do Enable e terá tensão média calculada pela seguinte formula.

Vmédio = Vmax(tensão PonteH)*Duty Cycle(%)

Com essa modulação, podemos variar a velocidade do motor através de PWM.

Exemplo de Código 1 – Controle de velocidade

Neste segundo exemplo, vamos verificar o controle de velocidade dos motores A e B.

Para este exemplo, utilizaremos:

  • Arduino UNO
  • Ponte H
  • 2 Motores DC 12V (pode ser feito com apenas 1)
  • Fonte alimentação de 12V

Prossiga com a montagem conforme esquema abaixo(caso você use apenas um motor, basta desconsiderar o motor B:

Garanta que seu Arduino e a fonte externa estejam desligados durante a montagem.

Ponte H 2

Esquema de montagem exemplo 1

 

Agora vamos à implementação do programa. Dessa forma, dentro da IDE Arduino: escreva o seguinte código e ao final clique em Upload para que o programa seja transferido para seu Arduino.

/*Pinagem do arduino*/

//motor A
int IN1 = 2 ;
int IN2 = 4 ;
int velocidadeA = 3;

//motor B
int IN3 = 6 ;
int IN4 = 7 ;
int velocidadeB = 5;

//variavel auxiliar
int velocidade = 0;

//Inicializa Pinos
void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(velocidadeA,OUTPUT);
pinMode(velocidadeB,OUTPUT);
}

void loop(){

/*Exemplo de velocidades no motor A*/

//Sentido Horario
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);

//Alta
analogWrite(velocidadeA,230);

//Intermediaria
analogWrite(velocidadeA,150);

//Baixa
analogWrite(velocidadeA,80);

/*Exemplo de variacao de velocidade no motor B*/

//Sentido Horario
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);

//velocidade de 0 a 255
while (velocidadeB < 255){
analogWrite(velocidadeB,velocidade);
velocidade = velocidade + 10;
delay(50);
}
//velocidade de 255 a 0
while (velocidadeB > 0){
analogWrite(velocidadeB,velocidade);
velocidade = velocidade - 10;
delay(50);
}
}

 

Exemplo de Código 2 – Controle de velocidade

Caso você queira fazer um código mais enxuto e modularizado, temos este exemplo de implementação um pouco avançado que usa funções. Em breve teremos um tutorial sobre o assunto.

<pre>
#define MOTOR_A 1
#define MOTOR_B 2
#define HORARIO true
#define ANTIHORARIO false

//inicializa pinos
void setup(){
 for (int i = 2; i < 8; i++)
 pinMode(i,OUTPUT);
}

void loop(){

acionaMotor(MOTOR_A,HORARIO, 255);
 acionaMotor(MOTOR_B,ANTIHORARIO, 255);

}

//funcao para acionamento individual de cada motor
void acionaMotor(int motor, boolean sentido, int velocidade){
 if (motor == MOTOR_A){
 digitalWrite(2,sentido);
 digitalWrite(4,!sentido);
 analogWrite(3,velocidade);
 }
 else if (motor == MOTOR_B){
 digitalWrite(6,sentido);
 digitalWrite(7,!sentido);
 analogWrite(5,velocidade);
 }
}

Esperamos que tenham gostado, deixe seu comentario!!

Apostila Arduino 800px

0 Flares Twitter 0 Facebook 0 Google+ 0 0 Flares ×

You may also like...

  • Pingback: Módulo Ponte H L298N - Como usá-lo em com Arduino()

  • Motasem El Malat

    eu tirei o jumper e o módulo ainda está alimentando o motor usando o 5V do Arduino enquanto não haver a presença de fonte externa. Alguém pode ajudar?

  • Francisco Souza

    Olá! pessoal fiz uma library para trabalhar com essa Ponte H, confira em: http://clubedosgeeks.com.br/programacao/arduino/library-driver-motor-ponte-h-l298n-arduino

  • Eduardo Dantas

    óla, como ficaria com um botão de app para acionar? mantendo o controle de velocidade

  • jESSE

    ooi galera

  • Luciano B. Mota

    Não enxerguei o controle de velocidade em seu projeto. Onde está a tomada de feedback da rotação do motor? Como você pode controlar a velocidade sem feedback, isto é, não tem nenhuma INPUT? Achei que você usaria PID para controlá-la.

    • Allan Mota

      Olá Luciano, Nesse tutorial trabalhamos com malha aberta, ou seja, não temos feedback. A intenção desse tutorial é mostrar que você pode variar a velocidade do motor conforme a entrada em PWM que é colocada na Ponte H. Isso pode ter varias aplicações. Tal como controles em malha fechada. Caso queira um sistema com malha fechada, ou feedback, você pode trabalhar com um encoder fazendo o feedback e um Controlador PID. Em breve teremos um tutorial sobre o assunto. Abraço!! =D

  • gregorypv

    Dentro do While vc colocou o pino e nao a variavel da velocidade.

  • Vinicius Vellon Alves

    e para motores com pico de 7A?

  • Danymar Sidineia Mario

    Opa galera alguem pode me ajudar ..quero modular uma valvula solenoide entre 0 e 12V dc.por 50 segundos.progresivamente..depois teria q estabelizar em 12V…é posivel