domingo, 17 de fevereiro de 2013

L298N Ponte H Dupla - Breakout board feito em casa








L298N Breakout Board


Este é o projeto da Ponte H dupla com o CI L298N Multiwatt15.

A ponte H já foi discutida em outros tópicos deste blog, dessa forma não é objetivo deste posto entrar em detalhes. Vou ensinar, como construir uma Ponte H usando o CI L298 diretamente numa placa padrão perfurada, sem corroer uma placa de circuito impresso. Vamos então diretamente ao assunto.

Veja o original no meu Instructables: http://www.instructables.com/id/Dual-H-Bridge-L298-Breakout-Board-Homemade/

Passo 1 - Reúna todos os materiais necessários:

1 x placa perfurada padrão com 13x26 furos ou 3,5x7,0 cm;
1 x circuito integrado L298N;
1 x dissipador de calor (se for usar a ponte H para grandes correntes);
2 x AK300/3 - conector borne aparafusável;
1 x pin Header 8 vias, femea (como o do Arduino);
8 x diodos 1N4001;
2 x resistores de 0,47Ohm/2W;
2 x capacitores 100nF poliéster metalizado;
Fios, cabos, solda e ferramentas.



Passo 2 - Preparação da placa e componentes:

Corte, desbaste, lime, lixe e limpe a placa perfurada a ser utilizada.

Dobre e limpe os contatos/terminais dos componentes a ser utilizado.






Passo 3 - Identificar Furação:

Identifique na placa perfurada, toda a furação que será utilizada. Use o diagrama do projeto para esta etapa.







Passo 4 - Soldar Componentes:

Solde os componentes na placa, de acordo com o posicionamento indicado no projeto.
Solde-os em grupo, como por exemplo:
Primeiro os diodos; depois os conectores AK300/3 e PinHead; depois os resistores e capacitores; por último o CI L298N.



















Passo 5 - Trilhas Soldadas:

Use o diagrama do projeto para soldar os pontos da placa perfurada de modo a fazer as trilhas entre os componentes.












Passo 6 - Trilhas Fiadas:

Use o diagrama do projeto para soldar os fios nas camadas superior e inferior, de modo a formar as trilhas com fios.







Passo 7 - Testes:



Para testar, foi usado o chassis do BUGBot para formar um carro controlado via BlueTooth o "Carro_BT-Bot (para o controle via android foi usado o programa "Blue Control" disponível no Market.

Conexões do arduino ao módulo BlueTooth:
Arduino -> BlueTooth
0 RX -> TX
1 TX -> RX
GND -> GND
VCC -> VCC

Conexões do Arduino ao módulo PONTE-H:
Arduino -> Ponte H
10 -> IN1
11 -> IN2
5   -> IN3
6   -> IN4
VCC -> VCC
GND -> GND

Conexões da PONTE-H aos Motores:
O1 -> pino 1 do motor 1 (direita)
O2 -> pino 2 do motor 1 (direita)
O3 -> pino 1 do motor 2 (esquerda)
O4 -> pino 2 do motor 2 (esquerda)

Conexões da PONTE-H:
VS -> +9V
GND -> GND

Diagrama esquemático:


Na figura você pode observar o diagrama da Ponte-H
e no link você pode baixar o original para Eagle Cad de uma versão mais aprimorada.

http://www.4shared.com/file/T17oVW-z/PONTE_H_L298N.html

http://www.4shared.com/file/6VdOTgv5/PONTE_H_L298N.html



Software utilizado:

Abaixo o software completo, e também o link para download.


http://www.4shared.com/file/YJX6-1UT/BlueTooth_Bot_R1.html




/*
#################################################################################
#   File:                          BlueTooth_Bot_R1.pde                                     
#   Micro controller:     Arduino UNO ou Teensy++ 2.0
#   Language:               Wiring / C /Processing /Fritzing / Arduino IDE  
#
# Objectives:               A bluetooth controlled cart
#          
# Funcionamento:       Just a simple test of the home L298N breakout Board
#
#
#   Author:             Marcelo Moraes
#   Date:                13/02/13
#   Place:              Sorocaba - SP - Brazil
#
#################################################################################

  
This project contains code to the public domain.
The modification is permitted without notice.

*/




// definição de variáveis, constantes e valores

int inA1 = 10; // Pins for the PONTE-H
int inA2 = 11;
int inB1 = 5;
int inB2 = 6;



// Arduino initialization
void setup(){
  // Serial communication initialization
  Serial.begin(9600);
  // 
at the beginning motors stopped
  set_motors(0,0);
}

// loop principal do programa
void loop(){

  if (Serial.available() > 0){// if serial data are available
    char varC = Serial.read(); // reading the serial port data

    if(varC == 'U'){ // move forward
      set_motors(80,75);
      delay(1000);
      set_motors(0,0);
    }
    if(varC == 'D'){ // move backward
      set_motors(-80,-75);
      delay(1000);
      set_motors(0,0);
    }
    if(varC == 'C'){ // stopped
      set_motors(0,0);
    }
    if(varC == 'R'){ // turn right
      set_motors(80,-80);
      delay(500);
      set_motors(0,0);
    }
    if(varC == 'L'){ // turn left
      set_motors(-80,80);
      delay(500);
      set_motors(0,0);
    }
  }
}
//FIM DA COMPILAÇÃO


