You are on page 1of 6

Noções básicas de PWM (modulação por largura de pulso)

O exemplo Fading demonstra o uso da saída analógica (PWM) para


atenuar um LED. Está disponível no menu File->Sketchbook->Examples-
>Analog do software Arduino.

Pulse Width Modulation, ou PWM, é uma técnica para obter resultados


analógicos com meios digitais. O controle digital é usado para criar uma
onda quadrada, um sinal alternado entre ligado e desligado. Este padrão
on-off pode simular tensões entre o Vcc total da placa (por exemplo, 5 V
em UNO, 3,3 V em uma placa MKR) e desligado (0 Volts), alterando a parte
do tempo que o sinal gasta versus o tempo que o sinal fica desligado. A
duração do "on time" é chamada de largura de pulso. Para obter valores
analógicos variados, você altera ou modula essa largura de pulso. Se você
repetir esse padrão liga-desliga rápido o suficiente com um LED, por
exemplo, o resultado será como se o sinal fosse uma tensão constante
entre 0 e Vcc controlando o brilho do LED.

No gráfico abaixo, as linhas verdes representam um período de tempo


regular. Esta duração ou período é o inverso da frequência PWM. Em
outras palavras, com a frequência PWM do Arduino em cerca de 500 Hz,
as linhas verdes mediriam 2 milissegundos cada. Uma chamada
para analogWrite () está em uma escala de 0 a 255, de modo que
analogWrite(255) solicita um ciclo de trabalho de 100% (sempre ligado) e
analogWrite(127) é um ciclo de trabalho de 50% (na metade do tempo), por
exemplo.
Em alguns microcontroladores, o PWM está disponível apenas em pinos
selecionados. Por favor, considere o diagrama de pinagem de sua placa
para descobrir quais você pode usar para PWM. Eles são indicados com
um sinal de til (~).

Depois de executar este exemplo, pegue seu Arduino e agite-o para frente
e para trás. O que você está fazendo aqui é essencialmente mapear o
tempo através do espaço. Aos nossos olhos, o movimento desfoca cada
piscar de LED em uma linha. À medida que o LED aparece e desaparece,
essas pequenas linhas aumentam e diminuem de comprimento. Agora
você está vendo a largura de pulso.
analogWrite()
[E/S analógica]

Descrição

Grava um valor analógico ( onda PWM ) em um pino. Pode ser usado para
acender um LED em vários brilhos ou acionar um motor em várias
velocidades. Após uma chamada para analogWrite(), o pino gerará uma
onda retangular constante do ciclo de trabalho especificado até a próxima
chamada para analogWrite()(ou uma chamada
para digitalRead()ou digitalWrite()) no mesmo pino.
* Além dos recursos de PWM nos pinos mencionados acima, as placas
MKR, Nano 33 IoT e Zero têm saída analógica verdadeira ao

QUADRO PINOS PWM FREQUÊNCIA PWM

490 Hz (pinos 5 e 6: 980


Uno, Nano, Mini 3, 5, 6, 9, 10, 11
Hz)

490 Hz (pinos 4 e 13: 980


mega 2 - 13, 44 - 46
Hz)

490 Hz (pinos 3 e 11: 980


Leonardo, Micro, Yun 3, 5, 6, 9, 10, 11, 13
Hz)

Uno WiFi Rev2, Nano cada 3, 5, 6, 9, 10 976 Hz

Placas MKR * 0 - 8, 10, A3, A4 732 Hz

Wi-Fi MKR1000 * 0 - 8, 10, 11, A3, A4 732 Hz

zero * 3 - 13, A0, A1 732 Hz

Nano 33 IoT * 2, 3, 5, 6, 9 - 12, A2, A3, A5 732 Hz

Nano 33 BLE/BLE Sense 1 - 13, A0 - A7 500 Hz

Devido ** 2-13 1000 Hz

pinos 3 e 9: 490 Hz,


101 3, 5, 6, 9
pinos 5 e 6: 980 Hz

usar analogWrite()no pino DAC0( ). ** Além dos recursos de PWM nos


pinos mencionados acima, o Due possui saída analógica real ao
usar pinos e .A0 analogWrite()DAC0DAC1

Você não precisa chamar pinMode()para definir o pino como uma saída
antes de chamar analogWrite().
A analogWrite função não tem nada a ver com os pinos analógicos ou
a analogRead função.
Sintaxe

analogWrite(pin, value)

Parâmetros

pin: o pino Arduino para escrever.

Tipos de dados permitidos: int.


value: o ciclo de trabalho: entre 0 (sempre desligado) e 255 (sempre
ligado).

Tipos de dados permitidos: int.

devoluções

Nada

Exemplo de código

Define a saída para o LED proporcional ao valor lido do potenciômetro.

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


int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to
1023, analogWrite values from 0 to 255
}

Notas e avisos

As saídas PWM geradas nos pinos 5 e 6 terão ciclos de trabalho maiores


que o esperado. Isso ocorre devido às interações com as
funções millis()e delay(), que compartilham o mesmo timer interno
usado para gerar essas saídas PWM. Isso será notado principalmente em
configurações de ciclo de trabalho baixo (por exemplo, 0 - 10) e pode
resultar em um valor de 0 não desligando totalmente a saída nos pinos 5 e
6.

You might also like