Firmware Esclavo Modbus RTU con ADS1015 y cálculo RMS en tiempo real (ESP32). More...
#include <Arduino.h>#include <Wire.h>#include <Adafruit_ADS1X15.h>#include "HardwareSerial.h"#include "ModbusServerRTU.h"Classes | |
| struct | ADC_Sample |
| Muestra del ADC con valor y canal asociado. More... | |
| struct | RMS_FIFO |
| Buffer circular para cálculo eficiente de RMS. More... | |
| struct | SensorData |
| Parámetros de configuración del sensor para descubrimiento Modbus. More... | |
Functions | |
| HardwareSerial | ModbusSerial (1) |
| Instancia del puerto serie para comunicación Modbus RS485. | |
| ModbusServerRTU | MBserver (2000) |
| Servidor Modbus RTU con timeout de 2000ms. | |
| void IRAM_ATTR | on_adc_data_ready () |
| Rutina de servicio de interrupción para conversiones ADC completadas. | |
| void | task_adquisicion (void *pvParameters) |
| Tarea de adquisición de datos del ADC con manejo mejorado de multiplexor. | |
| void | task_procesamiento (void *pvParameters) |
| Tarea de procesamiento de muestras y cálculo RMS. | |
| int | get_rms_history (int channel, float *output_buffer, int count) |
| Obtiene el historial de valores RMS de un canal específico. | |
| void | dataUpdateTask (void *pvParameters) |
| Tarea de actualización de registros Modbus con factores de conversión por canal. | |
| ModbusMessage | readHoldingRegistersWorker (ModbusMessage request) |
| Worker para manejar peticiones Modbus de lectura de registros. | |
| void | setup () |
| Función de inicialización del sistema. | |
| void | loop () |
| Loop principal del sistema. | |
Variables | |
| const int | NUM_CHANNELS = 3 |
| Número de canales ADC a muestrear. | |
| const int | FIFO_SIZE = 320 |
| Tamaño del buffer circular FIFO para cálculo RMS. | |
| const int | PROCESS_INTERVAL_MS = 1000 |
| Intervalo de procesamiento RMS en milisegundos. | |
| const int | RMS_HISTORY_SIZE = 100 |
| Tamaño del historial de valores RMS para cada canal. | |
| const int | MODBUS_UPDATE_INTERVAL_MS = 300 |
| Intervalo de actualización de registros Modbus en milisegundos. | |
| const float | CONVERSION_FACTOR = 0.618f |
| Factor de conversión global (mantenido por compatibilidad). | |
| const float | CONVERSION_FACTORS [NUM_CHANNELS] |
| Factores de conversión específicos para cada canal ADC. | |
| Adafruit_ADS1015 | ads |
| Instancia del convertidor ADS1015. | |
| QueueHandle_t | queue_adc_samples |
| Cola de comunicación para muestras del ADC. | |
| RMS_FIFO | fifos [NUM_CHANNELS] |
| Array de FIFOs para cada canal de medición. | |
| float | rms_history_ch0 [RMS_HISTORY_SIZE] |
| Historial de valores RMS del canal 0. | |
| float | rms_history_ch1 [RMS_HISTORY_SIZE] |
| Historial de valores RMS del canal 1. | |
| float | rms_history_ch2 [RMS_HISTORY_SIZE] |
| Historial de valores RMS del canal 2. | |
| volatile int | rms_history_head = 0 |
| Índice de escritura para los historiales RMS. | |
| SemaphoreHandle_t | rms_history_mutex |
| Mutex para protección de acceso concurrente a historiales RMS. | |
| volatile bool | adc_data_ready = false |
| Flag de datos listos del ADC (ISR). | |
| volatile uint8_t | current_isr_channel = 0 |
| Canal actual en secuencia de muestreo (ISR). | |
| uint16_t | holdingRegisters [NUM_REGISTERS] |
| Registros Modbus para datos RMS. | |
| SemaphoreHandle_t | dataMutex |
| Mutex para protección de registros Modbus. | |
| TaskHandle_t | dataUpdateTaskHandle |
| Handle de la tarea de actualización de datos Modbus. | |
| SensorData | sensor = {1, 3, 10, NUM_REGISTERS, PROCESS_INTERVAL_MS, 1, 1, 0} |
| Configuración del sensor para respuestas de descubrimiento. | |
Firmware Esclavo Modbus RTU con ADS1015 y cálculo RMS en tiempo real (ESP32).
Este sistema adquiere señales analógicas de 3 canales usando el ADC ADS1015, calcula valores RMS en tiempo real usando FIFOs circulares, mantiene un historial de mediciones y responde a consultas Modbus RTU sobre RS485. Incluye factores de conversión específicos por canal y manejo mejorado de multiplexor ADC.