3 motivos para você ir fundo no PWM

Tem muita gente que treme na base só de ouvir falar em PWM. Se este for o seu caso eu devo dizer que esta é sua chance de desmistificar um pouco esse assunto.

O PWM é uma ferramenta muito útil em várias aplicações, principalmente se você gosta de controle e automação, e por isso você não deve permanecer a margem do assunto.

Continue lendo este post um pouco mais e garanto que você achará alguma informação útil por aqui. Assim pouco a pouco você vai ampliando seu conhecimento sobre o Arduino e quando menos perceber já estará programando e projetando, inclusive usando o PWM sem traumas.

No final vou apontar 3 razões para você aprender como configurar os sinais PWM no seu Arduino sem usar sua biblioteca básica.

thumbs-up-2056022__340

Afinal para que serve o PWM?

Para saber o básico sobre o que é sinal PWM eu recomendo nossa aula aqui.

Mas se você está se perguntando porque todos falam em sinal PWM, vou mostrar aqui algumas aplicações importante que explicam sua importância.

Dentro de uma CPU de computador (ou microcontrolador), todas as informações são digitais. Ou seja, qualquer informação tem que obrigatoriamente ser composta por unidades binárias (bits) que pode ser 0 ou 1. Temos então as variáveis (informações) de 8, 16, 32, 64, 128 bits, que são chamados números digitais porque são formados por bits.

binary-code-475664_640

O que as CPUs fazem é manipular números digitais de forma muito rápida e eficiente. Porém quando a informação final tem que atingir um componente analógico temos que fazer uma conversão da informação.

Os componentes analógicos não são capazes de manipular os vários bits que formam o dado digital para interpretar seu real valor. Exemplos de componentes analógicos são: luzes, alto-falantes, resistências de aquecimento e motores elétricos.

O sinal PWM é a forma mais eficiente de converter um sinal digital para seu valor equivalente em forma analógica e desta forma, ser utilizado para gerar sons em alto-falantes e controlar a velocidade de um motor elétrico, por exemplo.

figura1

Como vemos na figura acima, só precisamos passar o sinal PWM por um filtro passa baixa para obtermos o sinal analógico puro.

O filtro passa baixo é muito fácil de ser feito. Um simples circuito RC já é suficiente para a maioria das aplicações. Em algumas aplicações o filtro nem é necessário já que o próprio componente onde o sinal será aplicado já se comporta como um filtro. É o caso de um motor elétrico. Ao aplicarmos o sinal PWM em um motor podemos controlar sua velocidade ao variar a largura do pulso do sinal PWM.

Mas atenção aqui porque o sinal de uma saída PWM do Arduino não tem capacidade para alimentar a maioria dos motores elétricos. Neste caso você vai precisar de um “driver” como o que utilizamos na aula prática sobre motores elétricos (Video aula motores elétricos 1).

 

E por falar nele…

Pois é! O Arduino é perfeito para você começar a entender na prática como usar o sinal PWM.

A placa Arduino UNO possui 6 saídas que podem ser configuradas para ter sinais PWM. Existem algumas experiências bem simples que podem ser testadas sem nenhuma dificuldade usando leds, alto-falantes e motores DC (Aula prática 5- Programa “Fade”).

A biblioteca de programação do Arduino facilita muito a utilização de sinais PWM no Arduino. Com apenas duas instruções você já tem uma saída PWM configurada e funcionando. O exemplo abaixo configura o pino 3 da placa como saída e coloca ela para funcionar com um PWM com frequência de 490Hz e “duty cycle” de 50%.

 

pinMode ( 3, OUTPUT );

analogWrite ( 3, 127 );

 

Ao ligarmos um led no pino 3 do Arduino (através de um resistor) iremos ver que ele acende com media intensidade. E podemos controlar sua luminosidade escrevendo outros valores de 0 a 255 na instrução analogWrite.

 

Porque ir mais a fundo?

Para a grande maioria dos usuários do Arduino as informações passadas neste post até aqui é o suficiente. A biblioteca do Arduino faz toda a preparação dos contadores e da interface do microcontrolador e você só terá que interferir se quiser mudar o valor do “duty cycle” durante o programa.

Mas vou dar agora 3 motivos para você querer aprender mais e assim ter maior controle sobre a geração de sinais PWM no Arduino.

overcoming-1697546__340

 

O primeiro motivo é ter a possibilidade de alterar a frequência do sinal PWM.

Usando as instruções acima, a frequência do sinal PWM é fixa. Esta frequência é igual a 490 Hz para os pinos 3, 9, 10, 11 e 980 Hz para os pinos 5 e 6.

E porque necessitamos alterar a frequência do PWM?

Para otimizar o filtro passa baixa que temos que implementar para ter um sinal analógico é fundamental fazer o casamento da frequência do sinal PWM com o comportamento do filtro.

Quando maior a frequência do sinal PWM, mais simples pode ser o filtro utilizado e também mais eficiente a filtragem. Em aplicações com áudio a eficiência da filtragem é determinante para eliminação de ruído.

Em algumas aplicações precisamos gerar um sinal com uma frequência pré-determinada com “duty cycle” de 50%.

É o caso quando queremos enviar sinais para um sensor de IR (infravermelho) do tipo usado em controle remoto. Neste sensor possui um decodificador que só responde a sinais com frequência de 35 kHz a 40 kHz.

Usando a saída PWM do Arduino fica muito fácil fazer uma aplicação deste tipo. Mas temos que saber como configurar o PWM para gerar um sinal com frequência desta faixa.

O segundo motivo para aprender como configurar o PWM sem usar as bibliotecas do Arduino é por causa do sincronismo de fase entre os sinais PWM.

Ao usarmos a biblioteca básica do Arduino para configurar o PWM não temos controle sobre a fase entre os sinais PWM em diferentes pinos do Arduino. Podemos ter os sinais conforme o diagrama abaixo:

figura2

No sinal PWM 1 podemos ver que não há sincronismo entre as bordas de subida dos 2 sinais enquanto que no sinal PWM 2 sim.

Dependendo da aplicação podemos necessitar de um tipo 1 ou do tipo 2. Esta diferença ocorre porque o módulo de PWM do microcontrolador tem algumas formas de trabalho.

Dependendo da forma programada teremos o tipo 1 ou o tipo 2. E pela biblioteca do Arduino não temos controle sobre a forma que o PWM está sendo configurado.

Nos testes que eu realizei com a biblioteca do Arduino só consegui obter o sincronismo do sinal PWM 1. Mas isso pode depender da versão da biblioteca que você esteja usando.

Portanto se você precisar garantir um determinado tipo de sincronismo entre os seus sinais PWM é melhor é você saber como configurar o seu PWM para garantir que ele tenha o comportamento você espera.

O terceiro motivo para aprender como configurar o PWM é para poder usar a resolução máxima do PWM gerado nos pinos 9 e 10, ou seja, 16 bits.

Usando a biblioteca do Arduino a resolução máxima é 8 bits em todos os pinos. Com esta resolução podemos escrever 256 valores diferentes para definir o “duty cycle” do PWM (de 0 a 255).

Pode parecer bastante, mas em aplicações mais sensíveis, especialmente em controle e automação é comum necessitarmos de mais resolução.

Do ponto de vista do hardware do microcontrolador usado na placa do Arduino, o PWM dos pinos 9 e 10 tem resolução de 16 bits.

Se fizermos a configuração sem as bibliotecas do Arduino podemos ajustar o “duty cycle” do PWM destes pinos com 65536 valores diferentes.

 

Como não usar as bibliotecas?

Basicamente escrevendo diretamente nos registradores que controlam as funções dos Timers/Counters do microcontrolador.

Podemos escrever nos registradores do microcontrolador diretamente no programa com instruções de associação de valores como estas:

  TCCR0A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);

TCCR0B = _BV(WGM22) | _BV(CS21);

OCR0A = 50;

OCR0B = 25;

 

Estes são os registros principais para configurar o timer0 que gera os sinais PWM para os pinos 5 e 6 do Arduino.

Para ir a fundo neste assunto vou ter que preparar outro post que será lançado em breve.

Se você se interessou, eu recomendo que você dê uma olhada no Datasheet do microcontrolador ATMEGA8. Lá você verá o nome e função de cada bit dos registradores usados para configurar o PWM.

Abraços,

Um comentário sobre “3 motivos para você ir fundo no PWM

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s