terça-feira, 21 de maio de 2013

Driver de Motor: L298 + Arduino (Parte 1)


Vamos fazer o Arduino andar? É comum o Arduino ser utilizado em projetos de robótica, ora lendo sensores e dando um feedback e/ou movimentando algum chassis com motores.

Fazer estas coisas não é um mistério, mas em muitos casos conseguir no mercado nacional aquele shield que faça essa interface é uma aventura e muitas vezes o preço não é convidativo.

O driver aqui descrito é baseado num manjadíssimo circuito integrado dedicado para motores o L298; Vários fabricantes produzem esse integrado, mas é mais comum vê-lo sob a sigla da ST (SGS-Thompson). Esse integrado é conhecido como "Ponte H" - H-Bridge - Dual. Isto é, ele tem 2 bridges, o que pode fazê-lo controlar 2 motores com um componente só! O que é muito bom!

Quer saber um pouco mais sobre pontes-H? Visite o artigo neste blog: http://mmc-zaap.blogspot.com/2013/05/ponte-h.html

O L298

O L298 implementa a ponte-H conforme o diagrama abaixo:

Não se assuste com as portas AND fazendo o driver dos transistores. A função dele é criar a lógica necessária de forma que NUNCA coloque os transistores de saída em curto e fazer a interface entre o setor de baixa tensão e alta tensão.  Já que o L298 trabalha com 2 alimentações.

São 2 canais(A, B); Eis a Pinagem e função:
Pino
Função
Descrição
IN1
E
Entrada de comando canal A
IN2
E
Entrada de comando Canal A
OUT1
S
Saída de carga canal A
OUT2
S
Saída de carga canal A
EN1
E
Habilita canal A
SENS1
S
Saída para o sensor de corrente do canal A(R)
IN3
E
Entrada de comando canal B
IN4
E
Entrada de comando Canal B
OUT3
S
Saída de carga canal B
OUT4
S
Saída de carga canal B
EN2
E
Habilita canal B
SENS2
S
Saída para o sensor de corrente do canal B(R)
VS
PWR
Alimentação do conjunto de potencia dos canais
VCC/+Vss
PWR
Alimentação da lógica
GND
PWR
Ground

Não vou entrar nos detalhes das características elétricas, mas resumirei o que for importante para a implementação desse projeto:
- Alimentação da lógica: 4,5V a 7V.
- Alimentação do conjunto de poténcia: 7 a 46V - com limitação de corrente circulante de até 2A por canal!!! (não se iluda com os 4A que diz no datasheet, isso é corrente TOTAL=A+B)
- Frequencia de comutação máxima aplicada nos pinos IN e EN : 40Khz (caso use alguma entrada com PWM)

O Sensor de corrente nada mais é que um resistor cuja derivação serve para monitorar a tensão gerada. Um microcontrolador ou algum outro circuito dedicado tem que ler essa saída e fazer o corte do fornecimento de tensão para a carga de forma que o circuito se mantenha estável e dentro dos parâmetros de funcionamento.

O datasheet não é claro, mas há o entendimento que deverá ser um resistor cuja finalidade é gerar uma tensão proporcional à corrente circulante em cada um dos canais. O corte será feito se a corrente atingir 2A.

Segundo o datasheet, a tensão gerada em SENS1, SENS2 não deverá exceder 2V. Se fixarmos em 1V, teremos que para 2A, a resistencia deverá ser de 0.5Ohm. Portanto um Resistor de 0.5Ohmx1W tá de bom tamanho. Pede-se que seja um resistor puro, não de fio. Pois num processo de comutação, esses resistores (de fio) podem dar problemas devido indutância intrínseca do componente. 


O circuito

Com base no datasheet do L298, o circuito final é bastante simples:

Para auxiliar a depuração e funcionamento do motor, foi colocado uma bateria de LED's na parte de controle do circuito, justamente para visualizar o sinal de cada estágio.

Os diodos D1 a D8 são diodos para proteção. Se o circuito não for crítico, pode usar o 1N4007. Mas recomendo algum tipo de diodo schottky para potência: 1N5819, UF4007 por exemplo. Não utilize o circuito sem os diodos de proteção. D9 é só uma proteção adicional contra inversão de polaridade.

C1,C2 são capacitores de desacoplamento de fonte. Valores não críticos: 10uF para o Eletrolítico, 100nF para o despolarizado (Cerâmica ou poliéster - tanto faz). C3,C4 são de poliéster - 10nF ou 47nF. para desacoplamento/ruído do motor.

Especial atenção para RS1 e RS2. Estes resistores deverão ser de 0.5Ohm/1Watt. De preferência que não seja de fio! Caso o driver trabalhe com motores de pequena potência (desses de brinquedos) O resistor pode ser substituído por um jumper. Os demais resistores (R1 a R6) 1k2; R9 é calculado em função da tensão de alimentação 4k7 tá de bom tamanho)

O conector J1 é do tipo KK. Ele não é conectado diretamente a algum pino do Arduino por uma questão de projeto. No futuro pretendo liberar mais outros 2 artigos, usando um controlador dedicado para este driver de potência: Usando o SN74HC14 ou SN74HC00 (ou qualquer porta inversora) e outro dedicado ao seu controlador original, o L297. Esses 2 últimos projetos, sim, conectados diretamente à porta do Arduino. X1,X2,X3 são conectores tipo MTA de 0.156” (distância entre pinos) com trava.

Realização

Abaixo temos o layout do circuito impresso. Em breve disponibilizarei o projeto na em um repositório público e o leitor poderá baixar e reproduzir a placa.


Veja como ficou...


Veja o vídeo do carro robótico em funcionamento, logo abaixo:



É isso aí! Até a próxima!

Nenhum comentário:

Postar um comentário