Generando un proyecto de MCU de tono de alerta simple

1

Una parte del receptor de mi proyecto debería activar una luz durante unos segundos pero decidieron agregar un tono de alerta que se reproducirá en los sistemas de megafonía de un edificio. Creo que la entrada es 8 ohm imp imp. Estaba buscando una manera fácil y rápida de implementar la capacidad de generar un tono de alerta. Me encantaría hacer tonos DTMF y aumentarlos en secuencia (en volumen) ya que son fáciles de usar para el oído. Nada demasiado complicado, básicamente, un reloj de alarma suena bien. Tengo mi diseño hecho, y tengo un Atmel AtMega, así que no quiero agregar más partes y me gusta usar el Atmel para lograr esto. Cualquier guía sobre esto sería una gran ayuda. Nunca he generado un tono directamente de la MCU.

    
pregunta David Cameron

1 respuesta

5

Puede usar PWM para producir tonos de audio de (al menos) dos formas.

La primera y más simple solución es usar un módulo PWM para producir una onda cuadrada (con un ciclo de trabajo del 50%) a la frecuencia deseada del tono. Por lo general, es deseable pasar la onda cuadrada a través de un filtro de paso bajo para redondear las esquinas (dando como resultado un sonido "más limpio") eliminando los armónicos superiores. Si desea mezclar tonos con este método, necesita usar un módulo PWM y LPF por tono, y mezclarlos con un amplificador operacional.

La segunda solución, más compleja y, en última instancia, más satisfactoria, es usar un módulo PWM como DAC y manejarlo con un software de sintetizador digital directo (DDS) para generar tantos tonos mezclados como desee (dentro de los límites de su potencia de procesamiento disponible).

Para usar un PWM como DAC, diríjalo a la frecuencia más alta posible, preferiblemente más de 20 kHz para asegurarse de que cualquier artefacto espectral que no se elimine más adelante esté fuera del rango de audición humana normal (nominalmente hasta 20 kHz). Cuando alimenta el PWM de alta frecuencia a través de un LPF con una frecuencia de esquina de 5 a 8 kHz, la amplitud de salida del LPF, como un porcentaje del voltaje del riel, se aproximará al ciclo de trabajo de la señal PWM alimentada al LPF. Por ejemplo, con un voltaje de riel de 5 V y un ciclo de trabajo del 50%, la salida del LPF será de aproximadamente 2,5 V.

La salida DAC se puede modular variando el ciclo de trabajo del PWM. Para modularlo con una onda sinusoidal de una frecuencia determinada, el enfoque de "costo más bajo" es utilizar una tabla de búsqueda que contenga un conjunto de valores precalculados de ciclo de trabajo de punto fijo que mapeen una onda sinusoidal y puedan alimentarse al DAC . La tabla de búsqueda debe cubrir solo 1/4 del período de una onda sinusoidal porque puede usar la reflexión para reconstruir los otros 3/4 de la onda desde el primer 1/4. La velocidad a la que alimenta la tabla de búsqueda sinusoidal en el módulo PWM gobierna la frecuencia de salida del audio que produce. Por lo tanto, una tabla de búsqueda de 8 puntos (por lo tanto, 32 puntos para la onda sinusoidal completa) utilizada para actualizar una señal PWM a una velocidad de 20 kHz producirá un tono de audio de 20,000 / 32 = 625Hz. Este es un software DDS.

Si desea combinar varios tonos en el DDS, debe proporcionar una tabla de búsqueda con una resolución sustancialmente mayor. Donde antes eran adecuados 8 puntos (o incluso 4 puntos) para una onda de 1/4, ahora está mirando 128, 256, incluso 1024 si desea una buena resolución. Para variar la frecuencia de la salida modulada, recorra la tabla de búsqueda a diferentes velocidades para cada tono. Entonces, para el ejemplo anterior de 625Hz y una tabla de 1024 puntos, incrementaría el puntero de la tabla en 128 en cada actualización. Si desea agregar un segundo tono, a unos 1600Hz, incrementaría un puntero separado en 1600/625 * 128 = 328 (dando una frecuencia real de ~ 1602Hz). Agregue los dos valores extraídos de la tabla, agregue un desplazamiento de CC y alimente el resultado al módulo PWM a una velocidad de 20 kHz y emitirá una señal de audio que contiene ambos tonos.

Para que cualquiera de los enfoques DDS produzca tonos "agradables", debe prestar mucha atención al tiempo de actualización de PWM. La minimización de jitter es la clave. Use una interrupción de alta prioridad para hacer las actualizaciones y (aquí está la clave) realice un cálculo previo de la próxima actualización antes de abandonar la rutina de servicio de interrupción. La próxima vez que llegue al ISR, alimente inmediatamente al módulo PWM con el valor de actualización precalculado, luego calcule y almacene el siguiente valor de actualización. Esto debería garantizar que la cantidad de tiempo entre la activación del ISR y la actualización que se envía al módulo PWM sea constante.

    
respondido por el markt

Lea otras preguntas en las etiquetas