Mostrando postagens com marcador ponte h. Mostrar todas as postagens
Mostrando postagens com marcador ponte h. Mostrar todas as postagens

quarta-feira, 22 de maio de 2013

Driver de Motor: L298 + Arduino (Parte 2)


Continuação do artigo anterior (parte 1)
Esta é a parte do artigo que explicará as funcionalidades e modo de operação do nosso driver. O artigo anterior, lidados com as bases do hardware. Na 3a e última parte, descreveremos a biblioteca para Arduino.

Funcionamento

O funcionamento é extremamente simples. Aplicando as tensões nas entradas de controle conforme o diagrama abaixo, temos a ativação, ou não, da saída.

Entrada
Saída
A(C)
EN1(2)
B(D)
OUT
X
0
X
0
0
1
0
0
0
1
1
RUN +
1
1
0
RUN -
1
1
1
0

X - não importa o valor da entrada.
0, 1: sinal low (0V) e high (Vcc) respectivamente
RUN: saída ativada (+ em uma polaridade, - com polaridade invertida)

No diagrama abaixo, temos um exemplo de conexão com a utilização do Arduino. A conexão SENS1,SENS2 é opcional.



A alimentação do motor não deverá ultrapassar 46V. Nem o consumo total dos motores, excederem 2A cada um – Não há fusível de proteção.
Quando a alimentação do motor estiver ativada, o LED7 ficará aceso. Os demais LEDs estão ligados às linhas de sinal do L298.

PWM

Até o presente momento não se falou em controle de velocidade. Do jeito que está, o motor irá girar na sua velocidade nominal, proporcional à corrente que passa, claro! E se quisermos dotar os motores de um controle de velocidade? Como não temos potenciômetros para controlar corrente, então lançamos mão do PWM.

O PWM significa Pulse Width Modulation, ou modulação por largura de pulso. Quando se trabalha com PWM, o leitor tem que ter em mente o conceito de ciclo de trabalho (duty cycle). Um sinal de PWM tem freqüência fixa, e valores de amplitudes bem definidos – 0 ou 1 (0 ou VCC, como quiser) – mudando somente quanto tempo no ciclo o sinal vai estar em 0 ou 1. Isto é, eu altero somente a largura do pulso... Veja  no diagrama abaixo 5 sinais  de mesma freqüência, porém com largura de pulso diferentes.



Na prática, dado as características elétricas da carga mediante um sinal variável, a largura de pulso irá influenciar dramaticamente no comportamento do dispositivo:
  1.   A tensão efetiva (eficaz ou RMS) será proporcional à largura do pulso. Apesar da corrente agora, ser também pulsada, esse conceito não se aplica. Se o motor consome 2A, ele receberá os 2A, só que por um período de tempo determinado pelo PWM. Isso faz com que se tenha melhor controle de consumo e por sua vez a potência consumida J
  2. Sinais PWM costumam gerar harmônicos: Prepare-se para instabilidades com ruídos e ajustes nos capacitores que vão aos motores L
  3. O corte abrupto (1 --> 0) nos sinais PWM faz com que as cargas indutivas criem correntes parasitas (fly back). Os diodos de proteção irão trabalhar mais intensamente! Fica de olho, costumam esquentar!!! K  

Plugue os pinos EN1 e EN2 nas portas do Arduino que suportem PWM. Quando ativar o pino, em vez de usar a função digitalWrite, use analogWrite passando o numero do pino e o valor de PWM desejado (0 a 255, para 0 e 100% respectivamente)
No diagrama de conexão acima, os pinos EN estão ligados aos pinos 6 e 9 que são PWM! :) 


Current Sensing

Por fim, e não menos importante, current sensing, isto é os pinos SENS1 e SENS2. É dele que virá o controle de feedback do driver.

Se estiver utilizando o current sensing propriamente, isto é com o resistor de 0.5Ohm/1W. Teremos ali a leitura de tensão proporcional à corrente que passa por cada canal do L298. Conforme especificado, se essa tensão ultrapassar 1V, teremos uma corrente circulante > 2A, o que pode queimar o integrado...

