terça-feira, novembro 02, 2021

ADC (Conversor Analógico Digital) - Parte 6 - ESP32

Embora seja mais conhecido por incorporar WiFi e Bluetooth, o ESP32 é bastante rico em recursos. Um deles é o ADC, que é bastante complexo. Vamos dar uma olhada rápida no que é oferecido.

O ESP32 possui dois conversores analógico digitais de 12 bits, capazes de operar de forma simultânea e independente. As opções de entrada incluem 18 pinos e mais 4 sinais internos; os resultados podem ir para cinco controladores diferentes (ADCn CTRL), conforme mostrado na figura abaixo (atenção que pad-in[n:0] indica n+1 pinos).

Diagrama de Blocos do ADC do ESP32 (fonte: manual de referência técnica)

Especificações

Os dados abaixo vem do datasheet e do manual de referência técnica:

  • Tipo: aproximação sucessiva
  • Resolução: 12 bits (pode ser configurado para 9, 10, 11 ou 12 bits)
  • Taxa máxima de amostragem: 200k/s (RTC) e 2M/s (DIG)
  • Referências: somente interna
  • Referência interna 1,1V (+/- 0,1V)
  • Entradas multiplexadas: 22 (18 pinos + 4 sinais internos)
Considerações Práticas

Como indicado acima, o ADC do ESP32 trabalha somente com uma referência interna de 1,1V. Entretanto é possível configurar a atenuação do sinal de entrada do ADC1, possibilitando a leitura de tensões maiores (até cerca de 2,5V).

O driver de WiFi utiliza o ADC2, portanto normalmente apenas o ADC1 está disponível para a aplicação.

Os controladores RTC tem por objetivo permitir a leitura com baixo consumo de energia, em troca de uma velocidade mais baixa. A conversão pode ser feita mesmo com o processador dormindo (sleep) e pode também se disparada pelo processador auxiliar de baixo consumo (ULP). Estes controladores não interagem diretamente com o DMA (mas podem fazer isso através do ULP).

Os controladores DIG são voltados para o máximo desempenho. Podem disparar sequencialmente conversões de varias fontes, definidas através de uma tabela. Os resultados podem ser armazenados diretamente na memória através de DMA.

Um problema no ESP32 é a interferência da parte de rádio no ADC. Se possível recomenda-se desligar o rádio ao usar o ADC. Mesmo assim, o ADC do ESP32 não costuma apresentar bons resultados. Os valores individuais costumam variar bastante e são comuns erros de offset e linearidade. Para obter uma precisão alta é necessário tirar a média de muitas leituras e fazer um processo de calibração.

Uma boa descrição do ADC do ESP32 pode ser vista em https://deepbluembedded.com/esp32-adc-tutorial-read-analog-voltage-arduino/.


Nenhum comentário: