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
Flujo conceptual de señales y responsabilidades entre bloques del dispositivo.
Ruta de validación
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 INMP441 | Pin FPGA (Ejemplo) | Descripción de la función |
|---|---|---|
| VDD | 3.3V | Fuente de alimentación de 3.3V |
| GND | GND | Tierra común |
| SCK | P12 | Reloj de bits I2S (BCLK) – Impulsado por la FPGA |
| WS | P13 | Selección de palabra I2S (LRCLK) – Impulsado por la FPGA |
| SD | P14 | Datos en serie I2S – Leído por la FPGA |
| L/R | GND | Selecció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
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.




