MCO018703 2025 1 AULA11

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

1 PWM - Modulação por Largura de Pulso

OBJETIVOS
O aluno será capaz de:
  • Saber o que é PWM;
  • Como utilizar as funções PWM; e
  • Aplicações com PWM.


METODOLOGIA
A aula será expositiva e dialogada, utilizando apresentação de texto base na Internet, onde serão mostrados exemplos e executados programas para programação de microcontroladores.


INTRODUÇÃO
Nas aulas anteriores falamos que os Pinos Digitais são usados para detecção ou transmissão de controles digitais, normalmente associados aos sinais HIGH ou LOW (1 ou 0). Mas alguns pinos podem também gerar um sinal analógico com a função analogWrite() utilizando a técnica de modulação chamada PWM (Pulse Width Modulation), ou Modulação por Largura de Pulso, é uma técnica que envolve a variação da largura dos pulsos em um sinal elétrico. Em outras palavras, o PWM pulsa rapidamente um sinal digital em um condutor, transmitindo uma informação pela variação da largura de uma onda.

1.1 PWM no Arduino

MAS O QUE É 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. A figura abaixo mostra o gráfico onde são exibidas algum exemplos de modulações PWM.


Fonte: http://arduino.cc/en/Tutorial/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 no duty cycle. Portanto, para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:


Vout=dutycycle100.Vcc


Onde:

Vout - tensão de saída em V;
duty cycle - valor do ciclo ativo do PWM em %;
Vcc - tensão de alimentação em V.


O ambiente Arduino abstrai a implementação específica do PWM, reduzindo a geração de PWM a uma única função:

analogWrite(pino, valor)

Onde pino é a identificação do pino digital onde será produzido o sinal e valor é um número de 0 a 255 que determina o duty-cycle (0 corresponde a 0% e 255 a 100%).

Os pinos aceitos, e a frequência do sinal, variam de placa para placa. Abaixo os valores para algumas das placas fabricadas pela Arduino:

Placa Pinos permitidos Frequência
Uno R3 e anteriores, Nano 3, 5, 6, 9, 10, 11 490 Hz
(pinos 5 e 6: 980 Hz)
Uno R4 3, 5, 6, 9, 10, 11 490 Hz
Mega 2560 2 – 13, 44 – 46 490 Hz
(pinos 4 e 13: 980 Hz)
Due 1-13 1000Hz
Nano ESP32 0-13, A0 a A7
(somente 5 simultâneos)
1000Hz

Nota: em algumas placas mais recentes, analogWrite() pode ser usado com alguns pinos específicos para gerar um sinal analógico ao invés de um sinal PWM.

O Arduino Uno assim como o Diecimila possui 6 pinos PWM (3,5,6,9,10,11). Sendo que a função analogWrite(), escreve um valor de PWM em um pino digital somente se possuir 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 torno de 490 Hz, porém, os pinos 5 e 6 da Arduino UNO operam em 980 Hz. Para utilizar a função analogWrite(), deve-se configurar o pino correspondente como saída digital. É interessante notar que essas saídas não são conversores digital-analógico como o nome sugere, e estes pinos não estão relacionados às entradas analógicas.

EXEMPLO 1
Abaixo vemos o circuito exemplo de um programa em Arduino que aumenta e diminui gradativamente (25%, 50%, 75% e 100%) o brilho de um LED conectado no pino PWM 3 do Arduino.
Esquemático
Código
void setup() {
  // put your setup code here, to run once:
    pinMode(3,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  analogWrite (3, 64); // 25%
  delay(1000);
  analogWrite (3, 127); // 50%
  delay(1000);
  analogWrite (3, 191); // 75%
  delay(1000);
  analogWrite (3, 255);   // 100%
  delay(1000);
}
EXEMPLO 2
Esse programa escrito em C do Arduino aumenta e diminui gradativamente (todos os valores de 0 ao máximo) o brilho de um LED conectado no pino PWM 3 do Arduino.
int i=0;  // declaração da variável global inteira i iniciada com 0
void ledOn( );  // declaração da função criada ledOn do tipo void
void setup( )  
{
   pinMode(3,OUTPUT); // aqui 2 parâmetros são passados à função pinMode( )
}
void loop( ) 
{
   for (i=0; i <= 255; i++) ledOn( ); // aumenta o brilho do led
   for (i=255; i >= 0; i--) ledOn( ); // diminui o brilho do led
}
void ledOn( ) // função que acende o led
{  
   analogWrite (3, i); // o nº do pino e o valor de i são passados à função analogWrite( )
   delay (10);      
}

1.2 Aplicações do PWM

Os usos comuns podem ser agrupados em duas situações:

  • Codificação de informações: o duty-cycle é associado a uma informação digital ou analógica.
  • Controle da tensão média: ao mudarmos o duty cycle mudamos o valor médio da tensão do sinal.

Estes são alguns exemplos:

  1. Controle de Posição de Servo motor: A maioria dos servo motores é controlada por um sinal de PWM com período de 20 ms (o que corresponde a uma frequência de 50 Hz). A variação do tempo de sinal alto entre 1 e 2 ms provoca a mudança da posição do servomotor entre 0 e 180 graus (estes valores variam ligeiramente de servo para servo).
  2. Controle de LEDs RGB endereçáveis WS2812: O sinal de controle destes LEDs é um sinal PWM onde a duração de cada pulso corresponde a um bit 0 ou 1. Cada oito pulsos determinam a intensidade de um dos componentes (vermelho, verde ou azul) de um LED.
  3. Controle da Luminosidade de LEDs: Ao aplicarmos em um LED um sinal PWM, com uma frequência suficientemente alta, a nossa vista não enxergará os pulsos individuais (como uma sequência de aceso/apagado). Ela fará a média, permitindo que o LED seja visto em diferentes níveis de intensidade.
  4. Controle de Motores CC: Efeito semelhante ocorre ao aplicar um sinal PWM em um motor de corrente contínua. Quando o nível estiver baixo, o motor continuará girando por inércia. Desta forma pode ser usado, grosseiramente, para controlar a velocidade e a força do motor. Um exemplo comum disso é o controle de ventiladores de refrigeração de processadores.
  5. Geração de Sinal Analógico: O valor (tensão) médio de um sinal PWM pode ser obtido, com restrições, aplicando o sinal sobre um capacitor. Mais precisamente, deve ser colocado um filtro passa-baixas, composto de um resistor e um capacitor, na saída do PWM. O filtro deve ser calculado para atenuar as frequências acima da frequência do sinal.

Além das aplicações comuns que mencionamos, também é amplamente utilizado em sistemas de controle mais avançados. Vamos explorar alguns exemplos adicionais:

  1. Controlador: O controlador PWM é um componente utilizado em muitos sistemas de controle, permitindo a modulação precisa da largura dos pulsos para gerenciar dispositivos eletrônicos. Este controlador ajusta o duty-cycle do sinal PWM para atender às necessidades específicas de um dispositivo, como um motor ou um LED.
  2. Controlador de Carga: Em aplicações onde a regulação de carga é essencial, como em fontes de alimentação e conversores de energia, o controlador de carga PWM é utilizado. Este dispositivo ajusta a largura dos pulsos para controlar a entrega de energia e melhorar a eficiência do sistema.
  3. Válvula: Em sistemas de automação e controle de fluidos. Através da modulação do sinal PWM, é possível controlar com precisão a abertura e o fechamento da válvula, regulando o fluxo de fluidos em processos industriais ou sistemas de climatização.
  4. PWM Fan: Os ventiladores PWM, como os encontrados em sistemas de resfriamento de computadores, utilizam sinais PWM para controlar a velocidade do motor do ventilador. Ao ajustar o duty-cycle do sinal, é possível variar a rotação do ventilador e, consequentemente, a sua velocidade.
  5. Cabo: Para conectar dispositivos que utilizam PWM, como ventiladores e servo motores, é essencial utilizar um cabo apropriado. Este cabo é projetado para transmitir sinais PWM de maneira eficiente e confiável entre o controlador e o dispositivo.
  6. Conector: O conector PWM é um tipo de conector específico utilizado para fazer a ligação entre o controlador e os dispositivos que recebem o sinal. Este conector garante uma conexão segura e estável, facilitando a integração de dispositivos em sistemas de controle.

2 Conclusões sobre o PWM do Arduino

A função analogWrite() fornece um modo simples para se trabalhar com sinais PWM, porém não fornece nenhum controle sobre a frequência do sinal aplicado ao pino. Em alguns casos a frequência do sinal é muito importante para o sistema, como por exemplo a frequência de acionamento de uma bobina de um motor. Em um artigo futuro vamos abordar como manipular os registradores do ATmega328 para alterar a frequência do sinal PWM.

O exemplo apresentado acima exibiu como usar o PWM do Arduino para variar a intensidade de um LED. Você pode usar o mesmo programa para variar a velocidade de motores DC, adaptar para criar cores usando LEDs RGBs, etc. Use a imaginação para novos projetos e os coloque em prática.

Se ficou alguma dúvida, deixe seu comentários abaixo.


3 Referências

[1] https://www.embarcados.com.br/pwm-do-arduino/

[2] https://www.makerhero.com/blog/o-que-e-pwm/