Bom dia a todos, estou fazendo um projeto para monitorar a pressão de um transdutor de pressão com saída de 0.5 a 4.5V que vai medir a faixa de acionamento de um vacuostato, alem disso tambem estou realizando a medição da resistência interna dos contatos do vacuostato.

O projeto já está funcionando faltando apenas alguns ajustes, porem um dos pontos que me preocupa é a precisão das medições. Vi em alguns sites que se diminuir a taxa de amostragem do ADS1115 ele faz medições mais precisas, mas não consigo achar informações de como alterar essa taxa.

Abaixo está o código e o link da biblioteca que estou usando:

ADS1115.ino

https://github.com/adafruit/Adafruit_ADS1X15

Exibições: 697

Responder esta

Respostas a este tópico

olá novamente, J. Leonardo.

      Há algumas observações significativas sobre sua questão.

      Mas antes de falar sobre estas observações, vamos à sua questão principal: alterar a Taxa de Amostragem do ADS1115.

      A LIB da Adafruit  tem uma função (ou "método", se preferir),  que permite vc alterar a Taxa de Amostragem, e ela se chama "setDataRate".

      Vc pode chamar esta função no "setup" do Arduino.  Mas vc pode também chamar antes de qualquer leitura do Conversor, pois isto fará com que seja usada a nova taxa especificada.

      Há 8 Taxas de Amostragem disponíveis (e não há como vc usar outras taxas além dessas 8), e elas são:   8, 16, 32, 64, 128, 250, 475, e 860 samples por segundo.

      Para facilitar a seleção dessas taxas, a LIB da Adafruit definiu nomes que vc pode usar. Estes nomes estão definidos no arquivo "Adafruit_ADS1X15.h", e são mostradas na figura a seguir onde marquei os mesmos em azul:

(clique na figura para "zoom")

      Assim se quiser por exemplo usar a Taxa de 64 samples por segundo,  no seu caso como vc instanciou o objeto "ads",  basta que vc especifique dessa forma:

               ads.setDataRate( RATE_ADS1115_64SPS );

      Note que se vc não especificar uma Taxa de Amostragem, a LIB usará a taxa default de 128 samples por segundo (ou seja, o valor "RATE_ADS1115_128SPS", correspondente a 128 Hz).

      Importante:  não adianta chamar o "setDataRate" passando como argumento um valor numérico igual à própria Taxa de Amostragem,  pois existe uma codificação binária (um índice) na definição dos nomes no arquivo "Adafruit_ADS1X15.h", e esta codificação é que de fato é usada na função (o que por sua vez está atrelado a um Registro de Controle  interno do ADS1115).  Isto é feito assim justamente devido ao fato de existirem apenas 8 Taxas possíveis.

      Agora seguem algumas observações importantes sobre sua questão:

      1)  uma melhor precisão não está presa a uma menor Taxa de Amostragem.  Há diversos parâmetros que definem a precisão. Veja que o ADS1115 é um Conversor Sigma-Delta, e por isso normalmente já tem ótima precisão, que no caso usa 16 bits. Além disso, a maior taxa possível com o ADS1115, é de 860 Hz,  ou seja, muito baixa para os padrões dos Conversores A/D tradicionais. Então como seria de se esperar,  o ADS1115 é excelente para o que ele se propõe a fazer:  converter sinais analógicos de baixa frequência.

          Note que vc deve garantir que no seu sinal analógico sendo convertido,  não existam componentes de frequência acima da metade da Taxa de Amostragem, senão existirão ruídos inerentes à sub-amostragem, e depois da Conversão A/D  não será mais possível  eliminar estes ruídos de forma alguma (nem o mais fantástico DSP  conseguiria fazê-lo, sob pena de eliminar também partes do sinal real).  Assim, se por exemplo vc está usando uma Taxa de Amostragem de 128 Hz,  garanta que não exista no sinal sendo amostrado, frequências acima de 64 Hz.  Para garantir isto, use um Filtro Anti-Aliasing (normalmente um FPB).

          Na verdade, o ADS1115  por ser um Sigma-Delta, já tem alguma rejeição à frequências mais altas, mas não use isto como pretexto para não usar um Anti-Aliasing, se realmente vc quer um bom resultado.

      2)  Há uma tolerância  especificada para a Frequência de Amostragem, e os limites dela são de 10%  para cima ou para baixo, conforme vc pode ver onde marquei em amarelo na figura a seguir:

(clique na figura para "zoom")

      Isso significa que a Frequência de Amostragem pode não ser exatamente a esperada. Mas como isto varia???  Veja isto na figura a seguir, onde marquei em azul e amarelo:

(clique na figura para "zoom")

      Como se pode ver no gráfico na figura anterior,  a variação é pequena, e portanto a princípio isto não seria um motivo de preocupação. Mas é importante saber que ela existe, e qual sua faixa de variação (e saber que é dependente da alimentação e da temperatura ambiente).

      3)  finalmente, sobre a questão de aumentar a precisão com a redução da Taxa de Amostragem, de fato isto poderia ser efetivo caso existissem elementos no seu Hardware  que não estivessem adequadamente dimensionados.  Veja: se a alimentação  dos Circuitos Analógicos do seu Sistema possui algum ripple significativo (em relação à faixa de sinal convertido e ao step de 16 bits do A/D),  então este mesmo ripple  poderá contaminar o sinal analógico sendo convertido, e neste caso, reduzindo a Taxa de Amostragem iria naturalmente reduzir o efeito daquele ripple.  Mas neste caso,  talvez fosse mais sensato considerar melhorar a alimentação dos Circuitos Analógicos, pois seria uma ação mais efetiva.  Claro,  um Filtro Anti-Aliasing  poderia também eliminar o ripple, dependendo da faixa de frequência do sinal sendo convertido (e da frequência do próprio ripple).

      Espero ter ajudado.

      Fique à vontade para perguntar caso tenha alguma dúvida.

      abrçs,

      Elcids

Olá Elcids,

Como vai ?

Referente ao meu problema de como mudar a taxa de amostragem já está resolvido, acredito que entendi tudo que explicou sobre a biblioteca e consegui alterar meu programa.

1) Acredito que não me atentei muito a taxa de amostragem do sensor, vou pesquisar um pouco mais sobre ela, mas acredito que o sensor realize 5 medições por segundo.

Estou usando para alimentar o circuito uma fonte de 12V.

Vou implementar o filtro anti-aliasing que você sugereriu.

Irei atualizar o projeto e se tiver alguma mudança eu posto aqui no forum.

E novamente obrigado pela resposta bem explicativa.

Olá novamente Elcids,

Estou montando o prototipo do projeto que apresentei anteriormente e me deparei com alguns problemas que me deixaram na duvida.

Umas das funções do meu projeto é medir a resistencia dos contatos de um vacuostato, porem os valores de leitura do multimetro de bancada e do meu projeto estão divergentes, abaixo está a equação que estou usando para calcular a resistencia:

Realizei um teste ultilizando 2 resistores, um de 1 ohm e outro de 10 ohms, abaixo está o resultado:

Multimetro de bancada:

Resistor de 1 Ohm ------- Valor obtido: 1.32 Ohm

Resistor de 10 Ohms ---- Valor obtido: 10.12 Ohm

Projeto com o ADS1115:

Resistor de 1 Ohm ------- Valor obtido: 1.44 Ohm

Resistor de 10 Ohms ---- Valor obtido: 11.18 Ohm

Como pode ver da uma certa diferença no valor obtido.

Já tentei algumas coisas mas não obtive sucesso 

Gostaria de saber o que está errado ou o que posso fazer pra "calibrar" o projeto?

Abrçs,

J. Leonardo

Eu tenho mais um duvida que acredito até que possa ser algo simples.

No meu projeto eu lendo 3 tensões diferentes, sendo elas:

Vout - referente ao divisor de tensão usado para o ohmimetro

Vin - referente ao divisor de tensão usado para o ohmimetro

Vsensor tensão do sensor de pressão

O que está acontecendo é que quando eu insiro alguma resistencia no ohmimetro seja ela qual for, a tensao "Vsensor" varia mudando assim meu calculo de pressão.

Já realizei a medição do sistema com um multimetro de bancada e ela não está variando, varia apenas na leitura do ADS1115.

Pra confirmar realizei um teste apenas com o ADS1115 da seguinte forma:

Liguei apenas o sensor com o arduino e realizei algumas leituras com cada pino separadamente e o resultado foi o seguinte:

(Pinos 0 a 3 ligados no 3.3V do arduino)

(Pinos 0 a 2 ligados do 3.3V do arduino e pino 3 ligado no 5V do arduino)

Como podemos ver a tensão de todos os pinos varia quando realizo a leitura do 5V do arduino, poderia me dizer por que isso ocorre e como posso resolver?

Obrigado.

olá J. Leonardo.

      Sim, eu posso dizer por que isso ocorre, e como vc pode resolver.

      Mas antes gostaria de fazer alguns comentários sobre seu Sistema, e também fazer alguns questionamentos.

      E finalmente analisei o código que vc postou aqui (o "ADS1115.ino"), e encontrei diversos problemas nele.

      Seguem considerações e questionamentos:

      1)  no código não há  uma Taxa de Amostragem  funcional. Ou seja:  vc não está fazendo as Amostragens como deveria para se obter a melhor qualidade do sinal sendo aquisitado (na realidade, lamento em dizer que a forma que vc está fazendo a amostragem naquele código, está completamente incorreta).

      Obs.:  não adianta vc simplesmente acrescentar no seu código o comando que eu informei (o "setDataRate"),  porque sem entender os detalhes de como a amostragem funciona no ADS1115,  não é possível obter um resultado consistente.

      Para se conseguir um resultado realmente efetivo, vc deve programar a Taxa de Amostragem no ADS1115, e então escolher a forma como vc usará isto.  Para o seu caso, que está medindo sinais de frequência muito baixa, eu acredito que a melhor opção é usar a técnica descrita na figura a seguir, no texto que marquei em azul:

(clique na figura para "zoom")

      Se vc não souber como fazer esta implementação, me avise que mostrarei como.

      2)  no seu código, quando um LED indicador de Tolerância  é ligado, ele não mais é desligado em nenhum momento.  Por que esse comportamento?

           Por acaso,  vc sempre Reseta o Arduino após um teste de tolerância, para poder iniciar o próximo teste?

      3)  no código, há diversas Bibliotecas que não estão sendo usadas. Vc realmente vai usá-las em algum momento?

      4)  há diversos problemas de organização funcional no seu código. Algumas funções estão misturadas, e algumas tem nomes que não refletem o que realmente está sendo feito naquelas funções. Isto não é bom, principalmente se vc pretende ir evoluindo e atualizando este código.

      5)  um ESP32  está na imagem que vc postou das conexões no Hardware. Mas afinal, qual Placa de Arduino  vc está realmente usando no Hardware?

      Dica:  toda vez que vc postar questões no LDG,  certifique-se de que vc disse claramente qual placa Arduino vc está usando.

      Se vc esclarecer as questões que coloquei,  eu posso alterar o seu código postado (ou outro que vc designar), de forma que realmente funcione a Amostragem,  obtendo os melhores resultados possíveis, e também organizar e comentar o código de forma que ele realmente seja manuseável e faça sentido.

      Agora falando sobre seu último teste.

      O problema ali é que suas conversões estão sofrendo do efeito da "Injeção de Carga" nos circuitos internos do ADS1115,  e esse efeito ocorre quando vc troca o canal no Multiplexador interno do Conversor (o ADS1115).  Veja: a "Injeção de Carga"  sempre existe  em todos os Conversores A/D  que tem um Multiplexador para seleção do canal a ser convertido.  Mas a questão é:  quanto desse efeito chegará até vc?  Ou seja:  é preciso usar a técnica correta para minimizar aquele efeito nocivo.

      Veja: por motivos um tanto óbvios,  os Fabricantes de Chips  odeiam falar nesse assunto: "Injeção de Carga"  (a maioria nem toca no assunto). Então vc jamais pode esquecer disso e de usar o tratamento adequado para minimizar o efeito.

      Vc não informou quais são as Impedâncias de Saída  dos seus Sensores (seja o "Vacuostato", seja o próprio divisor de tensão  pois vc não informou exatamente quais são os Resistores ali usados - e é possível que vc esteja usando valores inadequados).  Veja:  conhecer a faixa de valor dessas Impedâncias, é crucial para se obter bons resultados na Amostragem.

      Mas mesmo sem ter informação dessas Impedâncias,  irei postar uma adequação para seu sinal.  Esta adequação é mostrada na figura a seguir:

(clique na figura para "zoom")

      A figura é clara sobre como usar a adequação.  Simplesmente seu sinal deve ser conectado ao circuito mostrado, e então a saída deste circuito vai à entrada do ADS1115.  Eu calculei os valores dos componentes, baseado no fato de que vc está aquisitando sinais de baixa frequência (Pressão e derivados). Importante:  no circuito, C1 deve ser obrigatoriamente do tipo Cerâmico  (não serve  o tipo Poliéster Metalizado !!!).

      Note:  a figura mostra o circuito para uma entrada do ADS1115.  Se vc usar outras entradas, replique o mesmo circuito para cada uma dessas entradas.  Se a frequência dos demais sinais for outra completamente diferente,  então o circuito deve ser recalculado (ou até modificado).

      Para um teste semelhante ao que vc descreveu no seu último post,  aplique o circuito a  apenas uma das entradas  do ADS1115, e então aplique a tensão de 3.3V à entrada deste circuito. Também aplique 3.3V diretamente a outras duas entradas do ADS1115.  Na quarta entrada aplique diretamente 5V.  Então simplesmente rode seu código para poder ver os valores convertidos.

      Muito Importante:  neste teste, a tensão de alimentação do ADS1115 deve ser  de 5V.  Também garanta que o seu código esteja selecionando Ganho igual a 1 para o ADS1115  (pois se o ganho for maior que "1", ocorrerá saturação no sinal dentro do ADS, comprometendo o teste e resultados).

      Fico no aguardo, para poder contribuir na evolução do seu Sistema.

      Abrçs,

      Elcids

esqueci de dizer:

      no circuito de adequação que postei, caso vc resolva fazer experiênciasnão aumente  o valor do Capacitor Eletrolítico C2  para além de 10 uF (no circuito que postei, o valor é de 1uF),  senão vc poderá ter surpresas desagradáveis.  O motivo disso explico depois.

Bom dia Elcids,

1) Pelo que eu entendi o ADS1115 vai estar realizando 860 medições por segundo, ou seja, ele irá realizar 1 medição a cada 1,2 ms. Então quando definir que ele deve fazer 8 medições por segundo o que leva 125 ms o ADS1115 realizará a medição em 1,2ms e passará o restante do tempo desligado.

 

Então no caso eu deveria programar esse desligamento dele certo ? isso não é feito quando chamo a função “SetDataRate” ? o que essa função faz especificamente ?

2) Sim após o teste eu faço o reset e faço uma nova medição.

3) Anteriormente eu havia tido um problema com a biblioteca pois não estava compilando o codigo, então dei uma pesquisada e vi em um forum que era necessario outras bibliotecas para eliminar aquele erro e foi assim que surgiram todas essas bibliotecas. Mas não estou ultizando elas e ja as removi do meu programa, abaixo está ele um pouco mais organizado e semas bibliotecas em questão.

