DEV Community

flaviobabos
flaviobabos

Posted on

O que é PWM Arduino, para que funciona e como utilizar

Neste artigo você irá aprender o que é PWM Arduino e como essa técnica de controle de tensão funciona nas placas Arduino UNO, Arduino Mega e Arduino Nano.

O Arduino possui diversas portas PWM, isto é, portas com a funcionalidade de Pulse Width Modulation, capazes de variar a largura de pulso de um sinal digital. Assim, com a função PWM da placa microcontroladora Arduino é possível efetuar o controle de velocidade ou posição de motores, intensidade de brilho de LEDs e controle de LEDs RGB, possibilitando até mesmo obter diferentes cores por meio das combinações possíveis.

Portanto, o objetivo desse artigo é mostrar o que é o PWM, como ele funciona, quais suas aplicações e como programar o PWM no Arduino.

O que é PWM

PWM (Pulse Width Modulation) ou Modulação de Largura de Pulso, utilizado em sistemas digitais, consiste em uma técnica para variar o valor médio de uma forma de onda periódica. Assim, é possível controlar em uma onda quadrada o tempo em que ela fica em nível lógico alto, mantendo sua frequência, mas alterando o seu valor médio de tensão ao longo do tempo.

Dessa forma, seria como se um circuito, cuja fonte de tensão fornece 10 volts, tivesse uma chave que fica abrindo e fechando em uma determinada frequência. Veja a onda que será formada nesse circuito:

Alt Text

Note que neste exemplo 50% do tempo a chave está fechada e 50% do tempo aberta. Dessa forma, é possível variar o tempo que a chave fica aberta ou fechada, alterando a largura do pulso.

O PWM funciona exatamente dessa forma, entretanto digitalmente. E assim é possível regular o tempo em que o sinal estará em nível lógico alto em uma determinada frequência. O tempo em que o sinal está em nível lógico alto, é chamado de Duty Cycle, ou, Ciclo Ativo.

Para calcular a potência média dissipada no sinal em uma onda quadrada utiliza-se a fórmula:

Alt Text

Onde:

P = Potência Média (Watts)
t = Tempo (segundos ou milissegundos)
V = Tensão fornecida pela fonte (Volts)
I = Corrente (Amperes)

Essa fórmula serve para encontrar a porcentagem do tempo em que o sinal está em nível lógico alto, e multiplicar pela potência máxima. Dessa forma, é possível estimar a potência média de um sinal em PWM.

Portanto, o PWM é controlado variando a largura de um pulso para controlar o ciclo do sinal aplicado a uma carga, e consequentemente, sua potência.

Como funciona o PWM do Arduino

No Arduino, podemos encontrar algumas portas PWM, a quantidade delas depende do modelo do Arduino. Existem Arduinos com mais portas PWM, e outros com menos, sendo que diversos sensores ou módulos necessitam obrigatoriamente de portas PWM para funcionar.

Veja abaixo as portas PWM de um Arduino Uno:

Alt Text

Veja que as saídas PWM são as marcadas com um “~“.

Dessa forma, essa saída podem ser controladas em sua programação para trabalharem conforme o necessário.

A função PWM do Arduino – analogWrite ()

Dessa forma, para controlar os ciclos ativos nas portas PWM do Arduino, existe uma função específica em sua programação, o analogWrite ().

Sintaxe: analogWrite(porta , valor de 0 a 255);
Exemplo: analogWrite(9, 200);

Utiliza-se a função analogWrite() para determinar o tempo de um ciclo ativo em uma saída PWM. Assim, o tempo do ciclo ativo é controlado com um valor de 0 a 255, sendo 255 o máximo e sempre ativo.

Veja na imagem abaixo, o comportamento da onda de acordo com o valor dado na programação (de 0 a 255):

Alt Text

Vale lembrar que a frequência dessa onda na maioria dos pinos tem um valor fixo de mais ou menos 490 hertz.

Exemplo utilizando o PWM do Arduino

Para testar o PWM do Arduino, será feito um projeto muito simples, retirado do site oficial do Arduino. Um LED será ligado ao Arduino para variar a intensidade do brilho do LED a partir da função analogWrite ( ), ou seja utilizando o PWM do Arduino. Para este projeto você vai precisar de 3 componentes:

Placa Arduino Uno;
LED de qualquer cor;
Resistor 220 ohms (funciona sem o resistor, caso você não tenha).
As conexões entre os componentes devem ser feitas da seguinte forma, sendo que o terminal positivo do LED deve estar ligado a porta 9 do Arduino com um resistor entre a porta e o LED.

Alt Text

Caso você não tenha o resistor, ele não é necessariamente obrigatório, já que a corrente de saída do Arduino pode alimentar um LED tranquilamente sem queima-lo.

Portanto, para a programação, será feita uma estrutura for que varia constantemente o valor que deve ir na função analogWrite ( ) e executa a função. Veja abaixo o código:

int ledPin = 9;
void setup() {
}
void loop() {
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
analogWrite(ledPin, fadeValue);
delay(30);
}
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
analogWrite(ledPin, fadeValue);
delay(30);
}
}

Se deu certo, o LED vai ficar variando sua intensidade de brilho.

Quer aprender mais sobre eletrônica?

Acesse o site do Flávio Babos para mais informações detalhadas sobre o mundo da eletrônica, programação e Arduino: como montar projetos com Arduino, braço robótico, sensores de temperatura Arduino e Internet das Coisas! Além disso, se está perdido e gostaria de ter um guia, um Curso de Arduino.net do Flávio Guimarães ou senão, um Curso Gratuito de Arduino recomendo fortemente ler o Artigo citado acima pois lá você terá uma listagem completa dos melhores materiais no Brasil para aprender Arduino de forma descomplicada e rápida.

Top comments (0)