Explorando os Pinos PWM - Arduino Uno
- automatelabonline
- 22 de fev.
- 4 min de leitura
Atualizado: 1 de mar.
A Modulação por Largura de Pulso é uma técnica utilizada por muitos microcontroladores para simular sinais analógicos. Criar sinais verdadeiramente analógicos pode não ser viável em dispositivos como o Arduino, onde o preço é um fator essencial. Por isso, um jeito de contornar esse problema é através da Modulação por Largura de Pulso, conhecida comumente como PWM.
A modulação por largura de pulso consiste em alternar a saída entre nível alto e baixo em uma frequência alta. No Arduino Uno, essa frequência é por padrão de 490Hz, exceto nos pinos 5 e 6, que operam em 980Hz. Como essa oscilação ocorre muito rapidamente, a saída opera como se estivesse em uma tensão entre as tensões de nível alto e baixo.
No Arduino Uno, os pinos com a função de PWM são marcados por um ~ ao lado do número do pino. Existem 6 pinos PWM, sendo eles as portas 3, 5, 6, 9, 10 e 11.

Entendo o PWM no Arduino Uno
Um termo importante quando tratamos de PWM é o duty cycle. O duty cycle representa a proporção de tempo que o sinal permanece em nível alto. A tensão de saída média do PWM é dada pela equação

Sendo Vout a tensão média da saída, Vcc a tensão em nível alto, que no Arduino Uno é de 5V (exceto quando for alimentado com 3,3V) e dc o duty cycle, em porcentagem. Na imagem abaixo é mostrado alguns exemplos de sinais para diferentes duty cycles.

A resolução do PWM do Arduino Uno é de 8 bits. Ou seja, existem 2⁸ = 256 possibilidades de tensões. Como essa tensão varia entre 0V e 5V, o mínimo intervalo entre tensões é de

Funções para Pinos PWM
A função para a escrita dos Pinos PWM é
analogWrite(PINO, VALOR);
Onde PINO representa a porta PWM e VALOR é um inteiro entre 0 e 255 que representa a tensão que será gerada na porta. 255 é o valor máximo, ou seja 5V. Esse inteiro (vamos chamá-lo de D ) pode ser calculado pela equação abaixo

Em que Vcc representa a tensão máxima (5V) e Vout é a tensão desejada para a porta. Então por exemplo, para aplicar 2,8V na porta, faz-se

Então, o comando enviado ao Arduino deve ser
analogWrite(143);
Projeto - Controlando o Brilho de um LED
Para aplicar o conhecimento sobre os pinos PWM, vamos criar um projeto para controlar o brilho de um LED através de um potenciômetro. Na imagem abaixo é mostrado a ligação dos componentes com o Arduino. O pino A0 é utilizado para ler o potenciômetro. O pino 11 é utilizado para gerar o sinal PWM que alimenta o LED.

Segue abaixo o código desse projeto.
#define PIN_LED 11 // define o pino do LED
void setup() {
pinMode(PIN_LED, OUTPUT); // Configura pino como saída
}
void loop() {
int potentiometer = analogRead(0); // Lê o potenciômetro
int ledIntensity = map(potentiometer, 0, 1023, 0, 255); // transforma de 10 bits (0 a 1023) para 8 bits (0 a 255)
analogWrite(PIN_LED, ledIntensity); // Manda o sinal para o LED
delay(10);
}
Entendendo o Código
O primeiro passo é definir o pino 11 como saída, isso é feito na função setup()
#define PIN_LED 11 // define o pino do LED
void setup() {
pinMode(PIN_LED, OUTPUT); // Configura pino como saída
}
Dentro da função loop(), o potenciômetro é lido e salvo na variável potentiometer. Essa variável serve de entrada para a função map(). Essa função passa o valor de um range para outro. Nesse caso, a leitura do pino analógico é de 10 bits, então o valor retornado estará entre 0 e 1023. Porém o valor da escrita do PWM é de apenas 8 bits, então vai entre 0 e 255.
A função map() ajusta o valor para esse novo range. Por exemplo, caso o valor lido tenha sido 511 (metade entre 0 e 1023), a saída da função seria 127 (metade entre 0 e 255). A função map() segue o seguinte formato:
map(VALOR, IN_MIN, IN_MAX, OUT_MIN, OUT_MAX);
Onde VALOR representa a entrada que será transformada, IN_MIN e IN_MAX os intervalos da entrada e OUT_MIN e OUT_MAX os intervalos da saída. No exemplo acima, onde o potenciômetro é lido e esse valor será passado para um PWM, o código fica:
int potentiometer = analogRead(0);
int ledIntensity = map(potentiometer, 0, 1023, 0, 255);
analogWrite(PIN_LED, ledIntensity);
Conclusões
As saídas PWM do Arduino Uno oferecem uma solução prática e eficiente para controlar dispositivos que exigem variação na intensidade de sinal, como motores, LEDs e servos. A flexibilidade do Arduino Uno, com suas 6 saídas PWM, abre um vasto leque de possibilidades para projetos de automação, controle de iluminação e até mesmo para sistemas de controle mais complexos.
Entender o funcionamento dessas saídas e sua aplicação em circuitos reais é fundamental para aqueles que desejam expandir suas habilidades na eletrônica e na programação, possibilitando o desenvolvimento de protótipos inovadores e eficientes. Além disso, a facilidade de integração com outros módulos e a vasta comunidade de desenvolvedores tornam o Arduino Uno uma excelente escolha para iniciantes e profissionais.
コメント