ADS1115 ADC 16 BITS
¿Qué es el ADS1115?
Este
circuito integrado es un dispositivo electrónico que se encarga de convertir
una señal analógica a digital (ADC) capaz de captar hasta 16 bits en su ADC y
este es configurable.
Se
comunica a través de un protocolo de comunicación llamado i2c, este protocolo
es compatible con Arduino y microcontroladores (PIC), recordemos que
normalmente estos cuentan con ADC de hasta 10 bits, por lo que si queremos
mejorar la precisión de la lectura de una variable es recomendable utilizar
este dispositivo. También es posible conectar cuatro canales a este circuito
integrado y se puede leer por medio del protocolo direccionando cada entrada
sin problemas.
Este
cuenta con tres modos de medición Single
Ended, Diferencial y Comparador.
En
el modo Single Ended disponemos de
cuatro canales de 16 bits. En el modo diferencial
usamos dos ADC para cada medición, por lo que el número de canales se reduce a
2, pero tendremos la ventaja de poder medir tensiones negativas y mayor inmunidad
al ruido. El modo comparador es una
especie de alerta la cual se activará en el canal AIN0, cuando el valor
registrado supere el umbral seleccionado.
Tabla 1.- Índices máximos absolutos.
Tabla 2.-Modelos de productos.
Figura 3.-Diagrama a bloques ADS1115.
Como
podemos observar las características de este ADC son superiores a los ADC que
se encuentran en los microcontroladores PIC y de Arduino, las mediciones en
este caso serán más precisas y podríamos compararlas con las de Arduino para
verificar la diferencia, La velocidad de este ADC es de 860 muestras por
segundo como se especifica en la tabla, este incluye internamente un
amplificador de ganancia programable. Además, que el consumo del mismo es de
150 uA en modo continuo.
Figura 4.-Amplificador de Ganancia
Programable
Esquema de
conexión
Figura 5.-Conexión de ADS1115 con
ARDUINO.
Para
realizar los distintos modos del ADS se usará una librería desarrollada
por Adafruit:
*Independientemente
del PGA elegido la máxima tensión que podemos medir será siempre la tensión de
alimentación. Es decir, aunque el PGA sea 6.144V, no podremos medir tensiones
superiores a 5V.
Esta librería
cuenta con el modo Single End
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads;
/* Use this for the 16-bit version */
//Adafruit_ADS1015 ads;
/* Use thi for the 12-bit version */
void setup(void)
{
Serial.begin(9600);
Serial.println("Hello!");
Serial.println("Getting single-ended readings from AIN0..3");
Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015,
0.1875mV/ADS1115)");
// The ADC input
range (or gain) can be changed via the following
// functions, but
be careful never to exceed VDD +0.3V max, or to
// exceed the upper
and lower limits if you adjust the input range!
// Setting these
values incorrectly may destroy your ADC!
//
ADS1015 ADS1115
// ------- -------
//
ads.setGain(GAIN_TWOTHIRDS); // 2/3x
gain +/- 6.144V 1 bit = 3mV 0.1875mV (default)
//ads.setGain(GAIN_ONE); //
1x gain +/- 4.096V 1 bit = 2mV
0.125mV
//
ads.setGain(GAIN_TWO); // 2x
gain +/- 2.048V 1 bit = 1mV 0.0625mV
//
ads.setGain(GAIN_FOUR); // 4x
gain +/- 1.024V 1 bit = 0.5mV 0.03125mV
//
ads.setGain(GAIN_EIGHT); // 8x
gain +/- 0.512V 1 bit = 0.25mV 0.015625mV
//
ads.setGain(GAIN_SIXTEEN); // 16x
gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV
ads.begin();
}
void loop(void)
{
int16_t adc0, adc1,
adc2, adc3;
adc0 =
ads.readADC_SingleEnded(0);
adc1 =
ads.readADC_SingleEnded(1);
adc2 =
ads.readADC_SingleEnded(2);
adc3 =
ads.readADC_SingleEnded(3);
Serial.print("AIN0: "); Serial.println(adc0);
Serial.print("AIN1: "); Serial.println(adc1);
Serial.print("AIN2: "); Serial.println(adc2);
Serial.print("AIN3: "); Serial.println(adc3);
Serial.println(" ");
delay(1000);
}
Figura 6.-Monitor serial
mostrando las salidas ADC1…3
Este
código despliega cada uno de los ADC con los que cuenta el dispositivo
imprimiendo por el puerto serial el valor del ADC, si queremos obtener su
salida en voltaje, solo tenemos que multiplicar el valor leído por el sensor
por la resolución. La resolución se calcula con la siguiente ecuación:
Introduciendo
un voltaje de 3.3 volts aproximadamente obtenemos 17442 bits, multiplicarlos
por la resolución obtenemos el voltaje.
Figura 7.-Valor en
voltaje de los ADC.
Observamos en
el código que podemos seleccionar la Ganancia, por si tenemos voltajes en específico
y lograr una medición más confiable. Por ejemplo, si sabemos que nuestro
voltaje estará entre 0V hasta 1V podemos seleccionar una ganancia más baja y
que el ADC sea más preciso dentro de ese rango.
Este es el código
del Modo Diferencial:
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads;
/* Use this for the 16-bit version */
//Adafruit_ADS1015 ads;
/* Use thi for the 12-bit version */
void setup(void)
{
Serial.begin(9600);
Serial.println("Hello!");
Serial.println("Getting differential reading from AIN0 (P) and AIN1
(N)");
Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015,
0.1875mV/ADS1115)");
// The ADC input range
(or gain) can be changed via the following
// functions, but
be careful never to exceed VDD +0.3V max, or to
// exceed the upper
and lower limits if you adjust the input range!
// Setting these
values incorrectly may destroy your ADC!
// ADS1015 ADS1115
//
------- -------
//
ads.setGain(GAIN_TWOTHIRDS); // 2/3x
gain +/- 6.144V 1 bit = 3mV 0.1875mV (default)
// ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V
1 bit = 2mV 0.125mV
//
ads.setGain(GAIN_TWO); // 2x
gain +/- 2.048V 1 bit = 1mV 0.0625mV
//
ads.setGain(GAIN_FOUR); // 4x
gain +/- 1.024V 1 bit = 0.5mV 0.03125mV
//
ads.setGain(GAIN_EIGHT); // 8x
gain +/- 0.512V 1 bit = 0.25mV 0.015625mV
//
ads.setGain(GAIN_SIXTEEN); // 16x
gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV
ads.begin();
}
void loop(void)
{
int16_t results;
/* Be sure to
update this value based on the IC and the gain settings! */
//float multiplier = 3.0F; /* ADS1015 @ +/- 6.144V gain (12-bit
results) */
float multiplier =
0.1875F; /* ADS1115 @ +/- 6.144V gain
(16-bit results) */
results = ads.readADC_Differential_0_1();
Serial.print("Differential: "); Serial.print(results);
Serial.print("("); Serial.print(results * multiplier);
Serial.println("mV)");
delay(1000);
}
El código del
Modo comparador es el siguiente:
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads;
void setup(void)
{
Serial.begin(9600);
ads.begin();
// Activar comparador para 2.5V en canal 0
// (Donde 13333 = 2500 / 0.1875F)
ads.startComparator_SingleEnded(0, 13333);
}
void loop(void)
{
int16_t adc0;
// Actualizar comparadores
adc0 = ads.getLastConversionResults();
Serial.print("AIN0: "); Serial.println(adc0);
delay(100);
}
No hay comentarios:
Publicar un comentario