Conversor analógico digital (ADC) ADS1115

Conversor analógico digital (ADC) ADS1115

¿Qué es un ADS1115?

El ADS1115 es un conversor analógico digital (ADC) externo que podemos conectar a un procesador como Arduino para medir señales analógicas. Arduino dispone de ADC internos que empleamos cuando usamos las entradas analógicas de Arduino. En los modelos Arduino Uno, Mini y Nano, disponemos de 6 ADC de 10 bits.

El ADS1115 proporciona 4 ADC de 16 bits, 15 para la medición y un último para el signo. El ADS1115 se conecta por I2C, por lo que es sencillo realizar su lectura. Dispone de 4 direcciones, que se elige mediante la conexión del pin ADDRESS.

El interés de emplear un ADC como el ADS1115 es obtener una mayor precisión, además de liberar de esta carga al procesador. Además, en ciertas configuraciones, es posible medir tensiones negativas.

El ADS1115 tiene dos modos de medición, single ended y diferencial. En el modo single ended disponemos de cuatro canales de 15 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.

También dispone de un modo comparador en el que el ADS1115 genera una alerta por el pin ALERT cuando cualquiera de los canales supera un valor de umbral que fijamos por código.

Por último, el ADS1115 incorpora un PGA que permite ajustar la ganancia desde 6.144V a 0.256V. Esto permite obtener precisiones superiores cuando midamos tensiones inferiores a 5V.

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.

Como vemos, las características técnicas del ADS1115 son muy superiores a los ADC internos de Arduino. Por tanto, resultan adecuados cuando necesitemos mediciones de precisión, como en la lectura de sensores, o cuando la señal pueda tomar valores negativos, como en los sensores de intensidad o tensión.

Resolución de Microcontroladores

  1. Arduino Uno y Mega (ADC de 10 bits):
    • Resolución: 10 bits.
    • Rango de representación: 0 a 1023 (2^10 – 1).
    • Rango de tensión: Con una referencia de voltaje de 5V, cada paso de conteo representa aproximadamente 4.88 mV (5V / 1024).
    • Por lo tanto, puede medir tensiones en el rango de 0 a aproximadamente 5V.
    • Si se usa una referencia de voltaje diferente, el rango de medición se ajustará en consecuencia.
  2. Arduino Due y ESP32 (ADC de 12 bits):
    • Resolución: 12 bits.
    • Rango de representación: 0 a 4095 (2^12 – 1).
    • Rango de tensión: Si se utiliza una referencia de voltaje de 3.3V, cada paso de conteo representa aproximadamente 0.805 mV (3.3V / 4096).
    • Si se configura la referencia de voltaje como 3.3V/5V (configurable para Arduino Due), cada paso de conteo representará aproximadamente 0.805 mV/1.22 mV respectivamente.
    • Por lo tanto, puede medir tensiones en el rango de 0 a aproximadamente 3.3V o 5V, según el voltaje de referencia.
  3. ESP8266 (ADC de 10 bits):
    • Resolución: 10 bits.
    • Rango de representación: 0 a 1023 (2^10 – 1).
    • Rango de tensión: Al igual que Arduino Uno y Mega, puede medir tensiones en el rango de 0 a aproximadamente 5V.
    • La referencia de voltaje utilizada puede ser típicamente 3.3V en lugar de 5V, pero aún así, el rango de medición se mantiene dentro de los límites del voltaje de alimentación (generalmente 3.3V).

Resolución de ADS1015 y ADS1115

ADS1015:

  • Resolución: 12 bits.
  • Canales de Entrada: 4 canales diferenciales o 2 canales diferenciales o 1 canal único.
  • Interfaz de Comunicación: I2C (Inter-Integrated Circuit).
  • Voltaje de Alimentación: 2.0V a 5.5V.
  • Tasa de Muestreo Programable: Hasta 3300 muestras por segundo (SPS).
  • Rango de Voltaje de Entrada Programable: ±6.144V, ±4.096V, ±2.048V, ±1.024V, ±0.512V, ±0.256V (dependiendo del rango seleccionado).
  • Bajo Consumo de Energía: Funciones de modo de bajo consumo para ahorro de energía en aplicaciones de batería.
  • Interruptores Programables: Permite la programación de límites de tensión para activar interrupciones.
  • Precisión: Tipicamente ±0.5 LSB en condiciones normales.
  • Dirección I2C: Configurable mediante pines ADDR.
  • Filtros Digitales Integrados: Permite la reducción de ruido y estabilización de mediciones.

ADS1115:

  • Resolución: 16 bits.
  • Canales de Entrada: 4 canales diferenciales o 2 canales diferenciales o 1 canal único.
  • Interfaz de Comunicación: I2C (Inter-Integrated Circuit).
  • Voltaje de Alimentación: 2.0V a 5.5V.
  • Tasa de Muestreo Programable: Hasta 860 muestras por segundo (SPS) en modo de alta precisión.
  • Rango de Voltaje de Entrada Programable: ±6.144V, ±4.096V, ±2.048V, ±1.024V, ±0.512V, ±0.256V (dependiendo del rango seleccionado).
  • Bajo Consumo de Energía: Funciones de modo de bajo consumo para ahorro de energía en aplicaciones de batería.
  • Interruptores Programables: Permite la programación de límites de tensión para activar interrupciones.
  • Precisión: Tipicamente ±0.5 LSB en condiciones normales.
  • Dirección I2C: Configurable mediante pines ADDR.
  • Filtros Digitales Integrados: Permite la reducción de ruido y estabilización de mediciones.

Comparación:

  • La principal diferencia entre el ADS1015 y el ADS1115 radica en la resolución del ADC. El ADS1015 tiene una resolución de 12 bits, mientras que el ADS1115 tiene una resolución de 16 bits, lo que implica una mayor precisión en la conversión analógica a digital.
  • Ambos tienen funcionalidades similares en términos de canales de entrada, interfaz de comunicación, rangos de voltaje de entrada programables, bajo consumo de energía, interruptores programables y filtros digitales integrados.
  • La elección entre el ADS1015 y el ADS1115 depende de la precisión requerida para la aplicación específica.

I²C interface

El módulo tiene una interfaz I2C fácil de usar que se puede configurar para usar cualquiera de las cuatro direcciones I2C diferentes si desea usar varios módulos en el mismo sistema o si tiene un conflicto de direcciones con otro dispositivo.

El pin de dirección ADDR determina qué dirección I2C usar conectándola de la siguiente manera:

  • 0x48  = DIRECCIÓN conectada a Tierra
  • 0x49  = DIRECCIÓN conectada a VDD
  • 0x4A  = DIRECCIÓN conectada a SDA
  • 0x4B  = DIRECCIÓN conectada a SCL

Concepto y Estructura del ADS1115

El ADS1115 es un convertidor analógico-digital (ADC) de 16 bits que proporciona alta precisión y flexibilidad para la conversión de señales analógicas a digitales. Este ADC es ampliamente utilizado en aplicaciones que requieren mediciones precisas de voltajes en una amplia gama de condiciones. A continuación, desglosamos el funcionamiento del ADS1115 utilizando su diagrama de bloques interno como referencia.

Diagrama de Bloques del ADS1115

Conversor analógico digital (ADC) ADS1115
Conversor analógico digital (ADC) ADS1115
  1. Entradas Analógicas (A0, A1, A2, A3):
    • El ADS1115 tiene cuatro entradas analógicas, etiquetadas como A0, A1, A2 y A3. Estas entradas permiten la conexión de hasta cuatro señales analógicas distintas.
  2. Multiplexor (MUX):
    • Las cuatro entradas analógicas se conectan a un multiplexor interno. El multiplexor selecciona una de las señales de entrada para ser procesada en cada momento. Esto permite que el ADS1115 lea múltiples señales con un solo ADC, alternando entre ellas según sea necesario.
  3. Amplificador de Ganancia Programable (PGA):
    • La señal seleccionada por el multiplexor se envía al Amplificador de Ganancia Programable (PGA). El PGA ajusta la amplitud de la señal para asegurar que se utilice todo el rango de entrada del ADC. El rango de entrada del PGA puede ser ajustado para aceptar voltajes desde ±256 milivoltios hasta ±6.144 voltios. Esta flexibilidad es crucial para adaptarse a diferentes sensores y condiciones de entrada.
  4. Convertidor Analógico-Digital (ADC) de 16 bits:
    • La señal amplificada se transfiere al ADC de 16 bits, que convierte la señal analógica en una señal digital con alta precisión. Una resolución de 16 bits significa que la señal analógica se puede representar en 65,536 niveles distintos (2^16), proporcionando una granularidad y precisión muy alta.
  5. Interfaz I2C:
    • La señal digital resultante se envía al bloque de interfaz I2C. La interfaz I2C permite que el ADS1115 se comunique con un microcontrolador, como el ESP32, utilizando los pines SDA (Serial Data Line) y SCL (Serial Clock Line). El pin ADDR se usa para configurar la dirección I2C del dispositivo, permitiendo que múltiples ADS1115 compartan el mismo bus I2C sin conflicto.
  6. Comparador Digital Programable:
    • El ADS1115 también incluye un comparador digital programable. Este comparador puede comparar la señal analógica de entrada con un voltaje de referencia predefinido. Si la señal excede el umbral establecido, el comparador puede generar una señal de alerta (ALERT/RDY). Esta señal puede ser utilizada para interrumpir el microcontrolador, indicando que una condición específica ha sido detectada, como una señal fuera de los límites esperados.
Configuración de Pines del ADS1115
Nombre del PIN Descripción del pasador
DIRECCIÓN Selección de dirección I2C (esclavo)
ALERTA/RDY Salida del comparador digital o conversión lista
GND Suelo
AIN0 Canal diferencial 1: entrada del canal 1 de un solo extremo o entrada negativa
AIN1 Canal diferencial 1: entrada del canal 2 de un solo extremo o entrada negativa
AIN2 Canal diferencial 2: entrada del canal 3 de un solo extremo o entrada positiva
AIN3 Canal diferencial 2: entrada del canal 4 de un solo extremo o entrada negativa
VDD Fuente de alimentación: 2,0 V a 5,5 V
SDA Datos en serie: transmite y recibe datos (utilizados para la comunicación I2C)
SCL Entrada de reloj en serie: datos del reloj en SDA (utilizado para comunicación I2C)

Modos de Conversión del ADS1115

El convertidor analógico-digital ADS1115 puede operar en dos modos de conversión: modo disparo único y modo conversión continua.

Modo Disparo Único

En el modo disparo único, el ADS1115 realiza una conversión de la señal de entrada bajo demanda y almacena el resultado en un registro interno. Este proceso se activa enviando una señal de inicio al ADS1115, indicando cuándo debe realizar la conversión. Una vez completada la conversión, el ADS1115 entra en modo de ahorro de energía, ideal para sistemas que solo requieren conversiones periódicas o tienen largos periodos de inactividad entre conversiones. Este modo es eficiente en términos de consumo de energía, ya que el dispositivo permanece inactivo la mayor parte del tiempo, activándose solo cuando es necesario realizar una medición.

Modo Conversión Continua

En el modo conversión continua, el ADS1115 comienza automáticamente a convertir la señal de entrada en cuanto se completa la conversión previa. Este modo permite al dispositivo convertir un valor analógico a digital continuamente, y una vez que una conversión finaliza, inmediatamente comienza otra. La tasa de conversión es programable, permitiendo ajustar la velocidad según los requisitos de la aplicación. Los datos pueden ser leídos en cualquier momento, y siempre reflejarán la conversión más reciente. Este modo es útil en aplicaciones donde se requiere monitoreo constante y datos en tiempo real.

Resolución del Convertidor Analógico-Digital ADS1115

Aunque la resolución nominal del ADS1115 es de 16 bits, no todos los bits se utilizan para representar el valor del voltaje. La salida del ADS1115 es un entero con signo, lo que significa que uno de los bits se utiliza para establecer el signo (positivo o negativo) de la medición. Como resultado, solo se utilizan 15 bits de los 16 disponibles para expresar el valor del voltaje.

Esto significa que el ADS1115 puede representar 32,768 valores posibles (2^15). El rango de valores posibles va de -32,768 a +32,767. El primer valor es 0 y el último valor es 32,767 para las señales positivas. Esta alta resolución permite al ADS1115 detectar variaciones muy pequeñas en la señal analógica, lo que es esencial en aplicaciones que requieren alta precisión.

Aplicaciones Comunes del ADS1115

El ADS1115 es extremadamente versátil y se utiliza en diversas aplicaciones donde la conversión de señales analógicas a digitales con alta precisión es crucial. Algunas de sus aplicaciones más comunes incluyen:

  1. Electrónica de Consumo: En dispositivos como cámaras digitales, reproductores de música y otros gadgets portátiles.
  2. Instrumentación Portátil: Equipos de medición como multímetros y osciloscopios de mano.
  3. Sistemas de Medición de Temperatura: Convierte señales de termopares y RTD en datos digitales precisos.
  4. Monitoreo de Voltaje y Corriente de Batería: Utilizado en sistemas de gestión de baterías para monitorear parámetros críticos.
  5. Automatización de Fábrica y Control de Procesos: Convierte señales de sensores en datos digitales para monitoreo y control en tiempo real.

Biblioteca Adafruit_ADS1115

La biblioteca Adafruit_ADS1115 es una herramienta diseñada para facilitar el uso del convertidor analógico-digital (ADC) ADS1115 en proyectos basados en microcontroladores como Arduino. Proporciona una interfaz sencilla para configurar el ADS1115 y leer valores de los sensores analógicos conectados a él.

Características Principales

  1. Fácil Configuración:
    • Permite configurar rápidamente el ADS1115, incluyendo la dirección I2C, la ganancia del amplificador de ganancia programable (PGA) y el modo de operación (disparo único o continuo).
  2. Lectura de Valores Analógicos:
    • Proporciona funciones para leer valores analógicos de los cuatro canales del ADS1115, ya sea de forma individual (canales de un solo extremo) o diferencial.
  3. Compatibilidad con Interfaz I2C:
    • Facilita la comunicación a través del bus I2C, permitiendo la integración con otros dispositivos en el mismo bus.

Instalación de la Biblioteca

Para instalar la biblioteca Adafruit_ADS1115 en el entorno de desarrollo Arduino, sigue estos pasos:

  1. Abre el IDE de Arduino.
  2. Ve a Sketch -> Include Library -> Manage Libraries.
  3. En la ventana de la Biblioteca del Administrador, busca «Adafruit ADS1X15» y selecciona la opción para instalarla.
Conversor analógico digital (ADC) ADS1115

Ejemplo Practico

Este sketch muestra cómo utilizar el ADS1115 para leer valores analógicos de hasta cuatro canales y enviar estos valores al monitor serie para su visualización. La biblioteca Adafruit_ADS1X15 simplifica la configuración y el uso del ADS1115, permitiendo leer valores con alta precisión y configurando la ganancia del amplificador para adaptarse a diferentes rangos de voltaje de entrada. Esta configuración es útil en aplicaciones que requieren la monitorización de múltiples sensores analógicos con alta resolución y precisión.

#include <Wire.h>
#include <Adafruit_ADS1X15.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED en píxeles
#define SCREEN_HEIGHT 64 // Alto de la pantalla OLED en píxeles
#define OLED_RESET    -1 // No se usa el pin de reset del OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Adafruit_ADS1115 ads;

void setup() {
    Serial.begin(115200);
    if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
        Serial.println(F("SSD1306 allocation failed"));
        for(;;);
    }
    display.display();
    delay(500);
    display.clearDisplay();

    ads.begin();
    ads.setGain(GAIN_TWOTHIRDS);  // Ganancia de 2/3 para voltajes de hasta +/- 6.144V
}

void loop() {
    int16_t adc0 = ads.readADC_SingleEnded(0);  // Lee el canal 0
    int16_t adc1 = ads.readADC_SingleEnded(1);  // Lee el canal 1
    int16_t adc2 = ads.readADC_SingleEnded(2);  // Lee el canal 2
    int16_t adc3 = ads.readADC_SingleEnded(3);  // Lee el canal 3

    float voltage0 = adcToVoltage(adc0);
    float voltage1 = adcToVoltage(adc1);
    float voltage2 = adcToVoltage(adc2);
    float voltage3 = adcToVoltage(adc3);

    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 0);
    display.print(F("ADC0:")); display.println(adc0); 
    display.print(F("V:")); display.println(voltage0); display.println(F("V"));

    display.display();
    delay(500);
}

float adcToVoltage(int16_t adcValue) {
    // La referencia de voltaje es de ±6.144V y la resolución es de 15 bits positivos
    return (adcValue * 0.1875) / 1000.0;  // 0.1875 mV por bit, convirtiendo a V
}


Detalles sobre la Conversión

El valor 0.1875 mV/bit se deriva de la ganancia configurada. Con GAIN_TWOTHIRDS, el ADS1115 tiene un rango de ±6.144V y una resolución de 15 bits (32768 valores), lo que resulta en:

Resolucioˊn por bit=6.144×232768≈0.1875 mV/bitResolucioˊn por bit=327686.144×2​≈0.1875 mV/bit

Con esta configuración, cada paso del ADC representa 0.1875 milivoltios, que se convierten a voltios dividiendo por 1000. Así, el voltaje correspondiente se calcula y se imprime junto con el valor ADC.

Índice