Caso práctico: alarma acústica I2S con ULX3S

Caso práctico: i2s sound level alarma con ULX3S — hero

Objetivo y caso de uso

Qué construirás: Un monitor de ruido acústico basado en FPGA que captura audio digital de un micrófono I2S, calcula la envolvente de sonido en tiempo real y muestra la amplitud máxima en un visualizador de 7 segmentos de 4 dígitos mientras activa una alarma LED de baja latencia si se superan los umbrales.

Por qué es importante / Casos de uso

  • Monitorización industrial: Detecta niveles de ruido anómalos en salas de máquinas para alertas tempranas de desgaste mecánico.
  • Control de ruido automatizado: Alerta visualmente a los ocupantes en salas de estudio o bibliotecas cuando el volumen ambiental se vuelve molesto.
  • Detección en centros de datos: Se integra en sistemas de monitorización para detectar alarmas ruidosas de los SAI o ruido anormal de los ventiladores.
  • Base para DSP: Sirve como un paso previo de hardware para implementar algoritmos complejos como FFT o cálculos de RMS real en una FPGA.

Resultado esperado

  • Generación continua de señales de reloj I2S precisas (BCLK y LRCLK) que cumplen con los requisitos del INMP441.
  • Cálculo en tiempo real de envolventes de audio con ejecución por hardware de latencia ultrabaja.
  • Retroalimentación visual inmediata a través de visualizadores de 7 segmentos y activación instantánea de alarma LED al superar el umbral.

Audiencia: Desarrolladores de sistemas embebidos e ingenieros de FPGA; Nivel: Intermedio

Arquitectura/flujo: Micrófono INMP441 → Módulo receptor I2S → Calculador de envolvente y comparador → Controlador de visualizador de 7 segmentos y LED de alarma

Nota educativa de validación

Antes de publicar este caso, el contenido pasó la puerta automática de validación de Prometeo con estado PASS. Para este perfil FPGA/ULX3S, los bloques de Verilog sintetizable se comprobaron con Yosys (read_verilog) y el conjunto Verilog de diseño/test se revisó con Verilator. El validador también comprobó la estructura de los bloques de código, que los comandos usen opciones copiables con guiones ASCII, que no aparezcan stacks no soportados y que esté disponible la toolchain ULX3S/ECP5 (yosys, nextpnr-ecp5, ecppack, openFPGALoader).

Evidencia de validación publicada

  • Resultado automático: PASS.
  • Estructura parseada: 3 apartados, 1 tablas y 3 bloques de código detectados antes de publicar.
  • Código comprobado: 2 Verilog/Yosys-Verilator, 1 Bash/copy-paste checks.
  • Catálogo soportado: el texto se contrastó contra los perfiles de dispositivo validables de Prometeo y los stacks no soportados bloquean la publicación.
  • Hallazgos del informe: sin hallazgos bloqueantes.

Esta validación confirma compatibilidad sintáctica y de herramientas para el código publicado, pero no sustituye la prueba física sobre tu revisión exacta de ULX3S, tu archivo de restricciones de pines y tu cableado real.

Nota educativa de seguridad

Este proyecto es un prototipo educativo, no un producto certificado. Antes de alimentar la configuración, verifica la disposición de los pines (pinout) de tu revisión exacta de la placa ULX3S, mantén las señales de E/S de la FPGA a 3.3 V, nunca conectes 5 V directamente a los pines de E/S, desconecta la alimentación antes de cambiar el cableado y usa fuentes externas adecuadas para cargas, motores o servos, compartiendo la tierra solo cuando el cableado lo requiera.

