Arduino - modulação por largura de pulso

A modulação por largura de pulso ou PWM é uma técnica comum usada para variar a largura dos pulsos em uma seqüência de pulsos. O PWM tem muitas aplicações, como controle de servos e controladores de velocidade, limitando a potência efetiva de motores e LEDs.

Princípio básico de PWM

A modulação por largura de pulso é basicamente uma onda quadrada com tempos altos e baixos variando. Um sinal PWM básico é mostrado na figura a seguir.

Existem vários termos associados ao PWM -

  • On-Time - A duração do sinal horário é alta.

  • Off-Time - A duração do sinal horário é baixa.

  • Period - É representado como a soma do tempo ligado e desligado do sinal PWM.

  • Duty Cycle - É representado como a porcentagem do sinal de tempo que permanece ligado durante o período do sinal PWM.

Período

Conforme mostrado na figura, T on denota o tempo de ativação e T off denota o tempo de desativação do sinal. O período é a soma dos tempos de ativação e desativação e é calculado conforme mostrado na seguinte equação -

$$ T_ {total} = T_ {on} + T_ {off} $$

Ciclo de Trabalho

O ciclo de trabalho é calculado como o tempo de execução do período de tempo. Usando o período calculado acima, o ciclo de trabalho é calculado como -

$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$

Função analogWrite ()

o analogWrite()função grava um valor analógico (onda PWM) em um pino. Ele pode ser usado para acender um LED com brilho variável ou acionar um motor em várias velocidades. Depois de uma chamada da função analogWrite (), o pino irá gerar uma onda quadrada estável do ciclo de trabalho especificado até a próxima chamada para analogWrite () ou uma chamada para digitalRead () ou digitalWrite () no mesmo pino. A frequência do sinal PWM na maioria dos pinos é de aproximadamente 490 Hz. Nas placas Uno e semelhantes, os pinos 5 e 6 têm uma frequência de aproximadamente 980 Hz. Os pinos 3 e 11 no Leonardo também funcionam a 980 Hz.

Na maioria das placas Arduino (aquelas com ATmega168 ou ATmega328), essa função funciona nos pinos 3, 5, 6, 9, 10 e 11. No Arduino Mega, ela funciona nos pinos 2 - 13 e 44 - 46. Arduino mais antigo placas com suporte apenas ATmega8 analogWrite() nos pinos 9, 10 e 11.

O Arduino Due suporta analogWrite()nos pinos 2 a 13 e nos pinos DAC0 e DAC1. Ao contrário dos pinos PWM, DAC0 e DAC1 são conversores Digital para Analógico e atuam como verdadeiras saídas analógicas.

Você não precisa chamar pinMode () para definir o pino como uma saída antes de chamar analogWrite ().

Sintaxe da função analogWrite ()

analogWrite ( pin , value ) ;

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

Example

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
}