Beruflich Dokumente
Kultur Dokumente
br/arduinotaxa-de-amostragem-conversor-ad/
Arduino UNO - Taxa de amostragem do
conversor A/D
por Fbio Souza em sexta-feira, 27 de junho de 2014.
A plataforma Arduino trs em seu ncleo funes para leitura de sinal analgicos
atravs da utilizao do conversor analgico digital. O valor da taxa de amostragem
configurado internamente atravs das bibliotecas do Arduino. Desta forma no
precisamos configurar os registradores internos do ATmega328 antes da leitura de uma
sinal analgico. Essa camada de abstrao auxilia os iniciantes para a leitura de sinais
analgicos, porm em aplicaes que necessitam de uma otimizao da leitura,
necessrio entender o funcionamento do conversor A/D do microcontrolador
ATmega328 e a correta configurao dos seus registradores para que atenda as
necessidades do projeto.
Nesse artigo vamos abordar o funcionamento do conversar A/D do Arduino UNO que
baseado no ATmega328, entendendo a sua configurao e desenvolver alguns teste para
avaliarmos qual a mxima taxa de amostragem que podemos obter garantindo a
resoluo mxima do conversor.
Como pode ser observado na figura acima, o bloco do conversor A/D possui fonte
separada para a parte analgica, o pino AVcc. Essa tenso no pode variar mais do que
+/-0,3V de Vcc.
O Atmega328 possui tenso de referncia interna de 1,1 V, que pode ser selecionada por
software. Apresenta tambm um pino externo para uma tenso de referncia diferente de
VCC ou a referncia interna de 1,1 V. O valor de tenso de entrada deve estar entre 0V
e o valor de tenso de referncia, no ultrapassando o valor de VCC.
Ao final da converso pode ser gerada uma interrupo, caso a mesma esteja habilitada.
Bit4 No usado
Modos de operao
O conversor AD do Atmega328 possui dois modos de operao: Converso simples e
converso contnua.
Converso simples
No modo de converso simples necessrio a inicializao de cada converso. Quando
a converso finalizada os registradores de dados so preenchidos e o bit ADIF
colocado em 1. Para iniciar uma converso deve-se ligar o bit ADSC. Esse bit
permanecer em 1 enquanto a converso est em processo, e passar para 0 no final da
converso.
Converso contnua
Clock
O clock recomendado para o conversor AD do Atmega328 de 50 kHz a 200 kHz para
uma resoluo de 10 bits. O bloco prescaler controla do clock do conversor A/D, assim
o clock do conversor A/D ser uma frao do clock do oscilador principal, conforme o
fator do prescaler.
16 MHz / 2 = 8 MHz
16 MHz / 4 = 4 MHz
16 MHz / 8 = 2 MHz
16 MHz / 16 = 1 MHz
Como mencionado anteriormente o clock do conversor A/D deve estar estar entre 50
KHz e 200 KHz para garantir a preciso de 10 bits na resoluo. Assim, observando os
valores anteriores s se pode usar o prescaler de 128. Caso esteja trabalhando com um
cristal de 20 MHz, e for selecionado o prescaler de 128 o clock do conversor AD ser
156 KHz.
Primeira converso:
Converso Normal:
1 #if defined(ADCSRA)
2
3
4
sbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
1
0
1
1
sbi(ADCSRA, ADPS0);
sbi(ADCSRA, ADEN);
1
2 #endif
Uma opo para o aumento da taxa de amostragem a troca oscilador principal para
uma frequncia de 12 MHz, ond possvel chegar ao valor de 187 KHz de clock, que
resultar em uma taxa de amostragem de 187 KHz/13 = 14384 amostras por segundo.
Caso se tenha um clock de 200 KHz, que o mximo recomendado, a taxa de
amostragem mxima que ser conseguida com o conversor A/D do ATmega328 ser:
200 KHz/13 = 15384 amostras por segundo, ou seja, o AD do Atemga328 conseguir no
mximo 15KHz de amostragem com 10 bits de resoluo.
Resoluo
O conversor A/D do Atemega328 possui 10 bits de resoluo, ou seja, os valores entre 0
e Vref sero convertidos entre 0 e 1023.
O clock mximo recomendado para essa resoluo 200 KHz, que dra uma taxa de
amostragem
de
aproximadamente
15KHz.
No
application
Note
AVR120:Characterization and Calibration of the ADC on an AVR, encontramos a
seguinte declarao:
The ADC accuracy also depends on the ADC clock. The recommended maximum ADC
clock frequency is limited by the internal DAC in the conversion circuitry. For optimum
performance, the ADC clock should not exceed 200 kHz. However, frequencies up to 1
MHz
do
not
reduce
the
ADC
resolution
significantly.
Operating the ADC with frequencies greater than 1 MHz is not characterized.
Isso significa que pode-se aumentar o clock acima de 200 KHz at 1MHz sem obter
degradao na preciso do valor convertido. Para verificar esta afirmao, vamos testar
a aquisio para alguns valores de prescaler, ou seja, aumentando o clock do conversor
A/D.
Serial.begin(19200);
serial
}
//inicia a comunicao
1
1
1
2
1
3
void loop() {
// leitura
1
5
1
8
Serial.print("Valor = ");
1
9
Serial.print(valor);
Serial.print(tempo_fim - tempo_inicio);
2
0
2
1
2
2
2
3
Serial.println(" us");
delay(500);
}
Conforme exibido acima, o tempo decorrido em cada leitura est entre 108 us e 116 us.
Se pegarmos o valor de 0,116 ms teremos uma frequncia de amostragem de
aproximadamente 8600 Hz, bem prximo de 9600 calculado anteriormente.
Serial.begin(9600);
1
6
2
3
2
void loop() {
// leitura
2
tempo_inicio = micros(); //marca tempo de inicio de
5 leitura
2
6
2
7
2
8
2
9
Serial.print(valor);
3
0
3
1
3
2 }
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1
Serial.print("Valor = ");
4
2
Agora o intervalo de leitura est na ordem de 60us, o que nos d uma frequncia de
aproximadamente 16KHz. O que j era esperado j que foi dobrado a frequncia do
clock.
Concluso
O correto uso do conversor A/D essencial para a amostragem de sinais analgicos.
Conhecer as configuraes e os limites de hardware possibilita a otimizao e
confiabilidade do sinal lido e desta informao. Nesse artigo conhecemos os
registradores do conversor AD do ATmega328 e testamos a sua taxa de amostragem.
Percebeu-se que no houve prejuizo nos valores de converso quando houve o aumento
do clock do conversor AD, porm para diminuir possveis erros ocasionados por rudos
na converso (e quando no h a necessidade de uma alta taxa de amostragem)
aconselhado trabalhar em uma frequncia menor. Pode-se tambm aumentar a
frequncia de amostragem para valores acima de 1 MHz e trabalhar com uma resoluo
de 8 bits, configurando o ajuste esquerda do resultado.
Arduino TRE
Arduino Due
Comunicao Serial Java + Arduino
UDOO - Arduino, Linux e Android em uma mesma placa
Referncias
Funo analogRead()
Advanced Arduino ADC Faster analogRead()
http://forum.arduino.cc/index.php/topic,6549.0.html
AVR120: Characterization and Calibration of theADC on an AVR