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:
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).
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).
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:
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.