Arduino - Aula 10 - PWM

PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico abaixo são exibidas algumas modulações PWM:




Analisando as formas de onda nota-se que a frequência da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle está em 0% o valor médio da saída encontra-se em 0 V e consequentemente para um duty cycle de 100% a saída assume seu valor máximo, que no caso é 5V. Para um duty cycle de 50% a saída assumirá 50% do valor da tensão, 2,5 V e assim sucessivamente para cada variação do duty cycle.


PWM pode ser usado para diversas aplicações, como por exemplo:
  • controle de velocidade de motores;
  • variação da luminosidade de leds;
  • geração de sinais analógicos (controle da corrente);
  • geração de sinais de áudio.

Pinos PWM
A placa Arduino possue pinos específicos para saídas PWM e que normalmente são indicados pelo caracter ‘~’ na frente de seu número, conforme exibido a seguir:
indicação dos pinos PWM no Arduino UNO


Os pinos PWM no Arduino UNO e NANO são: 3, 5, 6, 9, 10 e 11.

A resolução de cada pino é de 8 bits, ou seja, valores de 0 a 255 poderão ser utilizados para determinar o duty cycle do pino.

Não é necessário declarar em Setup() o pino a ser utilizado para PWM, basta escrever nele utilizando a função AnalogWrite(), porém a declaração pode ser uma boa prática para a melhor organização do seu Sketch.


Função AnalogWrite() 
 
A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Após a chamada dessa função, o pino passa a operar com uma onda quadrada de frequência fixa e com duty cycle conforme valor passado pela função. A frequência dessa onda, na maioria dos pinos é em tordo de 490 Hz, porém, os pinos 5 e 6 da Arduino UNO operam em 980 Hz.

É interessante notar que as saídas PWM não são conversores digital-analógico como o nome sugere, e estes pinos não estão relacionados às entradas analógicas.

A função analogWrite() deve ser utilizada da seguinte forma:

Sintaxe:  analogWrite(pino, valor);

Onde:
  • pino corresponde ao pino que irá gerar o sinal PWM;
  • valor corresponde ao duty cycle, ou seja, o valor que permanecerá em nível alto.O valor deve ser entre 0 e 255 onde com 0 a saída permanece sempre em nível baixo e 255 a saída permanece sempre em nível alto.
Depois da chamada da função analogWrite(), o pino irá gerar uma onda quadrada com determinada frequência até que um outro valor seja informado. Ou seja, até ser informado outro valor, o pino não altera a característica da onda trabalhando em paralelo às outras operações do programa.



Saída Analógica


Arduino UNO, motores DC e ponte H

A onda quadrada representa também um controle da corrente fornecida pelo pino, assim uma saída PWM pode também ser utilizada como saída analógica de corrente.

A limitação da corrente será útil para controlar motores DC por exemplo.

Importante lembrar que um motor não pode ser acionado diretamente da porta do Arduino, é necessário uma ponte H ou outro meio para esse acionamento.


Exemplo

Entre os exemplos originais do Arduino, o programa Fade representa a utilização do PWM para controlar a luminosidade de um LED.

Para tópicos mais avançados, busque por Secrets of Arduino PWM, ou clique aqui.



Vídeo Aula
 



 Exercícios:

1) Crie um Sketch que aumenta a intensidade de um LED sempre que um botão é apertado.



2) Crie um Sketch que utiliza um buzzer para tocar uma música. Mais informação: https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/