Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


Dá para criar uma empresa disso!

 


Já pensou em ter sua própria empresa baseada neste universo de eletrônicos, microcontroladores, com ESPs, Arduinos, IOT? Pois isso é possível e hoje vou te apresentar a possibilidade de criar sondas de tensão usando um módulo baseado no ADS1256 no modo diferencial, combinado com o Arduino UNO (ou qualquer outro micro controlador com SPI). Vamos utilizar um multímetro de bancada para calibração das sondas. Confira!



 

RECURSOS USADOS

  • 1x Arduino UNO.
  • 1x módulo ADC baseado no chip ADS1256.
  • 1x multímetro confiável para calibração e ajuste.
  • 2x potenciômetros multivoltas de 100k e 1k.
  • Protoboard e cabos para conexões.
  • 1x ICL7660
  • 1x Amp Op CA3140
  • 2x capacitores de 10uF
  • 2x capacitores de 100nF
  • 1x fonte de 9V



 

 

FUNCIONAMENTO

O que são as sondas de tensão?

As sondas de tensão são simplesmente voltímetros que mantemos conectados a pontos de interesse em um circuito, para o monitoramento da tensão nestes pontos.

Para todos que já experimentaram softwares de simulação eletrônica, o conceito já deve ser bem familiar, bem como seu poder na hora de permitir a análise dos circuitos.



Por que utilizar sondas?

Não é muito incomum nos encontrarmos em uma situação de desenvolvimento de um circuito em que diversos ponto precisam ter suas tensões monitoradas. Ou até mesmo durante uma manutenção.

Embora seja possível realizar esta tarefa com um ou vários multímetros, a ideia de sondas de tensão é muito mais próximas a metodologia que costumamos aplicar durante a simulação de um circuito em um software simulador.

Trazer essa vantagem para a bancada física de trabalho pode auxiliar no trabalho diário, ocupando pouco espaço e possibilitado a captura de dados diversos do funcionamento de um circuito.

Não é o intuito deste vídeo desenvolver completamente um sistema de sondas de tensão, mas sim, apresentar alguns pontos interessantes para iniciar seu desenvolvimento.

 

 

 

MÓDULO ADS 1256

Vamos utilizar um módulo baseado no chip ADS1256 da Texas Instruments.

Além do ADS1256, este módulo possui ainda um regulador de tensão 1117 de 3.3V e um chip de referência de tensão de precisão, da Analog Devices, o REF03 de 2,5V.




O ADS1256 fornece 8 ADCs Delta/Sigma de 0 a 6V e 24 bits, de ruído extremamente baixo que podem receber sinais no modo single-ended ou diferencial, graças a um multiplexador interno.


Possui ainda integrados:

  • Filtros programáveis que permitem otimizar entre leituras com baixos ruídos e taxas de amostragem de até 30.000 amostras por segundo.
  • Um amplificador de ganho programável (PGA) de 1 a 64 em passos binários.
  • Um manipulador de comunicação SPI tolerante a 5V
  • Um buffer de entrada para incremento da impedância de entrada.
  • Sistema de detecção do sensor.
  • Sistema de correção de offset e ganho para o PGA.



 

 

MONTAGEM

Blocos...

No diagrama de blocos a seguir, podemos identificar as funções mais relevantes do circuito das sondas de tensão.



Blocos – Micro controlador

O micro controlador será responsável pelo controle do ADS1256 e a recepção (através da SPI) e retransmissão (via USB) dos valores medidos para o PC.



Blocos...

No PC os dados poderão ser tratados da forma mais conveniente, desde sua simples apresentação, registro ou mesmo uma análise mais sofisticada.


O ADS será reonsável pela conversão dos dados. Para este exemplo utilizaremos o modo diferencial, combinando as entradas ADC em 4 pares.


O bloco genérico interfaces representa o que for necessário para adequar os sinais de interesse para os níveis adequados de entrada do ADS.


O circuito de interesse vai depender do tipo de aplicação desejada, seja ele um sistema de monitoramento ou um circuito genérico a ser desenvolvido.


 


 

CIRCUITO

Conexão entre Arduino e ADS1256

Inicialmente, vamos conectar o módulo ADS1256 ao Arduino Uno

 

Vamos usar a própria tensão de referência para testar o código e obter as primeiras leituras.

A tabela apresenta os pares de ADCs que serão utilizados como entradas diferenciais.

Vamos usar também o multímetro VC8145 para avaliar a tensão de referência. Ele será nosso instrumento de referência.




 

 

 

BIBLIOTECAS

Para o RFID:

Para controlar o ADS1256 com um arduino UNO, utilizamos a biblioteca ADS1256 que pode ser encontrada no link abaixo:

https://github.com/adienakhmad/ADS1256

 

 

 

CÓDIGO-FONTE

Declarações

/*
  sensor1 = entrada diferencial ligada entre AIN0 - AIN1
  sensor2 = entrada diferencial ligada entre AIN2 - AIN3
  sensor3 = entrada diferencial ligada entre AIN4 - AIN5
  sensor4 = entrada diferencial ligada entre AIN6 - AIN7
*/

#include <ADS1256.h>
#include <SPI.h>

float clockMHZ = 7.68; // frequência do cristal usado no ADS1256
float vRef = 2.5; // tensão de referência
// Iniciando o ADS1256
// Parâmetros: Frequência do cristal, tensão de referência, Controle do reset
//Controle do reset em FALSE significa que estará conectado diretamente ao 3V3
ADS1256 adc(clockMHZ, vRef, false);

//definindo as variáveis que receberão as leituras
float sensor1, sensor2, sensor3, sensor4;

//determina a quantidade de amostras a serem coletadas antes do envio
//caso valores médios sejam interessantes.
const int amostras = 2;
int contador = 0; //Contador de amostras

 

 

Setup

void setup()
{
  Serial.begin(115200); //iniciando a serial para visualização das medidas

  // LISTA DE TAXAS DE CONVERSÃO EM SAMPLES POR SEGUNDO
  // PARA UM CRISTAL DE 7.68MHz
  // ADS1256_DRATE_30000SPS
  // ADS1256_DRATE_15000SPS
  // ADS1256_DRATE_7500SPS
  // ADS1256_DRATE_3750SPS
  // ADS1256_DRATE_2000SPS
  // ADS1256_DRATE_1000SPS
  // ADS1256_DRATE_500SPS
  // ADS1256_DRATE_100SPS
  // ADS1256_DRATE_60SPS
  // ADS1256_DRATE_50SPS
  // ADS1256_DRATE_30SPS
  // ADS1256_DRATE_25SPS
  // ADS1256_DRATE_15SPS
  // ADS1256_DRATE_10SPS
  // ADS1256_DRATE_5SPS
  // ADS1256_DRATE_2_5SPS

  //LISTA DE GANHOS DO AMPLIFICADOR DE GANHO PROGRAMÁVEL (PGA)
  //ADS1256_GAIN_1
  //ADS1256_GAIN_2
  //ADS1256_GAIN_4
  //ADS1256_GAIN_8
  //ADS1256_GAIN_16
  //ADS1256_GAIN_32
  //ADS1256_GAIN_64

  //iniciando a ADC com TAXA DE CONVERSÃO, GANHO DO PGA, CONTROLE DE RESET
  adc.begin(ADS1256_DRATE_1000SPS, ADS1256_GAIN_1, false);

  // Ajusta o multiplexador para usar os canais AIN0 e AIN1 como um par diferencial
  // e inicia a conversão
  adc.setChannel(0, 1);
}

 

 

Loop

void loop()
{

  // aguarda o pino DRDY (DATA READY) mudar para LOW, indicando o fim da conversão
  adc.waitDRDY();
  // Ajusta o multiplexador para usar os canais AIN2 e AIN3 como um par diferencial
  // e inicia a conversão
  adc.setChannel(2, 3);
  //Agora a leitura de AIN0/AIN1 já está disponível e é recebida em DOUT
  sensor1 += adc.readCurrentChannel();


  // aguarda o pino DRDY (DATA READY) mudar para LOW, indicando o fim da conversão
  adc.waitDRDY();
  // Ajusta o multiplexador para usar os canais AIN4 e AIN5 como um par diferencial
  // e inicia a conversão
  adc.setChannel(4, 5);
  //Agora a leitura de AIN2/AIN3 já está disponível e é recebida em DOUT
  sensor2 += adc.readCurrentChannel();

  // aguarda o pino DRDY (DATA READY) mudar para LOW, indicando o fim da conversão
  adc.waitDRDY();
  // Ajusta o multiplexador para usar os canais AIN6 e AIN7 como um par diferencial
  // e inicia a conversão
  adc.setChannel(6, 7);
  //Agora a leitura de AIN4/AIN5 já está disponível e é recebida em DOUT
  sensor3 += adc.readCurrentChannel();

  // aguarda o pino DRDY (DATA READY) mudar para LOW, indicando o fim da conversão
  adc.waitDRDY();
  // Ajusta o multiplexador para usar os canais AIN0 e AIN1 como um par diferencial
  // e inicia a conversão
  adc.setChannel(0, 1);
  //Agora a leitura de AIN6/AIN7 já está disponível e é recebida em DOUT
  sensor4 += adc.readCurrentChannel();

  contador++; //incrementa o contador de amostras

  if (contador > (amostras - 1 )) //depois de coletar todas as amostras
  {
    // envia os resultados médios para a serial
    Serial.print((sensor1 / float(amostras)), 4);
    Serial.print("\t");
    Serial.print((sensor2 / float(amostras)), 4);
    Serial.print("\t");
    Serial.print((sensor3 / float(amostras)), 4);
    Serial.print("\t");
    Serial.println((sensor4 / float(amostras)), 4);

    // Reinicia as variáveis
    contador = 0;

    sensor1 = 0;
    sensor2 = 0;
    sensor3 = 0;
    sensor4 = 0;
  }
}

 

 

