Tabla de contenido
resumen
Esta guía completa lo guía a través del proceso de integración del módulo ADC ADS1115 de 16 bits con Raspberry Pi Pico, una placa de microcontrolador versátil desarrollada por Raspberry Pi Foundation. La placa de conexión ADS1115 es un convertidor analógico a digital (ADC) de alta resolución que se puede utilizar con microcontroladores como Arduino, ESP8266/32, STM32 y, por supuesto, Raspberry Pi Pico.
Raspberry Pico Pico con microcontrolador RP2040 tiene un ADC de 12 bits La resolución máxima es 3.3V / 4096 = 0.0008V (800uV). Si bien esto es una mejora con respecto al ADC de 10 bits del Arduino, aún puede quedarse corto para proyectos que requieren lecturas analógicas más precisas. El módulo ADS1115 con resolución ADC de 16 bits se puede incorporar para mejorar significativamente la funcionalidad ADC de Pico. En el ADS1115, el voltaje mínimo medible es 5V / 65536 = 0.000076V (76uV), lo que mejora la precisión del proyecto.
Las siguientes secciones describen las especificaciones y beneficios del módulo ADS1115, describen los componentes y conexiones necesarios para integrarse con Raspberry Pi Pi y proporcionan código MicroPython de ejemplo para ayudarlo a comenzar con esta poderosa actualización de ADC.
Lista de materiales
Para comprender completamente el módulo ADC ADS1115 con Raspberry Pi Pico, se requieren los siguientes componentes:
Chip ADS1115
El ADS1115 es un CI de conversión de analógico a digital de precisión, bajo consumo, de 16 bits, compatible con I2C.
Características de ADS1115
- Resolución de 16 bits
- Entrada de un solo extremo de 4 canales o entrada diferencial de 2 canales
- Yo2Protocolo C interfaz
- Comparador programable
- Amplio rango de tensión de alimentación
- Bajo consumo de corriente
- Modo de conversión continua
- Velocidad de datos programable
- Comparador programable
- Asentamiento de ciclo único
- Referencia interna de voltaje de baja deriva
- Oscilador interno
- Amplio rango de temperatura de funcionamiento
- Disponible en paquete X2QFN ultrapequeño
Configuración de pines ADS1115
La siguiente figura muestra la configuración del pin del chip ADS1115.
- El pin 1 es el pin ADDR que selecciona la dirección I2C del chip.
- El pin 2 es un pin de alerta/listo que actúa como una señal de alerta y lista para datos.
- El pin 3 es el terminal GND.
- Los pines 4, 5, 6 y 7 son los cuatro pines de entrada ADC. Estos pines se pueden utilizar como cuatro entradas de un solo extremo o dos entradas diferenciales.
- El pin 8 es un pin de suministro positivo que acepta de 2.0V a 5.5V.
- Los pines 9 y 10 son los pines de interfaz I2C, SDA y SCL, respectivamente.
Diagrama de bloques funcionales ADS1115.
A continuación se muestra un diagrama funcional del chip ADS1115.
En primer lugar, el multiplexor selecciona la señal de entrada. La señal seleccionada se alimenta a un amplificador de ganancia programable (PGA). El PGA se puede programar para amplificar pequeñas señales antes de la conversión.
La entrada se convierte mediante un convertidor delta-sigma de 16 bits. El convertidor mide la señal de entrada utilizando su propia referencia de voltaje interno y oscilador en chip. Finalmente, el resultado de la conversión entrará en la interfaz I2C. El comparador también notifica a la interfaz externa que el resultado está listo para su obtención.
Conexión típica ADS1115
La conexión I2C del principio ADS1115 se muestra en la siguiente figura.
El ADS1115 interactúa directamente con los controladores I2C de modo estándar, modo de alta velocidad y modo de alta velocidad. Todos los periféricos I2C del microcontrolador, incluidos los periféricos I2C de solo maestro y de un solo maestro, funcionan con el ADS1115.
Para obtener más información, consulte Hoja de datos de ADS1115
Módulo ADS1115 o placa de conexión
El ADS1115 se suministra con paquetes X2QFN y VSSOP, que no se pueden utilizar para la creación de prototipos. Por lo tanto, para usarlo con una Raspberry Pico Pico u otro microcontrolador, necesita el módulo ADS1115 o la placa de conexión.
Estos módulos están ampliamente disponibles de diferentes fabricantes y son muy económicos. Es fácil de usar para placas de pruebas y fácil de usar en aplicaciones de creación de prototipos y pruebas.
Pines del módulo ADS1115
El módulo ADS1115 tiene un total de 10 pines.
Anclar. No. | Nombre del PIN | Descripción del Pin |
1 | VDD | Fuente de alimentación: 2.0V-5.5V |
2 | Teletipo | tierra |
3 | Teletipo | Entrada de reloj serie: datos de reloj en SDA (utilizados para la comunicación I2C) |
4 | Teletipo | Datos en serie: Enviar y recibir datos (utilizados para la comunicación I2C) |
5 | Adol | Selección de dirección I2C (esclavo) |
6 | Alerta/RDY | Salida de comparador digital o soporte de conversión |
7 | AIN0 | Canal diferencial 1: entrada de canal 1 de un solo extremo o entrada negativa |
8 | Ain 1 | Canal diferencial 1: entrada de canal 2 de un solo extremo o entrada negativa |
9 | Ain 2 | Canal diferencial 2: entrada de canal 3 de un solo extremo o entrada positiva |
10 | Ain 3 | Canal diferencial 2: entrada de canal 4 de un solo extremo o entrada negativa |
Esquema del módulo ADS1115.
El esquema anterior es una versión de Adafruit en el módulo ADS1115.
Sigue la conexión típica del chip ADS1115. Una resistencia pull-up de 10K ohmios está conectada al I2C y a los pines de alerta. Se instala un condensador de 1uF entre el pin VDD y GND que actúa como un condensador de desacoplamiento.
Cómo utilizar el módulo ADS1115 en Raspberry Pi Pico
Conectar el módulo ADS1115 con la Raspberry Pi Pico es sencillo porque ambos dispositivos utilizan el protocolo de comunicación I2C. Este tutorial le guía a través de los pasos para conectar y configurar el ADS1115 a la Raspberry Pi Pico.
- Conecte el pin VCC del ADS1115 al pin de 3.3V (pin 36) del Raspberry Pi Pico.
- Conecte el pin GND del ADS1115 a cualquier pin GND de la Raspberry Pico (por ejemplo, el pin 38).
- Conecte el pin SDA en el ADS1115 al pin SDA (GP14, pin 19) en el Raspberry Pi Pico.
- Conecte los pines SCL del ADS1115 a los pines SCL (GP15, pin 20) de la Raspberry Pico Pico.
Puede conectar los pines A0, A1, A2 y A3 del ADS1115 a un sensor o dispositivo que lea valores analógicos. En este ejemplo se utiliza un potenciómetro de 10K.
Código/Programa Micropython
A continuación, escribamos código MicroPython para leer el valor ADC del ADS1115 conectado a la Raspberry Pi Pico.
No necesita una biblioteca en su código. Por lo tanto, puede copiar y pegar el siguiente código en el editor de Thonny. Guarde el archivo como main.py.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | importación Youtime remitente máquina importación I2C, anclar desarrollo = I2C(1, frecuencia=400000, Teletipo=anclar(15), Teletipo=anclar(14)) dispositivo = desarrollo.escanear() para dispositivo Y dispositivo: Impresión(dispositivo) dirección = 72 Def read_config(): desarrollo.Escribir a(dirección, Matriz de bytes([1])) resultado = desarrollo.Leer de(dirección, 2) devolución resultado[0] << 8 | resultado[1] Def read_value(): desarrollo.Escribir a(dirección, Matriz de bytes([0])) resultado = desarrollo.Leer de(dirección, 2) establecimiento = read_config() establecimiento &= ~(7 << 12) & ~(7 << 9) establecimiento |= (4 << 12) | (1 << 9) | (1 << 15) establecimiento = [int(config >> i & 0xff) for i in (8, 0)] desarrollo.Escribir a(dirección, Matriz de bytes([1] + establecimiento)) devolución resultado[0] << 8 | resultado[1] Def val_to_voltage(Val, max_val=26100, voltage_ref=3.3): devolución Val / max_val * voltage_ref Impresión(…bin(read_config())) mientras verdadero: Val = read_value() voltaje = val_to_voltage(Val) Impresión(“Valor ADC:”, Val, “Voltaje: {:.3f} V”.formato(voltaje)) Youtime.dormir(0.5) |
Descripción del código
importación Youtime remitente máquina importación I2C, anclar |
Estas líneas son utime
, I2C
Y Pin
Módulo.
desarrollo = I2C(1, frecuencia=400000, Teletipo=anclar(15), Teletipo=anclar(14)) |
Esta línea es dev
Cambie la variable a I2C
La clase Communicate se utiliza para comunicarse con dispositivos I2C. Se inicializa con los siguientes parámetros: 1
Como número de autobús, 400000
Las frecuencias de comunicación incluyen: Pin(15)
Como un pin de la línea del reloj (SCL), Pin(14)
como un pin en la línea de datos (SDA).
dispositivo = desarrollo.escanear() para dispositivo Y dispositivo: Impresión(dispositivo) |
Estas líneas son: scan()
Métodos I2C
Clasifique e imprima las direcciones de todos los dispositivos que responden.
Esta línea es address
Reemplace la variable por la dirección del ADC.
Def read_config(): desarrollo.Escribir a(dirección, Matriz de bytes([1])) resultado = desarrollo.Leer de(dirección, 2) devolución resultado[0] << 8 | resultado[1] |
Esta función se llama bytearray
Incluido 1
Al ADC especificado address
Esto establece el ADC en modo de configuración y lo prepara para recibir datos de configuración. el dev.readfrom()
El método lee dos bytes de datos de la misma dirección y realiza operaciones bit a bit (<<
Y |
Este entero representa los valores de configuración del ADC y se devuelve.
Def read_value(): desarrollo.Escribir a(dirección, Matriz de bytes([0])) resultado = desarrollo.Leer de(dirección, 2) establecimiento = read_config() establecimiento &= ~(7 << 12) & ~(7 << 9) establecimiento |= (4 << 12) | (1 << 9) | (1 << 15) establecimiento = [int(config >> i & 0xff) for i in (8, 0)] desarrollo.Escribir a(dirección, Matriz de bytes([1] + establecimiento)) devolución resultado[0] << 8 | resultado[1] |
Esta función se utiliza para leer los datos de voltaje analógico reales. Al principio bytearray
Incluido 0
Al ADC especificado address
Ponga el ADC en modo de conversión para iniciar el proceso de conversión. A continuación, lee 2 bytes de datos de la misma dirección. dev.readfrom()
Cree métodos y combínelos en un único entero de 16 bits. el read_config()
Llame a la función para obtener los valores de configuración actuales del ADC y realizar operaciones bit a bit (&
Y |
) para establecer el modo de conversión en un solo extremo y seleccionar un canal de entrada. Los valores de configuración modificados se muestran en el cuadro bytearray
Enviado al ADC usando dev.writeto()
Método. A continuación, la función devuelve el valor de voltaje convertido.
Def val_to_voltage(Val, max_val=26100, voltage_ref=3.3): devolución Val / max_val * voltage_ref |
Esta función convierte el valor ADC sin procesar en un valor de voltaje utilizando el valor máximo proporcionado y la referencia de voltaje.
Impresión(…bin(read_config())) |
Esta línea imprime una representación binaria de los valores de configuración actuales del ADC.
mientras verdadero: Val = read_value() voltaje = val_to_voltage(Val) Impresión(“Valor ADC:”, Val, “Voltaje: {:.3f}V”.formato(voltaje)) Youtime.dormir(0.5) |
Este es el bucle principal que lee continuamente el valor ADC usando read_value()
Use una función y úsela para convertir a un valor de voltaje val_to_voltage()
Función. A continuación, imprima el valor convertido en la consola, utime.sleep()
El bucle continúa indefinidamente hasta que el programa se detiene manualmente.
Pruebas y demostraciones
Ejecute el código. Si todas las conexiones son correctas, los pines muestran los valores de ADC y voltaje.
El voltaje mínimo observado es 0 V y el valor del ADC es 1-2 o casi 0.
El valor máximo mostrado es de aproximadamente 3.3V, lo que indica que el valor máximo del ADC es 26091.
Por lo tanto, podemos concluir que el módulo ADC ADS1115 de 16 bits tiene una alta precisión y se puede utilizar para aplicaciones versátiles.
Según otras pruebas, esteLa precisión típica del dispositivo es del 0,01%, mientras que la precisión máxima es del 0,15%. Esta precisión incluye todas las fuentes de error, incluidas las referencias de voltaje, los errores de ganancia, las compensaciones y el ruido.
Video Tutorial y Guía
ADS1115 16-bit A/D Converter: Tutorial detallado usando Arduino, ESP8266 y ESP32
El mismo módulo ADS1115 también se puede utilizar con otros microcontroladores, incluyendo:
- ADS1115 y Arduino
- ADS1115 y ESP32
- ADS1115 y ESP8266