Os sinais naturais presentes no mundo são todos analógicos. Por conta disto, para utilizá-los em um sistema digital, é necessário converter este valor para um valor digital.

Neste post, pretendo mostrar o que é e como funcionam alguns dos tipos de conversores AD. Em específico, o conversor AD paralelo e o de aproximação sucessiva.

O vídeo abaixo explica o assunto do post, entretanto, o post possui detalhes adicionais.


Informações básicas

O que é o conversor AD

Não é muito difícil descobrir do que se trata o conversor analógico-digital a partir de seu nome. De qualquer forma, o objetivo do conversor AD é transformar uma grandeza analógica (tensão) em um valor digital.

Recomendo bastante ler este post para entender a diferença entre um sinal analógico e um digital.

Como muitos sistemas entendem apenas a linguagem digital, o conversor AD é essencial nestes casos.

Princípio de funcionamento

Existem diversas formas de se criar um conversor AD, mas o princípio deles é o mesmo:

Todo conversor AD opera sob uma faixa de tensão definida, por exemplo de 0 a 5V. Além disto, possuem uma resolução de leitura específica, por exemplo de 8 bits.

Ou seja, para o exemplo citado, os valores de 0 a 5V serão representandos em 8 bits, sendo:

0000 0000 – Representa 0

1111 1111 – Representa 5V

A variação de tensão dentro desta faixa costuma ser linear. Portanto, cada incremento de 1 bit, neste caso, representa um incremento de ~20mV (5V/256 possibilidades).

Autenticidade do sinal convertido – Resolução

Como qualquer coisa, o conversor AD apresenta desvantagens. E uma delas e na autenticidade.

Para entendermos este problema, considere que estamos querendo converter o seguinte sinal analógico de tensão:

Fonte: Wikipedia

Como o sinal acima é analógico, entre dois pontos quaisquer, existem infinitos valores de tensão. E, o sinal digital possui FINITOS valores entre dois pontos. Portanto, ele nunca é capaz de representa com total fidelidade o sinal amostrado.

Para entender melhor, imagine que estamos com um conversor de 8bits (~20mV por bit):

  • Se a tensão de entrada for 0V, a conversão retorna 0000 0000.
  • Se ela for 20mV, a conversão retorna 0000 0001.
  • Assim em diante…

Até aí tudo bem, o problema é quando os incrementos de tensão não conseguem ser detectados pela resolução do conversor. Isto é, para tensões de 5mV, 10mV ou 15mV o conversor retornará o mesmo resultado: 0000 0000.

Com isto, a onda reproduzida digitalmente fica com “quinas”. A imagem abaixo mostra um possível sinal amostrado da senoide da imagem anterior (os valores do eixo y são valores de uma conversão de 10bits).

sinal do conversor AD

Claro que, quanto maior a resolução, mais suaves são as “quinas”. A imagem acima não representa a conversão real, pois, na realidade, haveriam muito mais “degraus” do que a imagem mostra.

Autenticidade do sinal convertido – Frequência de amostragem

Outro problema na fidelidade do sinal convertido em relação ao original é relacionado à frequência de amostragem.

Pegando o mesmo exemplo da senoide do tópico anterior: imagine que a senoide tenha um frequência de 1Hz (varia a cada segundo). E, considere que a frequência de amostragem também seja 1Hz (1 leitura por segundo).

Se isto ocorrer, toda vez que for feita uma leitura, o valor retornado será 0V, pois a cada 1Hz a senoide volta pro início (0V). Portanto, o seu sinal desejado está variando muito mais rápido do que você está lendo.

Para corrigir este problema, basta aumentar a frequência de amostragem.

Tem um outro fator chamado “Aliasing” que tem relação com a frequência de amostragem e com o que foi falado. E a regra para preveni-lo é adotar uma frequência de amostragem no mínimo duas vezes maior que a frequência do sinal.


Conversor AD paralelo

O circuito deste tipo de conversor é maior, mas ele responde mais rápido que outros modelos.

Circuito típico

O conversor AD paralelo é composto, essencialmente, por uma cadeia de comparadores e um circuito lógico (decodificador).

Fonte: Wikipedia

Funcionamento

Usando a imagem do circuito anterior como referência:

A entrada inversora dos comparadores é alimentada com valores diferentes de tensão. A partir da imagem acima, vemos que a conexão é feita com uma ligação em série de resistores.

Portanto, o primeiro comparador recebe 7/8 de Vcc, o segundo 6/8 de Vcc e assim em diante… Além disto, as entradas não inversoras dos comparadores estão interligadas.

Diante disto, quando ocorrer uma conversão da tensão de entrada, todos os comparadores que tiverem a tensão da entrada não inversora maior que a tensão da entrada inversora irão sinalizar nível alto para o conversor de código. E vice-versa.

Sendo assim, o conversor de código é capaz de saber exatamente em qual faixa está a tensão de entrada. E, com isso, ele sinaliza, na saída, o valor da tensão no formato binário usual. Vamos entender melhor:

Exemplo de conversão

Suponha que Vcc=5V e a tensão de entrada seja 0,7V. 0,7V está entre 1/8Vcc e 2/8Vcc.

Quando a conversão for inicializada, o comparador com 1/8Vcc irá sinalizar nível alto, pois 0,7V > 1/8Vcc. Todos os comparadores na sequência, que são os de 2/8Vcc em diante, irão sinalizar nível baixo. Isso porque, 0,7V < 2/8Vcc…

A partir disto, o conversor de código interpreta estes valores e transforma esta leitura em um valor binário adequado. Neste caso, é um conversor de 3 bits. Portanto, ele sinalizaria 010 (000 é 0V e 001 é 1/8Vcc).

Observações

A faixa de tensão da medição depende da alimentação Vcc. E, a resolução depende do número de comparadores utilizados:

A resolução é dada pela fórmula 2^n, sendo n o número de comparadores. Portanto, um conversor de 10bits precisaria de 1024 comparadores. Ou seja, um circuito bem extenso.

Sobre o tempo de conversão, ele depende do atraso de propagação entre os componentes e da velocidade com que o conversor de código irá operar. Mas, este tempo é relativamente pequeno.


Conversor AD por aproximação sucessiva

Este tipo de conversor é mais compacto, mas é mais lento que o conversor paralelo.

Circuito típico

Para exemplificar o circuito típico, peguei o circuito do conversor AD presente no microcontrolador ATmega328p e simplifiquei. Ele é composto por 3 principais partes:

Conversor AD por aproximação sucessiva
Imagem adaptada do circuito do datasheet do atmega328p (pág 247)

O bloco chamado “Lógica de Conversão” é o circuito que controla a lógica da conversão.

O conversor DA converte um valor digital em um sinal analógico de tensão. Se quiser entender os caminhos para criar um, recomendo ler este post. E é importante entender que ele possui uma resolução (10 bits por exemplo).

Funcionamento

Usando a imagem do circuito anterior como referência:

Para facilitar a explicação, vamos imaginar que o conversor DA tenha uma resolução de 8 bits e que ele opere de 0 a 5V.

Quando a conversão é inicializada, os seguintes passos acontecem:

  • 1 – Conversor DA

O bloco lógico envia o valor mais baixo possível para o conversor DA, que é: 0000 0000. E, ele converte o valor digital em um sinal analógico que vai pro comparador.

  • 2 – Comparador

Se a tensão de entrada for maior que o valor convertido do conversor DA, o comparador sinaliza nível alto para o bloco lógico. Senão, sinaliza nível baixo.

  • 3 – Retorno do valor do comparador

Quando o comparador realiza o passo anterior, o bloco lógico é capaz de saber se a tensão de entrada é maior ou menor que a tensão que ele mandou para o conversor DA.

Se ela for maior, o bloco lógico repete o passo 1 novamente enviando um número binário 1 bit maior que o anterior. E ele faz isto até a tensão de entrada ser menor que a do DA.

Se ela for menor, quer dizer que a tensão de entrada pode ser representada pelo valor digital enviado ao conversor DA. Vamos entender melhor:

Exemplo de conversão

Suponha uma tensão de entrada de 25mV (em 8 bits de resolução ela será igual à 0000 0010).

O bloco lógico envia pro conversor DA 0000 0000 e recebe 1 do comparador, pois 25mV é maior que 0V. Ele repete o passo 1 e envia 0000 0001 e recebe 1 do comparador, pois 25mV > ~20mV. Ele repete o passo 1 novamente e envia 0000 0010. Desta vez, recebe 0 do comparador, pois ~40mV>25mV.

Com isto, o bloco lógico é capaz de saber que a tensão de entrada está entre ~20mV e ~40mV. Portanto, ele pega o valor binário que foi enviado ao conversor DA (0000 0010) e coloca na saída.

Observações

A resolução e a faixa de tensão da medição dependem do conversor DA, pois ele é a referência para dizer o valor da tensão.

E, quanto maior for a tensão de entrada, mais tempo o bloco lógico demorará para encontrar o valor da leitura.