|
|
#define | I2C_SDA_PIN 9 |
| | Pin SDA del bus I2C para comunicación con ADS1015.
|
|
#define | I2C_SCL_PIN 8 |
| | Pin SCL del bus I2C para comunicación con ADS1015.
|
|
#define | ADS_ALERT_PIN 10 |
| | Pin de interrupción del ADS1015 para conversiones completadas.
|
|
#define | RX_PIN 20 |
| | Pin de recepción UART para RS485.
|
|
#define | TX_PIN 21 |
| | Pin de transmisión UART para RS485.
|
|
| void | setup () |
| | Función de inicialización del sistema.
|
| void | loop () |
| | Loop principal del sistema.
|
|
|
Adafruit_ADS1015 | ads |
| | Instancia del convertidor ADS1015.
|
|
const int | NUM_CHANNELS = 3 |
| | Número de canales ADC a muestrear.
|
Resumen
Este módulo implementa la configuración de hardware del ESP32 y el flujo completo de:
- Configuración de periféricos I2C para comunicación con ADS1015.
- Configuración de UART RS485 para comunicación Modbus RTU.
- Inicialización del sistema de interrupciones para conversiones ADC.
- Configuración de FreeRTOS con tareas distribuidas en núcleos.
Estructura y componentes
- Configuración de pines y periféricos
- I2C_SDA_PIN, I2C_SCL_PIN: bus I2C para ADS1015.
- RX_PIN, TX_PIN: comunicación serie RS485.
- ADS_ALERT_PIN: interrupción de conversión completada.
- Objetos de hardware
- Adafruit_ADS1015: instancia del convertidor analógico-digital.
- HardwareSerial: puerto serie para Modbus RTU.
- ModbusServerRTU: servidor de protocolo Modbus.
- Configuración del sistema
- NUM_CHANNELS: canales ADC configurados (3 canales).
- Parámetros de velocidad: 19200 bps UART, 400kHz I2C, 3300 SPS ADC.
- GAIN_TWOTHIRDS: ganancia del ADS1015 para rango ±6.144V.
API Principal
Uso
Resumen del flujo:
1) Inicialización del hardware
- Configuración del bus I2C (SDA=9, SCL=8) a 400kHz.
- Inicialización del ADS1015 con ganancia TWOTHIRDS y velocidad 3300 SPS.
- Configuración UART (RX=20, TX=21) a 19200 bps, 8N1 para RS485.
- Registro de interrupción en pin 10 para señal ALERT del ADS1015.
2) Configuración de tareas FreeRTOS
- task_adquisicion: núcleo 0, prioridad 5, gestión de conversiones ADC.
- task_procesamiento: núcleo 0, prioridad 3, cálculo RMS con FIFOs.
- dataUpdateTask: núcleo 0, prioridad 1, actualización de registros Modbus.
- Servidor Modbus: núcleo 0, manejo de peticiones RTU.
3) Configuración del ADC
- Modo single-ended en 3 canales (A0, A1, A2).
- Conversiones por interrupción usando señal ALERT.
- Secuencia round-robin entre canales gestionada por ISR.
4) Configuración Modbus
- Servidor RTU con ID=1, timeout=2000ms.
- Registro de worker para función 03 (lectura de holding registers).
- Respuesta a descubrimiento (registros 0-7) y datos RMS (registros 10+).
Advertencias y mejores prácticas:
- Verificar conexiones I2C antes del ads.begin() para evitar bloqueos.
- Usar pullups externos en líneas SDA/SCL si hay problemas de comunicación.
- Configurar correctamente la señal ALERT del ADS1015 para interrupciones.
- Verificar la velocidad del bus I2C según la longitud de cables.
- Proteger accesos concurrentes a hardware mediante semáforos apropiados.
- Asegurar alimentación estable para conversiones ADC precisas.
◆ loop()
Loop principal del sistema.
Ejecuta tareas de demostración y depuración. Muestra periódicamente valores RMS de ejemplo del historial mantenido por el sistema.
◆ setup()
Función de inicialización del sistema.
Configura hardware, inicializa periféricos, crea tareas FreeRTOS y registra handlers Modbus. Establece la arquitectura completa del sistema embebido.