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.

Nenhum comentário:

Postar um comentário