Monitor de ruido acústico basado en FPGA

  • Qué construirás: Un monitor de ruido acústico basado en FPGA que captura audio digital de un micrófono I2S, calcula la envolvente de sonido en tiempo real, muestra la amplitud máxima en un visualizador de 7 segmentos de 4 dígitos y activa una alarma LED integrada si el ruido supera un umbral predefinido.
  • Por qué es importante / Casos de uso:
  • Monitorización acústica industrial: Detecta niveles de ruido anómalos en salas de máquinas para proporcionar alertas tempranas de desgaste o fallos mecánicos.
  • Control de ruido en salas de estudio: Actúa como un monitor automatizado de bibliotecas o aulas, alertando visualmente a los ocupantes cuando el volumen ambiental se vuelve molesto.
  • Detección ambiental en salas de servidores: Se integra en un sistema de monitorización de centro de datos más grande para detectar alarmas ruidosas de unidades SAI o ruido anormal de ventiladores.
  • Base para Procesamiento Digital de Señales (DSP): Sirve como un paso previo práctico de hardware antes de implementar algoritmos DSP complejos como Transformadas Rápidas de Fourier (FFT) o cálculos de RMS real en una FPGA.
  • Resultado esperado:
  • Generación continua de señales de reloj I2S precisas (BCLK y LRCLK) que cumplen con los requisitos del INMP441.
  • Extracción exitosa en tiempo real de tramas de audio de 24 bits y cálculo de la envolvente de señal absoluta.

Nota educativa de seguridad: Si pruebas este dispositivo con altos niveles de presión sonora (SPL) para activar el umbral de alarma durante la validación, asegúrate de usar protección auditiva adecuada. La exposición prolongada a ruidos superiores a 85 dB puede causar daños auditivos permanentes.

Diagrama de bloques conceptual

Vista de alto nivel: qué entra, qué procesa cada bloque y qué sale del sistema.

Arquitectura funcional

Micrófono INMP441

Módulo receptor I2S

Calculador de envolvente y comparador

Controlador de visualizador de 7 segmento…

Flujo conceptual de señales y responsabilidades entre bloques del dispositivo.

Ruta de validación

Código fuente

Verilator

Yosys

Implementación hardware

Resumen conceptual de las herramientas usadas para comprobar el material publicado.

Cableado de hardware y configuración

La siguiente tabla detalla las conexiones de pines entre el micrófono I2S INMP441 y la placa de desarrollo FPGA. Asegúrate de que los niveles lógicos sean compatibles con 3.3V.

Pin INMP441Pin FPGA (Ejemplo)Descripción de la función
VDD3.3VFuente de alimentación de 3.3V
GNDGNDTierra común
SCKP12Reloj de bits I2S (BCLK) – Impulsado por la FPGA
WSP13Selección de palabra I2S (LRCLK) – Impulsado por la FPGA
SDP14Datos en serie I2S – Leído por la FPGA
L/RGNDSelección del canal izquierdo (conectar a GND)

Método de validación y afirmaciones de rendimiento

Para validar la extracción en tiempo real y la precisión del cálculo de la envolvente, coloca un teléfono inteligente que ejecute una aplicación generadora de señales de audio calibrada exactamente a 10 cm del micrófono INMP441. Reproduce una onda sinusoidal continua de 1 kHz.
* Evidencia esperada: El registro interno peak_level (que se puede enrutar al visualizador de 7 segmentos) debe mostrar un valor hexadecimal estable correspondiente al volumen de entrada. El alarm_led debe activarse de manera consistente e instantánea cuando el volumen de salida del generador aumenta más allá del valor THRESHOLD predefinido.

Código de implementación

La implementación se divide en dos módulos Verilog completos y sintetizables: el receptor I2S y la lógica del detector de envolvente/alarma.

1. Módulo receptor I2S (i2s_rx.v)

Este módulo genera los relojes I2S necesarios a partir de un reloj del sistema de 50 MHz y desplaza secuencialmente las muestras de audio de 24 bits desde el INMP441.