Atualizado.ino

4) Tentei dar uma melhorada no codigo pra deixar mais claro o que está sendo feito, como eu disse estou realizando a medição da resistencia de um vacuostato e ao mesmo tempo verificando a pressão de descida e subida do mesmo. Estou vendo se os contatos estão fechados ou abertos pelo valor da resistencia obtida. 

5) Estou ultilizando um Arduino Uno, Apenas coloquei o Esp32 no esquema por que era o microcontrolador que estava ultilizando antes, mas ele acabou queimando.

Referente ao experimento que você propos irei realizar assim que tiver os componentes necessarios e assim que testar eu trago aqui o resultado.

Acabei resolvendo o problema que estava tendo, o que estava acontecendo é que eu estava alimentando o ADS1115 com 3.3V e não com 5V.

Obrigado pela explicação e aguardo seu retorno.

Fiz esse desenho apenas para ilustrar o que estava entendendo, mas não sei se minha linha de raciocinio está correta, aguardo sua resposta para confirmar.

olá J. Leonardo.

      Vamos a cada um dos pontos:

      1)  o tal "desligamento", é automático, se o modo "single-shot" estiver programado no ADS1115.  Mas vc não precisa se preocupar com isso,  pois a Biblioteca  que vc está usando sempre seleciona o modo "single-shot".  Neste modo, não é o ADS1115 que determina a "real" Taxa de Amostragem,  mas sim vc mesmo.  Ou seja, quando vc requisita uma conversão, o ADS1115 inicia esta conversão imediatamente e após terminar a mesma ele apenas fica aguardando (ou seja, ele faz apenas aquela conversão que vc requisitou). Assim as conversões ocorrerão na Taxa que vc as requisitar.

           Mas é importante entender uma coisa:  o tempo que o ADS1115 leva para completar uma conversão solicitada,  depende da Taxa de Amostragem  que vc programou nele.  Assim se por exemplo vc programou 860 Samples/seg,  então o ADS levará cerca de 1.2 ms pra fazer a conversão completa.  Por que isso é importante?  porque quando vc requisita uma conversão e em seguida lê o valor convertido via função "readADC_SingleEnded",  esta função só retorna quando o ADS tiver concluído a conversão solicitada.  Então se por exemplo vc programou no ADS1115 uma taxa de 8 Samples/seg (via função "setDataRate" com o valor "RATE_ADS1115_8SPS"),  o ADS levará 125 ms (1/8 de segundo) para concluir uma conversão solicitada.  Assim, vc fica "preso" a essa temporização, e o efeito disso é como se seu código executasse mais lentamente,  pois nenhuma outra coisa será executada até que o ADS tenha "liberado" a conversão.

         Logo, no modo "single-shot",  é interessante programar a taxa de 860 Samples/seg,  pois o ADS levará apenas 1.2 ms pra converter e também já irá liberar seu código pra ler o resultado e executar outras coisas.

         Mas há uma outra implicação muito importante caso vc use Taxas muito baixas, pois como o ADS1115 não possui "Sample & Hold"  interno (não confundir com os "Capacitores chaveados" dentro do ADS1115), há a possibilidade de que ocorra um problema.  Suponha que vc programe no ADS1115 uma taxa muito baixa, por exemplo de 8 Samples/seg,  e que vc esteja usando mais de um canal no ADS, e que os sinais aplicados nestes canais tenham relação entre si.  Agora suponha que vc vá fazer a conversão de dois canais relacionados entre si.  Então vc faz a conversão do primeiro canal e em seguida faz a conversão do segundo canal. Com os dois valores convertidos, vc pode fazer os cálculos que relacionam os dois canais.  Mas aí poderá ocorrer um problema:  quando vc concluiu a conversão e leu o resultado do primeiro canal, como a conversão é bem lenta (125ms),  o segundo canal já poderá ter mudado de valor,  e assim quando vc fizer a conversão deste segundo canal, o valor resultante já não corresponderá ao valor relacionado ao primeiro canal no momento da conversão do mesmo.  Ou seja, vc acaba introduzindo um "deslocamento de fase artificial",  e provavelmente seus cálculos resultarão em algo que vc não espera como correto.  Assim, usar Taxas mais altas para o ADS1115, evita esse problema.

         Outro problema com Taxas muito baixas no ADS1115, é que durante a lenta conversão (exemplo 125ms @ 8 Samples/seg),  o próprio sinal sendo atualmente convertido pode mudar,  e aí a conversão deste sinal ficará comprometida.

         Sobre o modo de operação  do ADS1115,  vc pode conferir a descrição completa no item "9.4" na página 21  do Datasheet,  aqui neste Link:  "ADS1115 - datasheet.pdf"

      2)  Ok. Ficou claro.

      3)  não é preciso incluir a Biblioteca "wire.h",  pois a LIB do ADS1115 já faz isso (a LIB do Display LCD também já faz isso).

      4)  seu código "novo" ainda tem os mesmos problemas que descrevi.  Mas a partir dele, eu fiz uma adequação a fim de "corrigir" estes problemas.  Eu postarei o código aqui, logo depois que vc esclarecer algumas dúvidas de Hardware  relativas aos sinais que vc está medindo (pois assim posso ajustar qualquer ponto relacionado).

      5)  ok, eu imaginava mesmo que era o UNO que vc estava usando. Mas aí, vc está "comendo bola" em um aspecto que não mencionarei neste momento (porque vc já está com todo seu setup de Hardware montado).

      Sobre vc ter alimentado com 3.3V e essa ter sido a causa do problema,  note que no final do meu post anterior eu adverti pra garantir que o ADS estivesse alimentado com 5V, devido às faixas de sinal que vc está convertendo (atenção também à questão do Ganho, pra evitar saturação de sinal na saída do PGA interno ao ADS1115).  Dê uma olhada no item "9.3" na página 15 do Datasheet, e atente à descrição no texto e à figura 25, e então vc vai entender exatamente o que ocorreu.  Mas eu não considerei que no seu teste vc tivesse alimentado com 3.3V,  pois realmente achei que seu circuito estava alimentado corretamente (embora eu sempre faça a advertência como de rotina).  Mas nunca ignore a questão da "Injeção de Carga", pois como eu disse antes, ela sempre ocorre.

      Uma dica:  lembra-se sobre não aumentar demais o valor do Capacitor Eletrolítico C2 no circuito que postei ?  Então, isto também tem a ver com aqueles Diodos  que vc vê na figura 25  do Datasheet.  Dê uma analisada e veja se vc descobre o motivo (não é algo muito evidente).

      Mas eu tenho uma desconfiança que vc pode estar usando um setup de Hardware inadequado para medir os sinais, especificamente em relação à medição da Resistência.  Para que eu possa verificar isso,  por favor, post aqui um desenho ou diagrama mostrando os detalhes de como vc está ligando os sinais a serem convertidos pelo ADS1115.  Mas faça isso de forma clara, que não deixe dúvidas de como estão as ligações elétricas.

      Assim que vc postar essa informação da ligação detalhada dos sinais,  eu postarei o código onde fiz a adequação conforme mencionei neste post.

      Fico no aguardo.

      Abrçs,

      Elcids

Olá Elcids,

Desculpe pela demora!

Acho que essa parte da taxa de amostragem ficou bem clara, então o ADS1115 só irá realizar uma amostra quando eu solicitar  e ela faz isso através da função “readADC_SingleEnded ” e a função “setDataRate” define apenas o tempo que vai demorar pro ADS1115 realizar a leitura certo ?



3) OK

4) Abaixo está o circuito que estou usando, estou alimentando o sensor e o arduino com uma fonte de 12V.

5) Sim tenho um protótipo faltando apenas acrescentar o Filtro que você mencionou anteriormente e os LED’s de sinalização.

Tentei pesquisar pra ver se conseguia identificar o problema de aumentar demais o valor do Capacitor Eletrolítico C2 no circuito que você postou e cheguei em alguns estudos sobre Capacitância de Junção e difusão seria esse o problema ?

Agradeço a explicação e aguardo seu retorno.

exato Leonardo.

      Essa Biblioteca que vc está usando para o ADS1115,  já seleciona automaticamente o modo "single-shot" para o ADS.  Logo, quando vc requisita uma conversão via função "readADC_SingleEnded",  o ADS1115 faz a conversão e então fica quietinho.  Ele fará a próxima conversão apenas quando  vc solicitar novamente (através da mesma função "readADC_SingleEnded").  E o tempo que o ADS1115 leva para fazer uma conversão solicitada é exatamente o inverso da Taxa de Amostragem que vc selecionar via "setDataRate".

      Sobre o item "4)",  ficou claro o seu circuito.  Então eu equacionei o divisor de tensão  no sentido de calcular R2 (Resistência do Vacuostato),  e vi que está correto o cálculo do mesmo no seu código. Apenas precisa melhorar a "formatação" e organização do seu código (como já mencionei antes).

           Num post seguinte,  também colocarei um questionamento sobre os dados do Sensor de Pressão, e sobre como vc está usando estes dados (no seu código está bem confuso,  e  talvez  incorreto).

      Sobre a questão de não aumentar demais o valor do Capacitor C2 no circuito que postei anteriormente, vamos ao motivo.

      Vc deve se recordar que me referi ao datasheet  do ADS1115,   especificamente  o item "9.3" na página 15,  o qual estou reproduzindo na figura a seguir:

(clique na figura para "zoom")

      Conforme vc pode ver na figura 25  naquela página do datasheet,  as entradas analógicas do ADS1115  tem Diodos internos de Proteção.  Cada entrada tem um par de Diodos. Note que quando o ADS está alimentado,  todos estes Diodos estão cortados ("OFF"), pois a tensão na entrada analógica sempre deverá ser maior ou igual a zero volts (o "GND") e menor ou igual a VDD (a tensão de alimentação do ADS).  Ou seja: sempre que a entrada analógica estiver dentro da faixa esperada de tensão, os Diodos estarão OFF, e portanto é como se eles nem estivessem ali no circuito (a não ser pela capacitância "parasita" que eles representam).

      Mas veja na figura a seguir, o que ocorre se vc desliga a alimentação  do ADS1115:

(clique na figura para "zoom")

      Note que simplifiquei o circuito, mostrando apenas uma entrada analógica do ADS1115.  Também é mostrado o circuito em questão, onde o valor do Capacitor C2  pode ser um problema. Vejamos porque.

      Como vc pode ver na figura anterior, não há muito o que dizer.  Quando vc desliga a alimentação (VCC),  cai a tensão no pino VDD do ADS1115.  Estando C2 carregado com uma tensão "X",  o Diodo interno  ao ADS  (ligado entre a entrada analógica e o VDD) passa a conduzir assim que a tensão no VDD fica ligeiramente abaixo da tensão "X", provocando o fluxo da corrente "i" (setas na cor "rosa" na figura), no sentido de descarregar C2 (e também C1).

      Assim, essa corrente circula, entrando no pino analógico e passando pelo Diodo interno de Proteção.  Como há outros circuitos ligados na linha de Alimentação,  estes circuitos representam uma Impedância,  e assim a corrente "i" passa por essa Impedância e alcança o "GND", retornando ao Capacitor C2 pelo seu terminal negativo.

      Claro que C1 também fornece parte dessa corrente, mas essa parcela é pequena se comparada à contribuição de C2.

      E o que isso provoca?  Depende.  Se C2 tiver um valor não muito alto, a dissipação de potência sobre o Diodo interno (e portanto sobre o ADS), poderá ser ignorada.  Mas se C2 tiver um valor muito alto,  então a dissipação de potência sobre o Diodo interno irá aumentar na mesma proporção.  Sob condições de liga/desliga rotineiros,  isso vai "forçando" o "substrato" físico do ADS devido a picos de dissipação de energia na forma de calor, e eventualmente poderá em algum momento danificar o Chip permanentemente (lembre-se que fisicamente o chip é minúsculo).  Sob condições muito severas, com valores altíssimos de C2 (o que muita gente adora fazer),  poderá ocorrer um dano permanente ao ADS num curto espaço de tempo (após alguns poucos ciclos de liga/desliga).

      Nota Importante:  praticamente todos os Chips (99,99% deles), tem esses Diodos internos de Proteção ligados aos pinos,  sejam estes pinos analógicos ou digitais,  e não somente nos pinos de entrada,  mas também nos pinos de saída.  Então muita atenção ao que vc liga ali naqueles pinos,  pra não ter uma surpresa desagradável.  Por exemplo:  pense que vc alimenta um circuito com uma Bateria,  e em determinado momento partes desse circuito são desligadas para economizar a energia da Bateria.  Adivinha o que pode ocorrer se a tensão dessa Bateria está presente em um pino de um C.I. cuja alimentação foi desligada (e mesmo que a tensão chegue ao pino através de um Resistor).  Fácil concluir, né?  Além de dissipar energia no Diodo interno do tal C.I.,  a corrente que fluirá por ele proveniente da Bateria, irá alimentar (ainda que "meia boca") os circuitos desligados, fazendo-os funcionar de forma imprevista, e também consumindo energia da Bateria (quando deveria economizar, já que os circuitos foram desligados com essa intenção).

      Como disse antes,  num post seguinte (pois este ficou muito grande), irei colocar alguns pontos importantes sobre o Sensor de Pressão e sobre como vc está usando os dados relacionados no seu código.

      Abrçs,

      Elcids

