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... | |
Functions | |
| 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. | |
Variables | |
| const float | CONVERSION_FACTORS [NUM_CHANNELS] |
| Factores de conversión específicos para cada canal ADC. | |
| 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). | |
| 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 float | CONVERSION_FACTOR = 0.618f |
| Factor de conversión global (mantenido por compatibilidad). | |
Este módulo implementa la adquisición de señales analógicas mediante ADS1015 y el flujo completo de:
Resumen del flujo:
1) Inicialización ADC
2) Adquisición de muestras
3) Procesamiento RMS
4) Gestión de historial
5) Calibración por canal
6) Algoritmo RMS incremental
Advertencias y mejores prácticas:
| int get_rms_history | ( | int | channel, |
| float * | output_buffer, | ||
| int | count ) |
Obtiene el historial de valores RMS de un canal específico.
Extrae los últimos N valores RMS de forma thread-safe usando mutex. Los valores se devuelven en orden cronológico (más antiguo primero).
| channel | Número de canal (0, 1 o 2). |
| output_buffer | Buffer de salida para los valores RMS. |
| count | Número de valores solicitados. |
| void IRAM_ATTR on_adc_data_ready | ( | ) |
Rutina de servicio de interrupción para conversiones ADC completadas.
Se ejecuta cuando el ADS1015 completa una conversión y activa la línea ALERT.
| void task_adquisicion | ( | void * | pvParameters | ) |
Tarea de adquisición de datos del ADC con manejo mejorado de multiplexor.
Gestiona la secuencia de conversiones ADC en modo round-robin entre canales. Implementa selección explícita de configuración de multiplexor para cada canal. Encola las muestras en queue_adc_samples para procesamiento posterior.
| pvParameters | Parámetros de la tarea (no utilizados). |
Selección explícita de configuración de multiplexor por canal.
Mapeo directo de número de canal a constante de configuración del multiplexor ADS1015 para evitar errores de direccionamiento.
| void task_procesamiento | ( | void * | pvParameters | ) |
Tarea de procesamiento de muestras y cálculo RMS.
Consume muestras de queue_adc_samples, las almacena en FIFOs circulares y calcula valores RMS periódicamente usando algoritmos incrementales eficientes. Actualiza el historial RMS de forma thread-safe.
| pvParameters | Parámetros de la tarea (no utilizados). |
| 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.
Permite calibración individual por canal para compensar diferencias en sensores, acondicionamiento de señal o rangos de medición específicos.