sexta-feira, 30 de julho de 2021

Arduino - Saídas PWM

    Materiais utilizados:
  • Resistor 120
  • LED 
  • Arduino Uno
  • Protoboard
  • Jumpers
    O Arduino Uno possui 6 entradas analógicas (pinos A0, A1, A2, A3, A4, A5) e 14 pinos de entradas e saídas digitais, dos quais 6 podem ser utilizados como saídas PWM (pinos 3, 5, 6, 9, 10, 11).
    PWM é a sigla para Pulse Width Modulation ou modulação por largura de pulso, o qual é empregada em diversas aplicações na eletrônica, como por exemplo em fontes chaveadas, no controle de velocidade de motores, controle de servos motores e muitas outras. 
    Através do controle do tempo entre o pulsar da saída entre ligado e desligado é possível controlar a tensão média entregue a carga, quanto maior o tempo que a saída fica em nível lógico alto, maior a tensão média. 
    Para o funcionamento do PWM deve-se variar a largura do pulso da onda, ou seja, o tempo que a saída permanece em nível lógico alto. A largura do pulso é o tempo em que a saída está em nivel lógico alto, medido em milissegundos.
    Variando-se a largura do pulso, é possível variar também a tensão média entregue a carga, com isso a potência disponibilizada.
    O Duty Cycle, ou ciclo de trabalho, é a proporção entre o tempo em que a saída está em nível lógico alto em comparação com o tempo que a saída está em nível lógico baixo, é também expresso como a porcentagem do tempo ligado. Por exemplo, um Duty Cycle de 60%, é um sinal que está ligado 60% do tempo e desligado os outros 40%.

Fig. 1: Gráfico do sinal.

    A fórmula para o Duty Cycle é como mostrado abaixo:


  • DC = Duty Cycle em %
  • Largura do pulso = Tempo em que o sinal está ligado
  • Período = Tempo de um ciclo

    Utilizando o Arduino é possível verificar o comportamento das sáidas PWM. Foi utilizado um Arduino Uno acionando um LED através do pino 3 que é um dos pinos compatíveis com PWM.
    O esquema ficou da seguinte forma:

   Fig. 2: Esquema de ligação.
    
   Onde está ligado um LED com o anodo no pino 3 do Arduino e o catodo no GND passando por um resistor de 120Ω.

    A programação do Arduino ficou assim:
1:  /*  
2:   Saídas PWM  
3:     
4:   Este é um exemplo utilizando as Saídas PWM (analogWrite).  
5:   Por Alessandro Silva  
6:   */  
7:    
8:  int led_1 = 3;  
9:  int brilho = 0;  // Variável do tipo integer com nome "brilho".  
10:    
11:    
12:  void setup() {   
13:   pinMode(led_1, OUTPUT);  
14:   Serial.begin(19200);  
15:   Serial.flush();  
16:   Serial.println("Digite um valor entre 0 e 5");  
17:  }   
18:    
19:  void loop() {   
20:   if(Serial.available()>0) {  
21:   brilho=Serial.read();  
22:     
23:    if(brilho>=48, brilho<=53){ //Valores convertidos de ASCII para DECIMAL  
24:       
25:    switch (brilho) {  
26:     case 48: //Valor que corresponde a 0 em ASCII  
27:     analogWrite(led_1, 0);  
28:     Serial.println("Saída em 0%");  
29:     break;  
30:     case 49: //Valor que corresponde a 1 em ASCII  
31:     analogWrite(led_1, 51);  
32:     Serial.println("Saída em 20%");  
33:     break;  
34:     case 50: //Valor que corresponde a 2 em ASCII  
35:     analogWrite(led_1, 102);  
36:     Serial.println("Saída em 40%");  
37:     break;  
38:     case 51: //Valor que corresponde a 3 em ASCII  
39:     analogWrite(led_1, 153);  
40:     Serial.println("Saída em 60%");  
41:     break;  
42:     case 52: //Valor que corresponde a 4 em ASCII  
43:     analogWrite(led_1, 204);  
44:     Serial.println("Saída em 80%");  
45:     break;  
46:     case 53: //Valor que corresponde a 5 em ASCII  
47:     analogWrite(led_1, 255);  
48:     Serial.println("Saída em 100%");  
49:     break;  
50:    }  
51:    }     
52:    else {  
53:     Serial.println("Digite um valor válido");  
54:    }  
55:   delay(30);              
56:  }  
57:  }  

    Através do monitor serial altera-se o valor da saída no pino 3. Onde digita-se valores de 0 a 5, em que:
  • 0 = Saída desligada (Saída em 0 volts)
  • 1 = Saída com duty cycle em 20%
  • 2 = Saída com duty cycle em 40%
  • 3 = Saída com duty cycle em 60%
  • 4 = Saída com duty cycle em 80%
  • 5 = Saída ligada (Tensão máxima)
    Segue abaixo as imagens do monitor serial para as diferentes possibilidades de saída:

Fig. 3: Saída ligada.

 Fig. 4: Saída em 80%.

Fig. 5: Saída em 60%.

Fig. 6: Saída em 40%.

Fig. 7: Saída em 20%.

Fig. 8: Saída desligada.

    Abaixo as imagens do osciloscópio com as respectivas saídas acima:

Fig. 9: Saída ligada.

Fig. 10: Saída em 80%.

Fig. 11: Saída em 60%.

Fig. 12: Saída em 40%.

Fig. 13: Saída em 20%.

Fig. 14: Saída desligada.

    Com isso é possível definir qualquer nível de tensão na saída PWM do Arduino Uno, com uma resolução de 8 bits (0 a 255).