77 Comentários

Usando as saídas PWM do Arduino

Continuando a sequência de artigos básicos sobre a plataforma Arduino, vamos aprender como utilizar sinais PWM na placa Arduino UNO. No final desse artigo você saberá o que é PWM e como usar o PWM do Arduino para controlar a intensidade de um LED. O conteúdo apresentado servirá de base para suas aplicações usando o PWM do Arduino. 

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. No gráfico abaixo são exibidas algumas modulações PWM:

PWM do Arduino

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 = (duty cycle/100)* 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.

PWM pode ser usada para diversas aplicações, como por exemplo:

  • controle de velocidade de motores;

  • variação da luminosidade de leds;

  • geração de sinais analógicos;

  • geração de sinais de áudio.

PWM do Arduino

A placa Arduino Uno possui pinos específicos para saídas PWM e são indicados pelo carácter ‘~’ na frente de seu número, conforme exibido a seguir:

PWM do Arduino UNO
Figura 2 - Saídas PWM na placa Arduino UNO

Observa-se na figura acima, que a Arduino Uno possui 6 pinos para saída PWM (3,5,6,9,10,11). Para auxiliar na manipulação desses pinos a plataforma possui uma função que auxilia na escrita de valores de duty cycle para esses pinos, assim você pode facilmente usar o PWM do Arduino UNO e outras placas.

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.

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.

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

Sintaxe:

analogWrite(pino, valor);

Onde:

  • pino corresponde ao pino que será gerado o sinal PWM;
  • valor corresponde ao duty cycle, ou seja, o valor que permanecerá em nível alto o sinal.

O valor deve ser de 0 a 255 onde com  0 a saída permanece sempre em nível baixo e 255 a saída permanece sempre em nível alto.

Exemplo - Variando o brilho de um LED usando PWM do Arduino

Vamos utilizar a montagem a seguir para exemplificar o uso de um sinal PWM para variação do brilho de um LED, com a placa Arduino UNO:

PWM do Arduino
Figura 3 - Circuito para teste de PWM com Arduino

O circuito possui um LED ligado ao pino 3 (~:PWM) com seu devido resistor e um potenciômetro ligado à entrada analógica 0.  A proposta é controlar a intensidade do brilho do LED através da variação do valor do potenciômetro. Vejamos o sketch a seguir:

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.  

Saiba mais

Primeiros Passos com Arduino

Arduino UNO

Arduino - O documentário

Placas Arduino - trajetória até o UNO

Referências

Aduino Reference - analogWrite()

Arduino Tutorial PWM

Outros artigos da série

<< Entendendo as Entradas Analógicas do ArduinoArduino - Comunicação Serial >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Usando as saídas PWM do Arduino
Comentários:
Notificações
Notificar
guest
77 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Daniel Adolpho
Daniel
09/07/2020 06:43

Olá , seria possível pulsar de 3 até 5 volts com tempo de 0,2 segundos?

Paulo Filho
Paulo Filho
06/12/2019 09:11

Olá, um ótimo artigo sobre o assunto. Com tudo isso queria saber com linha e sintaxe eu poderia acrescentar para mudar a frequencia do PWM em torno de 50hz se possível. Grato.

Rafael
Rafael
03/10/2019 20:48

Eu poderia usar o PWM do arduino para controlar a corrente que um transistor libera para uma carga? Eu estava pensando este sistema para um projeto, porém a corrente mínima para o transistor conduzir não afetaria o sistema? pois haverá um tempo que o PWM estará em OFF não liberando assim esta corrente mínima que o transistor necessita para conduzir.

Murilo
Murilo
04/09/2019 19:48

Olá Fábio quero fazer um controle de fluxo de um protótipo de uma caixa d'água e gostaria de saber se consigo faze-lo com o PWM para não desligar a bomba e só mante-la numa rotação menor para evitar picos e como posso interfacear para usar motor CA?

diar
diar
04/09/2019 10:05

olá sou novo na área e gostaria de saber o valor do resistor usado no projeto?

Alysson
Alysson
03/09/2019 20:29

Por que o valor deve ser de 0 a 255?

flashpaul
flashpaul
08/07/2019 23:25

Olá sou iniciante ! Gostaria de fazer funcionar 4 micro motores vibracall com o arduino nano, pelo que entendi tenho que usar saida do arduino PWM, minha dúvida sobre a Voltagem dos pinos... como cada micro vibracall tem o minimo de 1,5v e 90mA e maximo de 3v e 200mA tenho receio de queimar os pinos, pois me disseram que o maximo nos pinos do arduino é de 40mA. Minha intenção é funcionar um micro motor vibracall de cada vez e nunca mais de um, por um tempo de 3 segundos, porém cada micro motor pode funcionar alternativamente mais de… Leia mais »

Wesley santos maciel
Wesley santos maciel
Reply to  flashpaul
13/08/2019 14:19

Você pode usar transistores como chave para que estes consumam a corrente da fonte e não diretamente do arduino. Caso haja dúvidas visite WSM TRÔNIC (you tube) tenho um exemplo lá.

Berdinio
Berdinio
10/03/2019 09:23

Bom Dia
estou fazendo um projeto queria controlar a velocidade de um motor trifásico com arduino usando o rele shield para acionamento do motor é alguém pode me ajudar

Valdo Souza
Valdo Souza
16/02/2019 09:40

No inversor de frequência, para controle de velocidade em motores de Indução Trifásicos, como se faz para mudar a frequência do PWM? Ou esse valor já é ajustado automaticamente, ao se definir a velocidade no inversor?

Gabriel
Gabriel
09/09/2018 10:25

Bom dia
Estou montando um pequeno projeto utilizando as saídas PWM, mas eu preciso de um comando via software que desabilite as saída para que não passe nada, tipo como se cortase o fio o intuito é desligar por completo uma fita LED tem como ?

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
RISC-V:
Novidades de 2020

 

Data: 26/08 às 19:30h - Apoio: Mouser Elecctronics
 
INSCREVA-SE AGORA »



 
close-link