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.
0 Comentários