Ir ao conteúdo
  • Cadastre-se

Outro Lendo o ADC com qualidade no AVR


Posts recomendados

Estou estudando o uso de microcontrolador com foco em controle de potencia (carregador de baterias, controle de eletrólise e afins). Na primeira vez que programei para uso industrial com o 8080 foi em assembler, o IBM-PC não existia, o Z-80 era recente e a digitação era feita num CRT apoiado por um mainframe. Anos depois, já com um potente IBM-PC XT de 8MHz com HD de 32,5MB (é mega mesmo) fiz um controle de vendas para a esposa de 1200 linhas em C++. Não lembro de mais nada, estou ralando nos manuais e nos excelentes tópicos e tutoriais desse clube. E se é para fazer controle de valores analógicos, sem o correto uso do ADC nada feito.

Tenho visto aqui leituras sendo feitas com acesso único e outras com múltiplos acessos do qual se tira a média para uso. Só aí já me desencantei com as resoluções prometidas de 8 ou 10 bits. 8 bits não é pouco, em tese te dá 0,4% em end range +- 0,5LSB. No meio da escala isso equivale a 0,8%. Para começar meus estudos, elegi o AVR Atiny4, apenas 207 paginas.

Perguntas:

1 - Setar o prescaler do ADC no máximo (o que resulta em frequencia mínima) melhora a qualidade da leitura?

2 - ADC Noise Reduction mode (or Idle mode) não seria um recurso mais inteligente do que colocar um delay após o comando de leitura? Nesse recurso a CPU entra em halted durante o processo de leitura, o que zera os ruidos internos de comutação do chip, exceto os que trabalham para o ADC. Isso não me possibilitaria uma leitura de qualidade com um único acesso?

3 - Está sendo um erro meu iniciar os estudos pelo AVR?

4 - Outros comentários que julgarem relevantes. Ser autodidata não é mole.

Link para o comentário
Compartilhar em outros sites

Em 22/09/2017 às 14:54, Sérgio Lembo disse:

1 - Setar o prescaler do ADC no máximo (o que resulta em frequencia mínima) melhora a qualidade da leitura?

Citação

ADC Prescaler

The ADC of the AVR converts analog signal into digital signal at some regular interval. This interval is determined by the clock frequency. In general, the ADC operates within a frequency range of 50kHz to 200kHz. But the CPU clock frequency is much higher (in the order of MHz). So to achieve it, frequency division must take place. The prescaler acts as this division factor. It produces desired frequency from the external higher frequency. There are some predefined division factors – 2, 4, 8, 16, 32, 64, and 128. For example, a prescaler of 64 implies F_ADC = F_CPU/64. For F_CPU = 16MHz, F_ADC = 16M/64 = 250kHz.

Now, the major question is… which frequency to select? Out of the 50kHz-200kHz range of frequencies, which one do we need? Well, the answer lies in your need. There is a trade-off between frequency and accuracy. Greater the frequency, lesser the accuracy and vice-versa. So, if your application is not sophisticated and doesn’t require much accuracy, you could go for higher frequencies.

FONTE: http://maxembedded.com/2011/06/the-adc-of-the-avr/

Para a maioria das tarefas você pode colocar alta frequência, mas se você quer alguma coisa com muita precisão você pode colocar baixa frequência.  Então, sim, melhora a qualidade da leitura.

 

Em 22/09/2017 às 14:54, Sérgio Lembo disse:

2 - ADC Noise Reduction mode (or Idle mode) não seria um recurso mais inteligente do que colocar um delay após o comando de leitura? Nesse recurso a CPU entra em halted durante o processo de leitura, o que zera os ruidos internos de comutação do chip, exceto os que trabalham para o ADC. Isso não me possibilitaria uma leitura de qualidade com um único acesso?

Delay não é muito aconselhado, seria melhor usar millis e não interrompe o programa para contar o tempo e tornando mais rápido e podendo fazer multifunções.

 

Idle mode ? Isso não seria uma dos modos de consumo? Vai reduzir a energia espere por mais baixa capacidade em geral de processamento... aqui:

Citação

Idle mode stops the CPU while allowing the SRAM, timer/counter, ADC (ATtiny5/10, only), analog

comparator, and interrupt system to continue functioning. ADC Noise Reduction mode minimizes

switching noise during ADC conversions by stopping the CPU and all I/O modules except the ADC

Vai reduzir o ruido mas também vai parar a CPU... ai você tem que ver se isso é favorável ao que você quer... se você não tem outras tarefas e se isso é o suficiente para você.

 

Em 22/09/2017 às 14:54, Sérgio Lembo disse:

3 - Está sendo um erro meu iniciar os estudos pelo AVR?

AVR sem dúvida é um dos mais fáceis... tem do ST por exemplo mas são terríveis para novatos, mas são mais baratos... tirando o fato dos AVR funcionar com vários programadores não proprietários e ter muitos mais exemplos já prontos na net.

Em 22/09/2017 às 14:54, Sérgio Lembo disse:

4 - Outros comentários que julgarem relevantes. Ser autodidata não é mole.

BOa sorte lol uhahuauhahuauhauha

 

 

Link para o comentário
Compartilhar em outros sites

20 minutos atrás, Bommu Perneta disse:
Em 22/09/2017 às 14:54, Sérgio Lembo disse:

3 - Está sendo um erro meu iniciar os estudos pelo AVR?

AVR sem dúvida é um dos mais fáceis... sem do ST por exemplo mas são terríveis para novatos

Não entendi essa parte da resposta (em negrito).

 

21 minutos atrás, Bommu Perneta disse:
Em 22/09/2017 às 14:54, Sérgio Lembo disse:

4 - Outros comentários que julgarem relevantes. Ser autodidata não é mole.

BOa sorte lol uhahuauhahuauhauha

Nesse quesito somo iguais: perco o amigo mas não perco a piada! rs

 

Retirado do datasheet do ATtiny4 / ATtiny5 / ATtiny9 / ATtiny10, pagina 126

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8127-AVR-8-bit-Microcontroller-ATtiny4-ATtiny5-ATtiny9-ATtiny10_Datasheet.pdf

14.8. ADC Noise Canceler
The ADC features a noise canceler that enables conversion during sleep mode to reduce noise induced from the CPU core and other I/O peripherals. The noise canceler can be used with ADC Noise Reduction and Idle mode. To make use of this feature, the following procedure should be used:
1.  Make sure that the ADC is enabled and is not busy converting. Single Conversion mode must be selected and the ADC conversion complete interrupt must be enabled.
2.  Enter ADC Noise Reduction mode (or Idle mode). The ADC will start a conversion once the CPU has been halted.
3.  If no other interrupts occur before the ADC conversion completes, the ADC interrupt will wake up the CPU and execute the ADC Conversion Complete interrupt routine. If another interrupt wakes up the CPU before the ADC conversion is complete, that interrupt will be executed, and an ADC Conversion Complete interrupt request will be generated when the ADC conversion completes. The CPU will remain in active mode until a new sleep command is executed.
Note:
 The ADC will not be automatically turned off when entering other sleep modes than Idle mode and ADC Noise Reduction mode. The user is advised to write zero to ADCRSA.ADEN before entering such sleep modes to avoid excessive power consumption.

 

Com o clock do ADC em 50kHz e sabendo que a leitura consome 13 clocks, terei a leitura em 260us. Somando-se a isso a execução dos comandos que preparam a leitura, de 270us não passa. Na maioria das vezes pode-se conviver com isso. Em princípio não vejo vantagem em se ter alta performance de processamento se as leituras na qual a decisão será tomada for de baixa qualidade. Nesse caso teremos decisões de baixa qualidade em alta velocidade. Qual a vantagem disso?

Link para o comentário
Compartilhar em outros sites

31 minutos atrás, Sérgio Lembo disse:

