Estabilizar leitura de ADC - Programação de microcontroladores - Clube do Hardware
Estabilizar leitura de ADC
Por LEOPUENA, 27 de março de 2013 em Programação de microcontroladores
Estou com esse problema já há muito tempo, e até agora não consigo resolver. Quando faço uso dos ADC do PIC tenho sempre problemas de estabilidade. Por exemplo ao fazer um termometro a temperatura fica a variar + ou - 5º, o que é muito!! O caso mais recente é o de um amperimetro usando o ACS712, tentei varias formas mas não consegui fixar a corrente num unico valor.
No proteus tudo funciona perfeitamente, tudo começa quando passo pra proto. Creio que não seja erro no programa, até porque alguns deles foram sugeridos aqui mesmo no CDH.
????? Alguem tem alguma sugestão ?????
Obs: Todos esses circuitos foram feitos usando o CCS, com varios PICs diferentes (16F e 18F)
vtrx 678
Poste o trecho do código que faz a leitura.
Coloque um capacitor de 10uF eletrolitico entre os pinos vout e vss do lm35
O problema acontece em varios casos. o codigo abaixo é a função de leitura de um amperimetro usando o APC712.
float sinal,sinal2,OFFSET=1.71;
sinal = read_adc();
sinal2 = (sinal*5.0)/1023;
return ((sinal2-OFFSET)*8);
Faça a leitura pela média:
float Media,sinal,sinal2,OFFSET=1.71;
Media = Media + read_adc();
sinal = (media / 38);
Editado 28 de março de 2013 por vtrx
Ok resolveu o problema.
O amperimetro estava com uma variação acima 1A. Usando essa técnica a variação passou pra + ou - 0.03A. Sendo a leitura maxima = 30A essa variação por agora é aceitavel.
De momento não tenho como testar o termómetro. Assim que tiver o LM35 vou testar com essa técnica, e levando em conta a dica do neto_e_khelen que tambem ja vi em alguns topicos.
Valeu pela ajuda vtrx.
Mas antes de fechar..... há alguma forma de resolver o problema da leitura por hardware???
generoso0 0
E ae Leo.. estou fazendo um circuito para leitura de corrente também utilizando o acs712 30...você poderia passar o seu circuito no proteus e algumas dicas para eu ter uma precisao..
Mesmo fazendo as médias, se existir algum mínimo ruído, será capturado pelo conversor, e fará que existam sempre pequenas leituras estranhas.
Sempre tem de caprichar no aterramento da parte analógica do microcontrolador, evitando loops de correntes nele, e se possível, ligar o terra e o sinal dos sensores o mais próximo possível do microcontrolador.
Isto exige um lay-out cuidado e separação dos terras analógicos e digitais dos microcontroladores.
Por exemplo, usando conversão normal de 10 bits, com 5v máximo, temos menos de 5 milivolts de resolução, e se realmente quisermos obter uma leitura muito estável, temos de garantir que o ruído sobreposto ao sinal do sensor seja inferior a 5 milivolts, o que é bem difícil de se fazer, pois exige técnicas de blindagem e aterramento muito eficientes. Caso isso não seja possível, diminua os bits válidos para 9 ou até mesmo 8 bits, ajuda muito em diminuir a sensibilidade aos ruídos, porém implicando em uma menor resolução.
Não percebi esse aterramento da parte analogica. O microcontrolador tem apenas um terminal GND, certo? Como seria essa separação da parte analogica da digital?
Um microcontrolador bem projetado tem o cuidado de ter bem separados os sitemas internos digitais e os sistemas internos analógicos.
Vela o exemplo de um simples ATMEGA8, ele possui do lado esquerdo as alimentações e terra do sistema digital, e no lado direito estão a alimentação e terra da parte responsável por informações analógicas !
Veja : +V DIGITAL = PINO 7 TERRA DIGITAL = PINO 8
+V ANALÓGICO = PINO 20 TERRA ANALÓGICO = PINO 22
Essa separação dos lados é feita justamente para poder facilitar o lay-out, e separar as trilhas de alimentação e terra justamente para que qualquer variação de corrente na parte digital, como um LED aceso por uma porta de i/O, NÃO INFLUA no sistema de referência de terra E de alimentação dos sistemas analógicos, como os conversores A/D e os comparadores analógicos.
Cada família de microcontrolador tem dicas de design específicas para ter mais imunidade a ruídos , na dúvida procure pelos design notes no site do fabricante.
Nos microcontroladores, PIC, que uso não têm esse pino AVcc. Será que os pinos de tensão de referência (com as configurações necessárias) podem ser usados com o mesmo efeito?
Se não me engano, voce pode usar também os pinos 4 e 5 para essa finalidade, o pino 4 vai ao terra "analógico" , e o pino 5 ao +V "analógico".
Mas repare que o mesmo princípio do ATMEGA está aí , lado esquerdo do PIC sinal digital e lado direito sinal digital E é a mesma técnica que expliquei no post acima, ok ?
Editado 3 de agosto de 2013 por aphawk
Os pinos 4 e 5 são os pinos da tensão de referência. Notei agora que em outros PICs menores só vem a a tensão de referencia positiva, e fica sempre no lado oposto ao Vcc. Interessante
Nesse caso uso duas fontes para alimentar o circuito?
Legal de você reparar, sempre temos de pensar que um CI sempre tem motivos para ser como é..... Alguns possuem dois pios de terra, dois de vcc, quando na verdade não custaria nada interligar esses pinos DENTRO do CI.
O pessoal de Engenharia faz o trabalho direito ao criar um novo CI, se usamos como eles projetaram, é uma coisa totalmente diferente !
Não precisa usar duas fontes, o que pode ser feito è a partir da tensão normal da fonte, isto é, aquela que normalmente ligamos em todos os CI's, Leds, etc, colocamos uma baita filtragem, com indutores, capacitores de filtro e até um pequeno resistor, e assim esta tensão se torna bem independente de pequenas variações na tensão normal.
Quando projetamos o PCB, criamos dois "terras" , claro que ambos são conectados juntos no ponto de menor impedância ( por exemplo, saem diretamente do pino GND do regulador de tensão ), assim usamos o terra analógico apenas nas referências da parte de conversão analógica, e o outro terra vai ao resto de todo o circuito.
A tensão de alimentação extremamente bem filtrada vai apenas alimentar a parte analógica dos conversores a/d , assim a conversão será bem estável.
E o layout tem de levar o sinal dos sensores até a entrada do conversor a/d com aterramentos e blindagens, planos de terra, etc, assim garantimos o menor ruído nas medidas que faremos.
recomendo usar as tensões de referencia
se não usar os pinos de tensão de referencia, a referencia fica sendo a tensão da alimentação, o que não da boa estabilidades de pendendo da nossa fonte, e isso que causa oscilação nas leituras. Exemplo, você usa o lm35 e faz a regra de 3 com uma tensão de referencia de 5V mas ai conforme oscila sua tensão, a grandes distorções nos valores, pois a tensão de referencia foi perdida
sempre uso so pinos de tensão de referencia, e nunca tive grandes distorções nas leituras, na referencia negativa uso o proprio gnd e na positiva uso uma tensão de referencia coletada de um diodo zener
Para um CAD com 8 bits, a tensão de referência tem que ter a precisão de 1/2 bit menos significativo.
Para uma tensão de referência de 5V, o valor deve estar entre
4,99V e 5,01V. Nem zener tem precisão e a variação com a temperatura não é pequena.
Use o TL431, que tem precisão e é estável.
Se você montou seu circuito em protoboard (matriz de contatos), também não é legal.
Se o seu CAD for de 10 bits, então:
4,9976V <= Vref <= 5,0024
Realmente na engenharia nada é por acaso. Nunca havia reparado esses detalhes. Vou fazer os testes usando a tensão de referência e ver como fica o desempenho. O problema é que estou a testar na breadboard e sei que isso prejudica mais ainda.
Valeu pelas dicas MOR, difícil será encontrar esse regulador.
difícil será encontrar esse regulador
Não sei em Angola,mas aqui no Brasil,se acha em qualquer esquina.
É muito utilizado em fontes de tvs.
O mercado aqui é dominado por amplificadores de audio (parece que todo mundo gosta de ouvir musica alta....). Mas vou procurar nos radio-técnicos.