Os pinos SENS1 e SENS2 deverão ser ligados a um conversor AD, o arduino possui esses pinos (A0..A5). Para ler, utilize analogRead(). Faça as conversões necessárias. O AD do arduino tem resolução de 10bits... com fundo de escala de 5V... então fazendo os cálculos, qualquer leitura acima de 204 (~=1V) já podemos tomar algumas ações como, diminuir o ciclo de PWM; ou desabilitar o canal respectivo momentaneamente; ou parar tudo para proteger o L298.

No diagrama acima, eles estão ligados aos pinos A0 e A1 respectivamente.

--//--

No proximo e último artigo, trataremos da biblioteca de controle para o Arduino.

segunda-feira, 20 de maio de 2013

Ponte H

Por estes dias recebi um daqueles projetinhos de colégio... mais para ajudar que fazer. Mas acabei fazendo.Para não deixar a prática ficar sem a teoria. Resolvi descrever um pouco de um artifício usado em circuitos de potência. As configurações de pontes H são as mais diversas.  Mas o conceito se aplica a todos.

Uma ponte H, nada mais é um circuito eletrônico que permite comutar a tensão na carga. Isto é, com base em uma lógica de comando, a corrente pode fluir num sentido, ora em outro. Em outras palavras: inversão de polaridade. ;)
No esquema abaixo, temos o circuito típico de uma ponte H. Como eu disse, existem várias formas de projetar uma. Usei o modelo NPN/PNP pois é mais fácil de entender o que acontece, e se o usuário quiser implementar, é mais seguro. Veja o esquema abaixo:

O funcionamento é simples. Basta aplicar alguma tensão nos pontos indicados (reverse/forward inputs). Para facilitar o entendimento, seja "0" a ligação ao terra (ou negativo) e "1" ao positivo.

Pelo visto os fluxos que importam e surtem efeitos são os "0"-"1" e "1"-"0" . Nos demais nem flui corrente... então não há ativação do motor.

Esse é o princípio do funcionamento da Ponte H. Na verdade esse circuito é bastante útil quando precisa de alguma forma tirar vantagem da inversão da polarização. Motores DC é um caso muito comum.

Veja que os transistores em muitos casos conduzem direto sem resistência limitadora nos seus coletores ou emissores, somente a resistência da carga é que vai limitar alguma coisa... por isso fique antenado, transistorzinho barato-chinfrim de sinal ou baixa corrente aqui não tem vez! Se usar, vai queimar!


Diodos de Proteção

Entre coletores e emissores de cada transistor, devemos ter um diodo de proteção para o caso de comutarmos cargas indutivas. Motivo? Óbvio... Pela lei de Lenz, Lorenz e... blá blá blá, uma carga indutiva quando tem o seu fornecimento de corrente cessado, o campo magnético criado e circundante é capaz de gerar uma tensão em oposição... blá,blá,blá!

Os diodos de proteção são para isso, caso o motor gere uma tensão em resposta ao corte de energia ou troca de polarização, o diodo irá drenar essa carga nociva ao terra (ou ao potencial de alimentação, se for o caso). Os diodos NÃO deverão ser 1N4148, BAT54 ou qualquer outro de sinal ou baixa corrente. PODE usar o 1N4007, mas o melhor mesmo é usar um do tipo schottky 1N5819 ou UF4007 - fast recovery diodes.

Abaixo o exemplo de uso desses diodos:

Circuito

Com base no circuito acima, implementei um pequeno shield para Arduino. Veja o layoute abaixo. Quem tiver interesse nesse circuito, entre em contato. Quando eu tiver um repositório on-line atualizarei o este post.

No shield temos os principais pontos: J1, J2 e J3. J1 é a conexão com o motor. J2 é a entrada de alimentação - CUIDADO! Este porto NÃO TEM proteção. Se inverter a polaridade da alimentação aqui, os diodos de proteção irão queimar! J3 é o ponto de conexão de controle, onde o Arduino irá comandar o funcionamento do circuito.

O valor dos resistores não tem mistério: coloca 1K para todo mundo!

ATENÇÂO: Não convém usar VIN e +5V do arduino para alimentar este circuito. Utilize uma fonte em separado.
Vista dos componentes
Lado da Solda

É isso aí! Guarde este artigo. Em breve irei voltar a esse mesmo assunto numa outra abordagem!