Não entendi essa parte da resposta (em negrito).

você tem os AVR que são da Atmel e também tem outros micro controladores no mercado como os da ST http://www.st.com

que tem muitas funções, bastantes interrupts, algumas coisas integradas interessantes, mas a comunidade é ridiculamente pequena comparada dos atmega/arduino e não tem não tem todo o suporte a tudo quanto é biblioteca, ou seja, você vai ter que escrever a sua própria. Fora que para ligar um led você precisa digitar umas mais de 5 linhas de código ^^

36 minutos atrás, Sérgio Lembo disse:

Com o clock do ADC em 50kHz e sabendo que a leitura consome 13 clocks, terei a leitura em 260us. Somando-se a isso a execução dos comandos que preparam a leitura, de 270us não passa. Na maioria das vezes pode-se conviver com isso. Em princípio não vejo vantagem em se ter alta performance de processamento se as leituras na qual a decisão será tomada for de baixa qualidade. Nesse caso teremos decisões de baixa qualidade em alta velocidade. Qual a vantagem disso?

Pois é a maioria não precisa disso, mas se for um trabalho mais científico ou alguma coisa de mais alto risco(controle de uma variável se não o "bolo" queima) e que realmente precise de precisão se busca o menor erro... mas novamente não é o caso da maioria... então eles aumentam a velocidade sem ter assim grandes prejuízos.

 Um exemplo disso: em sensor de distância que você recebe um sinal analógico seria bom você ter uma alta precisão se for em centímetros/milímetros do que o mesmo sensor sendo usado para medir metros... Mas claro, se a essa distância variar muito rapidamente é preferível ter um sensor menos preciso mas que dê valores mais rápido e vite do "carro bater no muro". Depende da aplicação, também tem que se fazer testes... pode-se trocar o leitor o conversor ADC do microcontrolador por outro externo mais sensível e ativar alguma porta digital que tenha maior velocidade... e por ai vai...

adicionado 6 minutos depois

 

ah! você pode processar outras coisas (multitarefa), você tem poder de processamento alto para receber e fazer contas... e não sair de um "subnível" de energia aumentar e depois começar as atividades e depois reduzir... isso diminui o desempenho ^^ mas novamente depende do que você está fazer...

Link para o comentário
Compartilhar em outros sites

@Bommu Perneta , o que consegui encontrar até agora sobre a precisão do ADC embutido no microcontrolador, e isso inclui seus comentários, falam dela de forma conceitual mas não entram em valores. Em valores absolutos, isto é, quantos % de erros de linearidade se tem nessa ou naquela forma, erros de ganho, off-set, etc. Já viu algum material a respeito para que o projetista possa balizar melhor suas escolhas?

Link para o comentário
Compartilhar em outros sites

http://ww1.microchip.com/downloads/en/AppNotes/Atmel-2559-Characterization-and-Calibration-of-the-ADC-on-an-AVR_ApplicationNote_AVR120.pdf

 

como chegar nessa parte /\

vai no site da do fabricante

http://www.microchip.com/wwwproducts/en/ATTINY4

Abre "Documentation"

Ctrl+F

Escreve Adc

vai dar em "AN_2559 - AVR120: Characterization and Calibration of the ADC on an AVR"

Clica nele

vai parar nessa pagina estranha aqui

http://www.microchip.com//wwwAppNotes/AppNotes.aspx?appnote=en591791

E só clicar no na imagem de pdf e vai dar nesse primeiro link que postei X)

 

 

Pronto!

 

Do site do fabricante, tudo resolução, quantização, ideal, erro... gráfico...

adicionado 1 minuto depois

outro links no mesmo lugar

 

http://ww1.microchip.com/downloads/en/AppNotes/doc8003.pdf

 

Ou seja tem um festa de links lá X)

Link para o comentário
Compartilhar em outros sites

@Sérgio Lembo ,

 

Creio que sua escolha foi bem acertada. Você tem também o mundo do Arduino baseado nessa mesma tecnologia dos Avrs. 

 

Sobre o conversor A/D, vou passar algumas opinões minhas :

 

- A quantidade de bits original ( 10 ) já é mais do que suficiente para projetos não profissionais, pois se considerarmos a referência de 5 Volts estamos tratando de um step de 5 milivolts, o que já implica em usar técnicas profissionais contra ruidos em tudo que é lugar, tanto no Layout da PCB como na fiação e blindagem. 

Em mnhas montagens caseiras eu convivo com ruídos induzidos de no mínimo 15 a 20 milivolts, então nem preciso utilizar os 10bits.

 

- Se precisar de mais resolução, pode utilizar a técnica de oversampling descrita ao final do post acima, mas lembre-se de que ela precisa de algum ruído introduzido artificialmente no sinal original.

 

- É possível amostrar em velocidades maiores, desde que você abra mão de um ou mais bits de resolução.

 

- Quase sempre os ruídos que me atrapalharam tinham como origem a rede elétrica de 60Hz, então sempre utilizei um sistema que fazia 32 amostragens no período equivalente a 60Hz , somava tudo e dividia o resultado por 32, e o resultado sempre foi satisfatório.

 

Se me permite uma sugestão, passe para o Atmega328, que tem muito mais recursos de hardware e o conceito é quase idêntico ao dos Attinys.

 

Paulo

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Acompanhando...

 

Também que se se falar que se o fabricante não coloca informação o suficiente você pode tentar entrar em contato buscando tais informações. 

 

No caso de saber a precisão de um instrumento sempre é necessário se ter uma "régua" ou referência... ou seja, precisa de outro instrumento para ver o que está de errado... um outro sensor ou uma fonte confiável. Na escala dos passos dados acho bem difícil alguém ter isso assim facilmente... se não temos instrumentos para medir capacitores de baixos valores tão perfeitamente imagina um chip ... mas acho que você entendeu o que eu diz dizer com essa última parte ^^ Precisa de um estudo muito maior que maioria não pode fazer, até mesmo o povo que trabalha com isso... acredito eu... no máximo ver o valor da leitura e ver se bate com o resultado final via software*

 

 

Acredito que se um instrumento leu uma coisa errada, um ponto fora da curva, seria o caso de software identificar isso pois o instrumento de medição por si só não vão dizer "ERRO" quando medir algo errado, a não ser que você diga que aquilo está errado... ou seja, usando técnicas para citadas para corrigir e verificar por anormalidades...

 

De resto... se nem com o fabricante... isso dá uma excelente pesquisa científica ^^

 

adicionado 1 minuto depois
40 minutos atrás, aphawk disse:

Se me permite uma sugestão, passe para o Atmega328, que tem muito mais recursos de hardware e o conceito é quase idêntico ao dos Attinys.

única parte que não não concordo e também não discordo ^^ depende do que eu ele quer... para começar tá ótimo...

Link para o comentário
Compartilhar em outros sites

26 minutos atrás, aphawk disse:

Em mnhas montagens caseiras eu convivo com ruídos induzidos de no mínimo 15 a 20 milivolts

 

27 minutos atrás, aphawk disse:

tinham como origem a rede elétrica de 60Hz

Se os 60Hz já zoam a qualidade, como é que se consegue fabricar inversores de motor microprocessados? O di/dt dos IGBTs em inversores de 20Hp ou mais provocam fortíssima indução. Meu centro de estudos está sendo focado em SMPS onde terei 1 ou 2 indutores sendo chaveados, vai ser ambiente poluído. A intenção é fazer uso de chips especializados no comando dos mosfets e de microcontroladores no gerenciamento do comportamento da potencia, o que implicará na leitura do que está acontecendo e na produção dos valores de referência que serão utilizados pelos CIs especializados, se bem que tem aumentado e muito os CIs que fazem esse controle analógico com comunicação I2C para entrada de parâmetros. Ainda sobre a poluição dos sinais, penso se fazer uma caixinha metálica no ambiente do microprocessador não nos daria uma gaiola de faraday. Esse pensamento é inspirado nas caixinhas metálicas que tem nas plaquinhas de celular.

adicionado 14 minutos depois
24 minutos atrás, Bommu Perneta disse:
1 hora atrás, aphawk disse:

Se me permite uma sugestão, passe para o Atmega328, que tem muito mais recursos de hardware e o conceito é quase idêntico ao dos Attinys.

única parte que não não concordo e também não discordo ^^ depende do que eu ele quer... para começar tá ótimo...

Escolhi os menores para estudo em razão de terem menos coisas. Certamente partirei para os de maiores depois de ter domínio, mesmo que parcial, sobre os menores. É apenas como método de estudo.

Link para o comentário
Compartilhar em outros sites

Também depende da sensibilidade não? Se a variação ruido ou seja lá o que for tão forte que ative* e dispare* tua função que você quer ativar ai ou deixe teu microcontrolador instável, sim eu pensaria em blindar as coisas, isolar .... mas no mercado tem uns controladores (mc) colados nos motores ou perto deles sem problema nenhum... colocam até caixa de plástico que é para proteger de outros problemas... No máximo quando se quer isolar se usa um acoplador e olhe lá...

 

Esses componentes também tem aterramento que evitam também problemas de ruído...

 

https://e2e.ti.com/blogs_/b/analogwire/archive/2015/03/18/dont-procrastinate-isolate-the-need-for-a-basic-galvanic-isolator

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

blindar, isolar,flitrar sinais de baixa amplitute e alta impedância é condição sine qua non. O que não é tão óbvio assim são técnicas de layout pra evitar correntes parasitas. Infelizmente indescritíveis com pouca palavras. Ou seja, a qualidade da leitura começa na qualidade do hw

 

Os attiny tem um treco bem legal que já usei que é um amplificador diferencial na entrada analógica . Não sem antes ralar um pouco, com ele - e as técnicas supramencionadas - consegui medir sinal da casa dos microvolts com sucesso total e precisão a contento dum shunt de corrente. Usei o amp 20x dele (tem até de 200x). A princípio usei algo como a técnica que paulão mencionou mas tava dando mó trabalho. Um simples capacitor estabilizou e tirou a média certinho pra mim.

 

Penso que inversores e afins além do mencionado, usam filtros um pouco + complexos por sw pra garantir a qualidade da leitura. Algo como o utilíssimo filtro digital do osciloscópio... digital.

Um dia chegaremos lá...

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Isadora Ferraz disse:

blindar, isolar,flitrar sinais de baixa amplitute e alta impedância é condição sine qua non. O que não é tão óbvio assim são técnicas de layout pra evitar correntes parasitas. Infelizmente indescritíveis com pouca palavras. Ou seja, a qualidade da leitura começa na qualidade do hw

 

Os attiny tem um treco bem legal que já usei que é um amplificador diferencial na entrada analógica . Não sem antes ralar um pouco, com ele - e as técnicas supramencionadas - consegui medir sinal da casa dos microvolts com sucesso total e precisão a contento dum shunt de corrente. Usei o amp 20x dele (tem até de 200x). A princípio usei algo como a técnica que paulão mencionou mas tava dando mó trabalho. Um simples capacitor estabilizou e tirou a média certinho pra mim.

 

Penso que inversores e afins além do mencionado, usam filtros um pouco + complexos por sw pra garantir a qualidade da leitura. Algo como o utilíssimo filtro digital do osciloscópio... digital.

Um dia chegaremos lá...

 

Pois é .... sem garantir que todo o hardware está otimizado para ler sinais com resolução de microvolts, procurar pensar em recursos de software para melhorar a qualidade dos valores obtidos do ADC fica bem sem sentido.

 

Agora, o Atiny4 escolhido nem tem ADC.....  e nem todos os modelos possuem o amplificador de sinais internos, da mesma maneira que só alguns Attinys possuem PWM de alta velocidade.....    

 

Existem alguns Attinys com recursos adequados para trabalhar com chavamentos indutivos, eu me lembro de um App Note da Atmel sobre um carregador inteligente de baterias que tinha quase todo o processo de cálculo dos componentes e temporizações exigidas em um sistema que utiizava chaveamento de alta velocidade de um indutor para controlar a corrente de carga. Se conseguir me lembrar aonde guardei posto ele aqui.

 

Paulo

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

5 minutos atrás, aphawk disse:

Agora, o Atiny4 escolhido nem tem ADC.....  e nem todos os modelos possuem o amplificador de sinais internos, da mesma maneira que só alguns Attinys possuem PWM de alta velocidade.....

Atmel ATtiny4 / ATtiny5 / ATtiny9 / ATtiny10 [DATASHEET]

O documento é comum a todos esses modelos. Se, com menos recursos, já são 207 páginas achei melhor estudar os outros depois de entender esses. Lendo o manual, artigos e tópicos, notei um procedimento padrão: além de setar as portas, os acessórios da CPU (ADC, timer, comparador) tb possuem uma rotina de configuração e de utilização dos flags bem semelhantes entre si, o que cria um padrão. Ao se entender e decorar um praticamente já se entendeu a forma de trabalho dos demais, só mudam as peculiaridades do acessório.

5 horas atrás, Isadora Ferraz disse:

Os attiny tem um treco bem legal que já usei que é um amplificador diferencial na entrada analógica . Não sem antes ralar um pouco, com ele - e as técnicas supramencionadas - consegui medir sinal da casa dos microvolts com sucesso total e precisão a contento dum shunt de corrente. Usei o amp 20x dele (tem até de 200x). A princípio usei algo como a técnica que paulão mencionou mas tava dando mó trabalho. Um simples capacitor estabilizou e tirou a média certinho pra mim.

Isso me interessou, e como! Mas creio que houve uma distração quando digitou o texto. Não teriam sido milivolts? Microvolt é osso em qualquer condição. De qualquer forma, ter sensibilidade para milivolts já me dará uma boa sensação de ter o controle na mão.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Bem... ainda prefiro pensar que eram uV mesmo> De fato tens razão parcial. Como usei só o 20x pode ter sido boas dezenas ou algumas centenas de uV ok?. Como há o 200x, ops ... nem sei de onde tirei isso sorry acho que só vi menção dum avr com este valor... de fato 32x pro attiny261 , pelo menos em teoria consegue-se medir ~33uV por unidade de ad usando a referência 1,1V interna do mc. Ops II... nem sei direito de onde tirei os 33uV. Acho que foi tipo assim 10bits de 1.1V= /1024 .../32 = ~33u... Tá certo Arnaldo?

Neste uMundo todo cuidado é pouco. Ruído pra tudo que é lado...literalmente. Já pensando nisso, "os cara" deixaram até pinos especiais AVCC e AGND só pro setor analógico. A partir daí é por conta de alguns anos de calo, insights, técnica, arte e magia e ... alguma consultoria gratuita de membros com boa vontade...

 

abç

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Isadora Ferraz disse:

Ops II... nem sei direito de onde tirei os 33uV. Acho que foi tipo assim 10bits de 1.1V= /1024 .../32 = ~33u... Tá certo Arnaldo?

A regra é clara!!!

Os resultados desse tópico estão saindo bem melhor do que a encomenda. Estava lendo sobre oversampling quando veio esse último post.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Ainda estou ralando nos estudos de microcontrolador (sou novato nisso). Olhando para MCU de outros fabricantes, encontrei isso no datasheet EFM8BB1 (Silicon Labs). Esse tipo de informação nos dá a segurança necessária do que se pode esperar em termos de precisão. Não cobro a perfeição, sei que isso não existe, apenas as informações de performance  para que o projetista possa fazer a seleção criteriosa.

Sem título.png

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!