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.

8 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.

AZ disse...
Este comentário foi removido pelo autor.
AZ disse...

Olá, obrigado por compartilhar conhecimento.
Estou tentando fazer uma maquina de limpeza caseira de bicos. O que estou procurando um projeto de abertura de bicos no modo gradativo no periodo de 40 segundos teria 10 etapas de tipos de abertura em hertz... você teria algo nesse sentido ou poderia me dar o caminho?
Obrigado.