terça-feira, agosto 14, 2012

Motores DC: Controlando a Velocidade com PWM

É possível controlar a velocidade de um motor DC comum variando (dentro de certos limites) a tensão aplicada a ele. O circuito para isto, entretanto, é relativamente complexo. Por este motivo usa-se uma aproximação: o PWM.


O PWM consiste em gerar uma sequência de pulsos com frequência fixa, onde controlamos a largura dos pulsos (tempo de sinal alto). Embora o sinal tenha somente dois níveis (alto e baixo) a média irá variar com a largura dos pulsos. Nos extremos, se a largura for zero, o sinal está sempre no nível baixo e se a largura for igual ao período da onda o sinal está sempre no nível alto.

Para o meu exemplo estou usando um Arduino Nano para gerar o PWM. A biblioteca do Arduino possui uma função para gerar um sinal PWM, que tem o sugestivo nome de analogWrite. Enfatizando, não estamos gerando um sinal analógico mas sim um sinal digital cujo nível médio podemos alterar. O analgoWrite permite estipular a largura do pulso através de um número de 0 a 255. A saída do Arduino não pode acionar diretamente o motor, usei um transistor MOSFET para acionar o motor (como vimos aqui).

O programa do Arduino é bastante simples, varia a largura de 15 a 255, de 15 em 15, a cada 10 segundos:
void setup (void)
{
  pinMode (6, OUTPUT);
  Serial.begin (9600);
}

void loop (void)
{
  int i;
  
  for (i = 15; i < 256; i+=16)
  {
    analogWrite (6, i);
    Serial.println (i);
    delay (10000);
  }
}
O motor que eu usei foi um micromotor com redução, o que deixa mais visível as alterações de velocidade. Para medir a velocidade usei um outro circuito que vimos aqui. Prendi ao eixo do motor uma tosca rodela de papelão grosso com dois imãs embutidos. A passagem dos imãs é detectada por um sensor efeito Hall acoplado a um microcontrolador PIC que calcula a velocidade em RPM e a apresenta em um display de 7 segmentos.

O funcionamento de tudo isto pode ser verificado no vídeo abaixo. O LED pisca toda vez que um imã é detectado e o motorzinho faz um barulho irritante.


Observar que o motor não consegue virar com as larguras menores. Um outro ponto é que na prática estamos ligando e desligando o motor continuamente. Nos instantes que ele está desligado o eixo está solto, se movendo apenas por inércia. O resultado é que o torque médio cai muito nas velocidades mais baixa.

6 comentários:

Anônimo disse...

Estou ligado deste mesmo jeito ae.. mas em vez de ligar um motor.. estou ligando 2 motores.. um pra cada transitor.. mas a tensao de entrada Vin (12V). ta caindo pra 4 em cada Bomba.. vc sabe porque isso ta acontecendo ?

Daniel Quadros disse...

É difícil dizer sem mais detalhes, mas pode ser que a sua fonte de 12V não suporte a corrente solicitada pelos motores.

Anônimo disse...

Vc tem algum esquema eletrônico onde posso converter um sinal de um sensor de velocidade tipo hall para uma saída PWM 12vcc e no máximo 5 amperes ?

Daniel Quadros disse...

Não tenho nenhum esquema pronto. Aqui no blog tem algumas informações sobre como usar sensores de efeito Hall. O MOSFET que utilizei (IRL540N) é mais que suficiente para a carga que você deseja (ele aguenta até 100V @ 36A).

Sistemas Web disse...

qual o numero do sensor hall que vc utilizou no esquema, esse sensor pode ser utilizado em sistemas de ignição eletronica??

Daniel Quadros disse...

O sensor foi o US1881. Ele requer a detecção dos dois polos de um imã, portanto pode não ser o mais adequado para uma ignição eletrônica.