Você está na página 1de 46

ADC

Por Fernando Koyanagi


Intenção dessa aula
1. Realizar medidas usando o conversor
analógico–digital do ESP32

2. Observar as discrepâncias da
conversão

3. Aplicar um método de
ajuste/calibração do ADC
O que é um conversor AD ?
Recursos usados
• Uma placa Lolin32 Lite v1.0.0
• Um osciloscópio Tektronix TDS1001C para captura.
• Um cabo USB para o ESP32.
• Um osciloscópio Hantek DSO4102C como gerador de sinal
ADC do ESP32

• Segundo dados da Espressif, os chips ESP32 podem apresentar uma diferença


de +/- 6% de um chip para outro nos resultados medidos.

• Além disso, a conversão NÃO possui uma resposta linear por toda faixa
disponível para leitura.

• A Espressif disponibiliza um método para calibração e sugere que os usuários


implementem outros métodos caso julguem necessário, afim de alcançar a
precisão desejada.

Esp32_datasheet_en.pdf – página 22
Seu e-mail
Em www.fernandok.com

6
forum.fernandok.com
Instagram
fernandok_oficial

Telegram
fernandok_oficial

8
ADC do ESP32
• Vamos realizar uma aquisição de dados e, a partir deles, mostrar as respostas do
ADC e um exemplo de aplicação de um processo matemático para ajuste da leitura.

• Existem várias formas, mais simples ou mais complexas para realizar estas
correções. Cabe a cada um avaliar a mais adequada ao projeto.

• A demonstrada aqui terá um objetivo ilustrativo, tentando abordar pontos


interessantes que podem ser observados durante ajustes.
Circuito utilizado

Captura pelo
osciloscópio
Tektronics TDS 1001C
Sinal
trapezoidal
Hantek de 1Hz
DSO4102C como Captura pelo ADC
Gerador de sinal (GPIO36) do Lolin32
Lite
Sinal utilizado

• Escolhemos um sinal trapezoidal de baixa frequência para que tenhamos


acesso a rampas que percorrem toda a faixa de interesse da conversão e que
permita um número grande de amostras nestas rampas.
Dados obtidos pelo osciloscópio

Imagem da captura realizada pelo osciloscópio. Os dados foram


armazenados em um arquivo csv. Note a leve curvatura nas rampas de
subida e de descida do sinal.
Dados obtidos pelo osciloscópio (arquivo csv no Excel)
Dados obtidos pelo ADC

Alterando a taxa de transferência da serial, podemos visualizar os dados


capturados pela ADC. Observe a deformação do sinal trapezoidal.

Dados observados no plotter serial da IDE Arduino


Dados obtidos pelo ADC - Excel

Usando uma taxa maior e o terminal serial, podemos capturar os valores e


aplicá-los no Excel para nossas comparações.
Comparação das rampas de subida

Comparando as duas rampas de subida das duas capturas.

Note a curvatura que ocorre nas


duas rampas.

Note também que para a mesma


rampa temos muito mais amostras
do ESP32 que do osciloscópio.
Equiparando o número de amostras

Como o ESP32 forneceu um número de amostras maior que o osciloscópio,


precisamos equiparar estes valores pois eles servirão de índice para
comparar as duas curvas.

Para isso vamos fazer uma comparação direta.

Temos 305 amostras para a rampa do osciloscópio e 2365 amostras para a


rampa do ADC.

Como as rampas são do mesmo intervalo, podemos dizer que temos


aproximadamente 7,75 amostras do ADC para cada do osciloscópio.
Equiparando o número de amostras

Multiplicando o índice de cada amostra do osciloscópio temos a mesma


curva, mas com índices equivalentes ao do ADC e os dados redistribuídos.

Para preencher os dados faltantes para as novas posições, vamos aplicar


uma curva que se adeque estatisticamente aos dados conhecidos.
Preenchendo as lacunas – Linha de Tendência

Selecionando os dados conhecidos (pontinhos azuis), através de um clique e em seguida


clicando com o botão direito, selecionamos: “Adicionar linha de Tendência...”
Preenchendo as lacunas – Linha de Tendência

Na janela que surge, selecionamos o tipo


Polinomial, de ordem 2 já será o bastante.

Marcamos também as opções “Exibir Equação


no gráfico” e “Exibir valor de R-quadrado no
gráfico”.

Clicamos em “Fechar”.
Preenchendo as lacunas – Curva polinomial de grau 2
Preenchendo as lacunas – Avaliando a função

