# PWM

## 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:

![](https://873566167-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGCuY4CUT5YAR0EROdz%2F-LGMvbIdoT55WPWttefx%2F-LGMvd1xSojnufAQAX6S%2FPWM-ARDUINO-01.jpg?generation=1530483612042540\&alt=media)

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.

Fonte: [Usando as saídas PWM do Arduino](https://www.embarcados.com.br/pwm-do-arduino/)

Na Franzininho temos **3 pinos** que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:

![](https://873566167-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGCuY4CUT5YAR0EROdz%2F-LGNYMXZUIJ5gk1JLi6q%2F-LGNYO0l_nXNBk0AHY5N%2Fpinagem-V2.png?generation=1530494031370696\&alt=media)

> **Verificar limitações de uso dos pinos**

## Função

A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Para usar o pino como saída PWM é necessário configurá-lo como saída digital.

### Sintaxe:

`analogWrite(pino, valor);`

### Parâmetros:

* **pino:** número do pino onde será gerado o sinal PWM (0,1,4 na Franzininho);
* **valor:** valor médio da tensão de saída que será gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.

### Exemplo

Vamos controlar o brilho do LED conforme o valor lido no potenciômetro:

![](https://873566167-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGCuY4CUT5YAR0EROdz%2F-LGNjPC0dK9yZGJLdPs_%2F-LGNjQQpsysucpL6Yj_r%2Fpwm-image1.png?generation=1530497189395102\&alt=media)

```cpp
const byte LED = 1; //pino do LED
const byte POT = A1; //pino do Potenciômetro

void setup() {
  pinMode(LED,OUTPUT);
}

void loop() {

  int valor = analogRead(POT); // lê o valor do potenciômetro
  analogWrite(LED,valor/4);    //escreve no LED valor entre 0 e 255

}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://franzininho.gitbook.io/franzininho-docs/programacao/pwm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