module i2s_rx (
    input wire clk_50m,
    input wire rst_n,
    output wire i2s_sck,
    output wire i2s_ws,
    input wire i2s_sd,
    output reg [23:0] left_data,
    output reg data_valid
);
    reg [3:0] bclk_div;
    reg bclk;
    reg [5:0] bit_cnt;
    reg [23:0] shift_reg;

    // Generate I2S Bit Clock (SCK)
    always @(posedge clk_50m or negedge rst_n) begin
        if (!rst_n) begin
            bclk_div <= 4'd0;
            bclk <= 1'b0;
        end else begin
            bclk_div <= bclk_div + 1'b1;
            if (bclk_div == 4'd7) begin
                bclk <= ~bclk;
            end
        end
    end

    assign i2s_sck = bclk;
    // Word Select toggles every 32 bits (64 bits per frame)
    assign i2s_ws = bit_cnt[5]; 

    // Shift in I2S Data
    always @(negedge bclk or negedge rst_n) begin
        if (!rst_n) begin
            bit_cnt <= 6'd0;
            shift_reg <= 24'd0;
            left_data <= 24'd0;
            data_valid <= 1'b0;
        end else begin
            bit_cnt <= bit_cnt + 1'b1;
            data_valid <= 1'b0;

            // INMP441 outputs data MSB first, delayed by 1 BCLK after WS transition
            if (bit_cnt >= 6'd1 && bit_cnt <= 6'd24) begin
                shift_reg <= {shift_reg[22:0], i2s_sd};
            end

            // Latch data at the end of the left channel slot
            if (bit_cnt == 6'd31) begin
                left_data <= shift_reg;
                data_valid <= 1'b1;
            end
        end
    end
endmodule

2. Módulo de detector de envolvente y alarma (noise_monitor.v)

Este módulo toma los datos de audio con signo de 24 bits, calcula el valor absoluto (rectificación), gestiona un algoritmo de retención de picos (peak-hold) con decaimiento para fines de visualización y activa el LED de alarma si se supera el umbral.

module noise_monitor (
    input wire clk_50m,
    input wire rst_n,
    input wire signed [23:0] audio_data,
    input wire data_valid,
    output reg alarm_led,
    output reg [15:0] peak_level
);
    parameter THRESHOLD = 24'd1000000;
    parameter DECAY_RATE = 16'd10;

    reg [23:0] abs_data;
    reg [31:0] decay_timer;

    always @(posedge clk_50m or negedge rst_n) begin
        if (!rst_n) begin
            alarm_led <= 1'b0;
            peak_level <= 16'd0;
            abs_data <= 24'd0;
            decay_timer <= 32'd0;
        end else begin
            if (data_valid) begin
                // Rectify signal (Absolute value)
                if (audio_data[23]) begin
                    abs_data <= -audio_data;
                end else begin
                    abs_data <= audio_data;
                end

                // Trigger threshold alarm
                if (abs_data > THRESHOLD) begin
                    alarm_led <= 1'b1;
                end else begin
                    alarm_led <= 1'b0;
                end

                // Peak hold logic using the upper 16 bits
                if (abs_data[23:8] > peak_level) begin
                    peak_level <= abs_data[23:8];
                    decay_timer <= 32'd0;
                end
            end

            // Decay peak level over time for visual display updates
            decay_timer <= decay_timer + 1'b1;
            if (decay_timer == 32'd500000) begin // Trigger decay every 10ms at 50MHz
                decay_timer <= 32'd0;
                if (peak_level > DECAY_RATE) begin
                    peak_level <= peak_level - DECAY_RATE;
                end else begin
                    peak_level <= 16'd0;
                end
            end
        end
    end
endmodule

Compilación

Para sintetizar el diseño utilizando herramientas de código abierto como Yosys, puedes ejecutar el siguiente comando en tu terminal:

yosys -p "synth_ice40 -top noise_monitor -json noise_monitor.json" i2s_rx.v noise_monitor.v

Encuentra este producto y/o libros sobre este tema en Amazon

Ir a Amazon

Como afiliado de Amazon, gano con las compras que cumplan los requisitos. Si compras a través de este enlace, ayudas a mantener este proyecto.

Quiz rápido

Pregunta 1: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 2: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 3: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 4: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 5: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 6: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 7: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 8: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 9: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Pregunta 10: ¿Qué tecnología sirve como base principal para construir el monitor de ruido acústico descrito?




Carlos Núñez Zorrilla
Carlos Núñez Zorrilla
Electronics & Computer Engineer

Ingeniero Superior en Electrónica de Telecomunicaciones e Ingeniero en Informática (titulaciones oficiales en España).

Sígueme:
Scroll al inicio