O Excel nos dá duas novas informações, a equação de segundo grau que melhor se adequa aos
dados e o R-quadrado, que quantiza essa adequação.

Basta lembrar que quanto mais próximo de 1, mais adequada a equação.

Não vamos nos aprofundar na matemática envolvida, vamos utilizar somente como uma
ferramenta.

Vamos preencher as lacunas da amostragem com os dados gerados pela equação. E assim,
compará-las ponto a ponto.
y = -9E-08x2 + 0,0014x + 0,1505
R² = 0,9995

Tensão no osciloscópio = -9E-08*indice2 + 0,0014*indice + 0,1505


Convertendo a tensão do osciloscópio em um valor
equivalente para comparar com o ADC
Vamos aproveitar este momento também para transformar o valor da tensão do osciloscópio em
um valor do ADC equivalente.

Como o maior valor obtido no ADC do ESP32 foi de 4095 e equivale à leitura de 2,958V para o
mesmo índice, podemos dizer que :

Ou seja, cada volt nas medidas do osciloscópio equivalem a aproximadamente 1384,4 unidades
do AD. Logo, podemos multiplicar todas as medidas do osciloscópio por este valor.
Comparado as duas rampas obtidas

Visualizando as diferenças obtidas nas duas leituras.


Comportamento da diferença da leitura do ADC
(ERRO)
A curva abaixo mostra como se comporta a diferença na leitura do ADC em função da medida.
Esta coleção de dados permitirá encontrarmos uma função de correção.

Para encontrar esta curva, simplesmente


plotamos a diferença encontrada em cada
medida em função de cada posição
possível do AD (0 a 4095)
Comportamento da diferença da leitura do ADC -
Encontrando uma função de correção
Podemos determinar no próprio Excel uma função de correção, adicionando uma Linha de
Tendência, agora de maior grau, até que se adeque o suficiente aos nossos dados.
Usando outro software

Outro software interessante para a determinação das curvas é o PolySolve, que pode ser usado
diretamente no link:

https://arachnoid.com/polysolve/

Ou baixado como um aplicativo Java

Ele permite a aplicação de regressões


polinomiais de maiores graus e
entrega a função formatada, além de
outras funcionalidades.
Usando outro software

Para usá-lo, basta introduzir os dados na primeira caixa de texto. Os dados devem seguir a
ordem X,Y separados por uma virgula, ou tabulação. Atenção na utilização correta do ponto
como separador decimal.
Usando outro software

Um gráfico irá aparecer na caixa seguinte, se os dados introduzidos estiverem corretamente


formatados.
Veja como ficou nossa curva de erro do ADC.
Usando outro software

A janela seguinte apresentará o resultado da regressão, incluindo os dados de adequação da


função, que por sua vez pode ter sua saída formatada de diversas formas: como uma função
C/C++, uma lista de coeficientes, uma função escrita em Java . . .

Obs.: Atenção aos separadores decimais


Constantes e Setup()
Loop() e a função de correção

Observe na linha 12 que temos a opção de imprimir os dados com a adição da função de
diferença f(valor_analogico)
Usando a função de correção do PolySolve

Observe a mudança da virgula por ponto como separador decimal


Captura com correção – Plotter Serial
Captura com correção - Excel
Custo computacional

Para realizar os cálculos dos polinômios, é necessário que o


processador se ocupe desta tarefa. Isto pode provocar atrasos na
execução, dependendo do código-fonte e do poder computacional
disponível.

Aqui vemos uma tabela de resultado de um teste usando polinômios


de vários graus. Observe a diferença entre os tempos quando a
função pow() foi utilizada e quando não foi.
Custo computacional

Teste Intervalo (ns) Comentário


while 80 Somente o while
v 80 Chamada a uma função vazia
r 80 Chamada a uma função com returno
f0 80 Função de grau 0
f1 80 Função de grau 1
f2 80 Função de grau 2
f3 37500 Função de grau 3
f4 72900 Função de grau 4
f5 108300 Função de grau 5
f6 143800 Função de grau 6
f13_comPow 385500 Função de grau 13
f13_semPow 80 Função de grau 13 sem usar a função pow()
Código de teste – Setup() e inicio do Loop()
Código de teste – Loop() e o processamento
Código de teste – Loop() - resultados
Código de teste – Funções usadas
Código de teste – Funções usadas
Código de teste – Funções usadas
Código de teste – Funções usadas
Código de teste – Funções usadas
Em www.fernandok.com
Download arquivos PDF e INO do código fonte

46