Neste artigo iremos demonstrar como controlar um motor DC utilizando uma ponte H BTS7960 através de um Arduino.
O módulo Ponte H é baseado no driver BTS7960, que é metade de uma ponte H, dessa forma utilizam-se 2 drivers BTS7960 para construir uma ponte H com capacidade de até 43A. É um módulo útil para o controle robótico e mecânico, tendo excelente custo benefício para estudantes, amantes e profissionais da área de atuação.
Componentes Utilizados
Todos os componentes utilizados neste projeto estão listados abaixo, clicando no item você consegue acessar o componente na loja, caso queira adquirir o componente para realizado o projeto:
Características Técnicas
- Controla 1 motor DC;
- Controle de direção e velocidade (PWM);
- Tensão de alimentação: 5- 45VDC;
- Tensão de entrada do controle: 3,3 – 5V;
- Corrente de Alimentação (módulo): 3 mA;
- Modo de controle: Serial ou level;
- Ciclo de trabalho: 0-100%;
- Modulação PWM de até: 25kHz;
- Corrente Continua: 43A;
- Corrente de pico/pulso: 60A;
- Proteção: Térmica, sobre tensão, subtensão, sobrecorrente;
- Possui pino (IS) para indicar falhas (proteção);
- Possui dissipador de calor;
- Dimensão: 50 x 50 x 43 mm;
- Peso: 66g.
Para o controle do motor existem várias maneiras, mas neste post iremos ilustrar a principal para uso em todas as aplicações. A Figura 1 ilustra os pinos de alimentação, entrada de nível alto, baixo e PWM:
As ligações entre a ponte H e o Arduino são ilustradas na Figura 2:
A programação para controle lógico do Arduino é demonstrada abaixo. A programação tem como função:
1ª parte: Controlar a velocidade do motor para o lado 1 (PWM);
2ª parte: Controlar a velocidade do motor para o lado 2 (PWM);
3ª parte: Acionar o motor com velocidade máxima para o lado 1;
4ª parte: Acionar o motor com velocidade máxima para o lado 2.
Código:
Segue abaixo o código utilizado:
#define PWM2 2 //Pino do arduino que será ligado o BTS7960
#define PWM3 3 //Pino do arduino que será ligado o BTS7960
#define TEMPO_DA_VELOCIDADE 150 //tempo (ms) que o motor ficará na mesma velocidade
void setup()
{
//Configura os pinos de saída
pinMode(PWM2, OUTPUT);
pinMode(PWM3, OUTPUT);
}
void loop()
{
int valor_pwm = 0; //armazena o PWM
digitalWrite(PWM3, LOW);
//Aumenta a velocidade para o lado 1
for (valor_pwm = 0; valor_pwm < 256; valor_pwm++)
{
analogWrite(PWM2, valor_pwm);
delay(TEMPO_DA_VELOCIDADE);
}
//Diminui a velocidade para o lado 1
for (valor_pwm = 255; valor_pwm >= 0; valor_pwm--)
{
analogWrite(PWM2, valor_pwm);
delay(TEMPO_DA_VELOCIDADE);
}
/////////////////////////////////////////////////////////////////////////////
digitalWrite(PWM2, LOW);
//Aumenta a velocidade para o lado 2
for (valor_pwm = 0; valor_pwm < 256; valor_pwm++)
{
analogWrite(PWM3, valor_pwm);
delay(TEMPO_DA_VELOCIDADE);
}
//Diminui a velocidade para o lado 2
for (valor_pwm = 255; valor_pwm >= 0; valor_pwm--)
{
analogWrite(PWM3, valor_pwm);
delay(TEMPO_DA_VELOCIDADE);
}
/////////////////////////////////////////////////////////////////////////////
//liga o motor para o lado 1 com velocidade maxima
digitalWrite(PWM2, LOW);
digitalWrite(PWM3, HIGH);
delay(10000);
digitalWrite(PWM2, LOW);
digitalWrite(PWM3, LOW);
delay(2000);
//liga o motor para o lado 2 com velocidade maxima
digitalWrite(PWM2, HIGH);
digitalWrite(PWM3, LOW);
delay(10000);
digitalWrite(PWM2, LOW);
digitalWrite(PWM3, LOW);
delay(2000);
}
Download
Seguindo estes passos é possível controlar a rotação de qualquer motor DC. Nos links abaixo está disponibilizado o download do arquivo fonte e diagrama:
Para mais detalhes, assista o vídeo abaixo: