O sinal PWM é um tipo de sinal de saída que é capaz de traduzir uma informação analógica mesmo tendo apenas 2 níveis lógicos. É extremamente útil justamente por possuir esta característica.

Isso é possível através do uso de modulação por largura de pulso (Pulse Width Modulation). Neste tipo de modulação de sinal a informação de entrada (analógica) define a largura de um pulso dentro do sinal de saída. Este pulso ocorre a intervalo de tempo pré-definido que define a frequência do sinal PWM. Veja a figura abaixo:

pwm1

Na figura temos 3 exemplos de sinais PWM, cada um carregando uma informação analógica diferente. No primeiro temos o “Duty Cycle” de 25%. “Duty Cycle” pode ser traduzido como ciclo de trabalho ou ciclo ativo. Neste caso temos 25% do tempo de ciclo ativo (em nível lógico 1). No segundo sinal temos 50% ativo e no terceiro temos 75% ativo.

Para criar estes sinais a partir do sinal analógico, primeiro temos que definir os limites do sinal, ou seja os valores de entrada para 0% ativo e 100% ativo. No caso do Arduino definimos estes limites com os valores 0 (0%) e 255 (100%). Desta forma, para sabermos qual valor analógico corresponde a determinado valor de “Duty Cicle” no PWM utilizamos uma regra de 3 simples.

Por exemplo, se o valor 255 gera um PWM com 100%, qual o valor X para gerar um PWM com 75%? A conta que temos que fazer é :

X= 255/100 *75 = 191,25

Podemos arredondar o resultado para 191 já que neste sistema não é possível entrar com valores fracionados.

Muito bem, esta é a forma para modular um sinal de entrada analógico em um sinal de saída PWM. Mas como recuperamos a informação analógica embutida no PWM. Isso depende do tipo de dispositivo que estará ligado a esta saída PWM. Para muitos dispositivos não será necessário fazer nada para usar a informação no PWM. Um motor por exemplo irá responder ao sinal PWM com uma velocidade proporcional ao “Duty Cycle” do PWM. Isso porque o próprio motor já funciona como um filtro que integra o sinal PWM gerando um sinal analógico.

No caso de um LED ligado ao sinal PWM poderemos observar a olho nu que sua intensidade varia linearmente com o sinal PWM. Isso porque nossa retina não consegue captar a mudança rápida de intensidade do pisca-pisca do LED que é muito rápida.

Para outros dispositivos que necessitem de um sinal analógico puro temos que construir um filtro passa-baixa. A configuração deste filtro pode depender da carga do dispositivo, mas em geral um filtro simples composto de um resistor e um capacitor é capaz de transformar o sinal pulsante do PWM em um sinal analógico puro.

No microcontrolador a geração do sinal PWM é feita com o auxilio dos blocos de temporizadores internos. Em módulos futuros deste curso iremos abordar conceitos mais aprofundados que irão permitir que o aluno tenha total controle sobre esta função do microcontrolador. Por enquanto vamos abordar somente as funções básicas disponíveis na placa do Arduino.

48912-arduinouno_r3_front

Na placa Arduino UNO podemos utilizar até 6 saídas PWM . Estas saídas estão identificadas com o sinal ~ e são os sinais 3, 5, 6, 9, 10 e 11.

Para escrever um valor em um pino utilizamos a instrução analogWrite(pino,valor). Por exemplo para definir um PWM com “Duty Cycle” de 50% no pino 3 da placa Arduino:

analogWrite(3,128);    //escreve o valor 128 no pino de saída 3

Na placa Arduino UNO os sinais PWM dos pinos 3, 9, 10 e 11 tem frequência aproximada de 490 Hz. Nos pinos 5 e 6 a frequência aproximada é 980Hz.

Recomendo agora que o aluno acesse a Aula prática 5 onde iremos testar a funcionalidade PWM para controlar a intensidade dos LEDs conectados aos pinos da placa Arduino UNO.