terça-feira, setembro 14, 2021

ADC (Conversor Analógico Digital) - Parte 1

Este post é o primeiro de uma série a respeito de um recurso importante dos microcontroladores: o conversor (de) analógico (para) digital. Depois que a gente aprende o analogRead do Arduino, corre-se o risco de tratar o ADC como se fosse um periférico perfeito, que magicamente converte uma tensão em um número. Nesta série vou estudar o que é um ADC, quais suas características importantes, as formas comuns dele ser implementado e ver como ele é em alguns microcontroladores populares (e também num componente externo).

Um dos exemplos de AnalogRead na IDE do Arduino


O objetivo do ADC, como falei acima, é fornecer um número que corresponda à tensão aplicada em um pino do microcontrolador. Algumas coisas comuns nos ADCs:

  • Usar uma tensão de referência (interna ou externa) e estar tensão ser o valor máximo que pode ser lido.
  • Retornar um inteiro de "n" bits (valores usuais são 8, 10, 12 e 16), onde 0 corresponde à tensão de 0V e 2^n corresponde à referência (lembrando que um inteiro de n bits pode representar um valor de 0 a 2^n-1, portanto o ADC não é capaz de ler exatamente a tensão de referência).
  • Demorar um certo tempo para retornar o resultado. No caso do ADC suportar mais de um tamanho do resultado, resultados com mais bits costumam demorar mais.
  • Ter a opção de gerar uma interrupção quando a conversão for encerrada
  • Nos microcontroladores que suportam DMA, poder programar uma série de leituras cujos resultados serão armazenados na memória via DMA
Um assunto que vou tentar explorar são as imprecisões nos resultados do ADC, estes são alguns motivos possíveis:
  • tensão de referência imprecisa
  • não linearidade na resposta
  • circuito externo inadequado para levar ao microcontrolador a tensão a ser medida
  • tensão a medir variando muito mais rápido que a velocidade de leitura do ADC
  • interferências (internas ou externas) na tensão a ser medida
Além de todos estes fatores, muitas vezes a tensão que queremos medir vem de um sensor. Existem vários outros fatores para que o sensor não gere uma tensão que corresponda exatamente ao que queremos medir, aumentando ainda mais a possibilidade de erro.

Nenhum comentário: