Funcionamento elétrico das portas analógicas no modo INPUT

A parte operacional das portas analógicas, tanto como INPUT quanto como OUTPUT), é tranquilo de entender, mas estou sentindo falta de uma explicação elétrica do funcionamento.

Gostaria de entender como as portas analógicas leem a voltagem.

Minha dúvida surgir com base nos 3 esquemas desenhados abaixo:

No primeiro caso, não importa a resistência que eu coloco, a porta vai ler 1023. No segundo, independentemente da resistência, terei 0.

No terceiro, se as duas resistências são iguais, não importando se são de 100 ou 10K, a leitura será de 511 ou 512 (metade de 1023). A medida que diminuo a resistência 2 mantendo a 1, a leitura se aproxima de 1023 e se vice-versa.

Alguém saberia me explicar como essa leitura é feita pela placa?

Exibições: 3710

Responder esta

Respostas a este tópico

É feito com conversor analógico digital

Bom, dentro do ATMEGA tem um conversor Analógico Digital, que faz a comparação com um tensão de referência, é assim que ele opera, agora como o AD faz isso, melhor você procurar na internet sobre operação de AD

Olá Leonardo.

Como o pessoal disse, o periférico que faz a leitura analógica nos ports se chama Conversor Analógico Digital, ou em sua sigla em inglês ADC ( Analog to Digital Converter ), mais a frente darei algumas referências.

Antes precisa entender como se faz a conversão, e ela é extremamente ligada ao sinal de referência do periférico de conversão, que geralmente é a própria alimentação do microcontrolador (MCU). 

Para o exemplo que vou dar, levaremos em conta a seguinte configuração:

1) Referências: GND ( 0V ) e VCC (+5V )

2) Resolução do periférico ADC do MCU usado no Arduino, 10 bits. Que implica em: 2^10 = 1024

3) Sinal analógico de 0V a +5V. Caso o valor ultrapasse estes limites, se for abaixo de 0V pode ser que seja sempre 0V, e caso seja acima de +5V, ele irá saturar em +5V mesmo. (Apenas para o exemplo).

A conversão surge das fórmulas:

A) Precisão ou Resolução de leitura = (Vref+ - Vref -) / (2^ nBits - 1).  Então: Precisão = (5V - 0V)/ (1024 -1) = 0,0048 V/bit , ou 4,88mV por bit.

Ou seja, a cada 4,88mV você tem o valor digital "1" (0000000001b), e se for o dobro "2" (0000000010b), e assim por diante.

B) Valor Digital Lido = Valor de entrada / Precisão .

 Olhando seus exemplos.:

1) Pino de leitura aos +5V. Tem-se:     5V / 4,88mV = 1024.

2) Pino de leitura ao 0V. Tem-se:         0V / 4,88mV = 0.      <=== não dá erro pois o MCU não executa uma conta aritmética. ^^

3) Pino de leitura ligado ao divisor de tensão:

Para valores iguais de resistor, teremos:  Vpino = VCC . ( R1 / ( R1 + R2)),  

                                                             Vpino =  5 . ( 100 / (100 + 100)) = 5 . 0,5 = 2,5 V

Logo:                                                    VDigital = 2,5V / 4,88mV = 512 . 

E mudando os valores dos resistores, basta colocar na fórmula do divisor de tensão. E para valores iguais é sempre a metade do valor de alimentação do divisor. Claro, se os resistores estiverem com o mesmo valor. Conforme a tolerância de erro deles, pode ser que você leia os valores de 512 e 511 como havia dito.

Referências sobre o periférico ADC.

http://www.avrbeginners.net/architecture/adc/adc.html

http://winavr.scienceprog.com/atmel-avr-microcontrollers/analog-to-...

Espero ter ajudado. Boa sorte nos estudos.

Att.

Daniel, obrigado! Eu tinha uma ideia de como funcionava a conversão, mas a sua explicação deu uma consolidada.

Porém, a minha dúvida permanece: como o pino analógico "sente" sempre 5 V quando eu ligo ele na saída 5V do Arduino passando por uma resistência, seja ela de 100 ou 10K?

Se ele se baseasse na passagem de corrente pelo pino, deveria indicar um valor menor se eu aumentasse a resistência, mas não é isso que acontece.

conversor analógico digital tem uma alta impedância .........não circula corrente então não a queda de tensão no resistor.

Entendi, Cabecavil! Ele não mede corrente, mas sim tensão.

Agora só me falta entender o seguinte: então como ele "sente" a mesma tensão quando é colocado entre duas resistências (arranjo 3 no meu desenho) iguais pequenas e duas resistências iguais muito grandes?

pois no esquemas 1 e 2 ADC esta em serie com o circuito.

no esquemas 3 e um divisor de tensão..... ADC esta em paralelo com resistor 1(da sua foto). (o valor na entrada do ADC vai se a metade da tensão se as duas resistência forem iguais). 

divisor de tensão

na imagem acima o valor da entrada ADC vai se o valor da tensão no resistor R2.

Muito obrigado, Cabecavil!

Com um pouco de física de ensino médio consegui entender.

O pino analógico não funciona como parte do circuito, ou seja, não passa corrente por ele. Na verdade, ele funciona como se fosse um fio ligado em uma extremidade no Ground e a outra é onde espetamos o jumper, ou seja, ele "sente" a tensão nas pontas do R2 (no seu desenho). Usando a boa e velha U=r.i consegui até mesmo demonstrar a fórmula que você apontou. Muito obrigado!

Daniel, a parte da conversão para digital eu consegui entender com a sua imagem. Obrigado!

 

 Então Leonardo, isso é devido a topologia do periférico ADC. Nas referências que enviei tem o funcionamento da topologia ( existem várias) usadas no MCU do Arduino.

Para ser simples na explicação, poderia ser uma série de comparadores ( Podendo ser feito com Amplificadores Operacionais) ligados em cascata. Como são 10 bits, provavélmente serão 10 comparadores utilizados internamente ao MCU.  E para não haverem 10 A.O. em cada pino analógico, é efetuado a multiplexação dos pinos para os comparadores. 

Exemplos:

Nos link tem o diagrama.

Att. ^^

Esse tópico merecia um tutorial. É um ponto importante que não fica muito claro a primeira vista, demora pra gente perceber que o conversor na verdade não "mede" a tensão, ele compara com um valor referencial. Eu mesmo ainda tô tentando entender direito isso, mas as explicaćões aqui já jogaram uma luz.

 Olá J011y R0g3r. 

 Realmente daria um belo tutorial sobre o assunto pois existem aproximadamente 9 tipos de conversores analógico-digital que possuem diferentes teorias físicas e elétricas para a medição, e em geral nas indústrias, cursos técnicos e ou de graduação, são estudados de 1 a 2 tipos de conversores no máximo. 

 Quem acaba por verificar os demais tipos para atender a suas necessidades geralmente trabalha com processamento digital de sinais (audio/vídeo/outros). Onde o tempo de conversão, precisão e consequentemente a discretização do sinal analógico é de extrema importância e cuidados.

 Geralmente os que são utilizados nos microcontroladores e CI's ADC são do tipo "aproximação sucessiva". Pois são mais baratos, o tempo de conversão não é tão preocupante até mesmo pelos MIPs que a maioria dos MCU possuem, e a precisão é relativamente boa pois usam bastante o de 10bits (já usei ADC externo de 24bits).

Enquanto não temos um tutorial sobre, indico o artigo do link abaixo:

http://en.wikipedia.org/wiki/Analog-to-digital_converter

Lá estão listados alguns tipos e suas características.

Att. ^^

Ola Daniel.

Mesmo que seja um tutorial falando de 1 ou 2 tipos de conversores, acredito que os mais simples e baratos são os mais interessante para estudarmos, especialmente quem está comećando no assunto.

Mais importante que isso, acredito que são justamente as teorias físicas e elétricas. Acredito que é mais importante estudar os "porquês" (a base teórica) do que "como", porque se você entende os princípios, a lógica sobre um componente, é mais fácil entender depois um componente diferente daquele.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço