, ,

O que é PWM e como funciona?

Posted by

Vamos aprender hoje o que é PWM e como usá-lo. Significa “Pulse width modulation” e é uma técnica usada para “dimmerizar” e controlar cargas, sejam elas CA ou CC.

A técnica consiste em controlar por quanto tempo uma forma de onda permanece em nível ALTO e BAIXO, onde o valor médio da tensão é então movido para cima ou para baixo de acordo com o tempo. Em termos de frequência, o PWM é independente dela, podendo existir e funcionar independentemente da frequência.

Esta imagem tem um texto alternativo em branco, o nome da imagem é Dutycicle2.png
Fonte: https://wiki.ifsc.edu.br/mediawiki/index.php/AULA_6_-Microcontroladores-_T%C3%A9cnico
Fonte: https://wiki.ifsc.edu.br/mediawiki/index.php/AULA_6_-Microcontroladores-_T%C3%A9cnico

A imagem acima ilustra muito bem o PWM, mostrando a forma de onda à esquerda e uma lâmpada à direita. A lâmpada acende mais ou menos dependendo do ciclo de trabalho (o tempo em que a forma de onda permanece no nível ALTO).

Utilização

PWM é usado sempre que se deseja controlar a voltagem média de um sinal, seja CA (corrente alternada) ou CC (corrente contínua). Um ciclo de trabalho menor significa menos tempo no estado ALTO e, consequentemente, menor voltagem média. Por outro lado, um ciclo de trabalho maior significa mais tempo no estado ALTO e uma voltagem média maior.

Ele pode até ser usado para recriar voltagens senoidais, desde que se implemente a filtragem e suavização necessárias do sinal. Na verdade, a maioria dos inversores solares e eólicos senoidais usava PWM como a principal forma de gerar tal senoide.

Utilização com Arduino

O ecossistema Arduino implementa o controle PWM em uma função chamada analogWrite(), tomando como parâmetro um inteiro entre 0 e 255. Você pode escrever (por exemplo) analogWrite(127), o que significa aproximadamente 50% de ciclo de trabalho.

O próprio Arduino IDE traz um exemplo pronto para uso de PWM chamado “Fading”, de “File > Examples > Analog > Fading”. Ele é visto abaixo.

int ledPin = D8;  // LED connected to digital pin 9

void setup() {
  // nothing happens in setup
}

void loop() {
  // fade in from min to max in increments of 5 points:
  for (int fadeValue = 0; fadeValue <= 255; fadeValue += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
    delay(30);
  }

  // fade out from max to min in increments of 5 points:
  for (int fadeValue = 255; fadeValue >= 0; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
    delay(30);
  }
}

Observe que eu já troquei o pino PWM “ledPin” para D8 para que minha placa de desenvolvimento ESP32-C6 funcione com ele. O circuito e a montagem da breadboard são vistos abaixo.

Diagrama esquemático do ESP32-C6 com LED e PWM
Diagrama esquemático do ESP32-C6 com LED e PWM
ESP32-C6 com LED e PWM
ESP32-C6 na protoboard com LED e PWM

O resultado

Compilar e carregar o código acima para o circuito mostrado acima resultará no LED piscando e apagando, com valores de PWM entre 0 e 255.

O vídeo abaixo mostra o LED piscando/apagando conforme pretendido.

Pra finalizar

A modulação de largura de pulso é um conceito super fácil de entender, mas extremamente útil no mundo real. Tente brincar com PWM você mesmo, veja o que você pode fazer com isso.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *