A referência analógica AREF | Arduino Shop and Tutorials

    • A resolução dos conversores ADC.
    • As referências de comparação interna em Arduino.
    • A referência externa AREF.

Material necessário.

Espanha Espanha México
Kit Básico UNO Kit Básico UNO
Kit BásicoMEGA
Kit BásicoMEGA Kit BásicoMEGA Kit BásicoMEGA MEGA Starter Kit

A conversão analógica para digital

Numa sessão anterior já dissemos que o Arduino tem 6 conversores analógicos para digitais (ADC) que são pinos A0 a A5, e dissemos que eles são capazes de converter valores de tensão até um máximo de 5V, que é a tensão de referência no Arduino.

Dissemos também que uma das características chave do conversor é o seu número de bits, o que define a fineza com que podemos quantificar essa conversão para o digital. No caso do Arduino, há 10 bits que ele manipula nos portões analógicos, o que significa que sua resolução é 210 =1.024 valores possíveis.

Quanto maior for essa resolução, melhor será a capacidade de se aproximar do valor real cuja conversão estamos procurando.

  • É importante compreender que a conversão para o digital de um sinal analógico é sempre uma aproximação, e mesmo no improvável caso do valor analógico ser exactamente o que o conversor nos diz, teremos sempre uma incerteza.
  • Em um conversor Arduino com resolução de 10 bits, cada passo de medição é 5V/1024 = 0.0048828125 V, pouco menos de 5mV, o que significa que não pode discriminar entre valores de tensão cuja diferença é inferior a isto.

Sem entrar em muitos detalhes, vale dizer que o que um conversor ADC faz é comparar sucessivamente o sinal que queremos quantificar na entrada, com uma tensão de referência contra a qual ele faz comparações.

Em outras palavras, um ADC não fornece valores absolutos, mas fornece uma comparação quantificada em relação a um valor de referência. Assim, na sessão do Sensor de Temperatura TMP36, calculamos a tensão de entrada em um dos pinos analógicos como a leitura multiplicada por uma razão entre o valor máximo da entrada de 5V e o máximo medido pelo conversor 1024.

Como os sinais que normalmente manipulamos no Arduino estão em torno de 5V, comparar com 5V é a coisa razoável a fazer, porque a indústria também tem toda uma gama de sensores cujo valor máximo retorna 5V.

Mas cada vez mais, a indústria está produzindo eletrônica de 3.3V, o próprio Arduino DUE é um exemplo disso, e se usarmos nossos ADCs para digitalizar sinais de pico de 3.3V, estamos perdendo precisão e resolução, porque estamos desperdiçando uma parte das comparações possíveis, na verdade um terço.

Na prática, sendo 3,3V a tensão máxima de entrada em comparação com 5V significa que nunca teremos leituras superiores a 1.024 * 3,3 /5 = 675 e ainda teremos passos de entrada de 5mV.

Mas se o conversor for um comparador de tensão, se pudéssemos alterar o valor de tensão que estamos comparando para 3,3V, os passos seriam 3,3V/1024 = 0,00322265625 ou 3,2 mV. Ou seja, melhoramos a resolução do nosso conversor e sem gastar um centavo.

Então, numa situação ideal, a tensão de comparação contra a qual realizamos a conversão do analógico para o digital, deve ser o valor máximo possível do sinal de entrada. Porque é quando teremos a melhor resolução possível com esse conversor.

Os caras do Arduino, eles estavam cientes desse problema e por isso incluíram um pino externo, que não tínhamos usado até agora, que permite conectar uma tensão de referência externa, contra a qual o sinal que lemos em nossos portões A0 a A5 será comparado.

Este pino é rotulado AREF (Referência Analógica) e está dois pinos acima do pino digital 13:

Usando a referência analógica externa

A questão da referência analógica contra a qual comparamos as amostras nos portões A0-A6 é tão importante que o Arduino fornece várias tensões internas para comparar contra a qual podemos ativar para alterar a referência.

Para activar uma referência interna de 1.1V num Arduino UNO use a instrução

analogReference(INTERNAL);

Se estiver a usar um MEGA pode usar exclusivamente:

analogReference(INTERNAL1V1);
analogReference(INTERNAL2V56);

Que activará referências de 1.1V e 2.56V respectivamente.

Se usar a chave DEFAULT, está de volta à referência standard 5V em praticamente todos os modelos Arduino.

analogReference(DEFAULT);
  • Cuidado com a referência DEFAULT, porque no DUE significa 3,3V porque é a sua tensão de referência. Certifique-se disso antes de usá-lo alegremente.

Quando conectamos uma tensão de referência ao pino AREF, temos que dizer ao Arduino que queremos usá-lo. E fazemos isso com a instrução

analogReference(EXTERNAL);

Utiliza a cabeça quando modificares a referência analógica, porque se não tiveres cuidado, estarás a comer Arduino ao jantar. É relativamente fácil de mexer em certas acções que parecem inocentes:

  • Certifique-se de que, se utilizar uma referência externa, os GND do Arduino e a referência são os mesmos, ligando-os entre si. Não fazer isso tem um prognóstico muito ruim na primeira mudança.
  • Não use em nenhuma circunstância menos de 0v no pino AREF (OU um sinal que varia e pode ter transientes negativos) porque o resultado é imprevisível.
  • Se você conectar uma tensão de referência externa, não chame a analogRead() antes de executar a instrução analogReference(EXTERNAL), porque você irá encurtar o sinal de comparação interno para a tensão externa na AREF, e possivelmente aproveitar a oportunidade para comprar aquele novo Arduino que você está tão ansioso para comprar.
  • Não ligue à AREF menos de 1V ou mais de 5V, não pode simplesmente definir 12 e esperar que lhe dê um valor.

Circuito de teste

Vamos definir um circuito de teste com um visor I2C como vimos na sessão… e um potenciómetro. Mas desta vez, vamos ligar nas extremidades do potenciómetro GND e 3,3V para que no pino central que vamos ler com A1, nunca ultrapasse 3,3V simulando um sensor com esse valor máximo.

Ao rodarmos o potenciómetro, vamos ler uma queda de tensão entre 0V e 3,3V. e a leitura do pino A1, dará valores entre 0 e 670, já que estamos no caso que definimos um pouco acima.

O programa simplesmente lerá o pino analógico A1 e enviará seu valor para um display I2C de 16 caracteres por duas linhas como vimos na sessão….

Conteúdo disponível apenas para assinantes. Acesse o conteúdo!

Aqui está um mini-vídeo com as leituras do potenciómetro

Se agora ligarmos a tensão interna de 3,3V do Arduino ao pino AREF, teremos um circuito como este:

Vejamos agora o programa:

Aqui está um vídeo com a diferença:

Sessão resumo

Neste curso arduino aprendemos o seguinte:

    • Insistimos na questão da conversão analógica para digital e vimos que basicamente é uma comparação contra um valor de referência.
    • Vimos que podemos usar um valor de tensão interno ou externo, diferente do habitual 5V.
    • Sabemos agora as instruções precisas para activar essa referência externa e as precauções a tomar ao usá-la.