OPERAÇÃO

Primeiras leituras

Medimos a tensão diretamente no multímetro VC8145 e obtemos uma tensão na saída de referência de 2,5023V.

Note que os valores recebidos pelo Arduino e enviados pela serial já estão convertidos em tensão elétrica.

Lendo as colunas da esquerda para a direita temos os resultados do sensor1, sensor2 2 assim por diante.



Efeito da impedância da carga

Um cuidado que devemos ter ao realizar medidas com um ADC é levar em consideração a relação entre a  impedância do circuito que estamos lendo e a impedância interna do ADC.

Isso porque,  ao conectarmos o circuito de leitura, termos impedâncias em paralelo. Se o valor da impedância do circuito lido estiver muito próxima da impedância interna do ADC, teremos uma interpretação equivocada da leitura.


Por esse motivo, ao desenvolvermos um instrumento para realizar medições, temos que estar atentos ao quanto este instrumento poderá afetar nossa medida. Vamos observar isso na prática.

Segundo o  fabricante,  para as configurações que estamos usando, devemos ter um impedância de entrada de 150k.



Efeito da impedância da carga

Vamos usar o potenciômetro multivoltas de 1k como um divisor de tensão na fonte de referência de 2,5V.

Usando o VC8145, vamos ajustar o potenciômetro de tal forma que a tensão em seu cursor seja de 1,25V.

E vamos aplicar essa tensão ao sensor1 (o par AIN0 e AIN1)


Usando o VC8145, realizamos as medidas da tensão no cursor do potenciômetro e na referência de tensão e obtemos:

  • Potenciômetro: 1,2500V
  • Referência: 2,5011V

Note que a medida no sensor1 coincide com a obtida no VC8145 enquanto as medidas dos demais sensores estão muito próximas.

Mas há também o fato da tensão de referência ter reduzido seu valor de 2,5023V sem carga para 2,5011V com uma carga de 1k.

Como vimos, o fabricante indica uma variação de 100ppm/mA drenado.

Outra possibilidade seria simplesmente a estabilização do circuito, já que esse valor se manteve até o fim do experimento.


Vamos trocar o potenciômetro de 1k pelo de 100k e observar o que acontece com a medida.


Usando o VC8145, realizamos as medidas da tensão no cursor do potenciômetro e na referência de tensão e obtemos:

  • Potenciômetro: 1,2467V
  • Referência: 2,5011V

Desta vez a tensão não coincide mais e já percebemos uma queda na tensão lida.

Como podemos evitar este efeito?

Introduzindo uma interface entre a medida e o ADC, como indicamos no diagrama de blocos anteriormente.

E uma forma é introduzir um Seguidor de tensão, usando um amplificador operacional com alta impedância de entrada.



 

Usando o VC8145, realizamos as medidas da tensão no cursor do potenciômetro e na referência de tensão e obtemos:

  • Potenciômetro: 1,2500V
  • Referência: 2,5011V

Desta vez podemos perceber que o VC8145 não indicou uma queda de tensão no potenciômetro, como esperado já que a impedância de entrada do CA3140 é muito alta e é como se ele nem estivesse lá.

Mas a medida do ADC ainda apresenta uma diferença de 3,9mV. No datasheet do CA3140 podemos ter uma indicação. Essa queda pode ser causada pela tensão de offset de entrada, como indicado abaixo.




Resumindo: a importância de bons instrumentos de medida

Como vimos nesta experimentação, ter bons instrumentos de medição, bem como bons conhecimentos a respeito das técnicas adequadas de realizar medidas pode determinar até que ponto suas medidas podem ou não ser confiáveis.

Com os conceitos tratados aqui, acredito que seja possível desenvolver uma conjunto de sondas simples para visualização de valores mas também, pode ser o ponta pé inicial para o desenvolvimento de um instrumento mais confiável.

 

 

FAÇA O DOWNLOAD DOS ARQUIVOS
PDF
INO

 

 

 

Postar um comentário

0 Comentários