fbpx
ArduinoNovidade

Como controlar um motor DC usando o Mini Driver Ponte H L9110S

Se você está planejando construir um projeto de robótica certamente terá que aprender a controlar um motor DC ou motor de corrente contínua.  

O motor DC é um equipamento capaz de converter energia elétrica em energia mecânica, sendo amplamente usado em brinquedos, robôs seguidores de linha, carrinhos de controle remoto, plataformas robóticas, esteiras, entre outros.  

O controle completo de um motor DC pode ser obtido a partir do controle do seu sentido de rotação e velocidade. Para tal, combinamos duas técnicas: 

  • Ponte H – Para controlar o sentido de rotação; 
  • PWM – Para controlar a velocidade. 

O sentido da rotação de um motor DC é determinado pelo sentido da corrente elétrica que circula em seus enrolamentos. Deste modo, para alterar o seu sentido de rotação é necessário mudar o sentido da corrente elétrica que o alimenta. Em outras palavras, se invertermos a polaridade de alimentação do motor DC, seu sentido de rotação também será invertido.  

Usar uma ponte H é uma técnica comum para alterar a polaridade da tensão de entrada do motor DC. A ponte H é um circuito eletrônico de potência utilizado para controle e acionamento de motor DC a partir de um sinal gerado pelo microcontrolador. Seu uso é necessário porque os sinais de saída dos microcontroladores não suportam a corrente exigida para acionamento da maioria dos motores. Portanto, a ponte H funciona como uma unidade de potência que pode alimentá-lo convenientemente. 

A velocidade do motor DC pode ser controlada variando sua tensão de entrada e uma técnica comum para fazer isso é usar PWM (Modulação por largura de pulso). O PWM é uma técnica em que o valor médio da tensão (e corrente) de entrada do motor é controlado enviando uma série de pulsos ligados e desligados (ON-OFF). 

Atualmente, existem muitos modelos de módulos e Shields ponte H capazes de realizar o controle completo de motores DC, como o Mini Driver Ponte H Dupla L9110S (Figura 1). 

A imagem mostra de maneira real uma ponte H em sua forma fisica
Figura 1: Mini Driver Ponte H Dupla L9110S.

O Mini Driver Ponte H Dupla L9110S é controlado pelo chip L9110S e pode ser utilizado para controlar a velocidade e sentido de dois motores DC de forma independente ou 1 motor de passo bipolar 4 fios. As principais características técnicas deste módulo são: 

  • Fonte de alimentação: 2,5 a 12VDC; 
  • Corrente máxima suportada por canal: 800mA; 

ATENÇÃO: 

Respeitar a faixa de tensão e corrente especificada garante o correto funcionamento do Mini Driver Ponte H Dupla e evita possíveis danos. 

A Figura 2 indica os pinos do Mini Driver Ponte H Dupla L9110S, que serão detalhados em seguida. 

Figura 2: Pinos do Mini Driver Ponte H Dupla L9110S.
  • VCC: Fonte de alimentação (2,5 a 12VDC); 
  • GND: Terra; 
  • MOTOR A e MOTOR B: Os bornes identificados por MOTOR A e MOTOR B devem ser utilizados para conexão dos motores ao módulo; 
  • A-1A: Pino de controle da direção do motor A; 
  • A-1B: Pino de controle da velocidade do motor A por meio de PWM; 
  • B-1A: Pino de controle da direção do motor B; 
  • B-1B: Pino de controle da velocidade do motor B por meio de PWM. 

O Mini Driver Ponte H Dupla L9110S é compatível com Arduino, PIC, AVR, Micro:bit, entre outros. 

Neste projeto, faremos o uso do Mini Driver Ponte H dupla L9110S para o controle de 2 motores de corrente contínua.  

MATERIAIS NECESSÁRIOS  

ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES  

Incialmente, certifique-se que a sua placa UNO esteja desligada. Monte atentamente o circuito da Figura 3 utilizando Mini Driver Ponte H Dupla L9110S, uma fonte de 5V, os fios e os motores DC. 

Figura 3: Circuito da ligação entre Mini Driver Ponte H Dupla L9110S, o Arduino Uno e os motores DC.

Durante a ligação, observe os seguintes pontos:  

  • O pino A-1B, pino de controle da velocidade do motor A, deve ser conectado a uma porta do Arduino que possua PWM. No circuito o pino A-1B encontra-se conectado ao pino 10 da placa UNO; 
  • Conecte o pino A-1A, responsável controle da direção do motor A, ao pino digital 12 do Arduino; 
  • O pino B-1B, responsável controle da velocidade do motor B, deve ser conectado a uma porta do Arduino que possua PWM. No circuito o pino B-1B encontra-se conectado ao pino digital 11; 
  • Conecte o pino B-1A, responsável controle da direção do motor B, ao pino digital 13 do Arduino; 
  • ATENÇÃO: Use uma fonte de alimentação externa para alimentar a ponte H, visto que o Arduino não suporta a corrente exigida para acionamento dos motores. Conecte o GND da fonte de alimentação ao GND do Arduino. 

ELABORANDO O CÓDIGO 

Após a verificação do circuito montado, vamos a programação do nosso Sketch. A proposta deste código é fazer com que os motores consigam se movimentar no sentido horário e, logo após, no sentido anti-horário usando o Mini Driver Ponte H.  

Para melhor compreensão o código será explicado passo a passo a seguir. Neste momento, observe o código e aproveite para analisar sua estrutura. 

/*
  -  CONTROLE DE MOTOR DC COM MINE PONTE H L9110S -
  =================================================
  === BLOG DA ROBOTICA - www.blogdarobotica.com ===
  =================================================
  Autor: Jonas Souza
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =================================================
  === CASA DA ROBOTICA - www.casadarobotica.com ===
  =================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  ==================================================
*/
int motorA_PWM = 10; //Controle de velocidade do motor A (Esquerdo)
int motorB_PWM = 11; //Controle de velocidade do motor B (Direito)
int motorA_EN = 12; //Controle de direção do motor A (Esquerdo))
int motorB_EN = 13; //Controle de direção do motor B (Direito)
int velocidade = 127; //variável para controle de velocidade de rotação dos motores,sendo 0 o valor de velocidade mínimo e 255 o valor de velocidade máxima. 
void setup(){ 
  //Configura os motores como saída
  pinMode (motorA_PWM, OUTPUT);
  pinMode (motorA_EN, OUTPUT);
  pinMode (motorB_PWM, OUTPUT);
  pinMode (motorB_EN, OUTPUT);
}
void loop(){ 
    MotorSentidoHorario(); //Chama a função para rotação do motor no sentido horário
    delay(5000); //Aguarda 5000 milissegundos
    MotorSentidoAntiHorario(); //Chama a função para rotação do motor no sentido anti-horário
    delay(5000); //Aguarda 5000 milissegundos
}
void MotorSentidoHorario(){
  digitalWrite(motorA_EN, HIGH); //Motor A. HIGH = HORARIO
  digitalWrite(motorB_EN, HIGH); //Motor B. HIGH = HORARIO
  
  analogWrite(motorA_PWM, velocidade); //PWM do motor esquerdo 
  analogWrite(motorB_PWM, velocidade); //PWM do motor direito 
}
void MotorSentidoAntiHorario(){ 
  digitalWrite(motorA_EN, LOW); //Motor A. LOW = ANTI-HORÁRIO
  digitalWrite(motorB_EN, LOW); //Motor B. LOW = ANTI-HORÁRIO
  analogWrite(motorA_PWM, velocidade); //PWM do motor esquerdo 
  analogWrite(motorB_PWM, velocidade); //PWM do motor direito 
}

Para melhor compreensão do código observe os seguintes passos: 

1.Definir as variáveis que serão utilizadas: 

Definimos as variáveis “MotorA_PWM” e “MotorB_PWM“, que serão utilizadas no controle da velocidade dos motores, e as variáveis “MotorA_EN” e “motorB_EN”, que serão responsáveis pelo controle da direção dos motores. 

Logo após, definimos a variável “Velocidade” que irá definir um valor de velocidade constante (entre 0 e 255) para o funcionamento dos motores. 

2.Configurar os pinos de saída 

Na função setup(), definimos todos os pinos de controle do motor como saída (OUTPUT). 

3.Função principal 

Dentro da função loop(), apenas chamamos as funções MotorSentidoHorario() e MotorSentidoAntiHorario(), com intervalo de 5000 milissegundos (5 segundos).

4. Criação da função para rotação do motor no sentido horário MotorSentidoHorario() 

Para que os motores se movam no sentido horário, precisamos colocar os pinos A-1A e B-1A em nível lógico alto. Deste moto, definimos as variáveis MotorA_EN e motorB_EN como HIGH usando a função digitalWrite. 

Para que os motores se movam com metade de sua velocidade máxima usamos a função analogWrite(), passando como parâmetros as variáveis motorA_PWM ou motorB_PWM, e a velocidade.  

5. Criação da função para rotação do motor no sentido anti-horário MotorSentidoAntiHorario() 

De modo contrário, para que os motores se movam no sentido anti-horário, precisamos colocar os pinos A-1A e B-1A em nível lógico baixo. Deste moto, definimos as variáveis MotorA_EN e motorB_EN como LOW usando a função digitalWrite. 

Usamos a função analogWrite() para definir a velocidade de rotação, passando como parâmetros as variáveis motorA_PWM e motorB_PWM, e a velocidade. 

Para que os motores se movam com metade de sua velocidade máxima usamos a função analogWrite(), passando como parâmetros as variáveis motorA_PWM ou motorB_PWM, e velocidade.  

REALIZANDO O UPLOAD DO CÓDIGO 

Antes de realizar o upload do código, ligue a fonte de alimentação de 5V que alimenta o Mini Driver Ponte H.  

Após o upload, observe se os dois motores estão girando no sentido horário por 5 segundos e, em seguida, no sentido anti-horário por 5 segundos.  

Caso algum dos motores inicie girando no sentido anti-horário ao invés de horário, inverta os fios do motor em questão. Exemplo: Caso o motor conectado ao Mini Driver Ponte H nos bornes identificados por MOTOR B esteja girando no sentido anti-horário, remova o cabo USB do Arduino, desligue a fonte de alimentação 5V e inverta os fios, conforme Figura 4. 

Figura 4: Inverta os fios dos bornes MOTORB para que os dois motores iniciem girando no sentido horário.

Após isto, ligue novamente a fonte de alimentação e o Arduino. 

Espero ter ajudado, 

Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo! 

Att. Jonas Souza 

Dúvidas? Deixe seu comentário

Jonas Souza

Graduando em Engenharia Elétrica.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.