// running motors
void set_motors(int left_speed, int right_speed){
  if(right_speed >= 0 && left_speed >= 0){
    analogWrite(inA1, 0);
    analogWrite(inA2, right_speed);
    analogWrite(inB1, 0);
    analogWrite(inB2, left_speed);
  }
  if(right_speed >= 0 && left_speed < 0){
    left_speed = -left_speed;
    analogWrite(inA1, 0);
    analogWrite(inA2, right_speed);
    analogWrite(inB1, left_speed);
    analogWrite(inB2, 0);
  }
  if(right_speed < 0 && left_speed >= 0){
    right_speed = -right_speed;
    analogWrite(inA1, right_speed);
    analogWrite(inA2, 0);
    analogWrite(inB1, 0);
    analogWrite(inB2, left_speed);
  }
  if(right_speed < 0 && left_speed < 0){
    right_speed = -right_speed;
    left_speed = -left_speed;
    analogWrite(inA1, right_speed);
    analogWrite(inA2, 0);
    analogWrite(inB1, left_speed);
    analogWrite(inB2, 0);
  }
}





Vídeo:

Como fiz originalmente para o site Instructables, o vídeo está num Inglês (um tanto quanto pobre), mas é entendível.

Assista no youtube: http://youtu.be/0conwkmiAoM

Dúvidas e sugestões para: arduinobymyself@gmail.com





6 comentários:

  1. Marcelo, parabéns pela qualidade da documentação.
    Vi pela 1ª vez no instructables e a qualidade me chamou a atenção. Também sou EE e fico orgulhoso em ver bons trabalhos dos colegas especialmente os postados lá fora.
    Continue assim. Abç.
    AMR

    ResponderExcluir
    Respostas
    1. Rico,

      Muito obrigado pelas palavras de apoio e agradecimento.

      Estou fazendo o melhor para que possamos divulgar nosso conhecimento e assim ter software e hardware livre para todos.
      Continue visitando o blog virão artigos, simples e avançados.


      Abraço.


      Marcelo Moraes

      Excluir
  2. Boa Tarde! Marcelo sou um pouco leigo no assunto e estou com duvidas sobre a ligação no arduino: qual a função dos pinos enable A e B, ode devo ligá-los? Desde já agradeço! Muito Obrigado!

    ResponderExcluir
  3. Olá Estevão,

    Sem problemas, nosso blog é para suprir as necessidades, desde o iniciante, até os mais avançados usuários de Arduino.

    Sugiro você consultar os "Posts" sobre PONTE-H e sobre o L298N para melhor entendimento.
    Mas vai aí uma breve descrição...
    O enable da ponte H, serve como "Habilitador" das portas de saída da Ponte-H do circuito integrado L298N. Assim, por exemplo, se quero trabalhar com as portas 1 e 2, para que as entradas 1 e 2 sejam transferidas às saídas 1 e 2 respectivamente, o pino "Enable A" deve estar em nível Alto, uma vez que será tranferido toda a energia da entrada para a saída, sendo feito o driver para a tensão VS dos motores, se o pino enable estiver em nível baixo, nenhuma transferencia de energia será feita para essas saídas. O mesmo acontece para as saídas 3 e 4 qunado acionados pelas entradas 3 e 4, de acordo com o pino "Enable B".

    Algumas pessoas usam o pino enable para efetuar o control PWM de tensão na saída, ou seja: se eu injetar 0V, terei saída em 0V; se eu injetar 5V, terei saída em VS (tensão de alimentação dos motores... não a tensão lógica do CI); e se eu injetar algo en torno disso (entre 0 e 5V), consigo que a saída seja proporcional a essa tensão de entrada no pino "Enable".

    "Normalmente" o pino enable fica en nível alto - pode ser ligado diretamente ao positivo de alimentação lógica do seu circuito -(quando quero acionar os motores) ou nível baixa (quando não quero o acionamento dos motores), e o controle PWM é feito diretamente na entrada 1, 2, 3 ou 4, e não no pino "Enable"...

    Estude bem os meus códigos que envolvem acionamento de motores e você vai ver que uso os dois métodos...

    Grande Abraço

    Marcelo Moraes

    ResponderExcluir
  4. Muito obrigado pela atenção e pela resposta, mais uma vez muito obrigado! Acabei percebendo isso na pratica quando deixei os dois pinos sem nada... Estou com outro problema: não sei se fiz certo mas diminui um poco os resistores pois estou usando uma bateria de 9v e não de 12... não sei se fiz certo mas coloquei um resistor de 330 Ohmx1W. Só que o problema esta sendo na hora de acionar os motores quando faço o upload do código no meu arduino, funciona porem o motor não gira, fiz um teste com meu multímetro e está marcando por volta de 6v estou usando motores dc que funcionam com 3 a 6 v, porém ele não funciona... por outro lado consigo ligar led's nas saídas O1 e O2... pela minha descrição você saberia me dizer onde estaria o problema? Mais uma vez agradeço! Muito Obrigado!

    ResponderExcluir
  5. OBS: A bateria que estou utilizando tem capacidade para alimentar os dois motores ao mesmo tempo. Se o uso do resistor de 330 ohm for incorreto como eu poderia calcular o resistor para uma bateria de 9v? Obrigado!

    ResponderExcluir