Olá Elcids,

Então para que eu faça a leitura de forma certa eu devo então colocar um “delay” para definir quantas medições eu quero que o sensor faça por segundo certo?

Referente ao divisor de tensão,  o único problema que estou encontrando é uma diferença entre o valor lido no multímetro de bancada e o resultado dado pelo arduino ( é uma diferença considerável), tentei usar algumas equações para corrigir isso mas como a diferença não segue uma linearidade não funcionou muito bem. Além disso, a resistência obtida não é instável e fica oscilando um pouco ( geralmente 0.3 Ohms).

O sensor que está no arquivo que eu mandei é um de -1 a 10 bar com o sinal de saída de 0 a 10V. Para calcular a pressão do sensor eu tentei usar a função “Map” do arduino, porem ela so me retornava números inteiros, então usei sua equação que encontrei no fórum do arduino:

Então peguei o valor em tensão que dava no 0 Bar ( 0.871 V)  e o valor que deveria dar em -1 Bar ( 0 V) e joguei na fórmula.

 

O sensor de pressão que planejo usar no projeto final é um diferente do que estou usando para fazer os testes. O que estou usando é mais barato e tem uma precisão menor do que o outro. 

 

Aqui estão algumas informações do sensor que estou usando:

Alimentação: 10 a 30 VDC;

Faixa de medição: -1 a 10 BAR;

Sinal de saída: 0 a 10V;

Impedância de saída: 4,207 KOhms;

Precisão: 1% do fundo de escala.

(Tentei medir a frequência dele com o osciloscópio e o que apareceu foi  “< 100 Hz”).



Agora referente ao experimento que você propôs, ficou bem clara a função dos dois diodos no circuito e o porque não posso utilizar uma capacitância muito alta. Vou me atentar bastante a esses pontos que você citou de agora em diante.

Obrigado e aguardo seu retorno.

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço