0

Entradas e Saídas Analógicas – PWM

Se observarmos um pouco, o mundo é quase todo formado por variáveis analógicas, tais como posição, temperatura e pressão, de forma que é necessário saber trabalhar com esses tipos de grandezas. O Arduino possui um conjunto de pinos destinados a serem utilizados como entradas analógicas e outros pinos que podem ser usados como saídas PWM (Simulam uma saída analógica).

Neste post serão abordadas as funções utilizadas pelo Arduino para ler dados das entradas analógicas e escrever nas saídas PWM. Contudo, para acompanhar este tutorial, é necessário que o leitor tenha compreendido o post sobre grandezas digitais e analógicas.

 

Leitura da Entrada Analógica

A leitura da entrada analógica é feita com a função analogRead, que recebe como parâmetro o pino analógico a ser lido e retorna o valor digital que representa a tensão no pino. Como o conversor analógico-digital do Arduino possui uma resolução de 10 bits, o intervalo de tensão de referência, que no nosso caso é 5 V, será dividido em 1024 pedaços (2^10) e o valor retornado pela função será o valor discreto mais próximo da tensão no pino.

unsigned int valorLido = analogRead(A0);

O código acima lê o valor analógico de tensão no pino A0 e guarda o valor digital na variável valorLido. Supondo que o pino está com uma tensão de 2V, o valor retornado pela conversão será:

2 x 1024 / 5 = 409,6

O resultado deve ser inteiro para que nosso conversor consiga representá-lo, logo o valor 410 será escolhido por ser o degrau mais próximo. Esse valor representa a tensão 2,001953125, inserindo um erro de 0,001953125 em nossa medida devido a limitação de nossa resolução.

 

Alterando a tensão de referência

Suponha que, para medir a temperatura de um ambiente, queira-se ligar a saída de um LM35 na entrada analógica do Arduino. O LM35 é um sensor linear de temperatura que fornece na saída uma tensão de 10mV/ºC, de modo que, para valores de temperatura entre 0ºC e 150ºC, a saída fornece valores de tensão entre 0V e 1,5V, respectivamente. Como a tensão de referência padrão do Arduino é 5V, o conversor analógico-digital tem a princípio uma sensibilidade de:

 

5V/1024 = 4,88mV

Que corresponde a 0,488ºC de erro na leitura da temperatura.

Para melhorar a precisão desse conversor existem duas opções: alterar a resolução do conversor ou diminuir a tensão de referência. Como a resolução do conversor analógico-digital do Arduino é fixa em 10 bits, resta-nos apenas a segunda opção.

Para alterar a tensão de referência utiliza-se a função analogReference, que recebe como parâmetro o tipo de referência a ser utilizada.

  • DEFAULT: O padrão de referência de 5 volts ou 3,3 volts em algumas placas
  • INTERNAL: um valor de referência fixo interno, igual a 1,1 volts no ATmega168 ou ATmega328 e 2,56 volts na ATmega8 ( não disponível no Arduino Mega )
  • INTERNAL1V1 : um valor de referência fixo interno de 1.1V ( apenas no Arduino mega )
  • INTERNAL2V56 : um valor de referência fixo interno de 2.56V ( apenas no Arduino mega )
  • EXTERNAL: utiliza como referência a tensão aplicada ao pino AREF ( 0 a 5V apenas)

 

Utilizando o tipo de referência EXTERNAL, podemos obter qualquer valor entre 0 e 5V de referência por meio de um simples divisor de tensão com 2 resistências. Para reduzir a tensão de referência para aproximadamente 1,5V, por exemplo, pode-se utilizar uma resistência de 15kΩ e outra de 33kΩ, conforme a figura:

 

 

Com esse divisor de tensão, a referência muda para:

Vref = 5V * 15k/(15k+33k) = 1,5625V

 

E o erro na leitura da temperatura diminui para:

1,5625/1024 = 1,53mV -> 0,153ºC

 

Melhorando a precisão do conversor analógico-digital. Veja um exemplo de código usando a função analogReference:

float temperatura;
unsigned int valorLido;
 
void setup() {
   analogReference(EXTERNAL); // Muda a referência para a tensão no pino AREF
}
 
void loop() {
   // Atualiza o valor lido pelo conversor
   valorLido = analogRead(A0);
 
   // Converte a temperatura lida para graus Celsius
   temperatura = (float)valorLido/1024*1562.5/10;

 

Usando a Saída PWM

Para escrever um sinal na saída PWM utiliza-se a função analogWrite, que recebe como parâmetros o pino PWM e o valor do duty cycle, respectivamente. Esse último parâmetro é guardado em 8 bits, de modo que esse valor deve estar entre 0 (0% de duty cycle) e 255 (100% de duty cycle).

12

analogWrite(9,127); //Escreve no pino 9 um sinal PWM com 50% de duty cycle (50% de 255 = 127)
analogWrite(10,64); //Escreve no pino 10 um sinal PWM com 25% de duty cycle (25% de 255 = 64)

 

 

Variando-se o duty cycle altera-se também o valor médio da onda, de modo que o efeito prático obtido com o PWM em algumas aplicações é um sinal com amplitude constante e de valor igual ao valor médio da onda. Isso permite que se possa, por exemplo, controlar a intensidade do brilho de um LED, ou a velocidade de um motor de corrente contínua.

 

Artigo gentilmente cedido por Vida de Silicio

 

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

Comments

Comentários

Mariana Guedes

Deixar uma resposta