Cómo generar tonos de diferente amplitud con Arduino

5

Para un nuevo proyecto con Arduino necesito generar un tono de alarma que deba aumentar en amplitud con el tiempo si el usuario no toma medidas. La salida sería a través de un pequeño altavoz.

Entonces, cuando se dispara la condición de alarma, generaría un pitido de volumen bajo en el rango audible, daré al usuario algo de tiempo para reaccionar, luego aumentar el volumen, esperar, aumentar nuevamente hasta que el usuario reaccione. De esta manera, no se genera un tono de alarma fuerte desde el principio, lo que puede ser molesto en un entorno tranquilo.

La generación de pulsos y el uso de un transistor o un amplificador IC para conducir al spaker no es un problema.

- > El problema es: ¿cómo modular la amplitud del sonido del altavoz?

Mi limitación es que, al sonar la alarma, el Arduino aún necesita hacer otras cosas, por lo que no puedo detenerlo en una rutina complicada para generar tonos, por ejemplo, haciendo un PWM sofisticado que luego se filtra para emitir una señal. con diferentes amplitudes.

Podría usar un pin para generar la señal de frecuencia base, y tengo 3 pines disponibles para dirigir un circuito externo para modificar la amplitud, como esto:

¿Tienenalgunasideasparacompartir?

Tks!

ADENDA:Estaeslasoluciónqueyahabíaprobado,perolosnivelesdevolumennosepuedenrepetirdeunaunidadaotra,porloquemegustaríaevitaragregarunpotenciómetro.D13generaunaondacuadradaconeltonodeaudio.LasotrassalidascanalizanestetonoatravésdelaescaleraderesistenciaatravésdelaspuertasAND.

    
pregunta kxtronic

2 respuestas

0

Su pregunta muestra una unidad PWM, seguida de una etapa de ganancia ajustable. Esta no es una forma muy obvia de usar, pero podría funcionar.

Tradicionalmente, puedes usar varias unidades PWM con diferentes potencias de impulsión de salida (usando resistencias), en efecto construyendo un DAC.

Lo que ha construido debería funcionar si combina el PWM (para conmutar) con una fuente de corriente programable (para amplitud). Para la fuente actual, puede usar 3 circuitos de espejo de corriente en paralelo, cambiados por sus 3 controles de amplitud. Normalmente, puede elegir una escala de registro para cada paso de cambio.

La salida PWM se puede utilizar para sumir la corriente, la corriente de la fuente de las 3 etapas de espejo actual (y controlar la amplitud).

    
respondido por el Sean Houlihane
2

Arduino realmente no dice qué microcontrolador específicamente, pero creo que todos los Arduinos que conozco tienen una unidad PWM programable, por lo que no necesita gastar ningún CPU en generar la señal.

Para obtener detalles sobre las diferentes formas de usar una unidad PWM, consulte esta respuesta , pero la esencia es:

Puede programar el período de su PWM, es decir, la frecuencia de la señal de salida.

Para ajustar el voltaje que está alimentando al altavoz, puede tomar diferentes rutas:

  1. use una segunda unidad PWM + filtro de paso bajo con corte bajo para generar un voltaje de CC ajustable con el que opera el transistor que usa para amplificar la señal antes de que ingrese al altavoz
  2. en lugar de usar un PWM de frecuencia de audio, use un PWM que sea mucho más rápido y enciéndalo y apáguelo a la frecuencia de tono deseada. Agregue el filtrado para que el PWM rápido se reduzca a un desplazamiento, pero las frecuencias de audio no se corten.

Otra, y probablemente la forma más fácil, no es con respecto a su µC con la generación de una señal analógica, sino con un DAC de audio para eso. Estas cosas toman datos en serie, generalmente a través de SPI / I2S, y con frecuencia incluso tienen amplificadores integrados.

Por ejemplo, los tableros ST Discovery usan el CS43L22 IC para ese trabajo. Simplemente envías datos de audio digital y genera el sonido. De hecho, incluso tiene una unidad de generación de pitidos si eres demasiado perezoso para escribir la forma de onda del pitido a través de la interfaz I2S.

Hay una gran cantidad de otras opciones, como circuitos integrados de convertidor de voltaje a frecuencia, conducción de un circuito de tanque / oscilador periódicamente, etc., pero creo que estos pueden ser los enfoques más amigables con el arduino.

    
respondido por el Marcus Müller

Lea otras preguntas en las etiquetas

Comentarios Recientes

plataforma estándar my0 <> MyVinoPin; MyVinoPin bitMask; Registra el bit de inicio Fnum y Root en 0x11 en la línea 123Slot en 0x11 se usa como página de documentación para el dispositivoSlot en 00000000 es la fuente de luz, el registro 000000D es El pin de salida I2C del reloj arduino, y el desplazamiento físico 0x50 se monitorea y transfiere para leer. Dígitos a lo largo de 0x41 El código en general se ve ordenado y simple, pero difícil de entender y razonar con él ya que no hay documentación. ;) Si lo desea,... Lees verder